diff --git a/.github/workflows/copyright.yml b/.github/workflows/copyright.yml new file mode 100644 index 000000000..f7136a793 --- /dev/null +++ b/.github/workflows/copyright.yml @@ -0,0 +1,34 @@ +name: Copyright + +on: + pull_request: + types: [ labeled ] + branches: [ main ] + push: + branches: [ main ] + +jobs: + copyright: + name: Copyright Notices + if: | + github.event_name == 'pull_request' && + (contains(github.event.pull_request.labels.*.name, 's:review-needed') || + contains(github.event.pull_request.labels.*.name, 's:accepted')) || + github.event_name == 'push' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + - name: Install check-license and dependencies + run: | + pip install scripts/check-license + pip install -r scripts/check-license/requirements.txt + - name: Query files changed + id: files_changed + uses: Ana06/get-changed-files@v1.2 + with: + filter: '*.rs$' + - name: Check copyright notices + run: check-license ${{ steps.files_changed.outputs.added_modified }} diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 8a43c0520..8affb0d66 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -22,27 +22,18 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + - name: Install rust toolchain run: rustup show - uses: actions-rs/install@v0.1 with: crate: grcov - use-tool-cache: true - - # No disk space: https://github.com/zeitgeistpm/zeitgeist/actions/runs/5085081984/jobs/9144298675?pr=1006 - # Workaround: https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 - - name: Free up disk space on GitHub hosted runners - run: | - # Ensure context is GitHub hosted runner - # https://docs.github.com/en/actions/learn-github-actions/contexts#runner-context - if [[ "${{ runner.name }}" == "GitHub Actions"* ]]; then - echo "Freeing up space in GitHub hosted runner" - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - fi + use-tool-cache: false - name: Cache Dependencies uses: Swatinem/rust-cache@v1 @@ -58,4 +49,4 @@ jobs: fail_ci_if_error: true flags: tests verbose: true - name: unit-tests \ No newline at end of file + name: unit-tests diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml new file mode 100644 index 000000000..e0333d9d7 --- /dev/null +++ b/.github/workflows/integration-tests.yml @@ -0,0 +1,269 @@ +name: Integration Tests + +on: + push: + tags: + - '^v[0-9]+.[0-9]+.[0-9]+(-rc[0-9]+)?$' + +env: + CARGO_TERM_COLOR: always + +jobs: + build_parachain: + name: Build Parachain + runs-on: ubuntu-20.04 + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install build tools + run: ./scripts/init.sh + + - name: Build Parachain + run: cargo build --release --features parachain + + - name: Save runtime wasm + run: | + mkdir -p runtimes + cp target/release/wbuild/battery-station-runtime/battery_station_runtime.compact.compressed.wasm runtimes/; + cp target/release/wbuild/zeitgeist-runtime/zeitgeist_runtime.compact.compressed.wasm runtimes/; + + - name: Upload runtimes + uses: actions/upload-artifact@v3.1.2 + with: + name: runtimes + path: runtimes + + - name: Save zeitgeist binary + run: | + mkdir -p binaries + cp target/release/zeitgeist binaries/; + + - name: Upload binary + uses: actions/upload-artifact@v3.1.2 + with: + name: binaries + path: binaries + + zombienet_zndsl: + name: ZNDSL Tests + runs-on: ubuntu-20.04 + needs: ["build_parachain"] + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install build tools + run: ./scripts/init.sh + + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v3 + with: + node-version: 20.x + cache: "pnpm" + cache-dependency-path: "./integration-tests/pnpm-lock.yaml" + + - name: Install pnpm packages + run: | + cd integration-tests + pnpm install + + - name: Cache Dependencies + uses: Swatinem/rust-cache@v1 + + - name: Create local folders + run: | + mkdir -p target/release/wbuild/zeitgeist-runtime/ + mkdir -p integration-tests/tmp + + - name: Download runtime + uses: actions/download-artifact@v3.0.2 + with: + name: runtimes + path: target/release/wbuild/zeitgeist-runtime/ + + - name: Download binary + uses: actions/download-artifact@v3.0.2 + with: + name: binaries + path: target/release + + - name: Display structure of downloaded files + run: ls -R + working-directory: target/ + + - name: Run ZNDSL integration tests + run: | + chmod uog+x target/release/zeitgeist + + cd integration-tests + ./scripts/download-polkadot.sh + ./scripts/deploy-zombienet.sh --no-build --test + + zombienet_zeitgeist_upgrade: + name: Zeitgeist Zombienet Post-Upgrade Tests + runs-on: ubuntu-20.04 + needs: ["build_parachain"] + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install build tools + run: ./scripts/init.sh + + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v3 + with: + node-version: 20.x + cache: "pnpm" + cache-dependency-path: "./integration-tests/pnpm-lock.yaml" + + - name: Install pnpm packages + run: | + cd integration-tests + pnpm install + + - name: Cache Dependencies + uses: Swatinem/rust-cache@v1 + + - name: Create local folders + run: | + mkdir -p target/release/wbuild/zeitgeist-runtime/ + mkdir -p integration-tests/tmp + + - name: Download runtime + uses: actions/download-artifact@v3.0.2 + with: + name: runtimes + path: target/release/wbuild/zeitgeist-runtime/ + + - name: Download binary + uses: actions/download-artifact@v3.0.2 + with: + name: binaries + path: target/release + + - name: Display structure of downloaded files + run: ls -R + working-directory: target/ + + - name: Test zeitgeist runtime upgrade using Zombienet + run: | + chmod uog+x target/release/zeitgeist + + cd integration-tests + pnpm exec moonwall test zombienet_zeitgeist_upgrade + + chopsticks_battery_station_upgrade: + name: Battery Station Chopsticks Post-Upgrade Tests + runs-on: ubuntu-20.04 + needs: ["build_parachain"] + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install build tools + run: ./scripts/init.sh + + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v3 + with: + node-version: 20.x + cache: "pnpm" + cache-dependency-path: "./integration-tests/pnpm-lock.yaml" + + - name: Install pnpm packages + run: | + cd integration-tests + pnpm install + + - name: Cache Dependencies + uses: Swatinem/rust-cache@v1 + + - name: Create local folders + run: | + mkdir -p target/release/wbuild/battery-station-runtime/ + mkdir -p integration-tests/tmp/node_logs + + - name: Download runtime + uses: actions/download-artifact@v3.0.2 + with: + name: runtimes + path: target/release/wbuild/battery-station-runtime/ + + - name: Display structure of downloaded files + run: ls -R + working-directory: target/ + + - name: Battery Station post-upgrade tests using Chopsticks + run: | + cd integration-tests + pnpm exec moonwall test chopsticks_battery_station_upgrade + + - name: Show chopsticks logs + if: ${{ failure() }} + run: | + cd integration-tests + ls -R tmp/node_logs/ + cat tmp/node_logs/*.log | tail -n 1000 + + chopsticks_zeitgeist_upgrade: + name: Zeitgeist Chopsticks Post-Upgrade Tests + runs-on: ubuntu-20.04 + needs: ["build_parachain"] + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install build tools + run: ./scripts/init.sh + + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v3 + with: + node-version: 20.x + cache: "pnpm" + cache-dependency-path: "./integration-tests/pnpm-lock.yaml" + + - name: Install pnpm packages + run: | + cd integration-tests + pnpm install + + - name: Cache Dependencies + uses: Swatinem/rust-cache@v1 + + - name: Create local folders + run: | + mkdir -p target/release/wbuild/zeitgeist-runtime/ + mkdir -p integration-tests/tmp/node_logs + + - name: "Download runtime" + uses: actions/download-artifact@v3.0.2 + with: + name: runtimes + path: target/release/wbuild/zeitgeist-runtime/ + + - name: Display structure of downloaded files + run: ls -R + working-directory: target/ + + - name: Zeitgeist post-upgrade tests using Chopsticks + run: | + cd integration-tests + pnpm exec moonwall test chopsticks_zeitgeist_upgrade + + - name: Show chopsticks logs + if: ${{ failure() }} + run: | + cd integration-tests + ls -R tmp/node_logs/ + cat tmp/node_logs/*.log | tail -n 1000 diff --git a/.github/workflows/migration.yml b/.github/workflows/migration.yml index 967dc6510..6387503c2 100644 --- a/.github/workflows/migration.yml +++ b/.github/workflows/migration.yml @@ -17,4 +17,9 @@ jobs: - name: Install build tools run: ./scripts/init.sh + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + - run: ./scripts/runtime-upgrade/test_runtime_upgrade.sh ${{ github.event.inputs.block }} diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 4d52a85ec..a814b4d88 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -36,31 +36,6 @@ jobs: - name: Format run: ./scripts/tests/format.sh --check - copyright: - name: Copyright Notices - if: | - github.event_name == 'pull_request' && - (contains(github.event.pull_request.labels.*.name, 's:review-needed') || - contains(github.event.pull_request.labels.*.name, 's:accepted')) || - github.event_name == 'push' - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Python - uses: actions/setup-python@v2 - - name: Install check-license and dependencies - run: | - pip install scripts/check-license - pip install -r scripts/check-license/requirements.txt - - name: Query files changed - id: files_changed - uses: Ana06/get-changed-files@v1.2 - with: - filter: '*.rs$' - - name: Check copyright notices - run: check-license ${{ steps.files_changed.outputs.added_modified }} - checks: name: Checks if: | @@ -80,6 +55,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + - name: Install build tools run: ./scripts/init.sh @@ -101,6 +81,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + - name: Install build tools run: ./scripts/init.sh @@ -118,22 +103,13 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + - name: Install build tools run: ./scripts/init.sh - - # No disk space: https://github.com/zeitgeistpm/zeitgeist/actions/runs/5085081984/jobs/9144298675?pr=1006 - # Workaround: https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 - - name: Free up disk space on GitHub hosted runners - run: | - # Ensure context is GitHub hosted runner - # https://docs.github.com/en/actions/learn-github-actions/contexts#runner-context - if [[ "${{ runner.name }}" == "GitHub Actions"* ]]; then - echo "Freeing up space in GitHub hosted runner" - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - fi - name: Cache Dependencies uses: Swatinem/rust-cache@v1 @@ -153,22 +129,13 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + - name: Install build tools run: ./scripts/init.sh - - # No disk space: https://github.com/zeitgeistpm/zeitgeist/actions/runs/5085081984/jobs/9144298675?pr=1006 - # Workaround: https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 - - name: Free up disk space on GitHub hosted runners - run: | - # Ensure context is GitHub hosted runner - # https://docs.github.com/en/actions/learn-github-actions/contexts#runner-context - if [[ "${{ runner.name }}" == "GitHub Actions"* ]]; then - echo "Freeing up space in GitHub hosted runner" - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - fi - name: Cache Dependencies uses: Swatinem/rust-cache@v1 @@ -188,6 +155,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + - name: Install build tools run: ./scripts/init.sh diff --git a/.github/workflows/try-runtime.yml b/.github/workflows/try-runtime.yml index 676368afa..0d5d4b99d 100644 --- a/.github/workflows/try-runtime.yml +++ b/.github/workflows/try-runtime.yml @@ -13,6 +13,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + - name: Install build tools run: ./scripts/init.sh @@ -27,6 +32,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - name: Free up disk space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: true + - name: Install build tools run: ./scripts/init.sh diff --git a/.gitignore b/.gitignore index a962176f6..5aeff784e 100644 --- a/.gitignore +++ b/.gitignore @@ -157,4 +157,6 @@ dmypy.json # Pyre type checker .pyre/ -/tmp \ No newline at end of file +/integration-tests/tmp + +/integration-tests/specs \ No newline at end of file diff --git a/CODEOWNERS b/CODEOWNERS index 758a6baa0..03f736322 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -12,7 +12,10 @@ /zrml/authorized/ @Chralt98 /zrml/court/ @Chralt98 /zrml/global-disputes/ @Chralt98 +/zrml/market-commons/ @maltekliemann /zrml/neo-swaps/ @maltekliemann +/zrml/orderbook/ @Chralt98 +/zrml/parimutuel/ @Chralt98 /zrml/prediction-markets/ @maltekliemann /zrml/rikiddo/ @sea212 /zrml/simple-disputes/ @Chralt98 diff --git a/Cargo.lock b/Cargo.lock index 190de72c1..824c2949e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -532,7 +532,7 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "battery-station-runtime" -version = "0.4.3" +version = "0.5.0" dependencies = [ "cfg-if", "common-runtime", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "common-runtime" -version = "0.4.3" +version = "0.5.0" dependencies = [ "cfg-if", "cumulus-pallet-xcmp-queue", @@ -14297,11 +14297,11 @@ dependencies = [ [[package]] name = "zeitgeist-macros" -version = "0.4.3" +version = "0.5.0" [[package]] name = "zeitgeist-node" -version = "0.4.3" +version = "0.5.0" dependencies = [ "battery-station-runtime", "cfg-if", @@ -14393,7 +14393,7 @@ dependencies = [ [[package]] name = "zeitgeist-primitives" -version = "0.4.3" +version = "0.5.0" dependencies = [ "arbitrary", "fixed", @@ -14417,7 +14417,7 @@ dependencies = [ [[package]] name = "zeitgeist-runtime" -version = "0.4.3" +version = "0.5.0" dependencies = [ "cfg-if", "common-runtime", @@ -14563,7 +14563,7 @@ dependencies = [ [[package]] name = "zrml-authorized" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14581,7 +14581,7 @@ dependencies = [ [[package]] name = "zrml-court" -version = "0.4.3" +version = "0.5.0" dependencies = [ "arrayvec 0.7.4", "env_logger 0.10.1", @@ -14600,13 +14600,14 @@ dependencies = [ "sp-io", "sp-runtime", "test-case", + "zeitgeist-macros", "zeitgeist-primitives", "zrml-market-commons", ] [[package]] name = "zrml-global-disputes" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14627,7 +14628,7 @@ dependencies = [ [[package]] name = "zrml-liquidity-mining" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14646,7 +14647,7 @@ dependencies = [ [[package]] name = "zrml-market-commons" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-support", @@ -14664,7 +14665,7 @@ dependencies = [ [[package]] name = "zrml-neo-swaps" -version = "0.4.3" +version = "0.5.0" dependencies = [ "cfg-if", "env_logger 0.10.1", @@ -14704,14 +14705,12 @@ dependencies = [ "zrml-neo-swaps", "zrml-prediction-markets", "zrml-prediction-markets-runtime-api", - "zrml-rikiddo", "zrml-simple-disputes", - "zrml-swaps", ] [[package]] name = "zrml-orderbook" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14749,7 +14748,7 @@ dependencies = [ [[package]] name = "zrml-parimutuel" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14774,7 +14773,7 @@ dependencies = [ [[package]] name = "zrml-prediction-markets" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14808,9 +14807,7 @@ dependencies = [ "zrml-market-commons", "zrml-prediction-markets", "zrml-prediction-markets-runtime-api", - "zrml-rikiddo", "zrml-simple-disputes", - "zrml-swaps", ] [[package]] @@ -14828,7 +14825,7 @@ dependencies = [ [[package]] name = "zrml-prediction-markets-runtime-api" -version = "0.4.3" +version = "0.5.0" dependencies = [ "parity-scale-codec", "sp-api", @@ -14837,7 +14834,7 @@ dependencies = [ [[package]] name = "zrml-rikiddo" -version = "0.4.3" +version = "0.5.0" dependencies = [ "arbitrary", "cfg-if", @@ -14871,7 +14868,7 @@ dependencies = [ [[package]] name = "zrml-simple-disputes" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14892,7 +14889,7 @@ dependencies = [ [[package]] name = "zrml-styx" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14909,7 +14906,7 @@ dependencies = [ [[package]] name = "zrml-swaps" -version = "0.4.3" +version = "0.5.0" dependencies = [ "env_logger 0.10.1", "frame-benchmarking", @@ -14931,7 +14928,6 @@ dependencies = [ "test-case", "zeitgeist-macros", "zeitgeist-primitives", - "zrml-liquidity-mining", "zrml-market-commons", "zrml-swaps", "zrml-swaps-runtime-api", @@ -14953,7 +14949,7 @@ dependencies = [ [[package]] name = "zrml-swaps-rpc" -version = "0.4.3" +version = "0.5.0" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -14966,7 +14962,7 @@ dependencies = [ [[package]] name = "zrml-swaps-runtime-api" -version = "0.4.3" +version = "0.5.0" dependencies = [ "parity-scale-codec", "sp-api", diff --git a/GH-banner.jpg b/GH-banner.jpg deleted file mode 100644 index 2d7e3b25b..000000000 Binary files a/GH-banner.jpg and /dev/null differ diff --git a/GH-banner.svg b/GH-banner.svg new file mode 100644 index 000000000..d1f8faef1 --- /dev/null +++ b/GH-banner.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/HEADER_GPL3 b/HEADER_GPL3 index 3bc5ddb7c..7bcc6e2e5 100644 --- a/HEADER_GPL3 +++ b/HEADER_GPL3 @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. diff --git a/README.md b/README.md index 66d67ba96..1fa93686c 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,20 @@ - + # Zeitgeist: An Evolving Blockchain for Prediction Markets and Futarchy ![Rust](https://github.com/zeitgeistpm/zeitgeist/actions/workflows/rust.yml/badge.svg) [![Codecov](https://codecov.io/gh/zeitgeistpm/zeitgeist/branch/main/graph/badge.svg)](https://codecov.io/gh/zeitgeistpm/zeitgeist) -[![Discord](https://img.shields.io/badge/discord-https%3A%2F%2Fdiscord.gg%2FMD3TbH3ctv-purple)](https://discord.gg/XhAcFWYUej) -[![Telegram](https://img.shields.io/badge/telegram-https%3A%2F%2Ft.me%2Fzeitgeist__official-blue)](https://t.me/zeitgeist_official) +[![Discord](https://img.shields.io/badge/-Zeitgeist-blue?logo=discord&logoColor=ffffff&style=flat)](https://discord.gg/XhAcFWYUej) +[![Telegram](https://img.shields.io/badge/-zeitgeist_official-blue?logo=telegram&style=flat)](https://t.me/zeitgeist_official) +[![X](https://img.shields.io/badge/-zeitgeistpm-blue?logo=X&style=flat)](https://twitter.com/zeitgeistpm) Zeitgeist is a decentralized network for creating, betting on, and resolving -prediction markets. The platform's native currency, the ZTG, is used to sway the -direction of the network, and as a means of last-call dispute resolution. -Additionally, Zeitgeist is a protocol for efficient trading of prediction market -shares and will one day become the backbone of the decentralized finance -ecosystem by allowing traders to create complex financial contracts on virtually -_anything_. +prediction markets, allowing traders to create complex financial contracts on +virtually _anything_. The platform's native currency ZTG is used to sway the +direction of the network, and as a means of last-call dispute resolution in the +decentralized court. ## Modules @@ -27,67 +26,62 @@ _anything_. - [global-disputes](./zrml-global-disputes) - Global disputes sets one out of multiple outcomes with the most locked ZTG tokens as the canonical outcome. This is the default process if a dispute mechanism fails to resolve. -- [liquidity-mining](./zrml/liquidity-mining) - This pallet implements the - time-based incentivization with Zeitgeist tokens for continuously providing - liquidity to swap pools. +- [macros](./macros) - Contains macros shared by the other modules. - [market-commons](./zrml/market-commons) - Contains common operations on markets that are used by multiple pallets. - [neo-swaps](./zrml/neo-swaps) - An implementation of the Logarithmic Market Scoring Rule as constant function market maker, tailor-made for decentralized - combinatorial markets and Futarchy. + combinatorial markets and futarchy. - [orderbook](./zrml/orderbook) - An order book implementation. - [parimutuel](./zrml/parimutuel) - A straightforward parimutuel market maker for categorical markets. - [prediction-markets](./zrml/prediction-markets) - The core implementation of the prediction market logic for creating and resolving markets. -- [simple-disputes](./zrml-simple-disputes) - Simple disputes selects the last - dispute after a predetermined amount of disputes as the canonical outcome. -- [swaps](./zrml/swaps) - An implementation of liquidity pools that allows any - user to provide liquidity to the pool or swap assets in and out of the pool. - The market maker that is traded against is either a Constant Function Market - Maker (CFMM) or a Rikiddo Market Maker. +- [swaps](./zrml/swaps) - An implementation of the Balancer CFMM that allows any + user to create pools, provide liquidity or swap assets. - [primitives](./zrml/primitives) - Contains custom and common types, traits and constants. - [rikiddo](./zrml/rikiddo) - The module contains a completely modular - implementation of our novel market scoring rule [Rikiddo][rikiddo]. It also - offers a pallet, that other pallets can use to utilize the Rikiddo market - scoring rule. Rikiddo can be used by the automated market maker to determine - swap prices. + implementation of our novel market maker [Rikiddo][rikiddo]. It also offers a + pallet that other pallets can use to utilize the Rikiddo market maker. Rikiddo + can be used by the automated market maker to determine swap prices. -## How to build and run a Zeitgeist node +## How to Build and Run a Zeitgeist Node Zeitgeist node comes in two flavors, one for standalone self-contained execution and another for Kusama/Polkadot parachain integration. -To build the standalone version, simply point to the top directory of this -project and type: +To build the standalone version for testing, simply point to the top directory +of this project and type: ```bash cargo build --release ``` +The standalone version uses the runtime defined for Zeitgeist's testnet _Battery +Station_ in [runtimes/battery-station](runtimes/battery-station) and is run in +`--dev` mode by default. + To build the parachain version, execute the following command: ``` cargo build --features parachain --release ``` -Optimized binaries (`--release`) are usually used for production (faster and -smaller), but this behavior is optional and up to you. - -Our current beta test network [Battery Station][zg-beta] runs as a parachain. To -connect your Zeitgeist parachain node, follow the tutorial at our [documentation -site][bs-docs]. +By default, the parachain version will connect to the Zeitgeist main network, +which launched as a parachain of Kusama and has since been migrated to Polkadot. +The runtime of the main network is defined in +[runtimes/zeitgeist](runtimes/zeitgeist). -Alternatively you can run a non-parachain node, which is usually only necessary -for testing purposes, by executing the following command: +To connect to Zeitgeist's testnet Battery Station, which runs as a parachain of +Rococo, run: ``` -cargo run --release --bin zeitgeist -- +cargo run --features parachain --release -- --chain=battery-station ``` -A common value for `` is `--dev --tmp`, which runs a -local temporary development node. +Optimized binaries (`--release`) are usually used for production (faster and +smaller), but this behavior is optional and up to you. ### Using Docker @@ -109,9 +103,8 @@ For standalone, non-parachain Zeitgeist node: docker pull zeitgeistpm/zeitgeist-node ``` -Our current beta test network [Battery Station][zg-beta] runs as a parachain. To -connect your Zeitgeist parachain node, follow the tutorial at our [documentation -site][bs-docs]. +To connect your Zeitgeist parachain node using Docker, follow the tutorial at +our [documentation site][bs-docs]. Alternatively you can run a non-parachain node, which is usually only necessary for testing purposes, by executing the following command: @@ -124,5 +117,5 @@ docker run zeitgeistpm/zeitgeist-node -- [ls-lmsr]: https://www.eecs.harvard.edu/cs286r/courses/fall12/papers/OPRS10.pdf [rikiddo]: https://blog.zeitgeist.pm/introducing-zeitgeists-rikiddo-scoring-rule/ -[zg-beta]: https://blog.zeitgeist.pm/zeitgeist-beta/ +[battery-station]: https://blog.zeitgeist.pm/zeitgeist-beta/ [zg-docker-hub]: https://hub.docker.com/r/zeitgeistpm/zeitgeist-node diff --git a/docs/changelog_for_devs.md b/docs/changelog_for_devs.md index 70afccec1..7828f07d9 100644 --- a/docs/changelog_for_devs.md +++ b/docs/changelog_for_devs.md @@ -12,27 +12,114 @@ As of 0.3.9, the changelog's format is based on components which query the chain's storage, the extrinsics or the runtime APIs/RPC interface. +## v0.5.1 + +[#1197]: https://github.com/zeitgeistpm/zeitgeist/pull/1197 +[pallet-asset]: + https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/assets + +### Added + +- [#1197] New asset classes: + - `CampaignAssetClass` - Can be registered by gov and council and be used in + markets and to pay transaction fees. + - `CustomAssetClass` - Allows any user to register their custom assets (can't + be used in markets yet). + - `MarketAssetClass` - Contains all asset types used in markets. + - `CurrencyClass` - Contains all non-ztg currencies, currently only + `ForeignAsset`. Temporarily also contains outcome asset types as they are + being lazily migrated to `MarketAssetClass` + - Subclasses (they are composites of multiple types from potentially various + asset classes): + - `BaseAssetClass` - Contains all assets that can be used as base asset / + collateral in prediction markets. + - `XcmAssetClass` - Contains all assets that can be transferred via XCM + (used in XCM related pallets like XTokens). + - `ParimutuelAssetClass` - Contains all assets that can be used in + parimutuel markets. + - All asset classes can be converted into the overarching asset class `Assets` + (that contains all asset types) by using `Into` or simply decoding their + scale codec representation into the `Assets` type. + - `Assets` provides `TryInto` into all other asset classes, which fails if the + asset type is not existent in the asset class. +- [#1197] Added [pallet-asset], which is a Substrate pallet that provides fine + grained control over asset creation, destruction, management (mint, burn, + freeze, admin account) and much more. It is used for `CampaignAssetClass`, + `CustomAssetClass` and `MarketAssetClass`. +- [#1197] Added zrml-asset-router (AssetRouter). This pallet is an abstraction + layer over multiple pallets (like orml-tokens and pallet-assets) that handles + routing calls, managing asset destruction and the lazy migrating market assets + from `CurrencyClass` to `MarketAssetClass`. It does not have any dispatchable + calls or events, but custom errors that might be relayed to the dispatchable + calls of the pallets that it uses within it's routing mechanism. + `orml-currencies` (AssetManager) is ought to be used when interacting with the + chain via transactions and can be used when developing pallets. In the latter + case, some functionalities can only be used when directly interacting with + zrml-asset-router. +- [#1197] Campaign assets have to be created and destroyed by gov or the + council. Custom assets have to be created and destroyed via transactions. + Market assets are automatically created and destroyed. In all non automatic + cases, destroying is achieved by calling `start_destroy`. +- [#1197] Transaction fee payment is now possible with campaign assets. The fee + is calculated as follows (with `CampaignAssetFeeMultiplier = 100`): + +```rust +if ztg_supply / campaign_asset_supply >= 100 { + return native_fee; +} else { + return native_fee * campaign_asset_supply * 100 / ztg_supply; +} +``` + +### Changed + +- [#1197] `Assets` does not contain the `CombinatorialOutcome` asset type + anymore, but has been extended by all existing asset types. +- [#1197] The transaction fee asset type has been changed from `u32` to + `Assets`. +- [#1197] The prediction market base asset type has been changed in the `Market` + storage and market creation dispatchable calls to `BaseAssetClass`. +- [#1197] The asset type for XCM has been changed to `XcmAssetClass`. It is used + in `orml-xtokens` (XTokens) and `orml-asset-registry` (AssetRegistry). + +### Removed + +- [#1197] `SerdeWrapper` has been removed. + +### Deprecated + +- [#1197] Market outcome asset types are no longer handled by `orml-tokens` + (Tokens), except for existing markets which still used market asset types + within `CurrencyClass`. `pallet-assets` (MarketAssets) now handles market + outcome asset types from the `MarketAssetClass`. + ## v0.5.0 [#1197]: https://github.com/zeitgeistpm/zeitgeist/pull/1197 [#1178]: https://github.com/zeitgeistpm/zeitgeist/pull/1178 -### Changes +### Changed -- ⚠️ Move the `zeitgeist_primitives::Pool` struct to `zrml_swaps::types::Pool` and change the following fields ([#1197]): - - Remove `market_id` - - Make `swap_fee` non-optional - - Remove `total_subsidy` - - Make `total_weight` non-optional - - Make `weights` non-optional -- ⚠️ Change the type of `liquidity_shares_manager` in `zrml_neo_swaps::types::Pool` from `zrml_neo_swaps::types::SoloLp` to `zrml_neo_swaps::types::LiquidityTree`. Details on the liquidity tree can be found in the `README.md` of zrml-neo-swaps and the documentation of the `LiquidityTree` object ([#1179]). +- ⚠️ Move the `zeitgeist_primitives::Pool` struct to `zrml_swaps::types::Pool` + and change the following fields ([#1197]): + - Remove `market_id` + - Make `swap_fee` non-optional + - Remove `total_subsidy` + - Make `total_weight` non-optional + - Make `weights` non-optional +- ⚠️ Change the type of `liquidity_shares_manager` in + `zrml_neo_swaps::types::Pool` from `zrml_neo_swaps::types::SoloLp` to + `zrml_neo_swaps::types::LiquidityTree`. Details on the liquidity tree can be + found in the `README.md` of zrml-neo-swaps and the documentation of the + `LiquidityTree` object ([#1179]). ### Migrations - Closed all CPMM pools. Withdrawals are still allowed. Creating new pools will be impossible until further updates are deployed. ([#1197]) - Remove all Rikiddo storage elements. ([#1197]) -- Migrate neo-swaps `Pools` storage. The market creator's liquidity position is translated into a position in the liquidity tree of the same value ([#1178]). +- Migrate neo-swaps `Pools` storage. The market creator's liquidity position is + translated into a position in the liquidity tree of the same value ([#1178]). ### Removed diff --git a/integration-tests/LICENSE b/integration-tests/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/integration-tests/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/integration-tests/README.md b/integration-tests/README.md index 0ca287e97..40077fd19 100644 --- a/integration-tests/README.md +++ b/integration-tests/README.md @@ -1 +1,105 @@ # Integration tests + +## Description + +Integation testing for ZeitgeistPM using +[Moonwall](https://github.com/Moonsong-Labs/moonwall). + +Consider the documentation of the +[Moonwall repository](https://github.com/Moonsong-Labs/moonwall) for more +information. + +## Installation + +### NPM Installation + +> Package manager `pnpm` is required for the integration tests. You can install +> it with `npm install -g pnpm` or otherwise following +> [their instructions](https://pnpm.io/installation). + +#### Go to the `integration-tests` directory: + +```bash +cd integration-tests +``` + +The following commands all assume you are in the `integration-tests` directory. + +Run `pnpm install` in the `integration-tests` folder before running any of the +following commands. + +``` +pnpm install +``` + +You should have installed `python` for using `sqlite3` and then used +`pnpm rebuild && pnpm rebuild sqlite3`. + +### Running the test environments + +#### Deploy a local, running relay-parachain network for zombienet: + +This is useful for testing the parachain client. It starts producing blocks of +the relay and parachain from genesis. + +```bash +./scripts/download-polkadot.sh +./scripts/deploy-zombienet.sh +``` + +It is expected to see the following output multiple times before the network is launched: + +```text +Error fetching metrics from: http://127.0.0.1:/metrics +``` + +##### Run ZNDSL zombienet tests on a local relay-parachain network: + +Using the additional `--test` flag, you can run the ZNDSL tests on the network. + +```bash +./scripts/download-polkadot.sh +./scripts/deploy-zombienet.sh --test +``` + +#### Deploy a local, running relay-parachain fork network via chopsticks (e. g. to test XCM): + +This is useful for testing XCM or any other runtime interaction that needs to be +tested on the state of the production network. + +```bash +pnpm chopsticks xcm -r polkadot -p ./configs/hydradx.yml -p ./configs/zeitgeist.yml +``` + +The expected output looks like this: + +```text +Unable to map [u8; 32] to a lookup index +[16:36:13.005] INFO (xcm/24440): HydraDX RPC listening on port 8000 +Unable to map [u8; 32] to a lookup index +[16:36:14.895] INFO (xcm/24440): Zeitgeist RPC listening on port 8001 +[16:36:14.964] INFO (xcm/24440): Connected parachains [2034,2092] +[16:36:14.964] INFO (24440): Loading config file https://raw.githubusercontent.com/AcalaNetwork/chopsticks/master/configs/polkadot.yml +Unable to map [u8; 32] to a lookup index +[16:36:16.944] INFO (xcm/24440): Polkadot RPC listening on port 8002 +[16:36:17.112] INFO (xcm/24440): Connected relaychain 'Polkadot' with parachain 'HydraDX' +[16:36:17.240] INFO (xcm/24440): Connected relaychain 'Polkadot' with parachain 'Zeitgeist' +``` + +#### Test the upgrade to the WASM from `./target/release/wbuild/zeitgeist-runtime` on zombienet: + +```bash +pnpm exec moonwall test zombienet_zeitgeist_upgrade +``` + +#### Test the upgrade to the WASM from `./target/release/wbuild/zeitgeist-runtime` on the live main-net fork using chopsticks: + +```bash +pnpm exec moonwall test chopsticks_zeitgeist_upgrade +``` + +#### Test the upgrade to the WASM from `./target/release/wbuild/battery-station-runtime` on the live test-net fork using chopsticks: + +```bash +pnpm exec moonwall test chopsticks_battery_station_upgrade +``` diff --git a/integration-tests/configs/basilisk.yml b/integration-tests/configs/basilisk.yml new file mode 100644 index 000000000..c6317538a --- /dev/null +++ b/integration-tests/configs/basilisk.yml @@ -0,0 +1,21 @@ +endpoint: wss://basilisk-rococo-rpc.play.hydration.cloud +mock-signature-host: true +block: ${env.BASILISK_BLOCK_NUMBER} +db: ./tmp/basilisk_db_mba.sqlite + +import-storage: + System: + Account: + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - providers: 1 + data: + free: 1000000000000000 + Tokens: + Accounts: + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 17 + - free: '100000000000000000000' \ No newline at end of file diff --git a/integration-tests/configs/battery-station.yml b/integration-tests/configs/battery-station.yml new file mode 100644 index 000000000..5b192f244 --- /dev/null +++ b/integration-tests/configs/battery-station.yml @@ -0,0 +1,29 @@ +endpoint: wss://bsr.zeitgeist.pm +mock-signature-host: true +db: ./tmp/bs_db_mba.sqlite +# wasm-override: battery-station-runtime.compact.compressed.wasm + +import-storage: + Sudo: + Key: "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" # Alice + System: + Account: + - - - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - providers: 1 + data: + free: "100000000000000000000000" + AdvisoryCommittee: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + AdvisoryCommitteeMembership: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + Council: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + CouncilMembership: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + TechnicalCommittee: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + TechnicalCommitteeMembership: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + AuthorFilter: + EligibleRatio: 100 + EligibleCount: 100 \ No newline at end of file diff --git a/integration-tests/configs/hydradx.yml b/integration-tests/configs/hydradx.yml new file mode 100644 index 000000000..f89a6018c --- /dev/null +++ b/integration-tests/configs/hydradx.yml @@ -0,0 +1,111 @@ +endpoint: wss://hydradx-rpc.dwellir.com +mock-signature-host: true +block: ${env.HYDRADX_BLOCK_NUMBER} +db: ./tmp/hydradx_db_mba.sqlite +# wasm-override: hydradx_runtime.compact.compressed.wasm + +import-storage: + System: + Account: + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - providers: 1 + data: + free: 1000000000000000 + Tokens: + Accounts: + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 0 # HDX + - free: '10000000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 1 # Lerna + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 2 # DAI Stablecoin (via Wormhole) + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 3 # Wrapped Bitcoin (via Wormhole) + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 4 # Ethereum (via Wormhole) + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 5 # Polkadot + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 6 # ApeCoin (via Wormhole) + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 7 # USD Coin (via Wormhole) + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 8 # Phala + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 9 # Astar + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 10 # Statemint USDT + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 11 # interBTC + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 12 # Zeitgeist + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 13 # Centrifuge + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 14 # Bifrost Native Coin + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 15 # Bifrost Voucher DOT + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 16 # GLMR + - free: '100000000000000000000000' + - + - + - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - 17 # Interlay + - free: '100000000000000000000000' + TechnicalCommittee: + Members: ["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"] + Council: + Members: ["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"] \ No newline at end of file diff --git a/integration-tests/configs/zeitgeist.yml b/integration-tests/configs/zeitgeist.yml new file mode 100644 index 000000000..72c12906e --- /dev/null +++ b/integration-tests/configs/zeitgeist.yml @@ -0,0 +1,29 @@ +endpoint: wss://main.rpc.zeitgeist.pm/ws +# endpoint: wss://zeitgeist-rpc.dwellir.com +# endpoint: wss://zeitgeist.api.onfinality.io/public-ws +mock-signature-host: true +db: ./tmp/ztg_db_mba.sqlite +# wasm-override: zeitgeist-runtime.compact.compressed.wasm + +import-storage: + System: + Account: + - - - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + - providers: 1 + data: + free: "100000000000000000000000" + AdvisoryCommittee: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + AdvisoryCommitteeMembership: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + Council: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + CouncilMembership: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + TechnicalCommittee: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + TechnicalCommitteeMembership: + Members: [5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY] + AuthorFilter: + EligibleRatio: 100 + EligibleCount: 100 \ No newline at end of file diff --git a/integration-tests/configs/zombieZeitgeist.json b/integration-tests/configs/zombieZeitgeist.json new file mode 100644 index 000000000..5755048a1 --- /dev/null +++ b/integration-tests/configs/zombieZeitgeist.json @@ -0,0 +1,44 @@ +{ + "settings": { + "timeout": 1000, + "provider": "native" + }, + "relaychain": { + "chain": "rococo-dev", + "default_command": "./tmp/polkadot", + "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], + "nodes": [ + { + "name": "charlie", + "ws_port": 9947, + "validator": true + }, + { + "name": "bob", + "validator": true + } + ] + }, + "parachains": [ + { + "id": 2101, + "chain": "dev", + "collators": [ + { + "name": "alice", + "command": "../target/release/zeitgeist", + "ws_port": 9944, + "p2p_port": 33049, + "args": ["-lparachain=debug", "--force-authoring"] + } + ] + } + ], + "types": { + "Header": { + "number": "u64", + "parent_hash": "Hash", + "post_state": "Hash" + } + } +} \ No newline at end of file diff --git a/integration-tests/moonwall.config.json b/integration-tests/moonwall.config.json new file mode 100644 index 000000000..18cec7399 --- /dev/null +++ b/integration-tests/moonwall.config.json @@ -0,0 +1,130 @@ +{ + "label": "moonwall_config", + "defaultTestTimeout": 120000, + "scriptsDir": "scripts/", + "environments": [ + { + "name": "zombienet_zeitgeist_upgrade", + "testFileDir": ["tests/rt-upgrade-zombienet"], + "runScripts": [ + "build-node.sh", + "build-zeitgeist-spec.sh", + "download-polkadot.sh" + ], + "foundation": { + "launchSpec": [ + { + "binPath": "../target/release/zeitgeist" + } + ], + "rtUpgradePath": "../target/release/wbuild/zeitgeist-runtime/zeitgeist_runtime.compact.compressed.wasm", + "type": "zombie", + "zombieSpec": { + "configPath": "./configs/zombieZeitgeist.json" + } + }, + "connections": [ + { + "name": "Relay", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:9947"] + }, + { + "name": "parachain", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:9944"] + } + ] + }, + { + "name": "chopsticks_zeitgeist_upgrade", + "testFileDir": ["tests/rt-upgrade-zeitgeist-chopsticks"], + "runScripts": ["build-node.sh"], + "foundation": { + "type": "chopsticks", + "rtUpgradePath": "../target/release/wbuild/zeitgeist-runtime/zeitgeist_runtime.compact.compressed.wasm", + "launchSpec": [ + { + "name": "ZeitgeistDB", + "type": "parachain", + "configPath": "./configs/zeitgeist.yml" + }, + { + "name": "HydraDXDB", + "type": "parachain", + "configPath": "./configs/hydradx.yml" + }, + { + "name": "PolkadotDB", + "type": "relaychain", + "configPath": "polkadot" + } + ] + }, + "envVars": ["LOG_LEVEL=debug", "VERBOSE_LOG"], + "buildBlockMode": "manual", + "connections": [ + { + "name": "ZeitgeistPara", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:8000"] + }, + { + "name": "HydraDXPara", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:8001"] + }, + { + "name": "PolkadotRelay", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:8002"] + } + ] + }, + { + "name": "chopsticks_battery_station_upgrade", + "testFileDir": ["tests/rt-upgrade-battery-station-chopsticks"], + "runScripts": ["build-node.sh"], + "foundation": { + "type": "chopsticks", + "rtUpgradePath": "../target/release/wbuild/battery-station-runtime/battery_station_runtime.compact.compressed.wasm", + "launchSpec": [ + { + "name": "BatteryStationDB", + "type": "parachain", + "configPath": "./configs/battery-station.yml" + }, + { + "name": "BasiliskDB", + "type": "parachain", + "configPath": "./configs/basilisk.yml" + }, + { + "name": "RococoDB", + "type": "relaychain", + "configPath": "rococo" + } + ] + }, + "envVars": ["LOG_LEVEL=debug", "VERBOSE_LOG"], + "buildBlockMode": "manual", + "connections": [ + { + "name": "BatteryStationPara", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:8000"] + }, + { + "name": "BasiliskPara", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:8001"] + }, + { + "name": "RococoRelay", + "type": "polkadotJs", + "endpoints": ["ws://127.0.0.1:8002"] + } + ] + } + ] +} diff --git a/integration-tests/package-lock.json b/integration-tests/package-lock.json deleted file mode 100644 index 996ae53cd..000000000 --- a/integration-tests/package-lock.json +++ /dev/null @@ -1,3732 +0,0 @@ -{ - "name": "integration-tests", - "version": "0.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@multiformats/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", - "dev": true - }, - "@polkadot/api": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-4.15.1.tgz", - "integrity": "sha512-MsGKpTAmnkxIN+Zu21NPKWot4xLsDGn/cdranf+P2OjqB80E6m8zkQOE7ug3912WIi5byZp55TSOE9UUzAAW3Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/api-derive": "4.15.1", - "@polkadot/keyring": "^6.9.1", - "@polkadot/metadata": "4.15.1", - "@polkadot/rpc-core": "4.15.1", - "@polkadot/rpc-provider": "4.15.1", - "@polkadot/types": "4.15.1", - "@polkadot/types-known": "4.15.1", - "@polkadot/util": "^6.9.1", - "@polkadot/util-crypto": "^6.9.1", - "@polkadot/x-rxjs": "^6.9.1", - "eventemitter3": "^4.0.7" - } - }, - "@polkadot/api-derive": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-4.15.1.tgz", - "integrity": "sha512-gAkKg4w09PThemRz0VI4YDzTy3RfCJrjpR0ZnYT93lZWsspSDiQIzMOTPbOn7MvC7FujeRIT0zqpzDeqKc4wFQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/api": "4.15.1", - "@polkadot/rpc-core": "4.15.1", - "@polkadot/types": "4.15.1", - "@polkadot/util": "^6.9.1", - "@polkadot/util-crypto": "^6.9.1", - "@polkadot/x-rxjs": "^6.9.1" - } - }, - "@polkadot/keyring": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-6.9.1.tgz", - "integrity": "sha512-UF+9psVwVlar7LRJYWJB/xETYBPu1OcyVrxDe88w17Y+ZIsIeNfcR9quVS4M7AdAhplmscsz/wgEMjmggXH9/Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/util": "6.9.1", - "@polkadot/util-crypto": "6.9.1" - } - }, - "@polkadot/metadata": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-4.15.1.tgz", - "integrity": "sha512-pnOgJSFCVgQpZtp7ghS0AS7xWCp6POKrb5LhY1CK7XTy6iQ6VHcGnr1N4wfia1c3o5ZOPj8Xic29Da61tkjp2Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/types": "4.15.1", - "@polkadot/types-known": "4.15.1", - "@polkadot/util": "^6.9.1", - "@polkadot/util-crypto": "^6.9.1" - } - }, - "@polkadot/networks": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-6.9.1.tgz", - "integrity": "sha512-imBPIrLN0W+7zuosD4WBtOkMzXc/271NhWn6dQmyA0xEoJx+6coJHQH/04fqO/gfZd4M1R70f3Gt5hlsfzCwlA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5" - } - }, - "@polkadot/rpc-core": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-4.15.1.tgz", - "integrity": "sha512-g9NxsHgOBzqLBWGV+hbXd8tmDWBdIZSxr3b107xY090wbQQ0R9I6D6wi+d7mJtcH1tazuhQgWQqyvvsbr2xPZg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/metadata": "4.15.1", - "@polkadot/rpc-provider": "4.15.1", - "@polkadot/types": "4.15.1", - "@polkadot/util": "^6.9.1", - "@polkadot/x-rxjs": "^6.9.1" - } - }, - "@polkadot/rpc-provider": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-4.15.1.tgz", - "integrity": "sha512-NfgdBsLP56XAIrSu29iKmqLb4ZAbK50VINGv3Qi99s5V2FiFOAvZq22arkoCmFo1q4zFpQeQqul3ZyZv8QX/Kg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/types": "4.15.1", - "@polkadot/util": "^6.9.1", - "@polkadot/util-crypto": "^6.9.1", - "@polkadot/x-fetch": "^6.9.1", - "@polkadot/x-global": "^6.9.1", - "@polkadot/x-ws": "^6.9.1", - "eventemitter3": "^4.0.7" - } - }, - "@polkadot/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-4.15.1.tgz", - "integrity": "sha512-daCblGDkiNHyDNkVDOQ0x/hblK7zkGAFQy+ykMt6euGGllUiKaAbCKlQN803aKmsB/5m8zQU63MHQC65tkpWXg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/metadata": "4.15.1", - "@polkadot/util": "^6.9.1", - "@polkadot/util-crypto": "^6.9.1", - "@polkadot/x-rxjs": "^6.9.1" - } - }, - "@polkadot/types-known": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-4.15.1.tgz", - "integrity": "sha512-yj2fVwEyYrc6eBoW6W3JQ5h1FZjcyyhDzfrtxronSLdT7H6zUtlLqn1A5uzkxPD0eSXkesh960GHeYzAi+p4cw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/networks": "^6.9.1", - "@polkadot/types": "4.15.1", - "@polkadot/util": "^6.9.1" - } - }, - "@polkadot/util": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-6.9.1.tgz", - "integrity": "sha512-RTIn8+Xdgywj8Bl7D12557zi8iIoUvDpAJztp/CwIq4O3jEw6Y/7lqNX/K6OXhZm/gZf7tFgFnvGlsIuNbtYcQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/x-textdecoder": "6.9.1", - "@polkadot/x-textencoder": "6.9.1", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.11.9", - "camelcase": "^5.3.1", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-6.9.1.tgz", - "integrity": "sha512-lniY8bhRoayA8PD3NHyvpAL2N9YETDll6HbxaOIkGS9nnVmlOjIvslcd343b30rj7/qSV72w+8qkReHj650aQw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/networks": "6.9.1", - "@polkadot/util": "6.9.1", - "@polkadot/wasm-crypto": "^4.0.2", - "@polkadot/x-randomvalues": "6.9.1", - "base-x": "^3.0.8", - "base64-js": "^1.5.1", - "blakejs": "^1.1.0", - "bn.js": "^4.11.9", - "create-hash": "^1.2.0", - "elliptic": "^6.5.4", - "hash.js": "^1.1.7", - "js-sha3": "^0.8.0", - "scryptsy": "^2.1.0", - "tweetnacl": "^1.0.3", - "xxhashjs": "^0.2.2" - } - }, - "@polkadot/wasm-crypto": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-4.0.2.tgz", - "integrity": "sha512-2h9FuQFkBc+B3TwSapt6LtyPvgtd0Hq9QsHW8g8FrmKBFRiiFKYRpfJKHCk0aCZzuRf9h95bQl/X6IXAIWF2ng==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.9", - "@polkadot/wasm-crypto-asmjs": "^4.0.2", - "@polkadot/wasm-crypto-wasm": "^4.0.2" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.0.2.tgz", - "integrity": "sha512-hlebqtGvfjg2ZNm4scwBGVHwOwfUhy2yw5RBHmPwkccUif3sIy4SAzstpcVBIVMdAEvo746bPWEInA8zJRcgJA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.9" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.0.2.tgz", - "integrity": "sha512-de/AfNPZ0uDKFWzOZ1rJCtaUbakGN29ks6IRYu6HZTRg7+RtqvE1rIkxabBvYgQVHIesmNwvEA9DlIkS6hYRFQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.9" - } - }, - "@polkadot/x-fetch": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-6.9.1.tgz", - "integrity": "sha512-CckiiRiGM+7WGOw1WijDeN9NJcTBEjZ96LRMaUng+BNvNhUQplsmX6CUt86Qn6T1O8TQaAg93wtqb+deykkn2g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/x-global": "6.9.1", - "@types/node-fetch": "^2.5.10", - "node-fetch": "^2.6.1" - } - }, - "@polkadot/x-global": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-6.9.1.tgz", - "integrity": "sha512-/pVzvQUObccuk/f2BGcs0WMjveLQPr1Qf+uiSF/7ae9BZHIG4ydLz0/Lnzbt4YQkIEaRNvVFD1Vph5hyjo4VCA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@types/node-fetch": "^2.5.10", - "node-fetch": "^2.6.1" - } - }, - "@polkadot/x-randomvalues": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-6.9.1.tgz", - "integrity": "sha512-L1c5ddjzyPAvzRkbnrbVgQTUskM4vRtfxblOV/tmM1BP6mB1U3rWo0FeHNWN/uiUoibVFIDNUKqUnZ5vhYs1qg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/x-global": "6.9.1" - } - }, - "@polkadot/x-rxjs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-rxjs/-/x-rxjs-6.9.1.tgz", - "integrity": "sha512-sfQNA7so5KoeFEIIx7OGZL5D+0Hn0SRZJMbZSuGRFMKjyovpyzWi+Mjs3l6T6OXbKm972XAseNGDUWSVG4EpLQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "rxjs": "^6.6.7" - } - }, - "@polkadot/x-textdecoder": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-6.9.1.tgz", - "integrity": "sha512-U7Cu7PbY5CG5kjbKqAQ/e07FfvPYZwHZZbC+343vDHUnJlyONKxp+jhod+A1pepu15fsYH/iZC0Os6RwfKoEAA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/x-global": "6.9.1" - } - }, - "@polkadot/x-textencoder": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-6.9.1.tgz", - "integrity": "sha512-M9VNm7IpbBwQnCZhEBAXSQ+/g2psEv4zjJYdX4/HTcWNpnYEUHeayIVTw91Wkgo3dN8wBL245vVp/8apfKfMkQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/x-global": "6.9.1" - } - }, - "@polkadot/x-ws": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-6.9.1.tgz", - "integrity": "sha512-BeoVqFFLatrt3k8Leyi6LsOMz5rkdXbQ5oE2Db0V+ezfh5aEV/JjoLsaPkX+i6xsCYibB43rY64FBhpJ2O0iYg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.5", - "@polkadot/x-global": "6.9.1", - "@types/websocket": "^1.0.2", - "websocket": "^1.0.34" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", - "dev": true - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "dev": true - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "dev": true - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", - "dev": true - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "dev": true, - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", - "dev": true - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", - "dev": true - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", - "dev": true - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", - "dev": true - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", - "dev": true - }, - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.19.tgz", - "integrity": "sha512-jRJgpRBuY+7izT7/WNXP/LsMO9YonsstuL+xuvycDyESpoDoIAsMd7suwpB4h9oEWB+ZlPTqJJ8EHomzNhwTPQ==", - "dev": true - }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "@types/mocha": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz", - "integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==", - "dev": true - }, - "@types/node": { - "version": "15.12.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz", - "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==", - "dev": true - }, - "@types/node-fetch": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", - "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/websocket": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.2.tgz", - "integrity": "sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@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 - }, - "@zeitgeistpm/sdk": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@zeitgeistpm/sdk/-/sdk-0.2.1.tgz", - "integrity": "sha512-0PLn5BUtj9BYDNSWM8OD/Z4oFyhcfp6biPTGwMdXHj1voAbt4ztgCwpUBIhg4H/WXBz3V2DM86jgIhrEsOi5Gg==", - "dev": true, - "requires": { - "@polkadot/api": "^4.4.1", - "@polkadot/keyring": "^6.0.5", - "@polkadot/util": "^6.0.5", - "@zeitgeistpm/type-defs": "^0.2.0", - "@zeitgeistpm/types": "^0.2.0", - "commander": "^7.2.0", - "ipfs-http-client": "^49.0.4", - "it-all": "^1.0.4", - "uint8arrays": "^2.1.4" - } - }, - "@zeitgeistpm/type-defs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@zeitgeistpm/type-defs/-/type-defs-0.2.0.tgz", - "integrity": "sha512-obSkYl3gNTeJFMF9JpcR0lLydgxMYiaySCsdmhK1VsJT2oBjzd67X5yFqzjurddXXIHw/kvjEUFLrCWO8C6UBw==", - "dev": true - }, - "@zeitgeistpm/types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@zeitgeistpm/types/-/types-0.2.0.tgz", - "integrity": "sha512-dEZB549N6MDY61BJHe1iYwDT9vMN3tXAqsP7VNagsXQ6UK+POjIdAbcaJHRfEfX9ogqL0LCCJh4LwgbUuqHewg==", - "dev": true, - "requires": { - "@polkadot/metadata": "^4.6.2", - "@polkadot/types": "^4.6.2", - "@zeitgeistpm/type-defs": "^0.2.0", - "axios": "^0.21.1" - } - }, - "@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "dev": true, - "optional": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "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 - }, - "ansi-regex": { - "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": "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" - } - }, - "any-signal": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-2.1.2.tgz", - "integrity": "sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==", - "dev": true, - "requires": { - "abort-controller": "^3.0.0", - "native-abort-controller": "^1.0.3" - } - }, - "anymatch": { - "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", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "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 - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "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 - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", - "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", - "dev": true - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dev": true, - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "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 - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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 - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "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" - } - }, - "blakejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", - "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==", - "dev": true - }, - "blob-to-it": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-1.0.2.tgz", - "integrity": "sha512-yD8tikfTlUGEOSHExz4vDCIQFLaBPXIL0KcxGQt9RbwMVXBEh+jokdJyStvTXPgWrdKfwgk7RX8GPsgrYzsyng==", - "dev": true, - "requires": { - "browser-readablestream-to-it": "^1.0.2" - } - }, - "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==", - "dev": true - }, - "borc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/borc/-/borc-2.1.2.tgz", - "integrity": "sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w==", - "dev": true, - "requires": { - "bignumber.js": "^9.0.0", - "buffer": "^5.5.0", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "~0.4.7", - "json-text-sequence": "~0.1.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "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 - }, - "iso-url": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-0.4.7.tgz", - "integrity": "sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==", - "dev": true - } - } - }, - "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" - } - }, - "braces": { - "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=", - "dev": true - }, - "browser-readablestream-to-it": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.2.tgz", - "integrity": "sha512-lv4M2Z6RKJpyJijJzBQL5MNssS7i8yedl+QkhnLCyPtgNGNSXv1KthzUnye9NlRAtBAI80X6S9i+vK09Rzjcvg==", - "dev": true - }, - "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 - }, - "buffer": { - "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.3.1", - "ieee754": "^1.1.13" - } - }, - "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 - }, - "bufferutil": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", - "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", - "dev": true, - "requires": { - "node-gyp-build": "^4.2.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" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chai": { - "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.1", - "type-detect": "^4.0.5" - } - }, - "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" - }, - "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" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "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==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "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" - } - }, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true - }, - "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" - }, - "dependencies": { - "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 - }, - "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 - }, - "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, - "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==", - "dev": true, - "requires": { - "ansi-regex": "^5.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==", - "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 - }, - "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, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "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 - }, - "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==", - "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" - } - }, - "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 - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "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 - }, - "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, - "requires": { - "type-detect": "^4.0.0" - } - }, - "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 - }, - "delimit-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz", - "integrity": "sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs=", - "dev": true - }, - "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 - }, - "dns-over-http-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz", - "integrity": "sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==", - "dev": true, - "requires": { - "debug": "^4.3.1", - "native-fetch": "^3.0.0", - "receptacle": "^1.3.2" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "electron-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.7.3.tgz", - "integrity": "sha512-1AVMaxrHXTTMqd7EK0MGWusdqNr07Rpj8Th6bG4at0oNgIi/1LBwa9CjT/0Zy+M0k/tSJPS04nFxHj0SXDVgVw==", - "dev": true, - "requires": { - "encoding": "^0.1.13" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "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==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": 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, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "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 - }, - "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" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "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==", - "dev": true - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - } - } - }, - "fast-fifo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.0.0.tgz", - "integrity": "sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ==", - "dev": true - }, - "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==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "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" - } - }, - "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 - }, - "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-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": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", - "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "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": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "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 - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "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==", - "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" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true - }, - "ipfs-core-types": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ipfs-core-types/-/ipfs-core-types-0.3.1.tgz", - "integrity": "sha512-xPBsowS951RsuskMo86AWz9y4ReaBot1YsjOhZvKl8ORd8taxIBTT72LnEPwIZ2G24U854Zjxvd/qUMqO14ivg==", - "dev": true, - "requires": { - "cids": "^1.1.5", - "multiaddr": "^8.0.0", - "peer-id": "^0.14.1" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "ipfs-core-utils": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ipfs-core-utils/-/ipfs-core-utils-0.7.2.tgz", - "integrity": "sha512-d7T72GxvhNN+tEHsJjxI5Y4LQVdMMbSwNbWB6nVsIHUEdwm3w85L2u1E/ctNd9aaNGvoBwEcnIZhSmqhMf7stw==", - "dev": true, - "requires": { - "any-signal": "^2.1.2", - "blob-to-it": "^1.0.1", - "browser-readablestream-to-it": "^1.0.1", - "cids": "^1.1.5", - "err-code": "^2.0.3", - "ipfs-core-types": "^0.3.1", - "ipfs-utils": "^6.0.1", - "it-all": "^1.0.4", - "it-map": "^1.0.4", - "it-peekable": "^1.0.1", - "multiaddr": "^8.0.0", - "multiaddr-to-uri": "^6.0.0", - "parse-duration": "^0.4.4", - "timeout-abort-controller": "^1.1.1", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "ipfs-http-client": { - "version": "49.0.4", - "resolved": "https://registry.npmjs.org/ipfs-http-client/-/ipfs-http-client-49.0.4.tgz", - "integrity": "sha512-qgWbkcB4glQrUkE2tZR+GVXyrO6aJyspWBjyct/6TzrhCHx7evjz+kUTK+wNm4S9zccUePEml5VNZUmUhoQtbA==", - "dev": true, - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.2", - "bignumber.js": "^9.0.1", - "cids": "^1.1.5", - "debug": "^4.1.1", - "form-data": "^3.0.0", - "ipfs-core-types": "^0.3.1", - "ipfs-core-utils": "^0.7.2", - "ipfs-utils": "^6.0.1", - "ipld-block": "^0.11.0", - "ipld-dag-cbor": "^0.17.0", - "ipld-dag-pb": "^0.20.0", - "ipld-raw": "^6.0.0", - "it-last": "^1.0.4", - "it-map": "^1.0.4", - "it-tar": "^1.2.2", - "it-to-stream": "^0.1.2", - "merge-options": "^3.0.4", - "multiaddr": "^8.0.0", - "multibase": "^4.0.2", - "multicodec": "^3.0.1", - "multihashes": "^4.0.2", - "nanoid": "^3.1.12", - "native-abort-controller": "^1.0.3", - "parse-duration": "^0.4.4", - "stream-to-it": "^0.2.2", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "dev": true, - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", - "dev": true - }, - "it-to-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", - "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "fast-fifo": "^1.0.0", - "get-iterator": "^1.0.2", - "p-defer": "^3.0.0", - "p-fifo": "^1.0.0", - "readable-stream": "^3.6.0" - } - } - } - }, - "ipld-block": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/ipld-block/-/ipld-block-0.11.1.tgz", - "integrity": "sha512-sDqqLqD5qh4QzGq6ssxLHUCnH4emCf/8F8IwjQM2cjEEIEHMUj57XhNYgmGbemdYPznUhffxFGEHsruh5+HQRw==", - "dev": true, - "requires": { - "cids": "^1.0.0" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "ipld-dag-cbor": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/ipld-dag-cbor/-/ipld-dag-cbor-0.17.1.tgz", - "integrity": "sha512-Bakj/cnxQBdscORyf4LRHxQJQfoaY8KWc7PWROQgX+aw5FCzBt8ga0VM/59K+ABOznsqNvyLR/wz/oYImOpXJw==", - "dev": true, - "requires": { - "borc": "^2.1.2", - "cids": "^1.0.0", - "is-circular": "^1.0.2", - "multicodec": "^3.0.1", - "multihashing-async": "^2.0.0", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "ipld-dag-pb": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.20.0.tgz", - "integrity": "sha512-zfM0EdaolqNjAxIrtpuGKvXxWk5YtH9jKinBuQGTcngOsWFQhyybGCTJHGNGGtRjHNJi2hz5Udy/8pzv4kcKyg==", - "dev": true, - "requires": { - "cids": "^1.0.0", - "class-is": "^1.1.0", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.0", - "protons": "^2.0.0", - "reset": "^0.1.0", - "run": "^1.4.0", - "stable": "^0.1.8", - "uint8arrays": "^1.0.0" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "uint8arrays": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", - "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", - "dev": true, - "requires": { - "multibase": "^4.0.1" - } - } - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", - "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", - "dev": true, - "requires": { - "uint8arrays": "1.1.0", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "uint8arrays": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", - "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", - "dev": true, - "requires": { - "multibase": "^4.0.1" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "uint8arrays": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", - "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", - "dev": true, - "requires": { - "multibase": "^3.0.0", - "web-encoding": "^1.0.2" - }, - "dependencies": { - "multibase": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", - "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1", - "web-encoding": "^1.0.6" - } - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "ipld-raw": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ipld-raw/-/ipld-raw-6.0.0.tgz", - "integrity": "sha512-UK7fjncAzs59iu/o2kwYtb8jgTtW6B+cNWIiNpAJkfRwqoMk1xD/6i25ktzwe4qO8gQgoR9RxA5ibC23nq8BLg==", - "dev": true, - "requires": { - "cids": "^1.0.0", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.0" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - } - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", - "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", - "dev": true, - "requires": { - "uint8arrays": "1.1.0", - "varint": "^6.0.0" - }, - "dependencies": { - "multibase": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", - "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1", - "web-encoding": "^1.0.6" - } - }, - "uint8arrays": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", - "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", - "dev": true, - "requires": { - "multibase": "^3.0.0", - "web-encoding": "^1.0.2" - } - } - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "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", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "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-circular": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-circular/-/is-circular-1.0.2.tgz", - "integrity": "sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA==", - "dev": true - }, - "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-electron": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.0.tgz", - "integrity": "sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==", - "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=", - "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 - }, - "is-generator-function": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", - "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-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "requires": { - "ip-regex": "^4.0.0" - } - }, - "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==", - "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-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 - }, - "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-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-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "iso-constants": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/iso-constants/-/iso-constants-0.1.2.tgz", - "integrity": "sha512-OTCM5ZCQsHBCI4Wdu4tSxvDIkmDHd5EwJDps5mKqnQnWJSKlnwMs3EDZ4n3Fh1tmkWkDlyd2vCDbEYuPbyrUNQ==", - "dev": true - }, - "iso-random-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.0.tgz", - "integrity": "sha512-lGuIu104KfBV9ubYTSaE3GeAr6I69iggXxBHbTBc5u/XKlwlWl0LCytnkIZissaKqvxablwRD9B3ktVnmIUnEg==", - "dev": true, - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "iso-url": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.1.5.tgz", - "integrity": "sha512-+3JqoKdBTGmyv9vOkS6b9iHhvK34UajfTibrH/1HOK8TI7K2VsM0qOCd+aJdWKtSOA8g3PqZfcwDmnR0p3klqQ==", - "dev": true - }, - "it-all": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.5.tgz", - "integrity": "sha512-ygD4kA4vp8fi+Y+NBgEKt6W06xSbv6Ub/0V8d1r3uCyJ9Izwa1UspkIOlqY9fOee0Z1w3WRo1+VWyAU4DgtufA==", - "dev": true - }, - "it-concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/it-concat/-/it-concat-1.0.3.tgz", - "integrity": "sha512-sjeZQ1BWQ9U/W2oI09kZgUyvSWzQahTkOkLIsnEPgyqZFaF9ME5gV6An4nMjlyhXKWQMKEakQU8oRHs2SdmeyA==", - "dev": true, - "requires": { - "bl": "^4.0.0" - } - }, - "it-glob": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.13.tgz", - "integrity": "sha512-0Hcd5BraJUPzL28NWiFbdNrcdyNxNTKKdU3sjdFiYynNTQpwlG2UKW31X7bp+XhJwux/oPzIquo5ioztVmc2RQ==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, - "it-last": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/it-last/-/it-last-1.0.5.tgz", - "integrity": "sha512-PV/2S4zg5g6dkVuKfgrQfN2rUN4wdTI1FzyAvU+i8RV96syut40pa2s9Dut5X7SkjwA3P0tOhLABLdnOJ0Y/4Q==", - "dev": true - }, - "it-map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/it-map/-/it-map-1.0.5.tgz", - "integrity": "sha512-EElupuWhHVStUgUY+OfTJIS2MZed96lDrAXzJUuqiiqLnIKoBRqtX1ZG2oR0bGDsSppmz83MtzCeKLZ9TVAUxQ==", - "dev": true - }, - "it-peekable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-1.0.2.tgz", - "integrity": "sha512-LRPLu94RLm+lxLZbChuc9iCXrKCOu1obWqxfaKhF00yIp30VGkl741b5P60U+rdBxuZD/Gt1bnmakernv7bVFg==", - "dev": true - }, - "it-reader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-2.1.0.tgz", - "integrity": "sha512-hSysqWTO9Tlwc5EGjVf8JYZzw0D2FsxD/g+eNNWrez9zODxWt6QlN6JAMmycK72Mv4jHEKEXoyzUN4FYGmJaZw==", - "dev": true, - "requires": { - "bl": "^4.0.0" - } - }, - "it-tar": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/it-tar/-/it-tar-1.2.2.tgz", - "integrity": "sha512-M8V4a9I+x/vwXTjqvixcEZbQZHjwDIb8iUQ+D4M2QbhAdNs3WKVSl+45u5/F2XFx6jYMFOGzMVlKNK/uONgNIA==", - "dev": true, - "requires": { - "bl": "^4.0.0", - "buffer": "^5.4.3", - "iso-constants": "^0.1.2", - "it-concat": "^1.0.0", - "it-reader": "^2.0.0", - "p-defer": "^3.0.0" - } - }, - "it-to-stream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-0.1.2.tgz", - "integrity": "sha512-DTB5TJRZG3untmZehcaFN0kGWl2bNv7tnJRgQHAO9QEt8jfvVRrebZtnD5NZd4SCj4WVPjl0LSrugNWE/UaZRQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0", - "fast-fifo": "^1.0.0", - "get-iterator": "^1.0.2", - "p-defer": "^3.0.0", - "p-fifo": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "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==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-text-sequence": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz", - "integrity": "sha1-py8hfcSvxGKf/1/rME3BvVGi89I=", - "dev": true, - "requires": { - "delimit-stream": "0.1.0" - } - }, - "keypair": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.3.tgz", - "integrity": "sha512-0wjZ2z/SfZZq01+3/8jYLd8aEShSa+aat1zyPGQY3IuKoEAp6DJGvu2zt6snELrQU9jbCkIlCyNOD7RdQbHhkQ==", - "dev": true - }, - "libp2p-crypto": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.4.tgz", - "integrity": "sha512-8iUwiNlU/sFEtXQpxaehmXUQ5Fw6r52H7NH0d8ZSb8nKBbO6r8y8ft6f1to8A81SrFOVd4/zsjEzokpedDvRgw==", - "dev": true, - "requires": { - "err-code": "^3.0.1", - "is-typedarray": "^1.0.0", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.1", - "multibase": "^4.0.3", - "multicodec": "^3.0.1", - "multihashes": "^4.0.2", - "multihashing-async": "^2.1.2", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.10.2", - "secp256k1": "^4.0.0", - "uint8arrays": "^2.1.4", - "ursa-optional": "^0.10.1" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", - "dev": true - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "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" - } - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, - "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 - }, - "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==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "dev": true, - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "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 - }, - "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, - "requires": { - "mime-db": "1.48.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==", - "dev": true - }, - "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=", - "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" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "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 - } - } - }, - "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 - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multiaddr": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-8.1.2.tgz", - "integrity": "sha512-r13IzW8+Sv9zab9Gt8RPMIN2WkptIPq99EpAzg4IbJ/zTELhiEwXWr9bAmEatSCI4j/LSA6ESJzvz95JZ+ZYXQ==", - "dev": true, - "requires": { - "cids": "^1.0.0", - "class-is": "^1.1.0", - "dns-over-http-resolver": "^1.0.0", - "err-code": "^2.0.3", - "is-ip": "^3.1.0", - "multibase": "^3.0.0", - "uint8arrays": "^1.1.0", - "varint": "^5.0.0" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "uint8arrays": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", - "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", - "dev": true, - "requires": { - "multibase": "^4.0.1" - } - } - } - }, - "multibase": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", - "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1", - "web-encoding": "^1.0.6" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - }, - "dependencies": { - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "uint8arrays": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", - "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", - "dev": true, - "requires": { - "multibase": "^4.0.1" - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "uint8arrays": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", - "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", - "dev": true, - "requires": { - "multibase": "^4.0.1" - } - } - } - }, - "uint8arrays": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", - "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", - "dev": true, - "requires": { - "multibase": "^3.0.0", - "web-encoding": "^1.0.2" - } - } - } - }, - "multiaddr-to-uri": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/multiaddr-to-uri/-/multiaddr-to-uri-6.0.0.tgz", - "integrity": "sha512-OjpkVHOXEmIKMO8WChzzQ7aZQcSQX8squxmvtDbRpy7/QNmJ3Z7jv6qyD74C28QtaeNie8O8ngW2AkeiMmKP7A==", - "dev": true, - "requires": { - "multiaddr": "^8.0.0" - } - }, - "multihashing-async": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-2.1.2.tgz", - "integrity": "sha512-FTPNnWWxwIK5dXXmTFhySSF8Fkdqf7vzqpV09+RWsmfUhrsL/b3Arg3+bRrBnXTtjxm3JRGI3wSAtQHL0QCxhQ==", - "dev": true, - "requires": { - "blakejs": "^1.1.0", - "err-code": "^3.0.0", - "js-sha3": "^0.8.0", - "multihashes": "^4.0.1", - "murmurhash3js-revisited": "^3.0.0", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", - "dev": true - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - } - } - } - }, - "murmurhash3js-revisited": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", - "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", - "dev": true - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true - }, - "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true - }, - "native-abort-controller": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.3.tgz", - "integrity": "sha512-fd5LY5q06mHKZPD5FmMrn7Lkd2H018oBGKNOAdLpctBDEPFKsfJ1nX9ke+XRa8PEJJpjqrpQkGjq2IZ27QNmYA==", - "dev": true - }, - "native-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", - "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "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 - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-gyp-build": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", - "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", - "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==", - "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.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" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-defer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", - "dev": true - }, - "p-fifo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", - "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", - "dev": true, - "requires": { - "fast-fifo": "^1.0.0", - "p-defer": "^3.0.0" - } - }, - "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" - } - }, - "parse-duration": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-0.4.4.tgz", - "integrity": "sha512-KbAJuYGUhZkB9gotDiKLnZ7Z3VTacK3fgwmDdB6ZVDtJbMBT6MfLga0WJaYpPDu0mzqT0NgHtHDt5PY4l0nidg==", - "dev": true - }, - "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 - }, - "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 - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "peer-id": { - "version": "0.14.8", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.14.8.tgz", - "integrity": "sha512-GpuLpob/9FrEFvyZrKKsISEkaBYsON2u0WtiawLHj1ii6ewkoeRiSDFLyIefYhw0jGvQoeoZS05jaT52X7Bvig==", - "dev": true, - "requires": { - "cids": "^1.1.5", - "class-is": "^1.1.0", - "libp2p-crypto": "^0.19.0", - "minimist": "^1.2.5", - "multihashes": "^4.0.2", - "protobufjs": "^6.10.2", - "uint8arrays": "^2.0.5" - }, - "dependencies": { - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "dev": true, - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true - } - } - }, - "pem-jwk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", - "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", - "dev": true, - "requires": { - "asn1.js": "^5.0.1" - } - }, - "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 - }, - "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "dev": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, - "protocol-buffers-schema": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", - "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==", - "dev": true - }, - "protons": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protons/-/protons-2.0.1.tgz", - "integrity": "sha512-FlmPorLEeCEDPu+uIn0Qardgiy5XqVA4IyNTz9wb9c0e2U7BEXdRcIbx64r09o4Abtf+4B7mkTtMbsIXMxZzKw==", - "dev": true, - "requires": { - "protocol-buffers-schema": "^3.3.1", - "signed-varint": "^2.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.0" - } - }, - "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" - } - }, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "receptacle": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", - "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "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 - } - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "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 - }, - "reset": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/reset/-/reset-0.1.0.tgz", - "integrity": "sha1-n8cxQXGZWubLC35YsGznUir0uvs=", - "dev": true - }, - "retimer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/retimer/-/retimer-2.0.0.tgz", - "integrity": "sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==", - "dev": true - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/run/-/run-1.4.0.tgz", - "integrity": "sha1-4X2ekEOrL+F3dsspnhI3848LT/o=", - "dev": true, - "requires": { - "minimatch": "*" - } - }, - "rxjs": { - "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" - } - }, - "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 - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==", - "dev": true - }, - "secp256k1": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz", - "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==", - "dev": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.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==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "signed-varint": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/signed-varint/-/signed-varint-2.0.1.tgz", - "integrity": "sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk=", - "dev": true, - "requires": { - "varint": "~5.0.0" - } - }, - "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 - }, - "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, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stream-to-it": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.3.tgz", - "integrity": "sha512-xaK9EjPtLox5rrC7YLSBXSanTtUJN/lzJlMFvy9VaROmnyvy0U/X6m2uMhXPJRn3g3M9uOSIzTszW7BPiWSg9w==", - "dev": true, - "requires": { - "get-iterator": "^1.0.2" - } - }, - "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" - } - }, - "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/E39qu1sD0OtWI3OC0XgroccWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "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" - } - }, - "timeout-abort-controller": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-1.1.1.tgz", - "integrity": "sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==", - "dev": true, - "requires": { - "abort-controller": "^3.0.0", - "retimer": "^2.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" - }, - "uint8arrays": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.5.tgz", - "integrity": "sha512-CSR7AO+4AHUeSOnZ/NBNCElDeWfRh9bXtOck27083kc7SznmmHIhNEkEOCQOn0wvrIMjS3IH0TNLR16vuc46mA==", - "dev": true, - "requires": { - "multibase": "^4.0.1" - }, - "dependencies": { - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "dev": true, - "requires": { - "@multiformats/base-x": "^4.0.1" - } - } - } - }, - "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" - } - }, - "ursa-optional": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", - "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", - "dev": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.14.2" - } - }, - "utf-8-validate": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.5.tgz", - "integrity": "sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==", - "dev": true, - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - }, - "web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "dev": true, - "requires": { - "@zxing/text-encoding": "0.9.0", - "util": "^0.12.3" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dev": true, - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "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" - } - }, - "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-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } - }, - "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, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "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 - }, - "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-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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==", - "dev": true - }, - "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, - "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==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "^0.2.2" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "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" - }, - "dependencies": { - "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 - }, - "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 - }, - "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, - "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==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "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 - }, - "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, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "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 - } - } -} diff --git a/integration-tests/package.json b/integration-tests/package.json index 49dc1f3c3..3410fbf17 100644 --- a/integration-tests/package.json +++ b/integration-tests/package.json @@ -1,25 +1,27 @@ { "author": "Zeitgeist PM ", "dependencies": { - "typescript": "^3.9.6" + "@polkadot/keyring": "^12.6.1", + "@polkadot/util-crypto": "^12.6.1", + "sqlite3": "^5.1.6", + "typescript": "^5.2.2", + "ws": "^8.15.1" }, "devDependencies": { - "@polkadot/api": "^4.12.1", - "@polkadot/types": "^4.12.1", - "@types/chai": "^4.2.11", - "@types/mocha": "^8.2.2", - "@zeitgeistpm/sdk": "^0.2.1", - "chai": "^4.3.4", - "mocha": "^8.3.2", - "ts-node": "9.1" + "@acala-network/chopsticks": "0.9.3", + "@moonwall/cli": "^4.4.1", + "@moonwall/util": "^4.4.1", + "debug": "4.3.4", + "@polkadot/api": "^10.10.1", + "@polkadot/types": "^10.10.1", + "@types/node": "^20.9.0", + "ts-node": "^10.9.1" }, "description": "Integration tests", "license": "GPL-3.0", "repository": "https://github.com/zeitgeistpm/zeitgeist", "main": "index.js", "name": "integration-tests", - "scripts": { - "test": "./node_modules/mocha/bin/mocha --parallel -r ts-node/register 'tests/*.ts'" - }, + "scripts": {}, "version": "0.0.0" } diff --git a/integration-tests/pnpm-lock.yaml b/integration-tests/pnpm-lock.yaml new file mode 100644 index 000000000..f47d3d3ce --- /dev/null +++ b/integration-tests/pnpm-lock.yaml @@ -0,0 +1,5630 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@polkadot/keyring': + specifier: ^12.6.1 + version: 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/util-crypto': + specifier: ^12.6.1 + version: 12.6.1(@polkadot/util@12.6.1) + sqlite3: + specifier: ^5.1.6 + version: 5.1.6 + typescript: + specifier: ^5.2.2 + version: 5.3.3 + ws: + specifier: ^8.15.1 + version: 8.15.1 + +devDependencies: + '@acala-network/chopsticks': + specifier: 0.9.3 + version: 0.9.3(debug@4.3.4)(ts-node@10.9.2) + '@moonwall/cli': + specifier: ^4.4.1 + version: 4.4.4(@types/node@20.10.4)(ts-node@10.9.2)(typescript@5.3.3) + '@moonwall/util': + specifier: ^4.4.1 + version: 4.4.4(@types/node@20.10.4)(@vitest/ui@1.0.1)(typescript@5.3.3) + '@polkadot/api': + specifier: ^10.10.1 + version: 10.11.1 + '@polkadot/types': + specifier: ^10.10.1 + version: 10.11.1 + '@types/node': + specifier: ^20.9.0 + version: 20.10.4 + debug: + specifier: 4.3.4 + version: 4.3.4(supports-color@8.1.1) + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + +packages: + + /@acala-network/chopsticks-core@0.9.3: + resolution: {integrity: sha512-dAw3ATDooLewks+D6PslWafpOhE1s6zQo/nYiW9/bXHuSyvLNh+jgT+z+EUWQTL3cxWqiSaxkkCIjUx9p+jYQw==} + dependencies: + '@acala-network/chopsticks-executor': 0.9.3 + '@polkadot/rpc-provider': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/types-known': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + comlink: 4.4.1 + eventemitter3: 5.0.1 + lodash: 4.17.21 + lru-cache: 10.1.0 + pino: 8.17.1 + pino-pretty: 10.3.0 + rxjs: 7.8.1 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@acala-network/chopsticks-db@0.9.3(ts-node@10.9.2): + resolution: {integrity: sha512-DoRqI0GClUkoaxjwHHsgup8/yZ5ObeOWrK1XghsKBq8Ct1THkQghol/Gneu2iyuLTn0F4ldpxjFOpG6IpkCblA==} + dependencies: + '@acala-network/chopsticks-core': 0.9.3 + '@polkadot/util': 12.6.1 + idb: 7.1.1 + sqlite3: 5.1.6 + typeorm: 0.3.17(sqlite3@5.1.6)(ts-node@10.9.2) + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - bluebird + - bufferutil + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + - utf-8-validate + dev: true + + /@acala-network/chopsticks-executor@0.9.3: + resolution: {integrity: sha512-K5zOBFdmMMCkI2ze+g01x6LG+KJ/RWV54Ze97MUXJh0xx7X9FSjhejXU53AmtMEYOZdTjSyHLTOBMoQktZuILw==} + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.1) + dev: true + + /@acala-network/chopsticks@0.9.3(debug@4.3.4)(ts-node@10.9.2): + resolution: {integrity: sha512-O15PB3G1rYAlGYPEilDvDKJD91DUhBlcl3kiDrtCm22u1ECr8jXv2EETwTmDhPiCiP2QADmsjRuxZKbzs/tQxQ==} + hasBin: true + dependencies: + '@acala-network/chopsticks-core': 0.9.3 + '@acala-network/chopsticks-db': 0.9.3(ts-node@10.9.2) + '@pnpm/npm-conf': 2.2.2 + '@polkadot/api-augment': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + axios: 1.6.2(debug@4.3.4) + dotenv: 16.3.1 + global-agent: 3.0.0 + js-yaml: 4.1.0 + jsondiffpatch: 0.5.0 + lodash: 4.17.21 + ws: 8.15.1 + yargs: 17.7.2 + zod: 3.22.4 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - bluebird + - bufferutil + - debug + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + - utf-8-validate + dev: true + + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: true + + /@adraffy/ens-normalize@1.9.4: + resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + dev: true + + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: true + + /@colors/colors@1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + requiresBuild: true + dev: true + optional: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@esbuild/android-arm64@0.19.8: + resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.8: + resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.8: + resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.8: + resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.8: + resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.8: + resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.8: + resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.8: + resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.8: + resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.8: + resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.8: + resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.8: + resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.8: + resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.8: + resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.8: + resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.8: + resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.8: + resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.8: + resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.8: + resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.8: + resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.8: + resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.8: + resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /@gar/promisify@1.1.3: + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + requiresBuild: true + optional: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@ljharb/through@2.3.11: + resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + dev: true + + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + dependencies: + detect-libc: 2.0.2 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + transitivePeerDependencies: + - encoding + - supports-color + + /@moonbeam-network/api-augment@0.2600.0: + resolution: {integrity: sha512-Hnn7mw8Im+X8GgbX11EjydbPM5MTQSG6yHs7JE2mPYCgSf6PkqUqOil5F4nACI4hMn6rM6GTTdRXscu0ztiNvQ==} + engines: {node: '>=14.0.0'} + dev: true + + /@moonwall/cli@4.4.4(@types/node@20.10.4)(ts-node@10.9.2)(typescript@5.3.3): + resolution: {integrity: sha512-PVSDutjYnf3Lw3wp7bSf7779gDO5PezcsUMwYSnC4rhHBs36mS8CaIks8ZdTRdYy8zArTSUf9aCxkFueHDSbMg==} + engines: {node: '>=20.0.0', pnpm: '>=7'} + hasBin: true + dependencies: + '@acala-network/chopsticks': 0.9.3(debug@4.3.4)(ts-node@10.9.2) + '@moonbeam-network/api-augment': 0.2600.0 + '@moonwall/types': 4.4.4(typescript@5.3.3) + '@moonwall/util': 4.4.4(@types/node@20.10.4)(@vitest/ui@1.0.1)(typescript@5.3.3) + '@polkadot/api': 10.11.1 + '@polkadot/api-augment': 10.11.1 + '@polkadot/api-derive': 10.11.1 + '@polkadot/keyring': 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/types': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + '@vitest/ui': 1.0.1(vitest@1.0.1) + '@zombienet/orchestrator': 0.0.68(@polkadot/util@12.6.1)(@types/node@20.10.4) + '@zombienet/utils': 0.0.24(@types/node@20.10.4)(typescript@5.3.3) + bottleneck: 2.19.5 + chalk: 5.3.0 + clear: 0.1.0 + cli-progress: 3.12.0 + colors: 1.4.0 + debug: 4.3.4(supports-color@8.1.1) + dotenv: 16.3.1 + ethers: 6.8.0 + inquirer: 9.2.12 + inquirer-press-to-continue: 1.2.0(inquirer@9.2.12) + jsonc-parser: 3.2.0 + minimatch: 9.0.3 + node-fetch: 3.3.2 + semver: 7.5.4 + viem: 1.18.0(typescript@5.3.3) + vitest: 1.0.1(@types/node@20.10.4)(@vitest/ui@1.0.1) + web3: 4.2.1(typescript@5.3.3) + web3-providers-ws: 4.0.7 + ws: 8.14.2 + yaml: 2.3.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@google-cloud/spanner' + - '@sap/hana-client' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - '@vitest/browser' + - better-sqlite3 + - bluebird + - bufferutil + - canvas + - chokidar + - encoding + - happy-dom + - hdb-pool + - ioredis + - jsdom + - less + - lightningcss + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sass + - sql.js + - stylus + - sugarss + - supports-color + - terser + - ts-node + - typeorm-aurora-data-api-driver + - typescript + - utf-8-validate + - zod + dev: true + + /@moonwall/types@4.4.4(typescript@5.3.3): + resolution: {integrity: sha512-zHhcInI8/5sR6FsB3Kz8nQxjGoC4FqR/E19cefhvh69X57x2q3yef04YA287xQ6otrc9yk5+oz9YyrFMl/uhUg==} + engines: {node: '>=14.16.0', pnpm: '>=7'} + dependencies: + '@polkadot/api': 10.11.1 + '@polkadot/api-base': 10.11.1 + '@polkadot/keyring': 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/types': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + '@types/node': 20.10.3 + '@zombienet/utils': 0.0.24(@types/node@20.10.3)(typescript@5.3.3) + bottleneck: 2.19.5 + debug: 4.3.4(supports-color@8.1.1) + ethers: 6.8.0 + viem: 1.18.0(typescript@5.3.3) + web3: 4.2.1(typescript@5.3.3) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - bufferutil + - chokidar + - encoding + - supports-color + - typescript + - utf-8-validate + - zod + dev: true + + /@moonwall/util@4.4.4(@types/node@20.10.4)(@vitest/ui@1.0.1)(typescript@5.3.3): + resolution: {integrity: sha512-J36G9pjnDuN+SdwnBGWdpPyCRbolb6gxqKqQPhay1LSjPpihzMSZknPHh10FdFw6swRKsah36yXtF59i7nd0Bw==} + engines: {node: '>=14.16.0', pnpm: '>=7'} + dependencies: + '@moonbeam-network/api-augment': 0.2600.0 + '@moonwall/types': 4.4.4(typescript@5.3.3) + '@polkadot/api': 10.11.1 + '@polkadot/api-augment': 10.11.1 + '@polkadot/api-derive': 10.11.1 + '@polkadot/keyring': 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/rpc-provider': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + bottleneck: 2.19.5 + chalk: 5.3.0 + clear: 0.1.0 + cli-progress: 3.12.0 + colors: 1.4.0 + debug: 4.3.4(supports-color@8.1.1) + dotenv: 16.3.1 + ethers: 6.8.0 + inquirer: 9.2.12 + inquirer-press-to-continue: 1.2.0(inquirer@9.2.12) + node-fetch: 3.3.2 + rlp: 3.0.0 + semver: 7.5.4 + viem: 1.16.6(typescript@5.3.3) + vitest: 1.0.0-beta.5(@types/node@20.10.4)(@vitest/ui@1.0.1) + web3: 4.2.1(typescript@5.3.3) + ws: 8.14.2 + yaml: 2.3.4 + yargs: 17.7.2 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - '@vitest/browser' + - '@vitest/ui' + - bufferutil + - chokidar + - encoding + - happy-dom + - jsdom + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + - typescript + - utf-8-validate + - zod + dev: true + + /@noble/curves@1.1.0: + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} + dependencies: + '@noble/hashes': 1.3.1 + dev: true + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + + /@noble/ed25519@1.7.3: + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + dev: true + + /@noble/hashes@1.3.1: + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} + dev: true + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + /@noble/secp256k1@1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@npmcli/fs@1.1.1: + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + requiresBuild: true + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.5.4 + optional: true + + /@npmcli/move-file@1.1.2: + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + requiresBuild: true + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + optional: true + + /@pnpm/config.env-replace@1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + dev: true + + /@pnpm/network.ca-file@1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + dependencies: + graceful-fs: 4.2.10 + dev: true + + /@pnpm/npm-conf@2.2.2: + resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + engines: {node: '>=12'} + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + dev: true + + /@polka/url@1.0.0-next.24: + resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + dev: true + + /@polkadot/api-augment@10.11.1: + resolution: {integrity: sha512-9Sk7fi6wzvxAoxvGJPcMt0hU4WzuIAlBy4Rng6WPiS6Ed0HJLr1dkZaqFFmV5my2pb3tu//1JGYkt+MUVB0Kqw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api-base': 10.11.1 + '@polkadot/rpc-augment': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/types-augment': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/api-base@10.11.1: + resolution: {integrity: sha512-A645Hj9bGtq0EOEWcwTaGoD40vp8/ih1suwinl5il8Psg+bdDmzodnVH5Jhuwe1dNKOuXuvxZvOmbYUPWyIqyg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-core': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/util': 12.6.1 + rxjs: 7.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/api-derive@10.11.1: + resolution: {integrity: sha512-i48okJr0l1IrFTPa9KVkoJnDL2EHKExR6XC0Z7I9+kW9noxYWqo0tIoi5s1bNVD475xWK/rUjT7qHxiDbPaCUQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api': 10.11.1 + '@polkadot/api-augment': 10.11.1 + '@polkadot/api-base': 10.11.1 + '@polkadot/rpc-core': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + rxjs: 7.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/api@10.11.1: + resolution: {integrity: sha512-WEgUYvY90AHX9drmsvWQ4DDuqlE7h4x3f28K5eOoJF4dQ5AkWsFogxwJ4TH57POWLfyi8AIn6/f1vsqPtReDhA==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api-augment': 10.11.1 + '@polkadot/api-base': 10.11.1 + '@polkadot/api-derive': 10.11.1 + '@polkadot/keyring': 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/rpc-augment': 10.11.1 + '@polkadot/rpc-core': 10.11.1 + '@polkadot/rpc-provider': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/types-augment': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/types-create': 10.11.1 + '@polkadot/types-known': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + eventemitter3: 5.0.1 + rxjs: 7.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/keyring@12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1): + resolution: {integrity: sha512-cicTctZr5Jy5vgNT2FsNiKoTZnz6zQkgDoIYv79NI+p1Fhwc9C+DN/iMCnk3Cm9vR2gSAd2fSV+Y5iKVDhAmUw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1 + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + tslib: 2.6.2 + + /@polkadot/networks@12.6.1: + resolution: {integrity: sha512-pzyirxTYAnsx+6kyLYcUk26e4TLz3cX6p2KhTgAVW77YnpGX5VTKTbYykyXC8fXFd/migeQsLaa2raFN47mwoA==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.1 + '@substrate/ss58-registry': 1.44.0 + tslib: 2.6.2 + + /@polkadot/rpc-augment@10.11.1: + resolution: {integrity: sha512-wrtxHnEwqS3b1GuZ3sA1pzLuUjjLnW4FPawOklONRcIuKbGmFuvu7QvEIHmxBV1FAS/fs8gbvp8ImKWUPnT93Q==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-core': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/rpc-core@10.11.1: + resolution: {integrity: sha512-3l4l+zL7MDWzQx3WnaieXXUKsbeA1Miu4wsje5trYJEE+hm+nMW8h7fiFKfYzXBi7ty/wMS+S7BfQPTrDkYHxA==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-augment': 10.11.1 + '@polkadot/rpc-provider': 10.11.1 + '@polkadot/types': 10.11.1 + '@polkadot/util': 12.6.1 + rxjs: 7.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/rpc-provider@10.11.1: + resolution: {integrity: sha512-86aDUOnaG42si0jSOAgn6Fs3F3rz57x+iNBK1JpM0PLL2XvmPuoMZL5dZwzqSIey3nVdGJqRYfnFquWuyQpnOQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/keyring': 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/types': 10.11.1 + '@polkadot/types-support': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + '@polkadot/x-fetch': 12.6.1 + '@polkadot/x-global': 12.6.1 + '@polkadot/x-ws': 12.6.1 + eventemitter3: 5.0.1 + mock-socket: 9.3.1 + nock: 13.4.0 + tslib: 2.6.2 + optionalDependencies: + '@substrate/connect': 0.7.35 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/types-augment@10.11.1: + resolution: {integrity: sha512-Exd5mMCuSOXXz73iWqy8ocScWTrwAPqHz0Kxpz5OWlAu+5usipMuhjoeaZA803FHQntZh9lHUN31fuc50Exhew==} + engines: {node: '>=18'} + dependencies: + '@polkadot/types': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + dev: true + + /@polkadot/types-codec@10.11.1: + resolution: {integrity: sha512-B9Fu2hq3cRpJpGPcgfZ8Qi1OSX9u82J46adlbIG95ktoA+70eZ83VS3Zvtt9ACsdLVGETCJfDjSO25XptjhZKQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/x-bigint': 12.6.1 + tslib: 2.6.2 + dev: true + + /@polkadot/types-create@10.11.1: + resolution: {integrity: sha512-oeaI185F3XeWSz9/fe//qZ0KsQyE6C6c13WuOa+5cX/Yuz7cSAXawrhl58HRaU+fueaE/ijEHLcuK1sdM6e1JQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/types-codec': 10.11.1 + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + dev: true + + /@polkadot/types-known@10.11.1: + resolution: {integrity: sha512-BPHI7EbdRaznZR4RVVrQC5epyxL6caJ5dkluZP6rRwx7VmQK0FTGIwgh3UP724mzQhM8rT77MD3h2ftnq1cteg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/networks': 12.6.1 + '@polkadot/types': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/types-create': 10.11.1 + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + dev: true + + /@polkadot/types-support@10.11.1: + resolution: {integrity: sha512-eCvWjdpELsHvXiTq201DdbIeOIaEr53zTD7HqC2wR/Z1bkQuw79Z+CyIU4sp79GL1vZ1PxS7vUH9M3FKNaTl1Q==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + dev: true + + /@polkadot/types@10.11.1: + resolution: {integrity: sha512-4uKnzW2GZqNA5qRZpTPJ7z+G/ARTvXI89etv9xXXVttUdfTaYZsMf4rMuMThOAE/mAUn70LoH0JKthZLwzVgNQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/keyring': 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/types-augment': 10.11.1 + '@polkadot/types-codec': 10.11.1 + '@polkadot/types-create': 10.11.1 + '@polkadot/util': 12.6.1 + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + rxjs: 7.8.1 + tslib: 2.6.2 + dev: true + + /@polkadot/util-crypto@12.6.1(@polkadot/util@12.6.1): + resolution: {integrity: sha512-2ezWFLmdgeDXqB9NAUdgpp3s2rQztNrZLY+y0SJYNOG4ch+PyodTW/qSksnOrVGVdRhZ5OESRE9xvo9LYV5UAw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.1 + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@polkadot/networks': 12.6.1 + '@polkadot/util': 12.6.1 + '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@12.6.1)(@polkadot/x-randomvalues@12.6.1) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/x-bigint': 12.6.1 + '@polkadot/x-randomvalues': 12.6.1(@polkadot/util@12.6.1)(@polkadot/wasm-util@7.3.2) + '@scure/base': 1.1.3 + tslib: 2.6.2 + + /@polkadot/util@12.6.1: + resolution: {integrity: sha512-10ra3VfXtK8ZSnWI7zjhvRrhupg3rd4iFC3zCaXmRpOU+AmfIoCFVEmuUuC66gyXiz2/g6k5E6j0lWQCOProSQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-bigint': 12.6.1 + '@polkadot/x-global': 12.6.1 + '@polkadot/x-textdecoder': 12.6.1 + '@polkadot/x-textencoder': 12.6.1 + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + tslib: 2.6.2 + + /@polkadot/wasm-bridge@7.3.2(@polkadot/util@12.6.1)(@polkadot/x-randomvalues@12.6.1): + resolution: {integrity: sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/x-randomvalues': 12.6.1(@polkadot/util@12.6.1)(@polkadot/wasm-util@7.3.2) + tslib: 2.6.2 + + /@polkadot/wasm-crypto-asmjs@7.3.2(@polkadot/util@12.6.1): + resolution: {integrity: sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + + /@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@12.6.1)(@polkadot/x-randomvalues@12.6.1): + resolution: {integrity: sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.1)(@polkadot/x-randomvalues@12.6.1) + '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/x-randomvalues': 12.6.1(@polkadot/util@12.6.1)(@polkadot/wasm-util@7.3.2) + tslib: 2.6.2 + + /@polkadot/wasm-crypto-wasm@7.3.2(@polkadot/util@12.6.1): + resolution: {integrity: sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.1) + tslib: 2.6.2 + + /@polkadot/wasm-crypto@7.3.2(@polkadot/util@12.6.1)(@polkadot/x-randomvalues@12.6.1): + resolution: {integrity: sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.1)(@polkadot/x-randomvalues@12.6.1) + '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@12.6.1)(@polkadot/x-randomvalues@12.6.1) + '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/x-randomvalues': 12.6.1(@polkadot/util@12.6.1)(@polkadot/wasm-util@7.3.2) + tslib: 2.6.2 + + /@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.1): + resolution: {integrity: sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.1 + tslib: 2.6.2 + + /@polkadot/x-bigint@12.6.1: + resolution: {integrity: sha512-YlABeVIlgYQZJ4ZpW/+akFGGxw5jMGt4g5vaP7EumlORGneJHzzWJYDmI5v2y7j1zvC9ofOle7z4tRmtN/QDew==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.1 + tslib: 2.6.2 + + /@polkadot/x-fetch@12.6.1: + resolution: {integrity: sha512-iyBv0ecfCsqGSv26CPJk9vSoKtry/Fn7x549ysA4hlc9KboraMHxOHTpcNZYC/OdgvbFZl40zIXCY0SA1ai8aw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.1 + node-fetch: 3.3.2 + tslib: 2.6.2 + dev: true + + /@polkadot/x-global@12.6.1: + resolution: {integrity: sha512-w5t19HIdBPuyu7X/AiCyH2DsKqxBF0KpF4Ymolnx8PfcSIgnq9ZOmgs74McPR6FgEmeEkr9uNKujZrsfURi1ug==} + engines: {node: '>=18'} + dependencies: + tslib: 2.6.2 + + /@polkadot/x-randomvalues@12.6.1(@polkadot/util@12.6.1)(@polkadot/wasm-util@7.3.2): + resolution: {integrity: sha512-1uVKlfYYbgIgGV5v1Dgn960cGovenWm5pmg+aTMeUGXVYiJwRD2zOpLyC1i/tP454iA74j74pmWb8Nkn0tJZUQ==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.1 + '@polkadot/wasm-util': '*' + dependencies: + '@polkadot/util': 12.6.1 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.1) + '@polkadot/x-global': 12.6.1 + tslib: 2.6.2 + + /@polkadot/x-textdecoder@12.6.1: + resolution: {integrity: sha512-IasodJeV1f2Nr/VtA207+LXCQEqYcG8y9qB/EQcRsrEP58NbwwxM5Z2obV0lSjJOxRTJ4/OlhUwnLHwcbIp6+g==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.1 + tslib: 2.6.2 + + /@polkadot/x-textencoder@12.6.1: + resolution: {integrity: sha512-sTq/+tXqBhGe01a1rjieSHFh3y935vuRgtahVgVJZnfqh5SmLPgSN5tTPxZWzyx7gHIfotle8laTJbJarv7V1A==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.1 + tslib: 2.6.2 + + /@polkadot/x-ws@12.6.1: + resolution: {integrity: sha512-fs9V+XekjJLpVLLwxnqq3llqSZu2T/b9brvld8anvzS/htDLPbi7+c5W3VGJ9Po8fS67IsU3HCt0Gu6F6mGrMA==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.1 + tslib: 2.6.2 + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@protobufjs/aspromise@1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: true + + /@protobufjs/base64@1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: true + + /@protobufjs/codegen@2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: true + + /@protobufjs/eventemitter@1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: true + + /@protobufjs/fetch@1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: true + + /@protobufjs/float@1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: true + + /@protobufjs/inquire@1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: true + + /@protobufjs/path@1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: true + + /@protobufjs/pool@1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: true + + /@protobufjs/utf8@1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: true + + /@rollup/rollup-android-arm-eabi@4.7.0: + resolution: {integrity: sha512-rGku10pL1StFlFvXX5pEv88KdGW6DHUghsxyP/aRYb9eH+74jTGJ3U0S/rtlsQ4yYq1Hcc7AMkoJOb1xu29Fxw==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.7.0: + resolution: {integrity: sha512-/EBw0cuJ/KVHiU2qyVYUhogXz7W2vXxBzeE9xtVIMC+RyitlY2vvaoysMUqASpkUtoNIHlnKTu/l7mXOPgnKOA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.7.0: + resolution: {integrity: sha512-4VXG1bgvClJdbEYYjQ85RkOtwN8sqI3uCxH0HC5w9fKdqzRzgG39K7GAehATGS8jghA7zNoS5CjSKkDEqWmNZg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.7.0: + resolution: {integrity: sha512-/ImhO+T/RWJ96hUbxiCn2yWI0/MeQZV/aeukQQfhxiSXuZJfyqtdHPUPrc84jxCfXTxbJLmg4q+GBETeb61aNw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.7.0: + resolution: {integrity: sha512-zhye8POvTyUXlKbfPBVqoHy3t43gIgffY+7qBFqFxNqVtltQLtWeHNAbrMnXiLIfYmxcoL/feuLDote2tx+Qbg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.7.0: + resolution: {integrity: sha512-RAdr3OJnUum6Vs83cQmKjxdTg31zJnLLTkjhcFt0auxM6jw00GD6IPFF42uasYPr/wGC6TRm7FsQiJyk0qIEfg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.7.0: + resolution: {integrity: sha512-nhWwYsiJwZGq7SyR3afS3EekEOsEAlrNMpPC4ZDKn5ooYSEjDLe9W/xGvoIV8/F/+HNIY6jY8lIdXjjxfxopXw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.7.0: + resolution: {integrity: sha512-rlfy5RnQG1aop1BL/gjdH42M2geMUyVQqd52GJVirqYc787A/XVvl3kQ5NG/43KXgOgE9HXgCaEH05kzQ+hLoA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.7.0: + resolution: {integrity: sha512-cCkoGlGWfBobdDtiiypxf79q6k3/iRVGu1HVLbD92gWV5WZbmuWJCgRM4x2N6i7ljGn1cGytPn9ZAfS8UwF6vg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.7.0: + resolution: {integrity: sha512-R2oBf2p/Arc1m+tWmiWbpHBjEcJnHVnv6bsypu4tcKdrYTpDfl1UT9qTyfkIL1iiii5D4WHxUHCg5X0pzqmxFg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.7.0: + resolution: {integrity: sha512-CPtgaQL1aaPc80m8SCVEoxFGHxKYIt3zQYC3AccL/SqqiWXblo3pgToHuBwR8eCP2Toa+X1WmTR/QKFMykws7g==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.7.0: + resolution: {integrity: sha512-pmioUlttNh9GXF5x2CzNa7Z8kmRTyhEzzAC+2WOOapjewMbl+3tGuAnxbwc5JyG8Jsz2+hf/QD/n5VjimOZ63g==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.7.0: + resolution: {integrity: sha512-SeZzC2QhhdBQUm3U0c8+c/P6UlRyBcLL2Xp5KX7z46WXZxzR8RJSIWL9wSUeBTgxog5LTPJuPj0WOT9lvrtP7Q==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@scure/base@1.1.3: + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + + /@scure/bip32@1.3.1: + resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: true + + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: true + + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sqltools/formatter@1.2.5: + resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + dev: true + + /@substrate/connect-extension-protocol@1.0.1: + resolution: {integrity: sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==} + requiresBuild: true + dev: true + optional: true + + /@substrate/connect@0.7.35: + resolution: {integrity: sha512-Io8vkalbwaye+7yXfG1Nj52tOOoJln2bMlc7Q9Yy3vEWqZEVkgKmcPVzbwV0CWL3QD+KMPDA2Dnw/X7EdwgoLw==} + requiresBuild: true + dependencies: + '@substrate/connect-extension-protocol': 1.0.1 + smoldot: 2.0.7 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + optional: true + + /@substrate/ss58-registry@1.44.0: + resolution: {integrity: sha512-7lQ/7mMCzVNSEfDS4BCqnRnKCFKpcOaPrxMeGTXHX1YQzM/m2BBHjbK2C3dJvjv7GYxMiaTq/HdWQj1xS6ss+A==} + + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + requiresBuild: true + optional: true + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/bn.js@5.1.5: + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + dependencies: + '@types/node': 20.10.4 + + /@types/long@4.0.2: + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: true + + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + dev: true + + /@types/node@20.10.3: + resolution: {integrity: sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/node@20.10.4: + resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} + dependencies: + undici-types: 5.26.5 + + /@types/ws@8.5.3: + resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} + dependencies: + '@types/node': 20.10.4 + dev: true + + /@vitest/expect@1.0.0-beta.5: + resolution: {integrity: sha512-q/TPdbXuEZZNFKILEVicojSWEq1y8qPLcAiZRQD8DsYUAV2cIjsD5lJWYaAjjUAV4lzovSci3KeISQdjUdfxQQ==} + dependencies: + '@vitest/spy': 1.0.0-beta.5 + '@vitest/utils': 1.0.0-beta.5 + chai: 4.3.10 + dev: true + + /@vitest/expect@1.0.1: + resolution: {integrity: sha512-3cdrb/eKD/0tygDX75YscuHEHMUJ70u3UoLSq2eqhWks57AyzvsDQbyn53IhZ0tBN7gA8Jj2VhXiOV2lef7thw==} + dependencies: + '@vitest/spy': 1.0.1 + '@vitest/utils': 1.0.1 + chai: 4.3.10 + dev: true + + /@vitest/runner@1.0.0-beta.5: + resolution: {integrity: sha512-o/6ZqQoKCIdI4dmdc4Yb1u3n56dU69SABXyO5yhFZTDjEMJs1DdCQ68JK+UcrpJMQndr6q5lTFrfHEhj4XJy6w==} + dependencies: + '@vitest/utils': 1.0.0-beta.5 + p-limit: 5.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/runner@1.0.1: + resolution: {integrity: sha512-/+z0vhJ0MfRPT3AyTvAK6m57rzlew/ct8B2a4LMv7NhpPaiI2QLGyOBMB3lcioWdJHjRuLi9aYppfOv0B5aRQA==} + dependencies: + '@vitest/utils': 1.0.1 + p-limit: 5.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@1.0.0-beta.5: + resolution: {integrity: sha512-fsWoc/mokLawqrLFqK9MHEyzJaGeDzU5gAgky2yZJR58VSsSvW+cesvmdv9ch39xHlTzFTRPgrWkNsmbdm2gbg==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + + /@vitest/snapshot@1.0.1: + resolution: {integrity: sha512-wIPtPDGSxEZ+DpNMc94AsybX6LV6uN6sosf5TojyP1m2QbKwiRuLV/5RSsjt1oWViHsTj8mlcwrQQ1zHGO0fMw==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@1.0.0-beta.5: + resolution: {integrity: sha512-B5dx87eCiJidWGdURMS/etHE9P3JRdFEQj8HQRGI3OhMy5XcSrdAwg5oEADoqXm32GUGc7bC8Dw/q9PiCJSBIQ==} + dependencies: + tinyspy: 2.2.0 + dev: true + + /@vitest/spy@1.0.1: + resolution: {integrity: sha512-yXwm1uKhBVr/5MhVeSmtNqK+0q2RXIchJt8kokEKdrWLtkPeDgdbZ6SjR1VQGZuNdWL6sSBnLayIyVvcS0qLfA==} + dependencies: + tinyspy: 2.2.0 + dev: true + + /@vitest/ui@1.0.1(vitest@1.0.1): + resolution: {integrity: sha512-3hFMgy/RExKi7UlYEqqnZ65QALdkgXyW1k7Zn7PykVmVBcKe/aI4ZpZ006WeTWvnUWeR+37lbpUD0JhnmKn72A==} + peerDependencies: + vitest: ^1.0.0 + dependencies: + '@vitest/utils': 1.0.1 + fast-glob: 3.3.2 + fflate: 0.8.1 + flatted: 3.2.9 + pathe: 1.1.1 + picocolors: 1.0.0 + sirv: 2.0.3 + vitest: 1.0.1(@types/node@20.10.4)(@vitest/ui@1.0.1) + dev: true + + /@vitest/utils@1.0.0-beta.5: + resolution: {integrity: sha512-5ippiVcc6KjnAZiMc5Gz5g1tWTG+21g5scr+cedYC+YxAjqZzOG/ncJuM/Eqq9a+/MAJJc5zOGBcDYl27x62jg==} + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /@vitest/utils@1.0.1: + resolution: {integrity: sha512-MGPCHkzXbbAyscrhwGzh8uP1HPrTYLWaj1WTDtWSGrpe2yJWLRN9mF9ooKawr6NMOg9vTBtg2JqWLfuLC7Dknw==} + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /@zombienet/orchestrator@0.0.68(@polkadot/util@12.6.1)(@types/node@20.10.4): + resolution: {integrity: sha512-n/Gj1VWGz6W4Phzw5r/rb56uMT3H3B06xRzP+PZJtG2dGMqWAUZP2DcNhLWZ8w3/NEsWrrNTfSejaQvuaUApGg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api': 10.11.1 + '@polkadot/keyring': 12.6.1(@polkadot/util-crypto@12.6.1)(@polkadot/util@12.6.1) + '@polkadot/util-crypto': 12.6.1(@polkadot/util@12.6.1) + '@zombienet/utils': 0.0.24(@types/node@20.10.4)(typescript@5.3.3) + JSONStream: 1.3.5 + chai: 4.3.10 + debug: 4.3.4(supports-color@8.1.1) + execa: 5.1.1 + fs-extra: 11.2.0 + jsdom: 23.0.1 + json-bigint: 1.0.0 + libp2p-crypto: 0.21.2 + minimatch: 9.0.3 + mocha: 10.2.0 + napi-maybe-compressed-blob: 0.0.11 + peer-id: 0.16.0 + tmp-promise: 3.0.3 + typescript: 5.3.3 + yaml: 2.3.4 + transitivePeerDependencies: + - '@polkadot/util' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - canvas + - chokidar + - supports-color + - utf-8-validate + dev: true + + /@zombienet/utils@0.0.24(@types/node@20.10.3)(typescript@5.3.3): + resolution: {integrity: sha512-CUHn4u04ryfRqCQQsZHSpMIpMxzdMvSZR86Gp3Hwexf7wZTkHNZ5hsJnQO+J/yl28ny0GcjLJSU1hZ2kMV+hqw==} + engines: {node: '>=18'} + dependencies: + cli-table3: 0.6.3 + debug: 4.3.4(supports-color@8.1.1) + mocha: 10.2.0 + nunjucks: 3.2.4 + toml: 3.0.0 + ts-node: 10.9.2(@types/node@20.10.3)(typescript@5.3.3) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - chokidar + - supports-color + - typescript + dev: true + + /@zombienet/utils@0.0.24(@types/node@20.10.4)(typescript@5.3.3): + resolution: {integrity: sha512-CUHn4u04ryfRqCQQsZHSpMIpMxzdMvSZR86Gp3Hwexf7wZTkHNZ5hsJnQO+J/yl28ny0GcjLJSU1hZ2kMV+hqw==} + engines: {node: '>=18'} + dependencies: + cli-table3: 0.6.3 + debug: 4.3.4(supports-color@8.1.1) + mocha: 10.2.0 + nunjucks: 3.2.4 + toml: 3.0.0 + ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - chokidar + - supports-color + - typescript + dev: true + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + + /a-sync-waterfall@1.0.1: + resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} + dev: true + + /abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + requiresBuild: true + + /abitype@0.7.1(typescript@5.3.3): + resolution: {integrity: sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==} + peerDependencies: + typescript: '>=4.9.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + dependencies: + typescript: 5.3.3 + dev: true + + /abitype@0.9.8(typescript@5.3.3): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.3.3 + dev: true + + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + + /acorn-walk@8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + dev: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + requiresBuild: true + dependencies: + humanize-ms: 1.2.1 + optional: true + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + optional: true + + /ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: true + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /app-root-path@3.1.0: + resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} + engines: {node: '>= 6.0.0'} + dev: true + + /aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + + /are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + requiresBuild: true + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + optional: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axios@1.6.2(debug@4.3.4): + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + dependencies: + follow-redirects: 1.15.3(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + /boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + dev: true + + /bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + requiresBuild: true + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + + /cacache@15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + requiresBuild: true + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.2.0 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + optional: true + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + /class-is@1.1.0: + resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + requiresBuild: true + optional: true + + /clear@0.1.0: + resolution: {integrity: sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==} + dev: true + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + dev: true + + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: true + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true + + /cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + dev: true + + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: true + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /comlink@4.4.1: + resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==} + dev: true + + /commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + requiresBuild: true + + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + dev: true + + /console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /cssstyle@3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} + dependencies: + rrweb-cssom: 0.6.0 + dev: true + + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + + /data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + dev: true + + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.23.5 + dev: true + + /dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dev: true + + /debug@4.3.4(supports-color@8.1.1): + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + + /decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.2 + is-arguments: 1.1.1 + is-array-buffer: 3.0.2 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: true + + /diff-match-patch@1.0.5: + resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + dev: true + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: true + + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + requiresBuild: true + dependencies: + iconv-lite: 0.6.3 + optional: true + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + requiresBuild: true + optional: true + + /err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + requiresBuild: true + optional: true + + /err-code@3.0.1: + resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} + dev: true + + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true + + /es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + dev: true + + /esbuild@0.19.8: + resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.8 + '@esbuild/android-arm64': 0.19.8 + '@esbuild/android-x64': 0.19.8 + '@esbuild/darwin-arm64': 0.19.8 + '@esbuild/darwin-x64': 0.19.8 + '@esbuild/freebsd-arm64': 0.19.8 + '@esbuild/freebsd-x64': 0.19.8 + '@esbuild/linux-arm': 0.19.8 + '@esbuild/linux-arm64': 0.19.8 + '@esbuild/linux-ia32': 0.19.8 + '@esbuild/linux-loong64': 0.19.8 + '@esbuild/linux-mips64el': 0.19.8 + '@esbuild/linux-ppc64': 0.19.8 + '@esbuild/linux-riscv64': 0.19.8 + '@esbuild/linux-s390x': 0.19.8 + '@esbuild/linux-x64': 0.19.8 + '@esbuild/netbsd-x64': 0.19.8 + '@esbuild/openbsd-x64': 0.19.8 + '@esbuild/sunos-x64': 0.19.8 + '@esbuild/win32-arm64': 0.19.8 + '@esbuild/win32-ia32': 0.19.8 + '@esbuild/win32-x64': 0.19.8 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /ethereum-cryptography@2.1.2: + resolution: {integrity: sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/bip32': 1.3.1 + '@scure/bip39': 1.2.1 + dev: true + + /ethers@6.8.0: + resolution: {integrity: sha512-zrFbmQRlraM+cU5mE4CZTLBurZTs2gdp2ld0nG/f3ecBK+x6lZ69KSxBqZ4NjclxwfTxl5LeNufcBbMsTdY53Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /fast-copy@3.0.1: + resolution: {integrity: sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-redact@3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + engines: {node: '>=6'} + dev: true + + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + + /fflate@0.8.1: + resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==} + dev: true + + /figures@5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + dependencies: + escape-string-regexp: 5.0.0 + is-unicode-supported: 1.3.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /follow-redirects@1.15.3(debug@4.3.4): + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + /gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + requiresBuild: true + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + requiresBuild: true + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.5.4 + serialize-error: 7.0.1 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + dev: true + + /highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: true + + /html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + dependencies: + whatwg-encoding: 3.1.1 + dev: true + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + requiresBuild: true + optional: true + + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + requiresBuild: true + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + requiresBuild: true + dependencies: + ms: 2.1.3 + optional: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + requiresBuild: true + optional: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + requiresBuild: true + optional: true + + /infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + requiresBuild: true + optional: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /inquirer-press-to-continue@1.2.0(inquirer@9.2.12): + resolution: {integrity: sha512-HdKOgEAydYhI3OKLy5S4LMi7a/AHJjPzF06mHqbdVxlTmHOaytQVBaVbQcSytukD70K9FYLhYicNOPuNjFiWVQ==} + peerDependencies: + inquirer: '>=8.0.0 <10.0.0' + dependencies: + deep-equal: 2.2.3 + inquirer: 9.2.12 + ora: 6.3.1 + dev: true + + /inquirer@9.2.12: + resolution: {integrity: sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==} + engines: {node: '>=14.18.0'} + dependencies: + '@ljharb/through': 2.3.11 + ansi-escapes: 4.3.2 + chalk: 5.3.0 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 5.0.0 + lodash: 4.17.21 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /ip@2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + requiresBuild: true + optional: true + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: true + + /is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + requiresBuild: true + optional: true + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: true + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + requiresBuild: true + + /iso-random-stream@2.0.2: + resolution: {integrity: sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==} + engines: {node: '>=10'} + dependencies: + events: 3.3.0 + readable-stream: 3.6.2 + dev: true + + /isomorphic-ws@5.0.0(ws@8.15.1): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.15.1 + dev: true + + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: true + + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsdom@23.0.1: + resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + cssstyle: 3.0.0 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.15.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.1.2 + dev: true + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /jsondiffpatch@0.5.0: + resolution: {integrity: sha512-Quz3MvAwHxVYNXsOByL7xI5EB2WYOeFswqaHIA3qOK3isRWTxiplBEocmmru6XmxDB2L7jDNYtYA4FyimoAFEw==} + engines: {node: '>=8.17.0'} + hasBin: true + dependencies: + chalk: 3.0.0 + diff-match-patch: 1.0.5 + dev: true + bundledDependencies: [] + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + + /libp2p-crypto@0.21.2: + resolution: {integrity: sha512-EXFrhSpiHtJ+/L8xXDvQNK5VjUMG51u878jzZcaT5XhuN/zFg6PWJFnl/qB2Y2j7eMWnvCRP7Kp+ua2H36cG4g==} + engines: {node: '>=12.0.0'} + dependencies: + '@noble/ed25519': 1.7.3 + '@noble/secp256k1': 1.7.1 + err-code: 3.0.1 + iso-random-stream: 2.0.2 + multiformats: 9.9.0 + node-forge: 1.3.1 + protobufjs: 6.11.4 + uint8arrays: 3.1.1 + dev: true + + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.4.2 + pkg-types: 1.0.3 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: true + + /long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: true + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} + engines: {node: 14 || >=16.14} + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /make-fetch-happen@9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + requiresBuild: true + dependencies: + agentkeepalive: 4.5.0 + cacache: 15.3.0 + http-cache-semantics: 4.1.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + + /matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 4.0.0 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.0.1: + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + optional: true + + /minipass-fetch@1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + optional: true + + /minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + optional: true + + /minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + optional: true + + /minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + optional: true + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + /mkdirp@2.1.6: + resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: true + + /mocha@10.2.0: + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + + /mock-socket@9.3.1: + resolution: {integrity: sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==} + engines: {node: '>= 8'} + dev: true + + /mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: true + + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /napi-maybe-compressed-blob-darwin-arm64@0.0.11: + resolution: {integrity: sha512-hZ9ye4z8iMDVPEnx9A/Ag6k7xHX/BcK5Lntw/VANBUm9ioLSuRvHTALG4XaqVDGXo4U2NFDwSLRDyhFPYvqckQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /napi-maybe-compressed-blob-darwin-x64@0.0.11: + resolution: {integrity: sha512-TqWNP7Vehi73xLXyUGjdLppP0W6T0Ef2D/X9HmAZNwglt+MkTujX10CDODfbFWvGy+NkaC5XqnzxCn19wbZZcA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /napi-maybe-compressed-blob-linux-arm64-gnu@0.0.11: + resolution: {integrity: sha512-7D5w6MDZghcb3VtXRg2ShCEh9Z3zMeBVRG4xsMulEWT2j9/09Nopu+9KfI/2ngRvm78MniWSIlqds5PRAlCROA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /napi-maybe-compressed-blob-linux-x64-gnu@0.0.11: + resolution: {integrity: sha512-JKY8KcZpQtKiL1smMKfukcOmsDVeZaw9fKXKsWC+wySc2wsvH7V2wy8PffSQ0lWERkI7Yn3k7xPjB463m/VNtg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /napi-maybe-compressed-blob@0.0.11: + resolution: {integrity: sha512-1dj4ET34TfEes0+josVLvwpJe337Jk6txd3XUjVmVs3budSo2eEjvN6pX4myYE1pS4x/k2Av57n/ypRl2u++AQ==} + engines: {node: '>= 10'} + optionalDependencies: + napi-maybe-compressed-blob-darwin-arm64: 0.0.11 + napi-maybe-compressed-blob-darwin-x64: 0.0.11 + napi-maybe-compressed-blob-linux-arm64-gnu: 0.0.11 + napi-maybe-compressed-blob-linux-x64-gnu: 0.0.11 + dev: true + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + requiresBuild: true + optional: true + + /nock@13.4.0: + resolution: {integrity: sha512-W8NVHjO/LCTNA64yxAPHV/K47LpGYcVzgKd3Q0n6owhwvD0Dgoterc25R4rnZbckJEb6Loxz1f5QMuJpJnbSyQ==} + engines: {node: '>= 10.13'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + json-stringify-safe: 5.0.1 + propagate: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /node-addon-api@4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: true + + /node-gyp@8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + requiresBuild: true + dependencies: + env-paths: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 9.1.0 + nopt: 5.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + + /npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + requiresBuild: true + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + optional: true + + /nunjucks@3.2.4: + resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} + engines: {node: '>= 6.9.0'} + hasBin: true + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + a-sync-waterfall: 1.0.1 + asap: 2.0.6 + commander: 5.1.0 + dev: true + + /nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /ora@6.3.1: + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + strip-ansi: 7.1.0 + wcwidth: 1.0.1 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + aggregate-error: 3.1.0 + optional: true + + /parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + dependencies: + parse5: 6.0.1 + dev: true + + /parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + dev: true + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /peer-id@0.16.0: + resolution: {integrity: sha512-EmL7FurFUduU9m1PS9cfJ5TAuCvxKQ7DKpfx3Yj6IKWyBRtosriFuOag/l3ni/dtPgPLwiA4R9IvpL7hsDLJuQ==} + engines: {node: '>=15.0.0'} + dependencies: + class-is: 1.1.0 + libp2p-crypto: 0.21.2 + multiformats: 9.9.0 + protobufjs: 6.11.4 + uint8arrays: 3.1.1 + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pino-abstract-transport@1.1.0: + resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} + dependencies: + readable-stream: 4.4.2 + split2: 4.2.0 + dev: true + + /pino-pretty@10.3.0: + resolution: {integrity: sha512-JthvQW289q3454mhM3/38wFYGWPiBMR28T3CpDNABzoTQOje9UKS7XCJQSnjWF9LQGQkGd8D7h0oq+qwiM3jFA==} + hasBin: true + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.1 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.1.0 + pump: 3.0.0 + readable-stream: 4.4.2 + secure-json-parse: 2.7.0 + sonic-boom: 3.7.0 + strip-json-comments: 3.1.1 + dev: true + + /pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + dev: true + + /pino@8.17.1: + resolution: {integrity: sha512-YoN7/NJgnsJ+fkADZqjhRt96iepWBndQHeClmSBH0sQWCb8zGD74t00SK4eOtKFi/f8TUmQnfmgglEhd2kI1RQ==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.1.0 + pino-std-serializers: 6.2.2 + process-warning: 2.3.2 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.7.0 + thread-stream: 2.4.1 + dev: true + + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 + dev: true + + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /process-warning@2.3.2: + resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==} + dev: true + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + requiresBuild: true + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + optional: true + + /promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + optional: true + + /propagate@2.0.1: + resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} + engines: {node: '>= 8'} + dev: true + + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: true + + /protobufjs@6.11.4: + resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} + hasBin: true + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 20.10.4 + long: 4.0.0 + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + /readable-stream@4.4.2: + resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: true + + /reflect-metadata@0.1.14: + resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} + dev: true + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: true + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + requiresBuild: true + optional: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /rlp@3.0.0: + resolution: {integrity: sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw==} + hasBin: true + dev: true + + /roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + dependencies: + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.3 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + dev: true + + /rollup@4.7.0: + resolution: {integrity: sha512-7Kw0dUP4BWH78zaZCqF1rPyQ8D5DSU6URG45v1dqS/faNsx9WXyess00uTOZxKr7oR/4TOjO1CPudT8L1UsEgw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.7.0 + '@rollup/rollup-android-arm64': 4.7.0 + '@rollup/rollup-darwin-arm64': 4.7.0 + '@rollup/rollup-darwin-x64': 4.7.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.7.0 + '@rollup/rollup-linux-arm64-gnu': 4.7.0 + '@rollup/rollup-linux-arm64-musl': 4.7.0 + '@rollup/rollup-linux-riscv64-gnu': 4.7.0 + '@rollup/rollup-linux-x64-gnu': 4.7.0 + '@rollup/rollup-linux-x64-musl': 4.7.0 + '@rollup/rollup-win32-arm64-msvc': 4.7.0 + '@rollup/rollup-win32-ia32-msvc': 4.7.0 + '@rollup/rollup-win32-x64-msvc': 4.7.0 + fsevents: 2.3.3 + dev: true + + /rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + dev: true + + /run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: 2.2.0 + dev: true + + /secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + dev: true + + /semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + dependencies: + type-fest: 0.13.1 + dev: true + + /serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: true + + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /sirv@2.0.3: + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.24 + mrmime: 1.0.1 + totalist: 3.0.1 + dev: true + + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + requiresBuild: true + optional: true + + /smoldot@2.0.7: + resolution: {integrity: sha512-VAOBqEen6vises36/zgrmAT1GWk2qE3X8AGnO7lmQFdskbKx8EovnwS22rtPAG+Y1Rk23/S22kDJUdPANyPkBA==} + requiresBuild: true + dependencies: + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + optional: true + + /socks-proxy-agent@6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + requiresBuild: true + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + socks: 2.7.1 + transitivePeerDependencies: + - supports-color + optional: true + + /socks@2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + requiresBuild: true + dependencies: + ip: 2.0.0 + smart-buffer: 4.2.0 + optional: true + + /sonic-boom@3.7.0: + resolution: {integrity: sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==} + dependencies: + atomic-sleep: 1.0.0 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: true + + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + + /sqlite3@5.1.6: + resolution: {integrity: sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==} + requiresBuild: true + peerDependenciesMeta: + node-gyp: + optional: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + node-addon-api: 4.3.0 + tar: 6.2.0 + optionalDependencies: + node-gyp: 8.4.1 + transitivePeerDependencies: + - bluebird + - encoding + - supports-color + + /ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + optional: true + + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /std-env@3.6.0: + resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} + dev: true + + /stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bl: 5.1.0 + dev: true + + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.6 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.2 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true + + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /thread-stream@2.4.1: + resolution: {integrity: sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==} + dependencies: + real-require: 0.2.0 + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + dev: true + + /tinypool@0.8.1: + resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: true + + /tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + dependencies: + tmp: 0.2.1 + dev: true + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /tmp@0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: true + + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: true + + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: true + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + /tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + dependencies: + punycode: 2.3.1 + dev: true + + /ts-node@10.9.2(@types/node@20.10.3)(typescript@5.3.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.10.3 + acorn: 8.11.2 + acorn-walk: 8.3.1 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.10.4 + acorn: 8.11.2 + acorn-walk: 8.3.1 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /typeorm@0.3.17(sqlite3@5.1.6)(ts-node@10.9.2): + resolution: {integrity: sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig==} + engines: {node: '>= 12.9.0'} + hasBin: true + peerDependencies: + '@google-cloud/spanner': ^5.18.0 + '@sap/hana-client': ^2.12.25 + better-sqlite3: ^7.1.2 || ^8.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.2.0 + mssql: ^9.1.1 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^5.1.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + '@google-cloud/spanner': + optional: true + '@sap/hana-client': + optional: true + better-sqlite3: + optional: true + hdb-pool: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + dependencies: + '@sqltools/formatter': 1.2.5 + app-root-path: 3.1.0 + buffer: 6.0.3 + chalk: 4.1.2 + cli-highlight: 2.1.11 + date-fns: 2.30.0 + debug: 4.3.4(supports-color@8.1.1) + dotenv: 16.3.1 + glob: 8.1.0 + mkdirp: 2.1.6 + reflect-metadata: 0.1.14 + sha.js: 2.4.11 + sqlite3: 5.1.6 + ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + tslib: 2.6.2 + uuid: 9.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: true + + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: true + + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + dependencies: + multiformats: 9.9.0 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + requiresBuild: true + dependencies: + unique-slug: 2.0.2 + optional: true + + /unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + requiresBuild: true + dependencies: + imurmurhash: 0.1.4 + optional: true + + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + requiresBuild: true + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.12 + which-typed-array: 1.1.13 + dev: true + + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /viem@1.16.6(typescript@5.3.3): + resolution: {integrity: sha512-jcWcFQ+xzIfDwexwPJRvCuCRJKEkK9iHTStG7mpU5MmuSBpACs4nATBDyXNFtUiyYTFzLlVEwWkt68K0nCSImg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.9.4 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.9.8(typescript@5.3.3) + isows: 1.0.3(ws@8.13.0) + typescript: 5.3.3 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: true + + /viem@1.18.0(typescript@5.3.3): + resolution: {integrity: sha512-NeKi5RFj7fHdsnk5pojivHFLkTyBWyehxeSE/gSPTDJKCWnR9i+Ra0W++VwN5ghciEG55O8b4RdpYhzGmhnr7A==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.9.4 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 0.9.8(typescript@5.3.3) + isows: 1.0.3(ws@8.13.0) + typescript: 5.3.3 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: true + + /vite-node@1.0.0-beta.5(@types/node@20.10.4): + resolution: {integrity: sha512-iXm+GTJbR9R6V/bCM1+LQqIohL/tncZVNGIcTtzpYThBD8yiTkDPvEjy1Mf7KFACtG3qY/0VDMrkuMtqG/JFhg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@8.1.1) + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 5.0.7(@types/node@20.10.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite-node@1.0.1(@types/node@20.10.4): + resolution: {integrity: sha512-Y2Jnz4cr2azsOMMYuVPrQkp3KMnS/0WV8ezZjCy4hU7O5mUHCAVOnFmoEvs1nvix/4mYm74Len8bYRWZJMNP6g==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@8.1.1) + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 5.0.7(@types/node@20.10.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@5.0.7(@types/node@20.10.4): + resolution: {integrity: sha512-B4T4rJCDPihrQo2B+h1MbeGL/k/GMAHzhQ8S0LjQ142s6/+l3hHTT095ORvsshj4QCkoWu3Xtmob5mazvakaOw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.10.4 + esbuild: 0.19.8 + postcss: 8.4.32 + rollup: 4.7.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@1.0.0-beta.5(@types/node@20.10.4)(@vitest/ui@1.0.1): + resolution: {integrity: sha512-wmrGmXMKysR+JBvIwy0COgLrRSsZTR00dN+IpWBxGC4ACF5Mt/uYyrPLJZ0ixK4P3bxI16vd92JXMsuGnm9gQQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/node': 20.10.4 + '@vitest/expect': 1.0.0-beta.5 + '@vitest/runner': 1.0.0-beta.5 + '@vitest/snapshot': 1.0.0-beta.5 + '@vitest/spy': 1.0.0-beta.5 + '@vitest/ui': 1.0.1(vitest@1.0.1) + '@vitest/utils': 1.0.0-beta.5 + acorn-walk: 8.3.1 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4(supports-color@8.1.1) + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.6.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.8.1 + vite: 5.0.7(@types/node@20.10.4) + vite-node: 1.0.0-beta.5(@types/node@20.10.4) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vitest@1.0.1(@types/node@20.10.4)(@vitest/ui@1.0.1): + resolution: {integrity: sha512-MHsOj079S28hDsvdDvyD1pRj4dcS51EC5Vbe0xvOYX+WryP8soiK2dm8oULi+oA/8Xa/h6GoJEMTmcmBy5YM+Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': ^1.0.0 + '@vitest/ui': ^1.0.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/node': 20.10.4 + '@vitest/expect': 1.0.1 + '@vitest/runner': 1.0.1 + '@vitest/snapshot': 1.0.1 + '@vitest/spy': 1.0.1 + '@vitest/ui': 1.0.1(vitest@1.0.1) + '@vitest/utils': 1.0.1 + acorn-walk: 8.3.1 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4(supports-color@8.1.1) + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.6.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.8.1 + vite: 5.0.7(@types/node@20.10.4) + vite-node: 1.0.1(@types/node@20.10.4) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + dependencies: + xml-name-validator: 5.0.0 + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + + /web3-core@4.3.2: + resolution: {integrity: sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-errors: 1.1.4 + web3-eth-accounts: 4.1.0 + web3-eth-iban: 4.0.7 + web3-providers-http: 4.1.0 + web3-providers-ws: 4.0.7 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + optionalDependencies: + web3-providers-ipc: 4.0.7 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-errors@1.1.4: + resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-types: 1.3.1 + dev: true + + /web3-eth-abi@4.1.4(typescript@5.3.3): + resolution: {integrity: sha512-YLOBVVxxxLYKXjaiwZjEWYEnkMmmrm0nswZsvzSsINy/UgbWbzfoiZU+zn4YNWIEhORhx1p37iS3u/dP6VyC2w==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + abitype: 0.7.1(typescript@5.3.3) + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + transitivePeerDependencies: + - typescript + - zod + dev: true + + /web3-eth-accounts@4.1.0: + resolution: {integrity: sha512-UFtAsOANsvihTQ6SSvOKguupmQkResyR9M9JNuOxYpKh7+3W+sTnbLXw2UbOSYIsKlc1mpqqW9bVr1SjqHDpUQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + crc-32: 1.2.2 + ethereum-cryptography: 2.1.2 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + dev: true + + /web3-eth-contract@4.1.4(typescript@5.3.3): + resolution: {integrity: sha512-tJ4z6QLgtu8EQu2sXnLA7g427oxmngnbAUh+9kJKbP6Yep/oe+z79PqJv7H3MwqwUNW9T+/FeB2PnSQSyxz6ig==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth: 4.3.1(typescript@5.3.3) + web3-eth-abi: 4.1.4(typescript@5.3.3) + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth-ens@4.0.8(typescript@5.3.3): + resolution: {integrity: sha512-nj0JfeD45BbzVJcVYpUJnSo8iwDcY9CQ7CZhhIVVOFjvpMAPw0zEwjTvZEIQyCW61OoDG9xcBzwxe2tZoYhMRw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.0 + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth: 4.3.1(typescript@5.3.3) + web3-eth-contract: 4.1.4(typescript@5.3.3) + web3-net: 4.0.7 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth-iban@4.0.7: + resolution: {integrity: sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + dev: true + + /web3-eth-personal@4.0.8(typescript@5.3.3): + resolution: {integrity: sha512-sXeyLKJ7ddQdMxz1BZkAwImjqh7OmKxhXoBNF3isDmD4QDpMIwv/t237S3q4Z0sZQamPa/pHebJRWVuvP8jZdw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-eth: 4.3.1(typescript@5.3.3) + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth@4.3.1(typescript@5.3.3): + resolution: {integrity: sha512-zJir3GOXooHQT85JB8SrufE+Voo5TtXdjhf1D8IGXmxM8MrhI8AT+Pgt4siBTupJcu5hF17iGmTP/Nj2XnaibQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + setimmediate: 1.0.5 + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth-abi: 4.1.4(typescript@5.3.3) + web3-eth-accounts: 4.1.0 + web3-net: 4.0.7 + web3-providers-ws: 4.0.7 + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-net@4.0.7: + resolution: {integrity: sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-providers-http@4.1.0: + resolution: {integrity: sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + cross-fetch: 4.0.0 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + transitivePeerDependencies: + - encoding + dev: true + + /web3-providers-ipc@4.0.7: + resolution: {integrity: sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==} + engines: {node: '>=14', npm: '>=6.12.0'} + requiresBuild: true + dependencies: + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + dev: true + optional: true + + /web3-providers-ws@4.0.7: + resolution: {integrity: sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@types/ws': 8.5.3 + isomorphic-ws: 5.0.0(ws@8.15.1) + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /web3-rpc-methods@1.1.4: + resolution: {integrity: sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-types: 1.3.1 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-types@1.3.1: + resolution: {integrity: sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dev: true + + /web3-utils@4.1.0: + resolution: {integrity: sha512-+VJWR6FtCsgwuJr5tvSvQlSEG06586df8h2CxGc9tcNtIDyJKNkSDDWJkdNPvyDhhXFzQYFh8QOGymD1CIP6fw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + ethereum-cryptography: 2.1.2 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-validator: 2.0.3 + dev: true + + /web3-validator@2.0.3: + resolution: {integrity: sha512-fJbAQh+9LSNWy+l5Ze6HABreml8fra98o5+vS073T35jUcLbRZ0IOjF/ZPJhJNbJDt+jP1vseZsc3z3uX9mxxQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + ethereum-cryptography: 2.1.2 + util: 0.12.5 + web3-errors: 1.1.4 + web3-types: 1.3.1 + zod: 3.22.4 + dev: true + + /web3@4.2.1(typescript@5.3.3): + resolution: {integrity: sha512-zSB+Ds1lSMu/IhAX0xKhiFI7ZA1BQ6y2WOqFE9ikqPjaMkpOEBBkl61nzWfLJRoerTB1ohEXAP20jLDXcFd4hQ==} + engines: {node: '>=14.0.0', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth: 4.3.1(typescript@5.3.3) + web3-eth-abi: 4.1.4(typescript@5.3.3) + web3-eth-accounts: 4.1.0 + web3-eth-contract: 4.1.4(typescript@5.3.3) + web3-eth-ens: 4.0.8(typescript@5.3.3) + web3-eth-iban: 4.0.7 + web3-eth-personal: 4.0.8(typescript@5.3.3) + web3-net: 4.0.7 + web3-providers-http: 4.1.0 + web3-providers-ws: 4.0.7 + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.0 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: true + + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + dependencies: + iconv-lite: 0.6.3 + dev: true + + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + dev: true + + /whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + + /wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + + /workerpool@6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + dev: true + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + requiresBuild: true + + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws@8.15.1: + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + dev: true + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@2.3.3: + resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} + engines: {node: '>= 14'} + dev: true + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: true diff --git a/integration-tests/scripts/build-battery-station-spec.sh b/integration-tests/scripts/build-battery-station-spec.sh new file mode 100755 index 000000000..81f1401b8 --- /dev/null +++ b/integration-tests/scripts/build-battery-station-spec.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Exit on any error +set -e + +# Always run the commands from the "integration-tests" dir +cd $(dirname $0)/.. + +mkdir -p specs +../target/release/zeitgeist build-spec --chain=dev --raw > specs/battery-station-parachain-2101.json \ No newline at end of file diff --git a/integration-tests/scripts/build-node-configuration.sh b/integration-tests/scripts/build-node-configuration.sh new file mode 100755 index 000000000..8cc34b90a --- /dev/null +++ b/integration-tests/scripts/build-node-configuration.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +export PROFILE="${PROFILE:-release}" + +export FEATURES="${FEATURES:-parachain}" \ No newline at end of file diff --git a/integration-tests/scripts/build-node.sh b/integration-tests/scripts/build-node.sh new file mode 100755 index 000000000..0863aebff --- /dev/null +++ b/integration-tests/scripts/build-node.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +source ./scripts/build-node-configuration.sh + +pushd .. + +if [ -z "$CI" ]; then + cargo build --profile=$PROFILE --features=$FEATURES --bin=zeitgeist +fi + +popd \ No newline at end of file diff --git a/integration-tests/scripts/build-zeitgeist-spec.sh b/integration-tests/scripts/build-zeitgeist-spec.sh new file mode 100755 index 000000000..bf0379c86 --- /dev/null +++ b/integration-tests/scripts/build-zeitgeist-spec.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Exit on any error +set -e + +# Always run the commands from the "integration-tests" dir +cd $(dirname $0)/.. + +mkdir -p specs +../target/release/zeitgeist build-spec --chain=zeitgeist --raw > specs/zeitgeist-parachain-2092.json \ No newline at end of file diff --git a/scripts/tests/spawn_network.sh b/integration-tests/scripts/deploy-zombienet.sh similarity index 84% rename from scripts/tests/spawn_network.sh rename to integration-tests/scripts/deploy-zombienet.sh index 1382417aa..2c9c2121d 100755 --- a/scripts/tests/spawn_network.sh +++ b/integration-tests/scripts/deploy-zombienet.sh @@ -1,14 +1,12 @@ #!/usr/bin/env bash -if [ ! -d "./scripts/tests" ]; then - echo "Please execute this script from the root of the Zeitgeist project folder" +if [ "$(dirname "$0")" != "./scripts" ]; then + echo "Please execute this script from the integration-tests directory." exit 1 fi; -cargo build --features parachain - export ADDITIONAL_ZOMBIECONFIG="${ADDITIONAL_ZOMBIECONFIG:-}" -export ZOMBIENET_CONFIG_FILE="${ZOMBIENET_CONFIG_FILE:-"./integration-tests/zombienet/produce-blocks.toml"}" +export ZOMBIENET_CONFIG_FILE="${ZOMBIENET_CONFIG_FILE:-"./zombienet/produce-blocks.toml"}" export ZOMBIENET_DSL_FILE="${ZOMBIENET_CONFIG_FILE%.toml}.zndsl" # Define destination path @@ -16,6 +14,7 @@ ZOMBIENET_BINARY="./tmp/zombienet" # Default values for flags RUN_TESTS=0 # This flag will be set to 1 if the -t or --test option is present +BUILD=true # This flag will be set to false if the --no-build option is present # Parse command-line arguments while [[ $# -gt 0 ]]; do @@ -26,6 +25,10 @@ while [[ $# -gt 0 ]]; do RUN_TESTS=1 shift # Remove argument name from processing ;; + --no-build) + BUILD=false + shift # Remove argument name from processing + ;; *) # Unknown option shift # Remove generic argument from processing @@ -33,6 +36,9 @@ while [[ $# -gt 0 ]]; do esac done +if $BUILD ; then + ./scripts/build-node.sh +fi function download_zombienet { # Get the appropriate download link based on the OS @@ -92,4 +98,4 @@ if [[ $RUN_TESTS -eq 1 ]]; then $ZOMBIENET_BINARY test --provider native $ZOMBIENET_DSL_FILE $ADDITIONAL_ZOMBIECONFIG else $ZOMBIENET_BINARY spawn --provider native $ZOMBIENET_CONFIG_FILE $ADDITIONAL_ZOMBIECONFIG -fi +fi \ No newline at end of file diff --git a/integration-tests/scripts/download-polkadot.sh b/integration-tests/scripts/download-polkadot.sh new file mode 100755 index 000000000..88b4b6bc1 --- /dev/null +++ b/integration-tests/scripts/download-polkadot.sh @@ -0,0 +1,67 @@ +# Copyright (C) Moondance Labs Ltd. +# Copyright 2022-2024 Forecasting Technologies LTD. +# +# This file is part of Zeitgeist. +# +# Zeitgeist is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at +# your option) any later version. +# +# Zeitgeist is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Zeitgeist. If not, see . + +#!/bin/bash + +# Exit on any error +set -e + +# Check if the operating system is macOS +if [[ $(uname) == "Darwin" ]]; then + echo "This script is not intended for MacOS, since the prebuild binaries are meant to be executed on Linux. But keep in mind you need to have 'polkadot', 'polkadot-execute-worker', 'polkadot-prepare-worker' in any case! So compile those yourself! Exiting..." + exit 1 +fi + +# TODO: Use following line instead of the one above once Zeitgeist uses >=polkadot-v1.1.0 +# Note: Version 1.4.0 of relaychain didn't allow the parachain to produce blocks +# branch=$(egrep -o '/polkadot.*#([^\"]*)' $(dirname $0)/../../Cargo.lock | head -1 | sed 's/.*release-//#') +# polkadot_release=$(echo $branch | sed 's/#.*//' | sed 's/\/polkadot-sdk?branch=polkadot-v//' | sed 's/-.*//') +polkadot_release="1.1.0" + +# Always run the commands from the "integration-tests" dir +cd $(dirname $0)/.. + +if [[ -f tmp/polkadot ]]; then + POLKADOT_VERSION=$(tmp/polkadot --version) + if [[ $POLKADOT_VERSION == *$polkadot_release* ]]; then + echo "Polkadot binary has correct version" + exit 0 + else + echo "Updating polkadot binary..." + + pnpm moonwall download polkadot $polkadot_release tmp + chmod +x tmp/polkadot + + pnpm moonwall download polkadot-execute-worker $polkadot_release tmp + chmod +x tmp/polkadot-execute-worker + + pnpm moonwall download polkadot-prepare-worker $polkadot_release tmp + chmod +x tmp/polkadot-prepare-worker + + fi +else + echo "Polkadot binary not found, downloading..." + pnpm moonwall download polkadot $polkadot_release tmp + chmod +x tmp/polkadot + + pnpm moonwall download polkadot-execute-worker $polkadot_release tmp + chmod +x tmp/polkadot-execute-worker + + pnpm moonwall download polkadot-prepare-worker $polkadot_release tmp + chmod +x tmp/polkadot-prepare-worker +fi \ No newline at end of file diff --git a/integration-tests/tests/block.ts b/integration-tests/tests/block.ts deleted file mode 100644 index fe5f8efaf..000000000 --- a/integration-tests/tests/block.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { expect } from 'chai'; -import SDK from "@zeitgeistpm/sdk"; - -describe('Blocks', function() { - it('block number should not be zero', async function(done) { - this.timeout(5000); - - const sdk = await SDK.initialize("ws://127.0.0.1:9944"); - const blockHash = await sdk.api.rpc.chain.getFinalizedHead(); - const block = await sdk.api.rpc.chain.getBlock(blockHash); - expect(block.block.header.number).to.be.gt(0); - - setTimeout(done, 100); - }); -}); diff --git a/integration-tests/tests/common-tests.ts b/integration-tests/tests/common-tests.ts new file mode 100644 index 000000000..a7025b19e --- /dev/null +++ b/integration-tests/tests/common-tests.ts @@ -0,0 +1,195 @@ +// Copyright (C) Moondance Labs Ltd. + +import { expect, ChopsticksContext } from "@moonwall/cli"; +import { generateKeyringPair } from "@moonwall/util"; +import { ApiPromise, Keyring } from "@polkadot/api"; +import { AccountInfo, AccountData } from "@polkadot/types/interfaces"; +import WebSocket from "ws"; +import { Debugger } from "debug"; + +const MAX_BALANCE_TRANSFER_TRIES = 5; + +export async function canCreateBlocks( + context: ChopsticksContext, + providerName: string, + paraApi: ApiPromise +) { + const currentHeight = ( + await paraApi.rpc.chain.getBlock() + ).block.header.number.toNumber(); + await context.createBlock({ providerName: providerName, count: 2 }); + const newHeight = ( + await paraApi.rpc.chain.getBlock() + ).block.header.number.toNumber(); + expect(newHeight - currentHeight, "Block difference is not correct!").toBe(2); +} + +export async function canSendBalanceTransfer( + context: ChopsticksContext, + providerName: string, + paraApi: ApiPromise +) { + const randomAccount = generateKeyringPair("sr25519"); + const keyring = new Keyring({ type: "sr25519" }); + const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); + + let tries = 0; + const amount = BigInt("1000000000"); + const balanceBefore = ( + (await paraApi.query.system.account(randomAccount.address)) as AccountInfo + ).data.free.toBigInt(); + + /// It might happen that by accident we hit a session change + /// A block in which a session change occurs cannot hold any tx + /// Chopsticks does not have the notion of tx pool either, so we need to retry + /// Therefore we just retry at most MAX_BALANCE_TRANSFER_TRIES + while (tries < MAX_BALANCE_TRANSFER_TRIES) { + const tx = await paraApi.tx.balances.transfer( + randomAccount.address, + amount + ); + const txHash = tx.signAndSend(alice, { nonce: -1 }); + const result = await context.createBlock({ + providerName: providerName, + count: 1, + }); + + const block = await paraApi.rpc.chain.getBlock(result.result); + const includedTxHashes = block.block.extrinsics.map((x) => + x.hash.toString() + ); + if (includedTxHashes.includes(txHash.toString())) { + break; + } + tries++; + } + + // without this, the xcm transfer `canSendXcmTransfer` test below has a timeout + await context.createBlock({ providerName: providerName, count: 1 }); + + const balanceAfter = ( + (await paraApi.query.system.account(randomAccount.address)) as AccountInfo + ).data.free.toBigInt(); + expect(balanceAfter > balanceBefore, "Balance did not increase").toBeTruthy(); +} + +export async function canSendXcmTransfer( + context: ChopsticksContext, + log: Debugger, + senderProviderName: string, + senderParaApi: ApiPromise, + receiverParaApi: ApiPromise, + receiverParaId: number, + tokensIndex: number +) { + const keyring = new Keyring({ type: "sr25519" }); + const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); + const bob = keyring.addFromUri("//Bob", { name: "Bob default" }); + + const senderBalanceBefore = ( + (await senderParaApi.query.system.account(alice.address)) as AccountInfo + ).data.free.toBigInt(); + const receiverBalanceBefore = ( + (await receiverParaApi.query.tokens.accounts( + bob.address, + tokensIndex + )) as AccountData + ).free.toBigInt(); + + const ztg = { Ztg: null }; + const amount: bigint = BigInt("192913122185847181"); + const bobAccountId = senderParaApi + .createType("AccountId32", bob.address) + .toHex(); + const destination = { + V3: { + parents: 1, + interior: { + X2: [ + { Parachain: receiverParaId }, + { AccountId32: { id: bobAccountId, network: null } }, + ], + }, + }, + }; + const destWeightLimit = { Unlimited: null }; + + const xcmTransfer = senderParaApi.tx.xTokens.transfer( + ztg, + amount, + destination, + destWeightLimit + ); + + await xcmTransfer.signAndSend(alice, { nonce: -1 }); + + await context.createBlock({ + providerName: senderProviderName, + count: 1, + allowFailures: false, + }); + + const { partialFee, weight } = await xcmTransfer.paymentInfo(alice.address); + const transferFee: bigint = partialFee.toBigInt(); + const senderBalanceAfter = ( + (await senderParaApi.query.system.account(alice.address)) as AccountInfo + ).data.free.toBigInt(); + expect( + senderBalanceBefore - senderBalanceAfter, + "Unexpected balance diff" + ).toBe(amount + transferFee); + + // RpcError: 1: Block 0x... not found, if using this `await context.createBlock({ providerName: "ReceiverPara", count: 1 });` + // Reported Bug here https://github.com/Moonsong-Labs/moonwall/issues/343 + + // use a workaround for creating a block + const newBlockPromise = new Promise((resolve, reject) => { + // ws://127.0.0.1:8001 represents the receiver chain endpoint + const ws = new WebSocket("ws://127.0.0.1:8001"); + + ws.on("open", function open() { + const message = { + jsonrpc: "2.0", + id: 1, + method: "dev_newBlock", + params: [{ count: 1 }], + }; + + ws.send(JSON.stringify(message)); + }); + + ws.on("message", async function message(data) { + const dataObj = JSON.parse(data.toString()); + log("Received message:", dataObj); + resolve(dataObj.result); + }); + + ws.on("error", function error(error) { + log("Error:", error.toString()); + reject(error); + }); + }); + + await newBlockPromise; + const receiverBalanceAfter: bigint = ( + (await receiverParaApi.query.tokens.accounts( + bob.address, + tokensIndex + )) as AccountData + ).free.toBigInt(); + expect( + receiverBalanceAfter > receiverBalanceBefore, + "Balance did not increase" + ).toBeTruthy(); + const xcmFee: bigint = + receiverBalanceBefore + amount - transferFee - receiverBalanceAfter; + // between 0.02 ZTG and 0.10 ZTG XCM fee + const approxXcmFeeLow = 200000000; + const approxXcmFeeHigh = 1000000000; + expect(xcmFee).toBeGreaterThanOrEqual(approxXcmFeeLow); + expect(xcmFee).toBeLessThanOrEqual(approxXcmFeeHigh); + expect( + receiverBalanceAfter - receiverBalanceBefore, + "Unexpected xcm transfer balance diff" + ).toBe(amount - transferFee - xcmFee); +} diff --git a/integration-tests/tests/rt-upgrade-battery-station-chopsticks/test-battery-station-chopsticks-runtime-upgrade.ts b/integration-tests/tests/rt-upgrade-battery-station-chopsticks/test-battery-station-chopsticks-runtime-upgrade.ts new file mode 100644 index 000000000..7385abf26 --- /dev/null +++ b/integration-tests/tests/rt-upgrade-battery-station-chopsticks/test-battery-station-chopsticks-runtime-upgrade.ts @@ -0,0 +1,133 @@ +// Copyright (C) Moondance Labs Ltd. +// Copyright 2022-2024 Forecasting Technologies LTD. +// +// This file is part of Zeitgeist. +// +// Zeitgeist is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the +// Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// Zeitgeist is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Zeitgeist. If not, see . + +import { + MoonwallContext, + beforeAll, + describeSuite, + expect, +} from "@moonwall/cli"; +import { KeyringPair } from "@moonwall/util"; +import { ApiPromise, Keyring } from "@polkadot/api"; +import { + canCreateBlocks, + canSendBalanceTransfer, + canSendXcmTransfer, +} from "tests/common-tests"; +import { RuntimeVersion } from "@polkadot/types/interfaces"; + +const ZEITGEIST_TOKENS_INDEX = 12; +const BASILISK_PARA_ID = 2090; +describeSuite({ + id: "CAN", + title: "Chopsticks Battery Station Post-Upgrade Tests", + foundationMethods: "chopsticks", + testCases: function ({ it, context, log }) { + let batteryStationParaApi: ApiPromise; + let relayApi: ApiPromise; + let basiliskParaApi: ApiPromise; + let alice: KeyringPair; + + beforeAll(async () => { + const keyring = new Keyring({ type: "sr25519" }); + alice = keyring.addFromUri("//Alice", { name: "Alice default" }); + batteryStationParaApi = context.polkadotJs("BatteryStationPara"); + relayApi = context.polkadotJs("RococoRelay"); + basiliskParaApi = context.polkadotJs("BasiliskPara"); + + const paraZeitgeistNetwork = ( + batteryStationParaApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(paraZeitgeistNetwork, "Para API incorrect").to.contain( + "zeitgeist" + ); + + const relayNetwork = ( + relayApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); + + const paraBasiliskNetwork = ( + basiliskParaApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(paraBasiliskNetwork, "Para API incorrect").to.contain("basilisk"); + + const rtBefore = ( + batteryStationParaApi.consts.system.version as RuntimeVersion + ).specVersion.toNumber(); + log(`About to upgrade to runtime at:`); + log(MoonwallContext.getContext().rtUpgradePath); + + await context.upgradeRuntime(); + + const rtafter = ( + batteryStationParaApi.consts.system.version as RuntimeVersion + ).specVersion.toNumber(); + log( + `RT upgrade has increased specVersion from ${rtBefore} to ${rtafter}` + ); + }, 60000); + + it({ + id: "T1", + timeout: 60000, + title: "Can create new blocks", + test: async () => { + await canCreateBlocks( + context, + "BatteryStationPara", + batteryStationParaApi + ); + }, + }); + + it({ + id: "T2", + timeout: 60000, + title: "Can send balance transfers", + test: async () => { + await canSendBalanceTransfer( + context, + "BatteryStationPara", + batteryStationParaApi + ); + }, + }); + + /* + Currently not working, bug tracked here https://github.com/galacticcouncil/HydraDX-node/issues/725 + + it({ + id: "T3", + timeout: 60000, + title: "Can send ZBS to Basilisk", + test: async () => { + await canSendXcmTransfer( + context, + log, + "BatteryStationPara", + batteryStationParaApi, + basiliskParaApi, + BASILISK_PARA_ID, + ZEITGEIST_TOKENS_INDEX + ); + }, + }); + */ + }, +}); diff --git a/integration-tests/tests/rt-upgrade-zeitgeist-chopsticks/test-zeitgeist-chopsticks-runtime-upgrade.ts b/integration-tests/tests/rt-upgrade-zeitgeist-chopsticks/test-zeitgeist-chopsticks-runtime-upgrade.ts new file mode 100644 index 000000000..3f2d9df10 --- /dev/null +++ b/integration-tests/tests/rt-upgrade-zeitgeist-chopsticks/test-zeitgeist-chopsticks-runtime-upgrade.ts @@ -0,0 +1,125 @@ +// Copyright (C) Moondance Labs Ltd. +// Copyright 2022-2024 Forecasting Technologies LTD. +// +// This file is part of Zeitgeist. +// +// Zeitgeist is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the +// Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// Zeitgeist is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Zeitgeist. If not, see . + +import { + MoonwallContext, + beforeAll, + describeSuite, + expect, +} from "@moonwall/cli"; +import { KeyringPair } from "@moonwall/util"; +import { ApiPromise, Keyring } from "@polkadot/api"; +import { + canCreateBlocks, + canSendBalanceTransfer, + canSendXcmTransfer, +} from "tests/common-tests"; +import { RuntimeVersion } from "@polkadot/types/interfaces"; + +const ZEITGEIST_TOKENS_INDEX = 12; +const HYDRADX_PARA_ID = 2034; +describeSuite({ + id: "CAN", + title: "Chopsticks Zeitgeist Post-Upgrade Tests", + foundationMethods: "chopsticks", + testCases: function ({ it, context, log }) { + let zeitgeistParaApi: ApiPromise; + let relayApi: ApiPromise; + let hydradxParaApi: ApiPromise; + let alice: KeyringPair; + + beforeAll(async () => { + const keyring = new Keyring({ type: "sr25519" }); + alice = keyring.addFromUri("//Alice", { name: "Alice default" }); + zeitgeistParaApi = context.polkadotJs("ZeitgeistPara"); + relayApi = context.polkadotJs("PolkadotRelay"); + hydradxParaApi = context.polkadotJs("HydraDXPara"); + + const paraZeitgeistNetwork = ( + zeitgeistParaApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(paraZeitgeistNetwork, "Para API incorrect").to.contain( + "zeitgeist" + ); + + const relayNetwork = ( + relayApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(relayNetwork, "Relay API incorrect").to.contain("polkadot"); + + const paraHydraDXNetwork = ( + hydradxParaApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(paraHydraDXNetwork, "Para API incorrect").to.contain("hydradx"); + + const rtBefore = ( + zeitgeistParaApi.consts.system.version as RuntimeVersion + ).specVersion.toNumber(); + log(`About to upgrade to runtime at:`); + log(MoonwallContext.getContext().rtUpgradePath); + + await context.upgradeRuntime(); + + const rtafter = ( + zeitgeistParaApi.consts.system.version as RuntimeVersion + ).specVersion.toNumber(); + log( + `RT upgrade has increased specVersion from ${rtBefore} to ${rtafter}` + ); + }, 60000); + + it({ + id: "T1", + timeout: 60000, + title: "Can create new blocks", + test: async () => { + await canCreateBlocks(context, "ZeitgeistPara", zeitgeistParaApi); + }, + }); + + it({ + id: "T2", + timeout: 60000, + title: "Can send balance transfers", + test: async () => { + await canSendBalanceTransfer( + context, + "ZeitgeistPara", + zeitgeistParaApi + ); + }, + }); + + it({ + id: "T3", + timeout: 60000, + title: "Can send ZTG to HydraDX", + test: async () => { + await canSendXcmTransfer( + context, + log, + "ZeitgeistPara", + zeitgeistParaApi, + hydradxParaApi, + HYDRADX_PARA_ID, + ZEITGEIST_TOKENS_INDEX + ); + }, + }); + }, +}); diff --git a/integration-tests/tests/rt-upgrade-zombienet/test-zombienet-runtime-upgrade.ts b/integration-tests/tests/rt-upgrade-zombienet/test-zombienet-runtime-upgrade.ts new file mode 100644 index 000000000..b1b7d19f5 --- /dev/null +++ b/integration-tests/tests/rt-upgrade-zombienet/test-zombienet-runtime-upgrade.ts @@ -0,0 +1,125 @@ +// Copyright (C) Moondance Labs Ltd. +// Copyright 2022-2024 Forecasting Technologies LTD. +// +// This file is part of Zeitgeist. +// +// Zeitgeist is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the +// Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// Zeitgeist is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Zeitgeist. If not, see . + +import { + MoonwallContext, + beforeAll, + describeSuite, + expect, +} from "@moonwall/cli"; +import { KeyringPair } from "@moonwall/util"; +import { ApiPromise, Keyring } from "@polkadot/api"; +import fs from "node:fs"; +import { RuntimeVersion } from "@polkadot/types/interfaces"; + +describeSuite({ + id: "R01", + title: "Zombie Zeitgeist Upgrade Test", + foundationMethods: "zombie", + testCases: function ({ it, context, log }) { + let paraApi: ApiPromise; + let relayApi: ApiPromise; + let alice: KeyringPair; + + beforeAll(async () => { + const keyring = new Keyring({ type: "sr25519" }); + alice = keyring.addFromUri("//Alice", { name: "Alice default" }); + paraApi = context.polkadotJs("parachain"); + relayApi = context.polkadotJs("Relay"); + + const relayNetwork = ( + relayApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); + + const paraNetwork = ( + paraApi.consts.system.version as RuntimeVersion + ).specName.toString(); + expect(paraNetwork, "Para API incorrect").to.contain("zeitgeist"); + + const currentBlock = ( + await paraApi.rpc.chain.getBlock() + ).block.header.number.toNumber(); + expect(currentBlock, "Parachain not producing blocks").to.be.greaterThan( + 0 + ); + }, 120000); + + it({ + id: "T01", + title: "Blocks are being produced on parachain", + test: async function () { + const blockNum = ( + await paraApi.rpc.chain.getBlock() + ).block.header.number.toNumber(); + expect(blockNum).to.be.greaterThan(0); + }, + }); + + it({ + id: "T02", + title: "Chain can be upgraded", + timeout: 600000, + test: async function () { + const blockNumberBefore = ( + await paraApi.rpc.chain.getBlock() + ).block.header.number.toNumber(); + const currentCode = await paraApi.rpc.state.getStorage(":code"); + const codeString = currentCode.toString(); + + const moonwallContext = MoonwallContext.getContext(); + log( + "Moonwall Context providers: " + + moonwallContext.providers.map((p) => p.name).join(", ") + ); + const wasm = fs.readFileSync(moonwallContext.rtUpgradePath); + const rtHex = `0x${wasm.toString("hex")}`; + + if (rtHex === codeString) { + log("Runtime already upgraded, skipping test"); + return; + } else { + log("Runtime not upgraded, proceeding with test"); + log( + "Current runtime hash: " + + rtHex.slice(0, 10) + + "..." + + rtHex.slice(-10) + ); + log( + "New runtime hash: " + + codeString.slice(0, 10) + + "..." + + codeString.slice(-10) + ); + } + + await context.upgradeRuntime({ from: alice, logger: log }); + await context.waitBlock(2); + const blockNumberAfter = ( + await paraApi.rpc.chain.getBlock() + ).block.header.number.toNumber(); + log(`Before: #${blockNumberBefore}, After: #${blockNumberAfter}`); + expect( + blockNumberAfter, + "Block number did not increase" + ).to.be.greaterThan(blockNumberBefore); + }, + }); + }, +}); diff --git a/integration-tests/tsconfig.json b/integration-tests/tsconfig.json index 6f527790e..3e25c101c 100644 --- a/integration-tests/tsconfig.json +++ b/integration-tests/tsconfig.json @@ -1,7 +1,18 @@ { "compilerOptions": { - "target": "ES2020", - "moduleResolution": "node", - "esModuleInterop": true + "module": "ESNext", + "target": "ESNext", + "baseUrl": "./", + "moduleResolution": "Bundler", + "importHelpers": true, + "skipLibCheck": true, + "removeComments": true, + "noEmit": true, + "preserveConstEnums": true, + "sourceMap": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "allowImportingTsExtensions": true, } -} +} \ No newline at end of file diff --git a/integration-tests/zombienet/0001-balance-transfer.ts b/integration-tests/zombienet/0001-balance-transfer.ts new file mode 100644 index 000000000..0d0dce289 --- /dev/null +++ b/integration-tests/zombienet/0001-balance-transfer.ts @@ -0,0 +1,83 @@ +// Copyright 2022-2024 Forecasting Technologies LTD. +// +// This file is part of Zeitgeist. +// +// Zeitgeist is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the +// Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// Zeitgeist is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Zeitgeist. If not, see . + +import { ApiPromise, WsProvider } from '@polkadot/api'; +import { Keyring } from '@polkadot/keyring'; +import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { AccountInfo } from '@polkadot/types/interfaces'; + +// Addresses for Alice and Bob on the dev chain +const ALICE = '//Alice'; +const BOB = '//Bob'; + +export const run = async (nodeName: string, networkInfo: any, args: any) => { + const provider = new WsProvider('ws://127.0.0.1:9966'); + const api = await ApiPromise.create({ provider }); + + // Wait for the crypto library to be ready + await cryptoWaitReady(); + + const keyring = new Keyring({ type: 'sr25519' }); + const alice = keyring.addFromUri(ALICE); + const bob = keyring.addFromUri(BOB); + + const aliceFreeBalanceBefore = (await api.query.system.account(alice.address)) as unknown as AccountInfo; + const bobFreeBalanceBefore = (await api.query.system.account(bob.address)) as unknown as AccountInfo; + + console.log(`Alice has ${aliceFreeBalanceBefore.data.free} before transfer.`); + console.log(`Bob has ${bobFreeBalanceBefore.data.free} before transfer.`); + + const transfer_amount = "42000000000000000"; + + // Create a transfer transaction from Alice to Bob + const transfer = api.tx.balances.transfer(bob.address, transfer_amount); + + // Get weight info + const { partialFee, weight } = await transfer.paymentInfo(alice.address); + + console.log(`Transaction weight: ${weight}`); + console.log(`Transaction fee: ${partialFee.toString()}`); + + // Wait for the transaction to be finalized + await new Promise((resolve, reject) => { + transfer.signAndSend(alice, ({ status }) => { + if (status.isInBlock || status.isFinalized) { + resolve(status); + } + }).catch(reject); + }); + + console.log(`Transfer sent`); + + const aliceFreeBalanceAfter = (await api.query.system.account(alice.address)) as unknown as AccountInfo; + const bobFreeBalanceAfter = (await api.query.system.account(bob.address)) as unknown as AccountInfo; + + const aliceLostAmount = aliceFreeBalanceBefore.data.free.sub(aliceFreeBalanceAfter.data.free); + const bobGainedAmount = bobFreeBalanceAfter.data.free.sub(bobFreeBalanceBefore.data.free); + + console.log(`Alice lost ${aliceLostAmount.toString()} tokens.`); + console.log(`Bob gained ${bobGainedAmount.toString()} tokens.`); + + console.log(`Alice has ${aliceFreeBalanceAfter.data.free} after transfer.`); + console.log(`Bob has ${bobFreeBalanceAfter.data.free} after transfer.`); + + const testPassed = transfer_amount == bobGainedAmount.toString(); + console.log(`Test passed: ${testPassed}`); + await api.disconnect(); + + return testPassed ? 1 : 0; +} \ No newline at end of file diff --git a/integration-tests/zombienet/produce-blocks.toml b/integration-tests/zombienet/produce-blocks.toml index b8d07c6ff..eaa1d2551 100644 --- a/integration-tests/zombienet/produce-blocks.toml +++ b/integration-tests/zombienet/produce-blocks.toml @@ -18,6 +18,6 @@ id = 2101 [parachains.collator] args = ["-lparachain=debug"] -command = "./target/debug/zeitgeist" +command = "../target/release/zeitgeist" name = "alice" -ws_port = 9944 +ws_port = 9966 diff --git a/integration-tests/zombienet/produce-blocks.zndsl b/integration-tests/zombienet/produce-blocks.zndsl index fff7e520b..72f7db0ba 100644 --- a/integration-tests/zombienet/produce-blocks.zndsl +++ b/integration-tests/zombienet/produce-blocks.zndsl @@ -1,29 +1,58 @@ +# Copyright (C) Parity Technologies (UK) Ltd. +# Copyright 2022-2024 Forecasting Technologies LTD. +# +# This file is part of Zeitgeist. +# +# Zeitgeist is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at +# your option) any later version. +# +# Zeitgeist is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Zeitgeist. If not, see . + Description: Produce blocks test Network: ./produce-blocks.toml Creds: config # Tracing -# alice: trace with traceID 94c1501a78a0d83c498cc92deec264d9 contains ["answer-chunk-request", "answer-chunk-request"] +# bob: trace with traceID 94c1501a78a0d83c498cc92deec264d9 contains ["answer-chunk-request", "answer-chunk-request"] # metrics alice: reports node_roles is 4 alice: reports sub_libp2p_is_major_syncing is 0 -# histogram -alice: reports histogram polkadot_pvf_execution_time has at least 2 samples in buckets ["0.1", "0.25", "0.5", "+Inf"] within 100 seconds - -# logs +# validator logs bob: log line matches glob "*rted #1*" within 10 seconds bob: log line matches "Imported #[0-9]+" within 10 seconds +bob: log line contains regex "best: #2" within 30 seconds +bob: log line matches "best: #[1-9]+" within 10 seconds + +bob: is up +charlie: is up # system events -bob: system event contains "A candidate was included" within 20 seconds -alice: system event matches glob "*was backed*" within 10 seconds +# alice: system event matches glob "*was backed*" within 10 seconds + +## test the block height - (or minus) finalised block +bob: reports block height minus finalised block is lower than 10 within 60 seconds +bob: reports block height - finalised block is lower than 10 within 60 seconds #parachain tests -alice: parachain 2101 is registered within 225 seconds -alice: parachain 2101 block height is at least 10 within 200 seconds +bob: parachain 2101 is registered within 80 seconds -## test the block height - (or minus) finalised block -alice: reports block height minus finalised block is lower than 10 within 20 seconds -alice: reports block height - finalised block is lower than 10 within 20 seconds \ No newline at end of file +alice: is up +alice: log line contains regex "Zeitgeist Parachain.*best: #1" within 100 seconds +alice: log line contains regex "Zeitgeist Parachain.*finalized #[1-9]+" within 120 seconds + +alice: ts-script ./0001-balance-transfer.ts return is equal to 1 within 200 seconds + +bob: parachain 2101 block height is at least 10 within 200 seconds + +alice: reports block height minus finalised block is lower than 10 within 200 seconds +alice: reports block height - finalised block is lower than 10 within 200 seconds \ No newline at end of file diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 86492935c..1f4e6ea2a 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -2,4 +2,4 @@ authors = ["Zeitgeist PM "] edition = "2021" name = "zeitgeist-macros" -version = "0.4.3" +version = "0.5.0" diff --git a/node/Cargo.toml b/node/Cargo.toml index 59ef25dd7..37f29b324 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -187,7 +187,7 @@ description = "An evolving blockchain for prediction markets and futarchy." edition = "2021" homepage = "https://zeitgeist.pm" name = "zeitgeist-node" -version = "0.4.3" +version = "0.5.0" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/node/src/cli.rs b/node/src/cli.rs index 68d27a898..31c9dffda 100644 --- a/node/src/cli.rs +++ b/node/src/cli.rs @@ -1,4 +1,4 @@ -// Copyright 2023 Forecasting Technologies LTD. +// Copyright 2023-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // Copyright 2017-2020 Parity Technologies (UK) Ltd. // @@ -38,8 +38,8 @@ use sp_runtime::{ }; use sp_storage::{ChildInfo, StorageData, StorageKey}; use std::sync::Arc; -pub use zeitgeist_primitives::types::{AccountId, Balance, BlockNumber, Hash, Index}; use zeitgeist_primitives::types::{Block, Header}; +pub use zeitgeist_primitives::types::{BlockNumber, Hash}; #[cfg(feature = "with-battery-station-runtime")] use { super::service::BatteryStationExecutor, diff --git a/node/src/service.rs b/node/src/service.rs index 85797c8fb..dd9f57b4b 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -30,9 +30,7 @@ use sc_service::{ error::Error as ServiceError, ChainSpec, Configuration, PartialComponents, TaskManager, }; #[cfg(feature = "parachain")] -pub use service_parachain::{ - new_full, new_partial, FullBackend, FullClient, ParachainPartialComponents, -}; +pub use service_parachain::{new_full, new_partial, FullBackend, FullClient}; #[cfg(not(feature = "parachain"))] pub use service_standalone::{new_full, new_partial, FullBackend, FullClient}; use sp_api::ConstructRuntimeApi; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..ea2e70ab0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "zeitgeist", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 6befd4ee1..07ded556b 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -40,4 +40,4 @@ std = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zeitgeist-primitives" -version = "0.4.3" +version = "0.5.0" diff --git a/primitives/src/constants/mock.rs b/primitives/src/constants/mock.rs index 651b02ec4..5b2ab65c2 100644 --- a/primitives/src/constants/mock.rs +++ b/primitives/src/constants/mock.rs @@ -137,8 +137,6 @@ parameter_types! { pub const ExitFee: Balance = 3 * BASE / 1000; // 0.3% pub const MinAssets: u16 = 2; pub const MaxAssets: u16 = MaxCategories::get() + 1; - pub const MaxInRatio: Balance = (BASE / 3) + 1; - pub const MaxOutRatio: Balance = (BASE / 3) + 1; pub const MaxSwapFee: Balance = BASE / 10; // 10% pub const MaxTotalWeight: Balance = 50 * BASE; pub const MaxWeight: Balance = 50 * BASE; @@ -177,20 +175,12 @@ parameter_types! { pub const GetNativeCurrencyId: Assets = Asset::Ztg; } -// Will be removed once asset-system is completely integerated parameter_type_with_key! { - pub ExistentialDeposits: |currency_id: Assets| -> Balance { - match currency_id { - Asset::Ztg => ExistentialDeposit::get(), - _ => 10 - } - }; + pub ExistentialDeposits: |_currency_id: Currencies| -> Balance {2}; } parameter_type_with_key! { - pub ExistentialDepositsNew: |_currency_id: Currencies| -> Balance { - 2 - }; + pub ExistentialDepositsAssets: |_asset_id: Assets| -> Balance {2}; } // System diff --git a/primitives/src/math/checked_ops_res.rs b/primitives/src/math/checked_ops_res.rs index 02e9ec3de..1265a6b2b 100644 --- a/primitives/src/math/checked_ops_res.rs +++ b/primitives/src/math/checked_ops_res.rs @@ -1,4 +1,4 @@ -// Copyright 2023 Forecasting Technologies LTD. +// Copyright 2023-2024 Forecasting Technologies LTD. // // This file is part of Zeitgeist. // @@ -18,7 +18,7 @@ use frame_support::dispatch::DispatchError; use num_traits::{checked_pow, One}; use sp_arithmetic::{ - traits::{CheckedAdd, CheckedDiv, CheckedMul, CheckedSub}, + traits::{CheckedAdd, CheckedDiv, CheckedMul, CheckedRem, CheckedSub}, ArithmeticError, }; @@ -57,6 +57,13 @@ where fn checked_pow_res(&self, exp: usize) -> Result; } +pub trait CheckedRemRes +where + Self: Sized, +{ + fn checked_rem_res(&self, other: &Self) -> Result; +} + impl CheckedAddRes for T where T: CheckedAdd, @@ -106,3 +113,13 @@ where checked_pow(*self, exp).ok_or(DispatchError::Arithmetic(ArithmeticError::Overflow)) } } + +impl CheckedRemRes for T +where + T: CheckedRem, +{ + #[inline] + fn checked_rem_res(&self, other: &Self) -> Result { + self.checked_rem(other).ok_or(DispatchError::Arithmetic(ArithmeticError::DivisionByZero)) + } +} diff --git a/primitives/src/math/fixed.rs b/primitives/src/math/fixed.rs index eff7434d5..cf9f5e942 100644 --- a/primitives/src/math/fixed.rs +++ b/primitives/src/math/fixed.rs @@ -366,6 +366,28 @@ mod tests { pub(crate) const _1_10: u128 = _1 / 10; + #[macro_export] + macro_rules! assert_approx { + ($left:expr, $right:expr, $precision:expr $(,)?) => { + match (&$left, &$right, &$precision) { + (left_val, right_val, precision_val) => { + let diff = if *left_val > *right_val { + *left_val - *right_val + } else { + *right_val - *left_val + }; + if diff > *precision_val { + panic!( + "assertion `left approx== right` failed\n left: {}\n right: \ + {}\n precision: {}\ndifference: {}", + *left_val, *right_val, *precision_val, diff + ); + } + } + } + }; + } + #[test_case(0, 0, 0)] #[test_case(0, _1, 0)] #[test_case(0, _2, 0)] @@ -1075,25 +1097,3 @@ mod tests { assert_approx!(result, expected, 1); } } - -#[macro_export] -macro_rules! assert_approx { - ($left:expr, $right:expr, $precision:expr $(,)?) => { - match (&$left, &$right, &$precision) { - (left_val, right_val, precision_val) => { - let diff = if *left_val > *right_val { - *left_val - *right_val - } else { - *right_val - *left_val - }; - if diff > *precision_val { - panic!( - "assertion `left approx== right` failed\n left: {}\n right: {}\n \ - precision: {}\ndifference: {}", - *left_val, *right_val, *precision_val, diff - ); - } - } - } - }; -} diff --git a/primitives/src/math/root.rs b/primitives/src/math/root.rs index bb0cea540..2479e1ab4 100644 --- a/primitives/src/math/root.rs +++ b/primitives/src/math/root.rs @@ -44,8 +44,7 @@ // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -//! Helper functions for approximating preimages of increasing or decreasing functions used in -//! [`crate::arbitrage`]. +//! Helper functions for approximating preimages of increasing or decreasing functions. use sp_runtime::traits::AtLeast32BitUnsigned; diff --git a/primitives/src/traits/swaps.rs b/primitives/src/traits/swaps.rs index 4d914a6ec..415c163bd 100644 --- a/primitives/src/traits/swaps.rs +++ b/primitives/src/traits/swaps.rs @@ -18,101 +18,93 @@ use crate::types::PoolId; use alloc::vec::Vec; -use frame_support::dispatch::{DispatchError, Weight}; +use frame_support::dispatch::{DispatchError, DispatchResult, Weight}; use parity_scale_codec::{HasCompact, MaxEncodedLen}; pub trait Swaps { type Asset: MaxEncodedLen; type Balance: HasCompact + MaxEncodedLen; - // TODO(#1216): Add weight type which implements `Into` and `From` - /// Creates an initial active pool. + /// Creates a new pool. /// /// # Arguments /// - /// * `who`: The account that is the creator of the pool. Must have enough - /// funds for each of the assets to cover the minimum balance. + /// * `who`: The account that is the creator of the pool. /// * `assets`: The assets that are used in the pool. - /// * `base_asset`: The base asset in a prediction market swap pool (usually a currency). - /// * `market_id`: The market id of the market the pool belongs to. - /// * `scoring_rule`: The scoring rule that's used to determine the asset prices. - /// * `swap_fee`: The fee applied to each swap (in case the scoring rule doesn't provide fees). - /// * `amount`: The amount of each asset added to the pool; **may** be `None` only if - /// `scoring_rule` is `RikiddoSigmoidFeeMarketEma`. - /// * `weights`: These are the denormalized weights (the raw weights). + /// * `swap_fee`: The fee applied to each swap. + /// * `amount`: The amount of each asset added to the pool. + /// * `weights`: The denormalized weights. fn create_pool( - creator: AccountId, + who: AccountId, assets: Vec, swap_fee: Self::Balance, amount: Self::Balance, - weights: Vec, + weights: Vec, ) -> Result; /// Close the specified pool. fn close_pool(pool_id: PoolId) -> Result; - /// Destroy CPMM pool, slash pool account assets and destroy pool shares of the liquidity providers. + /// Destroy pool, slash pool account assets and destroy pool shares of the liquidity providers. fn destroy_pool(pool_id: PoolId) -> Result; + /// Open the specified pool. fn open_pool(pool_id: PoolId) -> Result; - /// Pool - Exit with exact pool amount - /// - /// Takes an asset from `pool_id` and transfers to `origin`. Differently from `pool_exit`, - /// this method injects the exactly amount of `asset_amount` to `origin`. + /// Exchanges an LP's (liquidity provider's) pool shares for a proportionate and exact + /// amount of _one_ of the pool's assets. The assets received are distributed according to + /// the LP's percentage ownership of the pool. /// /// # Arguments /// - /// * `who`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset`: Self::Asset leaving the pool. - /// * `asset_amount`: Self::Asset amount that is leaving the pool. - /// * `max_pool_amount`: The calculated amount of assets for the pool must be equal or - /// greater than the given value. + /// * `who`: The LP. + /// * `pool_id`: The ID of the pool to withdraw from. + /// * `asset`: The asset received by the LP. + /// * `asset_amount`: The amount of `asset` leaving the pool. + /// * `max_pool_amount`: The maximum amount of pool shares the LP is willing to burn. The + /// transaction is rolled back if this bound is violated. fn pool_exit_with_exact_asset_amount( who: AccountId, pool_id: PoolId, asset: Self::Asset, asset_amount: Self::Balance, max_pool_amount: Self::Balance, - ) -> Result; + ) -> DispatchResult; - /// Pool - Join with exact asset amount - /// - /// Joins an asset provided from `origin` to `pool_id`. Differently from `pool_join`, - /// this method transfers the exactly amount of `asset_amount` to `pool_id`. + /// Exchanges an exact amount of an LP's (liquidity provider's) holds of _one_ of the assets in + /// the pool for pool shares. /// /// # Arguments /// - /// * `who`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Self::Asset entering the pool. - /// * `asset_amount`: Self::Asset amount that is entering the pool. - /// * `min_pool_amount`: The calculated amount for the pool must be equal or greater - /// than the given value. + /// * `who`: The LP. + /// * `pool_id`: The ID of the pool to withdraw from. + /// * `asset_in`: The asset entering the pool. + /// * `asset_amount`: Asset amount that is entering the pool. + /// * `min_pool_amount`: The minimum amount of pool shares the LP asks to receive. The + /// transaction is rolled back if this bound is violated. fn pool_join_with_exact_asset_amount( who: AccountId, pool_id: PoolId, asset_in: Self::Asset, asset_amount: Self::Balance, min_pool_amount: Self::Balance, - ) -> Result; + ) -> DispatchResult; - /// Swap - Exact amount in + /// Buy the `asset_out`/`asset_in` pair from the pool for an exact amount of `asset_in`. /// - /// Swaps a given `asset_amount_in` of the `asset_in/asset_out` pair to `pool_id`. + /// This function will error if both `min_asset_amount_out` and `max_price` are `None`. /// /// # Arguments /// - /// * `who`: The account whose assets should be transferred. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Self::Asset entering the pool. - /// * `asset_amount_in`: Amount that will be transferred from the provider to the pool. - /// * `asset_out`: Self::Asset leaving the pool. - /// * `min_asset_amount_out`: Minimum asset amount that can leave the pool. - /// * `max_price`: Market price must be equal or less than the provided value. - /// * `handle_fees`: Whether additional fees are handled or not (sets LP fee to 0) - #[allow(clippy::too_many_arguments)] + /// * `who`: The user executing the trade. + /// * `pool_id`: The pool to execute the trade on. + /// * `asset_in`: Asset entering the pool. + /// * `asset_amount_in`: Exact mount that will be transferred from the user to the pool. + /// * `asset_out`: Asset leaving the pool. + /// * `min_asset_amount_out`: Minimum asset amount requested by the user. The trade is rolled + /// back if this limit is violated. If this is `None`, there is no limit. + /// * `max_price`: The maximum price _after execution_ the user is willing to accept. The trade + /// is rolled back if this limit is violated. If this is `None`, there is no limit. fn swap_exact_amount_in( who: AccountId, pool_id: PoolId, @@ -121,23 +113,23 @@ pub trait Swaps { asset_out: Self::Asset, min_asset_amount_out: Option, max_price: Option, - ) -> Result; + ) -> DispatchResult; - /// Swap - Exact amount out + /// Buy the `asset_out`/`asset_in` pair from the pool, receiving an exact amount of `asset_out`. /// - /// Swaps a given `asset_amount_out` of the `asset_in/asset_out` pair to `origin`. + /// This function will error if both `min_asset_amount_out` and `max_price` are `None`. /// /// # Arguments /// - /// * `who`: The account whose assets should be transferred. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Self::Asset entering the pool. - /// * `max_amount_asset_in`: Maximum asset amount that can enter the pool. - /// * `asset_out`: Self::Asset leaving the pool. - /// * `asset_amount_out`: Amount that will be transferred from the pool to the provider. - /// * `max_price`: Market price must be equal or less than the provided value. - /// * `handle_fees`: Whether additional fees are handled or not (sets LP fee to 0) - #[allow(clippy::too_many_arguments)] + /// * `who`: The user executing the trade. + /// * `pool_id`: The pool to execute the trade on. + /// * `asset_in`: Asset entering the pool. + /// * `max_asset_amount_out`: Maximum asset amount the user is willing to pay. The trade is + /// rolled back if this limit is violated. + /// * `asset_out`: Asset leaving the pool. + /// * `asset_amount_out`: Exact amount that will be transferred from the user to the pool. + /// * `max_price`: The maximum price _after execution_ the user is willing to accept. The trade + /// is rolled back if this limit is violated. If this is `None`, there is no limit. fn swap_exact_amount_out( who: AccountId, pool_id: PoolId, @@ -146,5 +138,5 @@ pub trait Swaps { asset_out: Self::Asset, asset_amount_out: Self::Balance, max_price: Option, - ) -> Result; + ) -> DispatchResult; } diff --git a/runtime/battery-station/Cargo.toml b/runtime/battery-station/Cargo.toml index e478ec077..bdb4d7d0d 100644 --- a/runtime/battery-station/Cargo.toml +++ b/runtime/battery-station/Cargo.toml @@ -426,7 +426,7 @@ force-debug = ["sp-debug-derive/force-debug"] authors = ["Zeitgeist PM "] edition = "2021" name = "battery-station-runtime" -version = "0.4.3" +version = "0.5.0" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/battery-station/src/lib.rs b/runtime/battery-station/src/lib.rs index 5f1365c29..34c2c6b8f 100644 --- a/runtime/battery-station/src/lib.rs +++ b/runtime/battery-station/src/lib.rs @@ -105,10 +105,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("zeitgeist"), impl_name: create_runtime_str!("zeitgeist"), authoring_version: 1, - spec_version: 52, + spec_version: 53, impl_version: 1, apis: RUNTIME_API_VERSIONS, - transaction_version: 26, + transaction_version: 27, state_version: 1, }; diff --git a/runtime/battery-station/src/parameters.rs b/runtime/battery-station/src/parameters.rs index d5b65e90d..e0490cd20 100644 --- a/runtime/battery-station/src/parameters.rs +++ b/runtime/battery-station/src/parameters.rs @@ -350,10 +350,6 @@ parameter_types! { pub const MinAssets: u16 = 2; /// Maximum number of assets. `MaxCategories` plus one base asset. pub const MaxAssets: u16 = MAX_ASSETS; - /// Mathematical constraint set by the Balancer algorithm. DO NOT CHANGE. - pub const MaxInRatio: Balance = (BASE / 3) + 1; - /// Mathematical constraint set by the Balancer algorithm. DO NOT CHANGE. - pub const MaxOutRatio: Balance = (BASE / 3) + 1; /// The maximum fee that is charged for swaps and single asset LP operations. pub const MaxSwapFee: Balance = BASE / 10; // 10% /// The sum of all weights of the assets within the pool is limited by `MaxTotalWeight`. diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index a72792e79..c4e210c2a 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -82,7 +82,7 @@ std = [ authors = ["Zeitgeist PM "] edition = "2021" name = "common-runtime" -version = "0.4.3" +version = "0.5.0" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/common/src/fees.rs b/runtime/common/src/fees.rs index 6facbdbb1..22562d1c8 100644 --- a/runtime/common/src/fees.rs +++ b/runtime/common/src/fees.rs @@ -57,6 +57,15 @@ macro_rules! impl_fee_types { debug_assert!(res.is_ok()); } } + + /// Disregards the fees. + pub struct DealWithCampaignFees; + impl OnUnbalanced> for DealWithCampaignFees { + fn on_unbalanced(_fees_and_tips: CreditOf) { + // Handled by type OnDropCredit + return; + } + } }; } diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 8e7bcd84b..402d6cb74 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -55,12 +55,13 @@ macro_rules! decl_common_types { use orml_traits::MultiCurrency; use sp_runtime::{generic, DispatchError, DispatchResult, SaturatedConversion}; use zeitgeist_primitives::traits::{DeployPoolApi, DistributeFees, MarketCommonsPalletApi}; + use zrml_court::migrations::MigrateCourtPoolItems; pub type Block = generic::Block; type Address = sp_runtime::MultiAddress; - type Migrations = (); + type Migrations = (MigrateCourtPoolItems,); pub type Executive = frame_executive::Executive< Runtime, @@ -966,8 +967,10 @@ macro_rules! impl_config_traits { ), ProxyType::ProvideLiquidity => matches!( c, - RuntimeCall::Swaps(zrml_swaps::Call::pool_join { .. }) - | RuntimeCall::Swaps(zrml_swaps::Call::pool_exit { .. }) + RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::join { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::exit { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::deploy_pool { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::withdraw_fees { .. }) ), ProxyType::BuySellCompleteSets => matches!( c, @@ -979,18 +982,20 @@ macro_rules! impl_config_traits { ), ProxyType::Trading => matches!( c, - RuntimeCall::Swaps(zrml_swaps::Call::swap_exact_amount_in { .. }) - | RuntimeCall::Swaps(zrml_swaps::Call::swap_exact_amount_out { .. }) + RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::buy { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::sell { .. }) | RuntimeCall::Orderbook(zrml_orderbook::Call::place_order { .. }) | RuntimeCall::Orderbook(zrml_orderbook::Call::fill_order { .. }) | RuntimeCall::Orderbook(zrml_orderbook::Call::remove_order { .. }) ), ProxyType::HandleAssets => matches!( c, - RuntimeCall::Swaps(zrml_swaps::Call::pool_join { .. }) - | RuntimeCall::Swaps(zrml_swaps::Call::pool_exit { .. }) - | RuntimeCall::Swaps(zrml_swaps::Call::swap_exact_amount_in { .. }) - | RuntimeCall::Swaps(zrml_swaps::Call::swap_exact_amount_out { .. }) + RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::join { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::exit { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::buy { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::sell { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::deploy_pool { .. }) + | RuntimeCall::NeoSwaps(zrml_neo_swaps::Call::withdraw_fees { .. }) | RuntimeCall::PredictionMarkets( zrml_prediction_markets::Call::buy_complete_set { .. } ) @@ -1357,8 +1362,6 @@ macro_rules! impl_config_traits { type ExitFee = ExitFee; type MinAssets = MinAssets; type MaxAssets = MaxAssets; - type MaxInRatio = MaxInRatio; - type MaxOutRatio = MaxOutRatio; type MaxSwapFee = MaxSwapFee; type MaxTotalWeight = MaxTotalWeight; type MaxWeight = MaxWeight; diff --git a/runtime/common/src/weights/cumulus_pallet_xcmp_queue.rs b/runtime/common/src/weights/cumulus_pallet_xcmp_queue.rs index f24d34abb..4d12a9a14 100644 --- a/runtime/common/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/runtime/common/src/weights/cumulus_pallet_xcmp_queue.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for cumulus_pallet_xcmp_queue //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=cumulus_pallet_xcmp_queue // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -56,10 +56,10 @@ impl cumulus_pallet_xcmp_queue::weights::WeightInfo for /// Proof Skipped: XcmpQueue QueueConfig (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_u32() -> Weight { // Proof Size summary in bytes: - // Measured: `175` - // Estimated: `670` - // Minimum execution time: 7_090 nanoseconds. - Weight::from_parts(7_090_000, 670) + // Measured: `142` + // Estimated: `637` + // Minimum execution time: 9_070 nanoseconds. + Weight::from_parts(11_070_000, 637) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -67,10 +67,10 @@ impl cumulus_pallet_xcmp_queue::weights::WeightInfo for /// Proof Skipped: XcmpQueue QueueConfig (max_values: Some(1), max_size: None, mode: Measured) fn set_config_with_weight() -> Weight { // Proof Size summary in bytes: - // Measured: `175` - // Estimated: `670` - // Minimum execution time: 5_250 nanoseconds. - Weight::from_parts(5_250_000, 670) + // Measured: `142` + // Estimated: `637` + // Minimum execution time: 9_260 nanoseconds. + Weight::from_parts(10_780_000, 637) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/frame_system.rs b/runtime/common/src/weights/frame_system.rs index a5b68948f..0725f4c1d 100644 --- a/runtime/common/src/weights/frame_system.rs +++ b/runtime/common/src/weights/frame_system.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for frame_system //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-14`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=frame_system // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -53,20 +53,24 @@ use frame_support::{ pub struct WeightInfo(PhantomData); impl frame_system::weights::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. - fn remark(_b: u32) -> Weight { + fn remark(b: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_430 nanoseconds. - Weight::from_parts(385_840_000, 0) + // Minimum execution time: 3_320 nanoseconds. + Weight::from_parts(3_590_000, 0) + // Standard Error: 2 + .saturating_add(Weight::from_parts(738, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(_b: u32) -> Weight { + fn remark_with_event(b: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_830 nanoseconds. - Weight::from_parts(3_189_292_000, 0) + // Minimum execution time: 11_840 nanoseconds. + Weight::from_parts(12_040_000, 0) + // Standard Error: 3 + .saturating_add(Weight::from_parts(2_456, 0).saturating_mul(b.into())) } /// Storage: System Digest (r:1 w:1) /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) @@ -76,39 +80,49 @@ impl frame_system::weights::WeightInfo for WeightInfo Weight { + fn set_storage(i: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_910 nanoseconds. - Weight::from_parts(495_902_000, 0).saturating_add(T::DbWeight::get().writes(1000)) + // Minimum execution time: 6_730 nanoseconds. + Weight::from_parts(4_794_287, 0) + // Standard Error: 8_225 + .saturating_add(Weight::from_parts(1_131_790, 0).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. - fn kill_storage(_i: u32) -> Weight { + fn kill_storage(i: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_970 nanoseconds. - Weight::from_parts(390_580_000, 0).saturating_add(T::DbWeight::get().writes(1000)) + // Minimum execution time: 3_290 nanoseconds. + Weight::from_parts(3_560_000, 0) + // Standard Error: 3_412 + .saturating_add(Weight::from_parts(886_492, 0).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(_p: u32) -> Weight { + fn kill_prefix(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `6 + p * (69 ±0)` - // Estimated: `69775` - // Minimum execution time: 4_410 nanoseconds. - Weight::from_parts(1_001_496_000, 69775).saturating_add(T::DbWeight::get().writes(1000)) + // Measured: `48 + p * (69 ±0)` + // Estimated: `52 + p * (70 ±0)` + // Minimum execution time: 6_210 nanoseconds. + Weight::from_parts(6_620_000, 52) + // Standard Error: 6_837 + .saturating_add(Weight::from_parts(2_035_938, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) } } diff --git a/runtime/common/src/weights/orml_currencies.rs b/runtime/common/src/weights/orml_currencies.rs index 1cea0ce1c..b01fadaf2 100644 --- a/runtime/common/src/weights/orml_currencies.rs +++ b/runtime/common/src/weights/orml_currencies.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for orml_currencies //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=orml_currencies // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/orml_weight_template.hbs @@ -49,19 +49,17 @@ use frame_support::{traits::Get, weights::Weight}; /// Weight functions for orml_currencies (automatically generated) pub struct WeightInfo(PhantomData); impl orml_currencies::WeightInfo for WeightInfo { - /// Storage: MarketAssets Asset (r:1 w:0) - /// Proof: MarketAssets Asset (max_values: None, max_size: Some(225), added: 2700, mode: MaxEncodedLen) /// Storage: Tokens Accounts (r:2 w:2) /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) /// Storage: System Account (r:1 w:1) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn transfer_non_native_currency() -> Weight { // Proof Size summary in bytes: - // Measured: `1862` - // Estimated: `10503` - // Minimum execution time: 36_721 nanoseconds. - Weight::from_parts(36_721_000, 10503) - .saturating_add(T::DbWeight::get().reads(4)) + // Measured: `1753` + // Estimated: `7803` + // Minimum execution time: 71_681 nanoseconds. + Weight::from_parts(73_901_000, 7803) + .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: System Account (r:1 w:1) @@ -70,13 +68,11 @@ impl orml_currencies::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1461` // Estimated: `2607` - // Minimum execution time: 26_811 nanoseconds. - Weight::from_parts(26_811_000, 2607) + // Minimum execution time: 58_831 nanoseconds. + Weight::from_parts(59_660_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } - /// Storage: MarketAssets Asset (r:1 w:0) - /// Proof: MarketAssets Asset (max_values: None, max_size: Some(225), added: 2700, mode: MaxEncodedLen) /// Storage: Tokens Accounts (r:1 w:1) /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) /// Storage: Tokens TotalIssuance (r:1 w:1) @@ -85,11 +81,11 @@ impl orml_currencies::WeightInfo for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn update_balance_non_native_currency() -> Weight { // Proof Size summary in bytes: - // Measured: `1470` - // Estimated: `10423` - // Minimum execution time: 27_511 nanoseconds. - Weight::from_parts(27_511_000, 10423) - .saturating_add(T::DbWeight::get().reads(4)) + // Measured: `1361` + // Estimated: `7723` + // Minimum execution time: 49_950 nanoseconds. + Weight::from_parts(57_160_000, 7723) + .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: System Account (r:1 w:1) @@ -98,8 +94,8 @@ impl orml_currencies::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1401` // Estimated: `2607` - // Minimum execution time: 25_150 nanoseconds. - Weight::from_parts(25_150_000, 2607) + // Minimum execution time: 49_830 nanoseconds. + Weight::from_parts(67_881_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -109,8 +105,8 @@ impl orml_currencies::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1525` // Estimated: `2607` - // Minimum execution time: 23_901 nanoseconds. - Weight::from_parts(23_901_000, 2607) + // Minimum execution time: 47_410 nanoseconds. + Weight::from_parts(53_200_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/orml_tokens.rs b/runtime/common/src/weights/orml_tokens.rs index 6cda35750..0e4ff524f 100644 --- a/runtime/common/src/weights/orml_tokens.rs +++ b/runtime/common/src/weights/orml_tokens.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for orml_tokens //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=orml_tokens // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/orml_weight_template.hbs @@ -55,10 +55,10 @@ impl orml_tokens::WeightInfo for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn transfer() -> Weight { // Proof Size summary in bytes: - // Measured: `1772` + // Measured: `1753` // Estimated: `7803` - // Minimum execution time: 33_181 nanoseconds. - Weight::from_parts(33_181_000, 7803) + // Minimum execution time: 80_890 nanoseconds. + Weight::from_parts(98_321_000, 7803) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -68,10 +68,10 @@ impl orml_tokens::WeightInfo for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn transfer_all() -> Weight { // Proof Size summary in bytes: - // Measured: `1772` + // Measured: `1753` // Estimated: `7803` - // Minimum execution time: 32_790 nanoseconds. - Weight::from_parts(32_790_000, 7803) + // Minimum execution time: 84_510 nanoseconds. + Weight::from_parts(86_860_000, 7803) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -81,10 +81,10 @@ impl orml_tokens::WeightInfo for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn transfer_keep_alive() -> Weight { // Proof Size summary in bytes: - // Measured: `1596` + // Measured: `1577` // Estimated: `7803` - // Minimum execution time: 26_241 nanoseconds. - Weight::from_parts(26_241_000, 7803) + // Minimum execution time: 66_190 nanoseconds. + Weight::from_parts(79_850_000, 7803) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -94,10 +94,10 @@ impl orml_tokens::WeightInfo for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn force_transfer() -> Weight { // Proof Size summary in bytes: - // Measured: `1772` + // Measured: `1753` // Estimated: `10410` - // Minimum execution time: 29_471 nanoseconds. - Weight::from_parts(29_471_000, 10410) + // Minimum execution time: 74_240 nanoseconds. + Weight::from_parts(79_240_000, 10410) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -109,10 +109,10 @@ impl orml_tokens::WeightInfo for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn set_balance() -> Weight { // Proof Size summary in bytes: - // Measured: `1394` + // Measured: `1361` // Estimated: `7723` - // Minimum execution time: 24_010 nanoseconds. - Weight::from_parts(24_010_000, 7723) + // Minimum execution time: 56_260 nanoseconds. + Weight::from_parts(57_490_000, 7723) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/common/src/weights/pallet_author_inherent.rs b/runtime/common/src/weights/pallet_author_inherent.rs index 8bcfce8e4..e510cdd28 100644 --- a/runtime/common/src/weights/pallet_author_inherent.rs +++ b/runtime/common/src/weights/pallet_author_inherent.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_author_inherent //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_author_inherent // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -66,10 +66,10 @@ impl pallet_author_inherent::weights::WeightInfo for We /// Proof: RandomnessCollectiveFlip RandomMaterial (max_values: Some(1), max_size: Some(2594), added: 3089, mode: MaxEncodedLen) fn kick_off_authorship_validation() -> Weight { // Proof Size summary in bytes: - // Measured: `605` - // Estimated: `7415` - // Minimum execution time: 19_110 nanoseconds. - Weight::from_parts(19_110_000, 7415) + // Measured: `572` + // Estimated: `7316` + // Minimum execution time: 45_440 nanoseconds. + Weight::from_parts(46_281_000, 7316) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/pallet_author_mapping.rs b/runtime/common/src/weights/pallet_author_mapping.rs index 1acb378ec..2ab08d513 100644 --- a/runtime/common/src/weights/pallet_author_mapping.rs +++ b/runtime/common/src/weights/pallet_author_mapping.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_author_mapping //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_author_mapping // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -60,10 +60,10 @@ impl pallet_author_mapping::weights::WeightInfo for Wei /// Proof Skipped: AuthorMapping NimbusLookup (max_values: None, max_size: None, mode: Measured) fn add_association() -> Weight { // Proof Size summary in bytes: - // Measured: `495` - // Estimated: `6072` - // Minimum execution time: 17_090 nanoseconds. - Weight::from_parts(17_090_000, 6072) + // Measured: `462` + // Estimated: `6006` + // Minimum execution time: 39_201 nanoseconds. + Weight::from_parts(47_790_000, 6006) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -73,10 +73,10 @@ impl pallet_author_mapping::weights::WeightInfo for Wei /// Proof Skipped: AuthorMapping NimbusLookup (max_values: None, max_size: None, mode: Measured) fn update_association() -> Weight { // Proof Size summary in bytes: - // Measured: `440` - // Estimated: `5830` - // Minimum execution time: 12_151 nanoseconds. - Weight::from_parts(12_151_000, 5830) + // Measured: `407` + // Estimated: `5764` + // Minimum execution time: 30_870 nanoseconds. + Weight::from_parts(37_440_000, 5764) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -88,10 +88,10 @@ impl pallet_author_mapping::weights::WeightInfo for Wei /// Proof Skipped: AuthorMapping NimbusLookup (max_values: None, max_size: None, mode: Measured) fn clear_association() -> Weight { // Proof Size summary in bytes: - // Measured: `616` - // Estimated: `6314` - // Minimum execution time: 16_060 nanoseconds. - Weight::from_parts(16_060_000, 6314) + // Measured: `583` + // Estimated: `6248` + // Minimum execution time: 50_370 nanoseconds. + Weight::from_parts(51_670_000, 6248) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -103,10 +103,10 @@ impl pallet_author_mapping::weights::WeightInfo for Wei /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn remove_keys() -> Weight { // Proof Size summary in bytes: - // Measured: `722` - // Estimated: `9001` - // Minimum execution time: 19_871 nanoseconds. - Weight::from_parts(19_871_000, 9001) + // Measured: `689` + // Estimated: `8935` + // Minimum execution time: 47_440 nanoseconds. + Weight::from_parts(58_350_000, 8935) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -116,10 +116,10 @@ impl pallet_author_mapping::weights::WeightInfo for Wei /// Proof Skipped: AuthorMapping MappingWithDeposit (max_values: None, max_size: None, mode: Measured) fn set_keys() -> Weight { // Proof Size summary in bytes: - // Measured: `546` - // Estimated: `8517` - // Minimum execution time: 14_680 nanoseconds. - Weight::from_parts(14_680_000, 8517) + // Measured: `513` + // Estimated: `8451` + // Minimum execution time: 37_090 nanoseconds. + Weight::from_parts(45_430_000, 8451) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/common/src/weights/pallet_author_slot_filter.rs b/runtime/common/src/weights/pallet_author_slot_filter.rs index 3f40a00c9..cbc8e8f6c 100644 --- a/runtime/common/src/weights/pallet_author_slot_filter.rs +++ b/runtime/common/src/weights/pallet_author_slot_filter.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_author_slot_filter //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_author_slot_filter // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -58,7 +58,7 @@ impl pallet_author_slot_filter::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_110 nanoseconds. - Weight::from_parts(6_110_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 12_991 nanoseconds. + Weight::from_parts(13_580_000, 0).saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/common/src/weights/pallet_balances.rs b/runtime/common/src/weights/pallet_balances.rs index c26941889..3c6be6587 100644 --- a/runtime/common/src/weights/pallet_balances.rs +++ b/runtime/common/src/weights/pallet_balances.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_balances //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-14`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_balances // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -58,8 +58,8 @@ impl pallet_balances::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1585` // Estimated: `5214` - // Minimum execution time: 35_071 nanoseconds. - Weight::from_parts(35_071_000, 5214) + // Minimum execution time: 90_831 nanoseconds. + Weight::from_parts(92_820_000, 5214) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -69,8 +69,8 @@ impl pallet_balances::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1409` // Estimated: `2607` - // Minimum execution time: 25_781 nanoseconds. - Weight::from_parts(25_781_000, 2607) + // Minimum execution time: 59_480 nanoseconds. + Weight::from_parts(72_070_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -80,8 +80,8 @@ impl pallet_balances::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1559` // Estimated: `2607` - // Minimum execution time: 22_471 nanoseconds. - Weight::from_parts(22_471_000, 2607) + // Minimum execution time: 46_560 nanoseconds. + Weight::from_parts(57_250_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -91,8 +91,8 @@ impl pallet_balances::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1559` // Estimated: `2607` - // Minimum execution time: 23_950 nanoseconds. - Weight::from_parts(23_950_000, 2607) + // Minimum execution time: 51_850 nanoseconds. + Weight::from_parts(54_300_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -102,8 +102,8 @@ impl pallet_balances::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1581` // Estimated: `7821` - // Minimum execution time: 32_951 nanoseconds. - Weight::from_parts(32_951_000, 7821) + // Minimum execution time: 88_700 nanoseconds. + Weight::from_parts(107_780_000, 7821) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -113,8 +113,8 @@ impl pallet_balances::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1409` // Estimated: `2607` - // Minimum execution time: 26_851 nanoseconds. - Weight::from_parts(26_851_000, 2607) + // Minimum execution time: 68_470 nanoseconds. + Weight::from_parts(81_521_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -124,8 +124,8 @@ impl pallet_balances::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1443` // Estimated: `2607` - // Minimum execution time: 19_170 nanoseconds. - Weight::from_parts(19_170_000, 2607) + // Minimum execution time: 40_810 nanoseconds. + Weight::from_parts(49_180_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/pallet_bounties.rs b/runtime/common/src/weights/pallet_bounties.rs index 00dd4efae..ac27c2c9d 100644 --- a/runtime/common/src/weights/pallet_bounties.rs +++ b/runtime/common/src/weights/pallet_bounties.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_bounties //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-14`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_bounties // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -61,12 +61,14 @@ impl pallet_bounties::weights::WeightInfo for WeightInf /// Storage: Bounties Bounties (r:0 w:1) /// Proof: Bounties Bounties (max_values: None, max_size: Some(181), added: 2656, mode: MaxEncodedLen) /// The range of component `d` is `[0, 8192]`. - fn propose_bounty(_d: u32) -> Weight { + fn propose_bounty(d: u32) -> Weight { // Proof Size summary in bytes: // Measured: `141` // Estimated: `3106` - // Minimum execution time: 14_731 nanoseconds. - Weight::from_parts(15_420_000, 3106) + // Minimum execution time: 37_250 nanoseconds. + Weight::from_parts(42_264_142, 3106) + // Standard Error: 80 + .saturating_add(Weight::from_parts(1_638, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -78,8 +80,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `229` // Estimated: `3553` - // Minimum execution time: 7_481 nanoseconds. - Weight::from_parts(7_481_000, 3553) + // Minimum execution time: 18_260 nanoseconds. + Weight::from_parts(18_980_000, 3553) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -89,8 +91,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `249` // Estimated: `2656` - // Minimum execution time: 6_461 nanoseconds. - Weight::from_parts(6_461_000, 2656) + // Minimum execution time: 14_450 nanoseconds. + Weight::from_parts(16_610_000, 2656) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -102,8 +104,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `641` // Estimated: `7870` - // Minimum execution time: 21_601 nanoseconds. - Weight::from_parts(21_601_000, 7870) + // Minimum execution time: 49_830 nanoseconds. + Weight::from_parts(57_470_000, 7870) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -115,8 +117,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `457` // Estimated: `5263` - // Minimum execution time: 12_561 nanoseconds. - Weight::from_parts(12_561_000, 5263) + // Minimum execution time: 31_400 nanoseconds. + Weight::from_parts(34_300_000, 5263) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -126,8 +128,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `289` // Estimated: `2656` - // Minimum execution time: 9_070 nanoseconds. - Weight::from_parts(9_070_000, 2656) + // Minimum execution time: 22_240 nanoseconds. + Weight::from_parts(25_100_000, 2656) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -141,8 +143,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `674` // Estimated: `10477` - // Minimum execution time: 30_990 nanoseconds. - Weight::from_parts(30_990_000, 10477) + // Minimum execution time: 89_050 nanoseconds. + Weight::from_parts(93_931_000, 10477) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(5)) } @@ -156,8 +158,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `541` // Estimated: `7870` - // Minimum execution time: 20_530 nanoseconds. - Weight::from_parts(20_530_000, 7870) + // Minimum execution time: 52_760 nanoseconds. + Weight::from_parts(65_670_000, 7870) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -171,8 +173,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `818` // Estimated: `10477` - // Minimum execution time: 25_840 nanoseconds. - Weight::from_parts(25_840_000, 10477) + // Minimum execution time: 68_251 nanoseconds. + Weight::from_parts(90_760_000, 10477) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(5)) } @@ -182,8 +184,8 @@ impl pallet_bounties::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `289` // Estimated: `2656` - // Minimum execution time: 9_451 nanoseconds. - Weight::from_parts(9_451_000, 2656) + // Minimum execution time: 22_600 nanoseconds. + Weight::from_parts(25_090_000, 2656) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -194,13 +196,18 @@ impl pallet_bounties::weights::WeightInfo for WeightInf /// Storage: System Account (r:200 w:200) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `b` is `[0, 100]`. - fn spend_funds(_b: u32) -> Weight { + fn spend_funds(b: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `4 + b * (358 ±0)` - // Estimated: `787897` - // Minimum execution time: 2_460 nanoseconds. - Weight::from_parts(1_323_574_000, 787897) - .saturating_add(T::DbWeight::get().reads(301)) - .saturating_add(T::DbWeight::get().writes(301)) + // Measured: `98 + b * (357 ±0)` + // Estimated: `897 + b * (7870 ±0)` + // Minimum execution time: 6_500 nanoseconds. + Weight::from_parts(7_220_000, 897) + // Standard Error: 127_073 + .saturating_add(Weight::from_parts(48_355_191, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 7870).saturating_mul(b.into())) } } diff --git a/runtime/common/src/weights/pallet_collective.rs b/runtime/common/src/weights/pallet_collective.rs index c39eb29af..39ca9d87e 100644 --- a/runtime/common/src/weights/pallet_collective.rs +++ b/runtime/common/src/weights/pallet_collective.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_collective //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-14`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_collective // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -65,22 +65,20 @@ impl pallet_collective::weights::WeightInfo for WeightI /// The range of component `p` is `[0, 255]`. fn set_members(m: u32, _n: u32, p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + m * (8264 ±0) + p * (3228 ±0)` - // Estimated: `1204 + m * (15297 ±1_899) + p * (5961 ±744)` - // Minimum execution time: 13_300 nanoseconds. - Weight::from_parts(13_300_000, 1204) - // Standard Error: 3_265_951 - .saturating_add(Weight::from_parts(8_527_799, 0).saturating_mul(m.into())) - // Standard Error: 1_280_765 - .saturating_add(Weight::from_parts(3_328_234, 0).saturating_mul(p.into())) + // Measured: `0 + m * (8195 ±0) + p * (3227 ±0)` + // Estimated: `33167 + m * (19751 ±63) + p * (10255 ±24)` + // Minimum execution time: 26_570 nanoseconds. + Weight::from_parts(29_900_000, 33167) + // Standard Error: 326_248 + .saturating_add(Weight::from_parts(25_790_752, 0).saturating_mul(m.into())) + // Standard Error: 128_092 + .saturating_add(Weight::from_parts(15_085_049, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(m.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(m.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 15297).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 5961).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 19751).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 10255).saturating_mul(p.into())) } /// Storage: AdvisoryCommittee Members (r:1 w:0) /// Proof Skipped: AdvisoryCommittee Members (max_values: Some(1), max_size: None, mode: Measured) @@ -88,14 +86,14 @@ impl pallet_collective::weights::WeightInfo for WeightI /// The range of component `m` is `[1, 100]`. fn execute(b: u32, m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `99 + m * (32 ±0)` - // Estimated: `595 + m * (32 ±0)` - // Minimum execution time: 12_031 nanoseconds. - Weight::from_parts(11_630_145, 595) - // Standard Error: 84 - .saturating_add(Weight::from_parts(381, 0).saturating_mul(b.into())) - // Standard Error: 874 - .saturating_add(Weight::from_parts(10_090, 0).saturating_mul(m.into())) + // Measured: `100 + m * (32 ±0)` + // Estimated: `596 + m * (32 ±0)` + // Minimum execution time: 25_581 nanoseconds. + Weight::from_parts(29_243_977, 596) + // Standard Error: 389 + .saturating_add(Weight::from_parts(2_599, 0).saturating_mul(b.into())) + // Standard Error: 4_014 + .saturating_add(Weight::from_parts(18_848, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } @@ -105,14 +103,14 @@ impl pallet_collective::weights::WeightInfo for WeightI /// Proof Skipped: AdvisoryCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[2, 1024]`. /// The range of component `m` is `[1, 100]`. - fn propose_execute(_b: u32, m: u32) -> Weight { + fn propose_execute(b: u32, m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `99 + m * (32 ±0)` - // Estimated: `3170 + m * (64 ±0)` - // Minimum execution time: 13_900 nanoseconds. - Weight::from_parts(14_051_635, 3170) - // Standard Error: 253 - .saturating_add(Weight::from_parts(13_186, 0).saturating_mul(m.into())) + // Measured: `100 + m * (32 ±0)` + // Estimated: `3172 + m * (64 ±0)` + // Minimum execution time: 29_510 nanoseconds. + Weight::from_parts(39_239_765, 3172) + // Standard Error: 624 + .saturating_add(Weight::from_parts(2_489, 0).saturating_mul(b.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) } @@ -131,34 +129,37 @@ impl pallet_collective::weights::WeightInfo for WeightI /// The range of component `p` is `[1, 255]`. fn propose_proposed(b: u32, m: u32, p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `68 + m * (32 ±0) + p * (36 ±0)` - // Estimated: `4305 + m * (160 ±0) + p * (180 ±0)` - // Minimum execution time: 17_221 nanoseconds. - Weight::from_parts(13_531_059, 4305) - // Standard Error: 1_044 - .saturating_add(Weight::from_parts(1_656, 0).saturating_mul(b.into())) - // Standard Error: 10_888 - .saturating_add(Weight::from_parts(19_520, 0).saturating_mul(m.into())) - // Standard Error: 4_201 - .saturating_add(Weight::from_parts(41_586, 0).saturating_mul(p.into())) + // Measured: `565 + m * (32 ±0) + p * (33 ±0)` + // Estimated: `6570 + m * (160 ±0) + p * (170 ±0)` + // Minimum execution time: 38_280 nanoseconds. + Weight::from_parts(34_499_820, 6570) + // Standard Error: 843 + .saturating_add(Weight::from_parts(9_755, 0).saturating_mul(b.into())) + // Standard Error: 8_797 + .saturating_add(Weight::from_parts(24_088, 0).saturating_mul(m.into())) + // Standard Error: 3_386 + .saturating_add(Weight::from_parts(192_506, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(Weight::from_parts(0, 160).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 170).saturating_mul(p.into())) } /// Storage: AdvisoryCommittee Members (r:1 w:0) /// Proof Skipped: AdvisoryCommittee Members (max_values: Some(1), max_size: None, mode: Measured) /// Storage: AdvisoryCommittee Voting (r:1 w:1) /// Proof Skipped: AdvisoryCommittee Voting (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[5, 100]`. - fn vote(_m: u32) -> Weight { + fn vote(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1239 + m * (64 ±0)` - // Estimated: `18254` - // Minimum execution time: 15_780 nanoseconds. - Weight::from_parts(19_200_000, 18254) + // Measured: `1240 + m * (64 ±0)` + // Estimated: `5448 + m * (128 ±0)` + // Minimum execution time: 38_090 nanoseconds. + Weight::from_parts(45_241_332, 5448) + // Standard Error: 6_225 + .saturating_add(Weight::from_parts(123_734, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) } /// Storage: AdvisoryCommittee Voting (r:1 w:1) /// Proof Skipped: AdvisoryCommittee Voting (max_values: None, max_size: None, mode: Measured) @@ -172,18 +173,18 @@ impl pallet_collective::weights::WeightInfo for WeightI /// The range of component `p` is `[1, 255]`. fn close_early_disapproved(m: u32, p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `283 + m * (64 ±0) + p * (35 ±0)` - // Estimated: `4601 + m * (256 ±0) + p * (140 ±0)` - // Minimum execution time: 19_241 nanoseconds. - Weight::from_parts(16_291_175, 4601) - // Standard Error: 3_698 - .saturating_add(Weight::from_parts(29_114, 0).saturating_mul(m.into())) - // Standard Error: 1_397 - .saturating_add(Weight::from_parts(38_366, 0).saturating_mul(p.into())) + // Measured: `683 + m * (64 ±0) + p * (33 ±0)` + // Estimated: `6017 + m * (260 ±0) + p * (136 ±0)` + // Minimum execution time: 40_550 nanoseconds. + Weight::from_parts(48_542_021, 6017) + // Standard Error: 8_566 + .saturating_add(Weight::from_parts(3_180, 0).saturating_mul(m.into())) + // Standard Error: 3_255 + .saturating_add(Weight::from_parts(145_858, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 256).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 140).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 136).saturating_mul(p.into())) } /// Storage: AdvisoryCommittee Voting (r:1 w:1) /// Proof Skipped: AdvisoryCommittee Voting (max_values: None, max_size: None, mode: Measured) @@ -198,21 +199,21 @@ impl pallet_collective::weights::WeightInfo for WeightI /// The range of component `p` is `[1, 255]`. fn close_early_approved(b: u32, m: u32, p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + b * (1 ±0) + m * (64 ±0) + p * (39 ±0)` - // Estimated: `4980 + b * (8 ±0) + m * (256 ±0) + p * (160 ±0)` - // Minimum execution time: 25_361 nanoseconds. - Weight::from_parts(16_276_001, 4980) - // Standard Error: 228 - .saturating_add(Weight::from_parts(4_367, 0).saturating_mul(b.into())) - // Standard Error: 2_433 - .saturating_add(Weight::from_parts(45_555, 0).saturating_mul(m.into())) - // Standard Error: 919 - .saturating_add(Weight::from_parts(57_375, 0).saturating_mul(p.into())) + // Measured: `926 + b * (1 ±0) + m * (64 ±0) + p * (36 ±0)` + // Estimated: `9916 + b * (4 ±0) + m * (248 ±0) + p * (144 ±0)` + // Minimum execution time: 56_730 nanoseconds. + Weight::from_parts(60_995_866, 9916) + // Standard Error: 1_124 + .saturating_add(Weight::from_parts(7_475, 0).saturating_mul(b.into())) + // Standard Error: 11_882 + .saturating_add(Weight::from_parts(24_932, 0).saturating_mul(m.into())) + // Standard Error: 4_516 + .saturating_add(Weight::from_parts(202_498, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 256).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 248).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) } /// Storage: AdvisoryCommittee Voting (r:1 w:1) /// Proof Skipped: AdvisoryCommittee Voting (max_values: None, max_size: None, mode: Measured) @@ -228,18 +229,18 @@ impl pallet_collective::weights::WeightInfo for WeightI /// The range of component `p` is `[1, 255]`. fn close_disapproved(m: u32, p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `303 + m * (64 ±0) + p * (35 ±0)` - // Estimated: `5480 + m * (320 ±0) + p * (175 ±0)` - // Minimum execution time: 20_361 nanoseconds. - Weight::from_parts(17_791_257, 5480) - // Standard Error: 3_779 - .saturating_add(Weight::from_parts(25_307, 0).saturating_mul(m.into())) - // Standard Error: 1_428 - .saturating_add(Weight::from_parts(39_013, 0).saturating_mul(p.into())) + // Measured: `703 + m * (64 ±0) + p * (33 ±0)` + // Estimated: `7250 + m * (325 ±0) + p * (170 ±0)` + // Minimum execution time: 44_580 nanoseconds. + Weight::from_parts(42_251_455, 7250) + // Standard Error: 11_312 + .saturating_add(Weight::from_parts(79_601, 0).saturating_mul(m.into())) + // Standard Error: 4_299 + .saturating_add(Weight::from_parts(177_260, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 320).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 175).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 170).saturating_mul(p.into())) } /// Storage: AdvisoryCommittee Voting (r:1 w:1) /// Proof Skipped: AdvisoryCommittee Voting (max_values: None, max_size: None, mode: Measured) @@ -256,21 +257,21 @@ impl pallet_collective::weights::WeightInfo for WeightI /// The range of component `p` is `[1, 255]`. fn close_approved(b: u32, m: u32, p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + b * (1 ±0) + m * (64 ±0) + p * (39 ±0)` - // Estimated: `5335 + b * (10 ±0) + m * (320 ±0) + p * (200 ±0)` - // Minimum execution time: 27_001 nanoseconds. - Weight::from_parts(18_839_784, 5335) - // Standard Error: 590 - .saturating_add(Weight::from_parts(4_762, 0).saturating_mul(b.into())) - // Standard Error: 6_281 - .saturating_add(Weight::from_parts(32_260, 0).saturating_mul(m.into())) - // Standard Error: 2_374 - .saturating_add(Weight::from_parts(58_649, 0).saturating_mul(p.into())) + // Measured: `946 + b * (1 ±0) + m * (64 ±0) + p * (36 ±0)` + // Estimated: `11505 + b * (5 ±0) + m * (310 ±0) + p * (180 ±0)` + // Minimum execution time: 61_120 nanoseconds. + Weight::from_parts(61_360_635, 11505) + // Standard Error: 1_164 + .saturating_add(Weight::from_parts(10_168, 0).saturating_mul(b.into())) + // Standard Error: 12_309 + .saturating_add(Weight::from_parts(31_252, 0).saturating_mul(m.into())) + // Standard Error: 4_678 + .saturating_add(Weight::from_parts(211_197, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) - .saturating_add(Weight::from_parts(0, 10).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 320).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 310).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) } /// Storage: AdvisoryCommittee Proposals (r:1 w:1) /// Proof Skipped: AdvisoryCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) @@ -279,13 +280,16 @@ impl pallet_collective::weights::WeightInfo for WeightI /// Storage: AdvisoryCommittee ProposalOf (r:0 w:1) /// Proof Skipped: AdvisoryCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[1, 255]`. - fn disapprove_proposal(_p: u32) -> Weight { + fn disapprove_proposal(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `255 + p * (32 ±0)` - // Estimated: `25749` - // Minimum execution time: 10_500 nanoseconds. - Weight::from_parts(17_421_000, 25749) + // Measured: `258 + p * (32 ±0)` + // Estimated: `1266 + p * (96 ±0)` + // Minimum execution time: 24_060 nanoseconds. + Weight::from_parts(31_125_083, 1266) + // Standard Error: 2_857 + .saturating_add(Weight::from_parts(122_760, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/runtime/common/src/weights/pallet_contracts.rs b/runtime/common/src/weights/pallet_contracts.rs index 0dbcbaba4..685b6e73e 100644 --- a/runtime/common/src/weights/pallet_contracts.rs +++ b/runtime/common/src/weights/pallet_contracts.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_contracts //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_contracts // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -58,30 +58,35 @@ impl pallet_contracts::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `42` // Estimated: `0` - // Minimum execution time: 3_580 nanoseconds. - Weight::from_parts(3_580_000, 0).saturating_add(T::DbWeight::get().reads(1)) + // Minimum execution time: 5_220 nanoseconds. + Weight::from_parts(5_660_000, 0).saturating_add(T::DbWeight::get().reads(1)) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `k` is `[0, 1024]`. - fn on_initialize_per_trie_key(_k: u32) -> Weight { + fn on_initialize_per_trie_key(k: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `280 + k * (69 ±0)` + // Measured: `414 + k * (69 ±0)` // Estimated: `0` - // Minimum execution time: 8_570 nanoseconds. - Weight::from_parts(984_005_000, 0) + // Minimum execution time: 16_010 nanoseconds. + Weight::from_parts(23_064_332, 0) + // Standard Error: 10_096 + .saturating_add(Weight::from_parts(1_760_195, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1025)) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) } /// Storage: Contracts DeletionQueue (r:1 w:1) /// Proof: Contracts DeletionQueue (max_values: Some(1), max_size: Some(16642), added: 17137, mode: Ignored) /// The range of component `q` is `[0, 128]`. - fn on_initialize_per_queue_item(_q: u32) -> Weight { + fn on_initialize_per_queue_item(q: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `42 + q * (34 ±0)` + // Measured: `214 + q * (33 ±0)` // Estimated: `0` - // Minimum execution time: 2_970 nanoseconds. - Weight::from_parts(98_383_000, 0) + // Minimum execution time: 6_150 nanoseconds. + Weight::from_parts(20_444_138, 0) + // Standard Error: 16_865 + .saturating_add(Weight::from_parts(2_019_484, 0).saturating_mul(q.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -90,12 +95,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: Contracts CodeStorage (r:0 w:1) /// Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Ignored) /// The range of component `c` is `[0, 61717]`. - fn reinstrument(_c: u32) -> Weight { + fn reinstrument(c: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `271` + // Measured: `203 + c * (1 ±0)` // Estimated: `0` - // Minimum execution time: 19_261 nanoseconds. - Weight::from_parts(2_411_872_000, 0) + // Minimum execution time: 49_871 nanoseconds. + Weight::from_parts(72_979_979, 0) + // Standard Error: 535 + .saturating_add(Weight::from_parts(96_053, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -110,12 +117,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `c` is `[0, 125952]`. - fn call_with_code_per_byte(_c: u32) -> Weight { + fn call_with_code_per_byte(c: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `747` + // Measured: `675` // Estimated: `0` - // Minimum execution time: 179_665 nanoseconds. - Weight::from_parts(2_252_239_000, 0) + // Minimum execution time: 386_581 nanoseconds. + Weight::from_parts(483_335_740, 0) + // Standard Error: 205 + .saturating_add(Weight::from_parts(57_256, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -140,16 +149,16 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// The range of component `s` is `[0, 1048576]`. fn instantiate_with_code(c: u32, i: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `105` + // Measured: `157` // Estimated: `0` - // Minimum execution time: 2_239_028 nanoseconds. - Weight::from_parts(2_239_028_000, 0) - // Standard Error: 8_881 - .saturating_add(Weight::from_parts(45_107, 0).saturating_mul(c.into())) - // Standard Error: 522 - .saturating_add(Weight::from_parts(258, 0).saturating_mul(i.into())) - // Standard Error: 522 - .saturating_add(Weight::from_parts(264, 0).saturating_mul(s.into())) + // Minimum execution time: 6_121_492 nanoseconds. + Weight::from_parts(689_215_210, 0) + // Standard Error: 704 + .saturating_add(Weight::from_parts(177_888, 0).saturating_mul(c.into())) + // Standard Error: 41 + .saturating_add(Weight::from_parts(2_798, 0).saturating_mul(i.into())) + // Standard Error: 41 + .saturating_add(Weight::from_parts(2_894, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(9)) } @@ -171,14 +180,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// The range of component `s` is `[0, 1048576]`. fn instantiate(i: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `446` + // Measured: `433` // Estimated: `0` - // Minimum execution time: 1_385_095 nanoseconds. - Weight::from_parts(616_576_000, 0) - // Standard Error: 26 - .saturating_add(Weight::from_parts(735, 0).saturating_mul(i.into())) - // Standard Error: 26 - .saturating_add(Weight::from_parts(732, 0).saturating_mul(s.into())) + // Minimum execution time: 2_331_815 nanoseconds. + Weight::from_parts(510_378_005, 0) + // Standard Error: 42 + .saturating_add(Weight::from_parts(1_952, 0).saturating_mul(i.into())) + // Standard Error: 42 + .saturating_add(Weight::from_parts(2_981, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } @@ -196,8 +205,8 @@ impl pallet_contracts::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `727` // Estimated: `0` - // Minimum execution time: 102_042 nanoseconds. - Weight::from_parts(102_042_000, 0) + // Minimum execution time: 228_951 nanoseconds. + Weight::from_parts(268_301_000, 0) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -210,12 +219,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: Contracts OwnerInfoOf (r:0 w:1) /// Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Ignored) /// The range of component `c` is `[0, 61717]`. - fn upload_code(_c: u32) -> Weight { + fn upload_code(c: u32) -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `0` - // Minimum execution time: 179_815 nanoseconds. - Weight::from_parts(4_022_303_000, 0) + // Minimum execution time: 447_811 nanoseconds. + Weight::from_parts(526_447_412, 0) + // Standard Error: 835 + .saturating_add(Weight::from_parts(175_016, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -231,8 +242,8 @@ impl pallet_contracts::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `218` // Estimated: `0` - // Minimum execution time: 16_090 nanoseconds. - Weight::from_parts(16_090_000, 0) + // Minimum execution time: 40_410 nanoseconds. + Weight::from_parts(49_250_000, 0) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -246,8 +257,8 @@ impl pallet_contracts::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `567` // Estimated: `0` - // Minimum execution time: 19_411 nanoseconds. - Weight::from_parts(19_411_000, 0) + // Minimum execution time: 47_480 nanoseconds. + Weight::from_parts(57_290_000, 0) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(6)) } @@ -262,12 +273,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_caller(_r: u32) -> Weight { + fn seal_caller(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `695 + r * (480 ±0)` + // Measured: `697 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 173_905 nanoseconds. - Weight::from_parts(398_440_000, 0) + // Minimum execution time: 372_390 nanoseconds. + Weight::from_parts(476_865_760, 0) + // Standard Error: 744_335 + .saturating_add(Weight::from_parts(36_409_937, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -282,13 +295,16 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_is_contract(_r: u32) -> Weight { + fn seal_is_contract(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `696 + r * (19211 ±0)` + // Measured: `749 + r * (19218 ±0)` // Estimated: `0` - // Minimum execution time: 175_424 nanoseconds. - Weight::from_parts(3_865_098_000, 0) - .saturating_add(T::DbWeight::get().reads(1606)) + // Minimum execution time: 372_401 nanoseconds. + Weight::from_parts(140_531_070, 0) + // Standard Error: 1_865_123 + .saturating_add(Weight::from_parts(462_201_901, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: System Account (r:1 w:0) @@ -302,13 +318,16 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_code_hash(_r: u32) -> Weight { + fn seal_code_hash(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `705 + r * (19531 ±0)` + // Measured: `741 + r * (19539 ±0)` // Estimated: `0` - // Minimum execution time: 176_775 nanoseconds. - Weight::from_parts(4_543_177_000, 0) - .saturating_add(T::DbWeight::get().reads(1606)) + // Minimum execution time: 375_671 nanoseconds. + Weight::from_parts(233_905_041, 0) + // Standard Error: 1_698_368 + .saturating_add(Weight::from_parts(538_201_180, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: System Account (r:1 w:0) @@ -322,12 +341,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_own_code_hash(_r: u32) -> Weight { + fn seal_own_code_hash(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `702 + r * (480 ±0)` + // Measured: `704 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 174_865 nanoseconds. - Weight::from_parts(402_140_000, 0) + // Minimum execution time: 376_331 nanoseconds. + Weight::from_parts(454_664_062, 0) + // Standard Error: 461_840 + .saturating_add(Weight::from_parts(45_194_203, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -342,12 +363,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_caller_is_origin(_r: u32) -> Weight { + fn seal_caller_is_origin(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `692 + r * (240 ±0)` + // Measured: `694 + r * (240 ±0)` // Estimated: `0` - // Minimum execution time: 173_064 nanoseconds. - Weight::from_parts(309_308_000, 0) + // Minimum execution time: 372_641 nanoseconds. + Weight::from_parts(451_741_155, 0) + // Standard Error: 337_133 + .saturating_add(Weight::from_parts(22_608_395, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -362,12 +385,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_address(_r: u32) -> Weight { + fn seal_address(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `696 + r * (480 ±0)` + // Measured: `698 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 172_995 nanoseconds. - Weight::from_parts(389_370_000, 0) + // Minimum execution time: 373_390 nanoseconds. + Weight::from_parts(455_581_915, 0) + // Standard Error: 351_337 + .saturating_add(Weight::from_parts(38_061_966, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -382,12 +407,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_gas_left(_r: u32) -> Weight { + fn seal_gas_left(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `697 + r * (480 ±0)` + // Measured: `699 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 173_434 nanoseconds. - Weight::from_parts(400_600_000, 0) + // Minimum execution time: 373_951 nanoseconds. + Weight::from_parts(436_724_141, 0) + // Standard Error: 526_654 + .saturating_add(Weight::from_parts(39_277_146, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -402,12 +429,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_balance(_r: u32) -> Weight { + fn seal_balance(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `696 + r * (488 ±0)` + // Measured: `873 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 172_775 nanoseconds. - Weight::from_parts(1_233_411_000, 0) + // Minimum execution time: 373_040 nanoseconds. + Weight::from_parts(510_048_107, 0) + // Standard Error: 1_188_911 + .saturating_add(Weight::from_parts(164_874_498, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -422,12 +451,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_value_transferred(_r: u32) -> Weight { + fn seal_value_transferred(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `706 + r * (480 ±0)` + // Measured: `708 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 171_744 nanoseconds. - Weight::from_parts(429_791_000, 0) + // Minimum execution time: 370_661 nanoseconds. + Weight::from_parts(464_743_072, 0) + // Standard Error: 389_720 + .saturating_add(Weight::from_parts(34_707_919, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -442,12 +473,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_minimum_balance(_r: u32) -> Weight { + fn seal_minimum_balance(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `704 + r * (480 ±0)` + // Measured: `706 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 174_004 nanoseconds. - Weight::from_parts(398_920_000, 0) + // Minimum execution time: 373_821 nanoseconds. + Weight::from_parts(457_544_246, 0) + // Standard Error: 342_484 + .saturating_add(Weight::from_parts(37_066_167, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -462,12 +495,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_block_number(_r: u32) -> Weight { + fn seal_block_number(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `701 + r * (480 ±0)` + // Measured: `703 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 173_704 nanoseconds. - Weight::from_parts(435_591_000, 0) + // Minimum execution time: 372_531 nanoseconds. + Weight::from_parts(461_517_147, 0) + // Standard Error: 423_642 + .saturating_add(Weight::from_parts(37_619_649, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -482,12 +517,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_now(_r: u32) -> Weight { + fn seal_now(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `692 + r * (480 ±0)` + // Measured: `694 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 172_924 nanoseconds. - Weight::from_parts(398_800_000, 0) + // Minimum execution time: 373_951 nanoseconds. + Weight::from_parts(471_348_887, 0) + // Standard Error: 461_267 + .saturating_add(Weight::from_parts(35_572_043, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -504,12 +541,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_weight_to_fee(_r: u32) -> Weight { + fn seal_weight_to_fee(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `703 + r * (805 ±0)` + // Measured: `809 + r * (800 ±0)` // Estimated: `0` - // Minimum execution time: 194_355 nanoseconds. - Weight::from_parts(1_186_620_000, 0) + // Minimum execution time: 373_160 nanoseconds. + Weight::from_parts(476_375_827, 0) + // Standard Error: 703_470 + .saturating_add(Weight::from_parts(159_986_083, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -524,12 +563,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_gas(_r: u32) -> Weight { + fn seal_gas(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `659 + r * (320 ±0)` + // Measured: `661 + r * (320 ±0)` // Estimated: `0` - // Minimum execution time: 96_473 nanoseconds. - Weight::from_parts(236_846_000, 0) + // Minimum execution time: 196_551 nanoseconds. + Weight::from_parts(236_901_120, 0) + // Standard Error: 246_159 + .saturating_add(Weight::from_parts(16_806_917, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -544,12 +585,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_input(_r: u32) -> Weight { + fn seal_input(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `694 + r * (480 ±0)` + // Measured: `696 + r * (480 ±0)` // Estimated: `0` - // Minimum execution time: 173_754 nanoseconds. - Weight::from_parts(388_760_000, 0) + // Minimum execution time: 373_561 nanoseconds. + Weight::from_parts(456_913_040, 0) + // Standard Error: 381_825 + .saturating_add(Weight::from_parts(32_528_974, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -564,12 +607,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 1024]`. - fn seal_input_per_kb(_n: u32) -> Weight { + fn seal_input_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: // Measured: `1176` // Estimated: `0` - // Minimum execution time: 186_675 nanoseconds. - Weight::from_parts(18_309_830_000, 0) + // Minimum execution time: 405_761 nanoseconds. + Weight::from_parts(469_301_224, 0) + // Standard Error: 28_817 + .saturating_add(Weight::from_parts(12_130_953, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -584,12 +629,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_return(_r: u32) -> Weight { + fn seal_return(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `684 + r * (8 ±0)` // Estimated: `0` - // Minimum execution time: 170_794 nanoseconds. - Weight::from_parts(176_204_000, 0) + // Minimum execution time: 368_561 nanoseconds. + Weight::from_parts(451_273_430, 0) + // Standard Error: 6_515_716 + .saturating_add(Weight::from_parts(482_669, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -604,12 +651,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 1024]`. - fn seal_return_per_kb(_n: u32) -> Weight { + fn seal_return_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `692` + // Measured: `694` // Estimated: `0` - // Minimum execution time: 171_734 nanoseconds. - Weight::from_parts(445_731_000, 0) + // Minimum execution time: 370_231 nanoseconds. + Weight::from_parts(465_472_667, 0) + // Standard Error: 15_743 + .saturating_add(Weight::from_parts(253_489, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -628,14 +677,18 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:3 w:3) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_terminate(_r: u32) -> Weight { + fn seal_terminate(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `726 + r * (285 ±0)` // Estimated: `0` - // Minimum execution time: 173_994 nanoseconds. - Weight::from_parts(230_156_000, 0) - .saturating_add(T::DbWeight::get().reads(11)) - .saturating_add(T::DbWeight::get().writes(9)) + // Minimum execution time: 372_101 nanoseconds. + Weight::from_parts(448_849_726, 0) + // Standard Error: 5_514_552 + .saturating_add(Weight::from_parts(93_040_573, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(r.into()))) } /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -650,12 +703,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_random(_r: u32) -> Weight { + fn seal_random(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `697 + r * (803 ±0)` + // Measured: `775 + r * (800 ±0)` // Estimated: `0` - // Minimum execution time: 171_664 nanoseconds. - Weight::from_parts(1_233_671_000, 0) + // Minimum execution time: 373_251 nanoseconds. + Weight::from_parts(459_699_605, 0) + // Standard Error: 727_496 + .saturating_add(Weight::from_parts(205_088_259, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -670,12 +725,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_deposit_event(_r: u32) -> Weight { + fn seal_deposit_event(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `692 + r * (800 ±0)` + // Measured: `694 + r * (800 ±0)` // Estimated: `0` - // Minimum execution time: 176_445 nanoseconds. - Weight::from_parts(2_172_755_000, 0) + // Minimum execution time: 370_051 nanoseconds. + Weight::from_parts(438_086_622, 0) + // Standard Error: 790_178 + .saturating_add(Weight::from_parts(397_599_297, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -693,14 +750,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// The range of component `n` is `[0, 16]`. fn seal_deposit_event_per_topic_and_kb(t: u32, n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1598 + t * (2600 ±0) + n * (10 ±0)` + // Measured: `1630 + t * (2608 ±0) + n * (8 ±0)` // Estimated: `0` - // Minimum execution time: 466_252 nanoseconds. - Weight::from_parts(287_492_500, 0) - // Standard Error: 5_003_245 - .saturating_add(Weight::from_parts(113_174_125, 0).saturating_mul(t.into())) - // Standard Error: 1_250_811 - .saturating_add(Weight::from_parts(11_172_468, 0).saturating_mul(n.into())) + // Minimum execution time: 1_802_725 nanoseconds. + Weight::from_parts(852_897_158, 0) + // Standard Error: 3_127_556 + .saturating_add(Weight::from_parts(302_274_453, 0).saturating_mul(t.into())) + // Standard Error: 858_978 + .saturating_add(Weight::from_parts(106_450_863, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes(3)) @@ -717,146 +774,188 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_debug_message(_r: u32) -> Weight { + fn seal_debug_message(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `691 + r * (800 ±0)` + // Measured: `693 + r * (800 ±0)` // Estimated: `0` - // Minimum execution time: 102_063 nanoseconds. - Weight::from_parts(343_079_000, 0) + // Minimum execution time: 211_790 nanoseconds. + Weight::from_parts(253_046_166, 0) + // Standard Error: 233_833 + .saturating_add(Weight::from_parts(26_380_907, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 10]`. - fn seal_set_storage(_r: u32) -> Weight { + fn seal_set_storage(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `694 + r * (23412 ±0)` + // Measured: `720 + r * (23420 ±0)` // Estimated: `0` - // Minimum execution time: 184_665 nanoseconds. - Weight::from_parts(3_528_681_000, 0) - .saturating_add(T::DbWeight::get().reads(806)) - .saturating_add(T::DbWeight::get().writes(803)) + // Minimum execution time: 373_161 nanoseconds. + Weight::from_parts(342_179_957, 0) + // Standard Error: 2_706_339 + .saturating_add(Weight::from_parts(785_547_282, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((80_u64).saturating_mul(r.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 8]`. - fn seal_set_storage_per_new_kb(_n: u32) -> Weight { + fn seal_set_storage_per_new_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1931 + n * (13146 ±0)` + // Measured: `12402 + n * (12006 ±0)` // Estimated: `0` - // Minimum execution time: 254_867 nanoseconds. - Weight::from_parts(651_147_000, 0) - .saturating_add(T::DbWeight::get().reads(87)) - .saturating_add(T::DbWeight::get().writes(85)) + // Minimum execution time: 595_541 nanoseconds. + Weight::from_parts(1_021_154_936, 0) + // Standard Error: 3_184_757 + .saturating_add(Weight::from_parts(160_421_420, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(52)) + .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(50)) + .saturating_add(T::DbWeight::get().writes((7_u64).saturating_mul(n.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 8]`. - fn seal_set_storage_per_old_kb(_n: u32) -> Weight { + fn seal_set_storage_per_old_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1931 + n * (177300 ±0)` + // Measured: `14990 + n * (175775 ±0)` // Estimated: `0` - // Minimum execution time: 266_557 nanoseconds. - Weight::from_parts(628_756_000, 0) - .saturating_add(T::DbWeight::get().reads(86)) - .saturating_add(T::DbWeight::get().writes(83)) + // Minimum execution time: 593_591 nanoseconds. + Weight::from_parts(963_969_421, 0) + // Standard Error: 2_784_028 + .saturating_add(Weight::from_parts(120_308_782, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(51)) + .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(49)) + .saturating_add(T::DbWeight::get().writes((7_u64).saturating_mul(n.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 10]`. - fn seal_clear_storage(_r: u32) -> Weight { + fn seal_clear_storage(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `694 + r * (23092 ±0)` + // Measured: `720 + r * (23100 ±0)` // Estimated: `0` - // Minimum execution time: 175_885 nanoseconds. - Weight::from_parts(3_409_749_000, 0) - .saturating_add(T::DbWeight::get().reads(806)) - .saturating_add(T::DbWeight::get().writes(803)) + // Minimum execution time: 376_051 nanoseconds. + Weight::from_parts(333_556_076, 0) + // Standard Error: 2_485_494 + .saturating_add(Weight::from_parts(765_161_529, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((80_u64).saturating_mul(r.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 8]`. - fn seal_clear_storage_per_kb(_n: u32) -> Weight { + fn seal_clear_storage_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1435 + n * (177322 ±0)` + // Measured: `14670 + n * (175775 ±0)` // Estimated: `0` - // Minimum execution time: 244_096 nanoseconds. - Weight::from_parts(599_955_000, 0) - .saturating_add(T::DbWeight::get().reads(86)) - .saturating_add(T::DbWeight::get().writes(83)) + // Minimum execution time: 543_432 nanoseconds. + Weight::from_parts(934_552_910, 0) + // Standard Error: 2_935_698 + .saturating_add(Weight::from_parts(120_632_071, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(51)) + .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(48)) + .saturating_add(T::DbWeight::get().writes((7_u64).saturating_mul(n.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 10]`. - fn seal_get_storage(_r: u32) -> Weight { + fn seal_get_storage(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `703 + r * (23732 ±0)` + // Measured: `730 + r * (23740 ±0)` // Estimated: `0` - // Minimum execution time: 175_955 nanoseconds. - Weight::from_parts(2_709_320_000, 0) - .saturating_add(T::DbWeight::get().reads(806)) + // Minimum execution time: 374_881 nanoseconds. + Weight::from_parts(376_682_471, 0) + // Standard Error: 2_163_407 + .saturating_add(Weight::from_parts(645_678_089, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 8]`. - fn seal_get_storage_per_kb(_n: u32) -> Weight { + fn seal_get_storage_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1764 + n * (177363 ±0)` + // Measured: `15321 + n * (175775 ±0)` // Estimated: `0` - // Minimum execution time: 235_166 nanoseconds. - Weight::from_parts(610_066_000, 0) - .saturating_add(T::DbWeight::get().reads(86)) + // Minimum execution time: 514_911 nanoseconds. + Weight::from_parts(901_753_961, 0) + // Standard Error: 3_073_152 + .saturating_add(Weight::from_parts(268_092_838, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(51)) + .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 10]`. - fn seal_contains_storage(_r: u32) -> Weight { + fn seal_contains_storage(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `697 + r * (23092 ±0)` + // Measured: `723 + r * (23100 ±0)` // Estimated: `0` - // Minimum execution time: 177_305 nanoseconds. - Weight::from_parts(2_626_618_000, 0) - .saturating_add(T::DbWeight::get().reads(806)) + // Minimum execution time: 375_781 nanoseconds. + Weight::from_parts(376_656_280, 0) + // Standard Error: 1_745_890 + .saturating_add(Weight::from_parts(609_711_562, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 8]`. - fn seal_contains_storage_per_kb(_n: u32) -> Weight { + fn seal_contains_storage_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1438 + n * (177322 ±0)` + // Measured: `14673 + n * (175775 ±0)` // Estimated: `0` - // Minimum execution time: 218_365 nanoseconds. - Weight::from_parts(542_574_000, 0) - .saturating_add(T::DbWeight::get().reads(86)) + // Minimum execution time: 505_481 nanoseconds. + Weight::from_parts(827_166_600, 0) + // Standard Error: 2_292_810 + .saturating_add(Weight::from_parts(114_430_176, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(51)) + .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 10]`. - fn seal_take_storage(_r: u32) -> Weight { + fn seal_take_storage(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `704 + r * (23732 ±0)` + // Measured: `731 + r * (23740 ±0)` // Estimated: `0` - // Minimum execution time: 198_385 nanoseconds. - Weight::from_parts(3_505_881_000, 0) - .saturating_add(T::DbWeight::get().reads(806)) - .saturating_add(T::DbWeight::get().writes(803)) + // Minimum execution time: 375_801 nanoseconds. + Weight::from_parts(345_672_663, 0) + // Standard Error: 2_690_704 + .saturating_add(Weight::from_parts(811_617_030, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((80_u64).saturating_mul(r.into()))) } /// Storage: Skipped Metadata (r:0 w:0) /// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 8]`. - fn seal_take_storage_per_kb(_n: u32) -> Weight { + fn seal_take_storage_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1765 + n * (177363 ±0)` + // Measured: `15322 + n * (175775 ±0)` // Estimated: `0` - // Minimum execution time: 236_026 nanoseconds. - Weight::from_parts(666_147_000, 0) - .saturating_add(T::DbWeight::get().reads(86)) - .saturating_add(T::DbWeight::get().writes(83)) + // Minimum execution time: 549_851 nanoseconds. + Weight::from_parts(953_956_973, 0) + // Standard Error: 3_160_926 + .saturating_add(Weight::from_parts(287_644_412, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(51)) + .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(48)) + .saturating_add(T::DbWeight::get().writes((7_u64).saturating_mul(n.into()))) } /// Storage: System Account (r:1602 w:1601) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -869,14 +968,18 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_transfer(_r: u32) -> Weight { + fn seal_transfer(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `717 + r * (3631 ±0)` + // Measured: `1322 + r * (3601 ±0)` // Estimated: `0` - // Minimum execution time: 176_465 nanoseconds. - Weight::from_parts(13_119_076_000, 0) - .saturating_add(T::DbWeight::get().reads(1607)) - .saturating_add(T::DbWeight::get().writes(1604)) + // Minimum execution time: 376_691 nanoseconds. + Weight::from_parts(395_809_124, 0) + // Standard Error: 2_965_424 + .saturating_add(Weight::from_parts(2_320_023_998, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().reads((80_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(T::DbWeight::get().writes((80_u64).saturating_mul(r.into()))) } /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -889,14 +992,18 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:1602 w:1602) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_call(_r: u32) -> Weight { + fn seal_call(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `718 + r * (20498 ±0)` + // Measured: `948 + r * (20495 ±0)` // Estimated: `0` - // Minimum execution time: 176_234 nanoseconds. - Weight::from_parts(226_800_040_000, 0) - .saturating_add(T::DbWeight::get().reads(3207)) - .saturating_add(T::DbWeight::get().writes(3203)) + // Minimum execution time: 376_431 nanoseconds. + Weight::from_parts(381_331_000, 0) + // Standard Error: 29_375_102 + .saturating_add(Weight::from_parts(33_644_863_948, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().reads((160_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((160_u64).saturating_mul(r.into()))) } /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -909,14 +1016,18 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:1537 w:1537) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_delegate_call(_r: u32) -> Weight { + fn seal_delegate_call(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `703 + r * (74458 ±0)` + // Measured: `0 + r * (71670 ±0)` // Estimated: `0` - // Minimum execution time: 177_375 nanoseconds. - Weight::from_parts(226_439_247_000, 0) - .saturating_add(T::DbWeight::get().reads(3076)) - .saturating_add(T::DbWeight::get().writes(1538)) + // Minimum execution time: 378_351 nanoseconds. + Weight::from_parts(433_201_000, 0) + // Standard Error: 22_581_471 + .saturating_add(Weight::from_parts(33_215_908_203, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((150_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((75_u64).saturating_mul(r.into()))) } /// Storage: System Account (r:82 w:81) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -934,12 +1045,12 @@ impl pallet_contracts::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `21128 + t * (15897 ±0)` // Estimated: `0` - // Minimum execution time: 5_581_492 nanoseconds. - Weight::from_parts(4_935_940_999, 0) - // Standard Error: 11_041_823 - .saturating_add(Weight::from_parts(645_551_000, 0).saturating_mul(t.into())) - // Standard Error: 10_783 - .saturating_add(Weight::from_parts(17_775_676, 0).saturating_mul(c.into())) + // Minimum execution time: 17_107_858 nanoseconds. + Weight::from_parts(16_043_302_144, 0) + // Standard Error: 58_116_472 + .saturating_add(Weight::from_parts(1_846_422_945, 0).saturating_mul(t.into())) + // Standard Error: 87_142 + .saturating_add(Weight::from_parts(13_152_589, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(167)) .saturating_add(T::DbWeight::get().reads((81_u64).saturating_mul(t.into()))) .saturating_add(T::DbWeight::get().writes(163)) @@ -960,14 +1071,18 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:1602 w:1602) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_instantiate(_r: u32) -> Weight { + fn seal_instantiate(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `742 + r * (25594 ±0)` + // Measured: `1512 + r * (25573 ±0)` // Estimated: `0` - // Minimum execution time: 175_805 nanoseconds. - Weight::from_parts(321_382_493_000, 0) - .saturating_add(T::DbWeight::get().reads(8008)) - .saturating_add(T::DbWeight::get().writes(8006)) + // Minimum execution time: 381_671 nanoseconds. + Weight::from_parts(443_361_000, 0) + // Standard Error: 56_475_539 + .saturating_add(Weight::from_parts(43_697_686_582, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(8)) + .saturating_add(T::DbWeight::get().reads((400_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().writes((400_u64).saturating_mul(r.into()))) } /// Storage: System Account (r:82 w:82) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -986,18 +1101,20 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// The range of component `t` is `[0, 1]`. /// The range of component `i` is `[0, 960]`. /// The range of component `s` is `[0, 960]`. - fn seal_instantiate_per_transfer_input_salt_kb(_t: u32, i: u32, s: u32) -> Weight { + fn seal_instantiate_per_transfer_input_salt_kb(t: u32, i: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `5156 + t * (68 ±0)` + // Measured: `5505 + t * (68 ±0)` // Estimated: `0` - // Minimum execution time: 71_057_159 nanoseconds. - Weight::from_parts(71_057_159_000, 0) - // Standard Error: 25_212_820 - .saturating_add(Weight::from_parts(66_641_535, 0).saturating_mul(i.into())) - // Standard Error: 25_212_820 - .saturating_add(Weight::from_parts(66_615_773, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(307)) - .saturating_add(T::DbWeight::get().writes(304)) + // Minimum execution time: 189_683_742 nanoseconds. + Weight::from_parts(191_893_498_000, 0) + // Standard Error: 1_450_448 + .saturating_add(Weight::from_parts(109_556_339, 0).saturating_mul(i.into())) + // Standard Error: 1_450_448 + .saturating_add(Weight::from_parts(105_093_613, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(249)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(t.into()))) + .saturating_add(T::DbWeight::get().writes(247)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(t.into()))) } /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -1010,12 +1127,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_hash_sha2_256(_r: u32) -> Weight { + fn seal_hash_sha2_256(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `691 + r * (642 ±0)` // Estimated: `0` - // Minimum execution time: 173_775 nanoseconds. - Weight::from_parts(189_505_000, 0) + // Minimum execution time: 370_911 nanoseconds. + Weight::from_parts(454_911_953, 0) + // Standard Error: 6_307_367 + .saturating_add(Weight::from_parts(33_770_346, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1030,12 +1149,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 1024]`. - fn seal_hash_sha2_256_per_kb(_n: u32) -> Weight { + fn seal_hash_sha2_256_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1333` + // Measured: `1493` // Estimated: `0` - // Minimum execution time: 189_384 nanoseconds. - Weight::from_parts(46_429_658_000, 0) + // Minimum execution time: 419_851 nanoseconds. + Weight::from_parts(563_700_369, 0) + // Standard Error: 86_058 + .saturating_add(Weight::from_parts(79_816_436, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1050,12 +1171,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_hash_keccak_256(_r: u32) -> Weight { + fn seal_hash_keccak_256(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `693 + r * (642 ±0)` // Estimated: `0` - // Minimum execution time: 171_414 nanoseconds. - Weight::from_parts(208_715_000, 0) + // Minimum execution time: 370_391 nanoseconds. + Weight::from_parts(443_662_740, 0) + // Standard Error: 6_359_305 + .saturating_add(Weight::from_parts(123_904_859, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1070,12 +1193,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 1024]`. - fn seal_hash_keccak_256_per_kb(_n: u32) -> Weight { + fn seal_hash_keccak_256_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1335` + // Measured: `1495` // Estimated: `0` - // Minimum execution time: 209_756 nanoseconds. - Weight::from_parts(175_664_912_000, 0) + // Minimum execution time: 453_621 nanoseconds. + Weight::from_parts(510_883_151, 0) + // Standard Error: 328_339 + .saturating_add(Weight::from_parts(334_185_553, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1090,12 +1215,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_hash_blake2_256(_r: u32) -> Weight { + fn seal_hash_blake2_256(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `693 + r * (642 ±0)` // Estimated: `0` - // Minimum execution time: 175_004 nanoseconds. - Weight::from_parts(200_015_000, 0) + // Minimum execution time: 369_611 nanoseconds. + Weight::from_parts(447_081_130, 0) + // Standard Error: 6_014_639 + .saturating_add(Weight::from_parts(707_866_169, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1110,12 +1237,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 1024]`. - fn seal_hash_blake2_256_per_kb(_n: u32) -> Weight { + fn seal_hash_blake2_256_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1335` + // Measured: `1495` // Estimated: `0` - // Minimum execution time: 201_325 nanoseconds. - Weight::from_parts(68_755_378_000, 0) + // Minimum execution time: 535_971 nanoseconds. + Weight::from_parts(963_976_677, 0) + // Standard Error: 185_438 + .saturating_add(Weight::from_parts(145_209_174, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1130,12 +1259,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_hash_blake2_128(_r: u32) -> Weight { + fn seal_hash_blake2_128(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `693 + r * (642 ±0)` // Estimated: `0` - // Minimum execution time: 172_824 nanoseconds. - Weight::from_parts(195_655_000, 0) + // Minimum execution time: 369_141 nanoseconds. + Weight::from_parts(450_974_714, 0) + // Standard Error: 6_233_732 + .saturating_add(Weight::from_parts(103_403_485, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1150,12 +1281,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `n` is `[0, 1024]`. - fn seal_hash_blake2_128_per_kb(_n: u32) -> Weight { + fn seal_hash_blake2_128_per_kb(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1335` + // Measured: `1495` // Estimated: `0` - // Minimum execution time: 202_786 nanoseconds. - Weight::from_parts(68_773_308_000, 0) + // Minimum execution time: 425_391 nanoseconds. + Weight::from_parts(535_996_920, 0) + // Standard Error: 128_427 + .saturating_add(Weight::from_parts(145_977_335, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1170,12 +1303,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_ecdsa_recover(_r: u32) -> Weight { + fn seal_ecdsa_recover(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `737 + r * (6083 ±0)` // Estimated: `0` - // Minimum execution time: 174_755 nanoseconds. - Weight::from_parts(2_769_740_000, 0) + // Minimum execution time: 374_071 nanoseconds. + Weight::from_parts(448_879_583, 0) + // Standard Error: 6_289_470 + .saturating_add(Weight::from_parts(5_364_455_516, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1190,12 +1325,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 1]`. - fn seal_ecdsa_to_eth_address(_r: u32) -> Weight { + fn seal_ecdsa_to_eth_address(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `706 + r * (3362 ±0)` // Estimated: `0` - // Minimum execution time: 175_395 nanoseconds. - Weight::from_parts(600_975_000, 0) + // Minimum execution time: 373_781 nanoseconds. + Weight::from_parts(465_446_085, 0) + // Standard Error: 8_340_917 + .saturating_add(Weight::from_parts(1_305_631_914, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1212,14 +1349,18 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:1538 w:1538) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_set_code_hash(_r: u32) -> Weight { + fn seal_set_code_hash(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `698 + r * (81746 ±0)` + // Measured: `0 + r * (79300 ±0)` // Estimated: `0` - // Minimum execution time: 173_474 nanoseconds. - Weight::from_parts(19_254_512_000, 0) - .saturating_add(T::DbWeight::get().reads(4613)) - .saturating_add(T::DbWeight::get().writes(3075)) + // Minimum execution time: 374_451 nanoseconds. + Weight::from_parts(437_481_000, 0) + // Standard Error: 9_632_424 + .saturating_add(Weight::from_parts(2_866_065_318, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((225_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((150_u64).saturating_mul(r.into()))) } /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: Ignored) @@ -1232,12 +1373,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_reentrance_count(_r: u32) -> Weight { + fn seal_reentrance_count(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `687 + r * (240 ±0)` + // Measured: `689 + r * (240 ±0)` // Estimated: `0` - // Minimum execution time: 182_275 nanoseconds. - Weight::from_parts(312_438_000, 0) + // Minimum execution time: 376_041 nanoseconds. + Weight::from_parts(455_809_468, 0) + // Standard Error: 314_547 + .saturating_add(Weight::from_parts(22_290_995, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1252,12 +1395,14 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_account_reentrance_count(_r: u32) -> Weight { + fn seal_account_reentrance_count(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `704 + r * (3169 ±0)` + // Measured: `1387 + r * (3140 ±0)` // Estimated: `0` - // Minimum execution time: 174_775 nanoseconds. - Weight::from_parts(433_051_000, 0) + // Minimum execution time: 379_831 nanoseconds. + Weight::from_parts(561_378_274, 0) + // Standard Error: 429_319 + .saturating_add(Weight::from_parts(34_733_895, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -1274,429 +1419,535 @@ impl pallet_contracts::weights::WeightInfo for WeightIn /// Storage: System EventTopics (r:2 w:2) /// Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Ignored) /// The range of component `r` is `[0, 20]`. - fn seal_instantiation_nonce(_r: u32) -> Weight { + fn seal_instantiation_nonce(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `690 + r * (240 ±0)` + // Measured: `692 + r * (240 ±0)` // Estimated: `0` - // Minimum execution time: 175_375 nanoseconds. - Weight::from_parts(317_528_000, 0) + // Minimum execution time: 373_671 nanoseconds. + Weight::from_parts(475_085_212, 0) + // Standard Error: 380_687 + .saturating_add(Weight::from_parts(16_409_940, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(4)) } /// The range of component `r` is `[0, 50]`. - fn instr_i64const(_r: u32) -> Weight { + fn instr_i64const(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_250 nanoseconds. - Weight::from_parts(14_320_000, 0) + // Minimum execution time: 1_660 nanoseconds. + Weight::from_parts(3_168_062, 0) + // Standard Error: 5_526 + .saturating_add(Weight::from_parts(571_579, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64load(_r: u32) -> Weight { + fn instr_i64load(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_560 nanoseconds. - Weight::from_parts(273_497_000, 0) + // Minimum execution time: 1_710 nanoseconds. + Weight::from_parts(4_516_931, 0) + // Standard Error: 83_416 + .saturating_add(Weight::from_parts(2_087_407, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64store(_r: u32) -> Weight { + fn instr_i64store(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_500 nanoseconds. - Weight::from_parts(147_333_000, 0) + // Minimum execution time: 1_760 nanoseconds. + Weight::from_parts(7_877_061, 0) + // Standard Error: 15_747 + .saturating_add(Weight::from_parts(1_609_519, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_select(_r: u32) -> Weight { + fn instr_select(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_250 nanoseconds. - Weight::from_parts(65_622_000, 0) + // Minimum execution time: 1_500 nanoseconds. + Weight::from_parts(2_958_548, 0) + // Standard Error: 15_164 + .saturating_add(Weight::from_parts(1_568_447, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_if(_r: u32) -> Weight { + fn instr_if(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_220 nanoseconds. - Weight::from_parts(71_172_000, 0) + // Minimum execution time: 1_470 nanoseconds. + Weight::from_parts(1_996_972, 0) + // Standard Error: 14_597 + .saturating_add(Weight::from_parts(1_953_898, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_br(_r: u32) -> Weight { + fn instr_br(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_280 nanoseconds. - Weight::from_parts(35_310_000, 0) + // Minimum execution time: 1_590 nanoseconds. + Weight::from_parts(1_766_553, 0) + // Standard Error: 8_065 + .saturating_add(Weight::from_parts(963_351, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_br_if(_r: u32) -> Weight { + fn instr_br_if(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_300 nanoseconds. - Weight::from_parts(56_291_000, 0) + // Minimum execution time: 1_500 nanoseconds. + Weight::from_parts(1_416_954, 0) + // Standard Error: 11_542 + .saturating_add(Weight::from_parts(1_325_071, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_br_table(_r: u32) -> Weight { + fn instr_br_table(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_210 nanoseconds. - Weight::from_parts(58_811_000, 0) + // Minimum execution time: 1_570 nanoseconds. + Weight::from_parts(1_345_137, 0) + // Standard Error: 12_050 + .saturating_add(Weight::from_parts(1_695_664, 0).saturating_mul(r.into())) } /// The range of component `e` is `[1, 256]`. - fn instr_br_table_per_entry(_e: u32) -> Weight { + fn instr_br_table_per_entry(e: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_120 nanoseconds. - Weight::from_parts(4_860_000, 0) + // Minimum execution time: 5_530 nanoseconds. + Weight::from_parts(6_821_544, 0) + // Standard Error: 369 + .saturating_add(Weight::from_parts(5_216, 0).saturating_mul(e.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_call(_r: u32) -> Weight { + fn instr_call(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_320 nanoseconds. - Weight::from_parts(210_196_000, 0) + // Minimum execution time: 1_520 nanoseconds. + Weight::from_parts(3_273_726, 0) + // Standard Error: 36_533 + .saturating_add(Weight::from_parts(5_189_851, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_call_indirect(_r: u32) -> Weight { + fn instr_call_indirect(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_430 nanoseconds. - Weight::from_parts(305_568_000, 0) + // Minimum execution time: 1_880 nanoseconds. + Weight::from_parts(14_122_632, 0) + // Standard Error: 44_455 + .saturating_add(Weight::from_parts(5_295_954, 0).saturating_mul(r.into())) } /// The range of component `p` is `[0, 128]`. - fn instr_call_indirect_per_param(_p: u32) -> Weight { + fn instr_call_indirect_per_param(p: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_010 nanoseconds. - Weight::from_parts(42_741_000, 0) + // Minimum execution time: 7_470 nanoseconds. + Weight::from_parts(14_922_938, 0) + // Standard Error: 5_230 + .saturating_add(Weight::from_parts(291_823, 0).saturating_mul(p.into())) } /// The range of component `l` is `[0, 1024]`. - fn instr_call_per_local(_l: u32) -> Weight { + fn instr_call_per_local(l: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_600 nanoseconds. - Weight::from_parts(12_971_000, 0) + // Minimum execution time: 6_180 nanoseconds. + Weight::from_parts(8_670_245, 0) + // Standard Error: 751 + .saturating_add(Weight::from_parts(85_677, 0).saturating_mul(l.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_local_get(_r: u32) -> Weight { + fn instr_local_get(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_640 nanoseconds. - Weight::from_parts(23_371_000, 0) + // Minimum execution time: 3_660 nanoseconds. + Weight::from_parts(4_891_829, 0) + // Standard Error: 7_656 + .saturating_add(Weight::from_parts(771_850, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_local_set(_r: u32) -> Weight { + fn instr_local_set(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_660 nanoseconds. - Weight::from_parts(24_590_000, 0) + // Minimum execution time: 3_620 nanoseconds. + Weight::from_parts(4_735_955, 0) + // Standard Error: 9_087 + .saturating_add(Weight::from_parts(1_078_303, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_local_tee(_r: u32) -> Weight { + fn instr_local_tee(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_840 nanoseconds. - Weight::from_parts(29_981_000, 0) + // Minimum execution time: 3_270 nanoseconds. + Weight::from_parts(4_593_509, 0) + // Standard Error: 11_409 + .saturating_add(Weight::from_parts(1_326_807, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_global_get(_r: u32) -> Weight { + fn instr_global_get(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_460 nanoseconds. - Weight::from_parts(87_812_000, 0) + // Minimum execution time: 1_570 nanoseconds. + Weight::from_parts(4_167_653, 0) + // Standard Error: 16_230 + .saturating_add(Weight::from_parts(1_524_288, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_global_set(_r: u32) -> Weight { + fn instr_global_set(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_720 nanoseconds. - Weight::from_parts(85_122_000, 0) + // Minimum execution time: 1_760 nanoseconds. + Weight::from_parts(1_918_192, 0) + // Standard Error: 15_384 + .saturating_add(Weight::from_parts(1_829_680, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_memory_current(_r: u32) -> Weight { + fn instr_memory_current(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_651 nanoseconds. - Weight::from_parts(52_571_000, 0) + // Minimum execution time: 1_900 nanoseconds. + Weight::from_parts(3_163_935, 0) + // Standard Error: 10_556 + .saturating_add(Weight::from_parts(1_329_884, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 1]`. - fn instr_memory_grow(_r: u32) -> Weight { + fn instr_memory_grow(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_470 nanoseconds. - Weight::from_parts(138_103_000, 0) + // Minimum execution time: 1_650 nanoseconds. + Weight::from_parts(1_910_965, 0) + // Standard Error: 590_041 + .saturating_add(Weight::from_parts(273_492_034, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64clz(_r: u32) -> Weight { + fn instr_i64clz(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_230 nanoseconds. - Weight::from_parts(29_451_000, 0) + // Minimum execution time: 1_650 nanoseconds. + Weight::from_parts(3_501_879, 0) + // Standard Error: 10_283 + .saturating_add(Weight::from_parts(869_051, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64ctz(_r: u32) -> Weight { + fn instr_i64ctz(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_320 nanoseconds. - Weight::from_parts(29_631_000, 0) + // Minimum execution time: 1_650 nanoseconds. + Weight::from_parts(3_304_482, 0) + // Standard Error: 11_321 + .saturating_add(Weight::from_parts(885_112, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64popcnt(_r: u32) -> Weight { + fn instr_i64popcnt(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_460 nanoseconds. - Weight::from_parts(30_980_000, 0) + // Minimum execution time: 1_610 nanoseconds. + Weight::from_parts(2_855_883, 0) + // Standard Error: 7_818 + .saturating_add(Weight::from_parts(881_952, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64eqz(_r: u32) -> Weight { + fn instr_i64eqz(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_560 nanoseconds. - Weight::from_parts(29_891_000, 0) + // Minimum execution time: 1_470 nanoseconds. + Weight::from_parts(3_726_969, 0) + // Standard Error: 7_884 + .saturating_add(Weight::from_parts(840_088, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64extendsi32(_r: u32) -> Weight { + fn instr_i64extendsi32(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_250 nanoseconds. - Weight::from_parts(29_611_000, 0) + // Minimum execution time: 1_590 nanoseconds. + Weight::from_parts(3_127_941, 0) + // Standard Error: 9_901 + .saturating_add(Weight::from_parts(883_028, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64extendui32(_r: u32) -> Weight { + fn instr_i64extendui32(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_180 nanoseconds. - Weight::from_parts(33_711_000, 0) + // Minimum execution time: 1_590 nanoseconds. + Weight::from_parts(2_898_727, 0) + // Standard Error: 9_739 + .saturating_add(Weight::from_parts(875_353, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i32wrapi64(_r: u32) -> Weight { + fn instr_i32wrapi64(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_300 nanoseconds. - Weight::from_parts(29_861_000, 0) + // Minimum execution time: 1_450 nanoseconds. + Weight::from_parts(3_491_418, 0) + // Standard Error: 7_092 + .saturating_add(Weight::from_parts(916_425, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64eq(_r: u32) -> Weight { + fn instr_i64eq(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_210 nanoseconds. - Weight::from_parts(46_101_000, 0) + // Minimum execution time: 1_630 nanoseconds. + Weight::from_parts(2_829_404, 0) + // Standard Error: 9_690 + .saturating_add(Weight::from_parts(1_224_285, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64ne(_r: u32) -> Weight { + fn instr_i64ne(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_230 nanoseconds. - Weight::from_parts(45_991_000, 0) + // Minimum execution time: 1_530 nanoseconds. + Weight::from_parts(4_770_101, 0) + // Standard Error: 11_181 + .saturating_add(Weight::from_parts(1_138_350, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64lts(_r: u32) -> Weight { + fn instr_i64lts(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_220 nanoseconds. - Weight::from_parts(46_892_000, 0) + // Minimum execution time: 1_590 nanoseconds. + Weight::from_parts(2_647_931, 0) + // Standard Error: 11_363 + .saturating_add(Weight::from_parts(1_158_647, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64ltu(_r: u32) -> Weight { + fn instr_i64ltu(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_250 nanoseconds. - Weight::from_parts(47_132_000, 0) + // Minimum execution time: 1_650 nanoseconds. + Weight::from_parts(2_245_796, 0) + // Standard Error: 16_171 + .saturating_add(Weight::from_parts(1_209_505, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64gts(_r: u32) -> Weight { + fn instr_i64gts(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_270 nanoseconds. - Weight::from_parts(45_971_000, 0) + // Minimum execution time: 1_580 nanoseconds. + Weight::from_parts(2_564_015, 0) + // Standard Error: 20_451 + .saturating_add(Weight::from_parts(1_193_100, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64gtu(_r: u32) -> Weight { + fn instr_i64gtu(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_330 nanoseconds. - Weight::from_parts(45_902_000, 0) + // Minimum execution time: 1_670 nanoseconds. + Weight::from_parts(1_616_329, 0) + // Standard Error: 14_490 + .saturating_add(Weight::from_parts(1_226_218, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64les(_r: u32) -> Weight { + fn instr_i64les(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_220 nanoseconds. - Weight::from_parts(50_231_000, 0) + // Minimum execution time: 1_630 nanoseconds. + Weight::from_parts(3_235_449, 0) + // Standard Error: 9_510 + .saturating_add(Weight::from_parts(1_130_045, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64leu(_r: u32) -> Weight { + fn instr_i64leu(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_270 nanoseconds. - Weight::from_parts(47_121_000, 0) + // Minimum execution time: 1_640 nanoseconds. + Weight::from_parts(2_187_572, 0) + // Standard Error: 8_978 + .saturating_add(Weight::from_parts(1_146_713, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64ges(_r: u32) -> Weight { + fn instr_i64ges(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_241 nanoseconds. - Weight::from_parts(45_921_000, 0) + // Minimum execution time: 1_480 nanoseconds. + Weight::from_parts(2_755_297, 0) + // Standard Error: 9_644 + .saturating_add(Weight::from_parts(1_147_002, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64geu(_r: u32) -> Weight { + fn instr_i64geu(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_210 nanoseconds. - Weight::from_parts(45_921_000, 0) + // Minimum execution time: 1_520 nanoseconds. + Weight::from_parts(2_271_019, 0) + // Standard Error: 13_005 + .saturating_add(Weight::from_parts(1_173_251, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64add(_r: u32) -> Weight { + fn instr_i64add(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_310 nanoseconds. - Weight::from_parts(47_321_000, 0) + // Minimum execution time: 1_560 nanoseconds. + Weight::from_parts(4_637_066, 0) + // Standard Error: 10_643 + .saturating_add(Weight::from_parts(1_114_717, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64sub(_r: u32) -> Weight { + fn instr_i64sub(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_310 nanoseconds. - Weight::from_parts(45_871_000, 0) + // Minimum execution time: 1_570 nanoseconds. + Weight::from_parts(2_885_717, 0) + // Standard Error: 16_282 + .saturating_add(Weight::from_parts(1_173_908, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64mul(_r: u32) -> Weight { + fn instr_i64mul(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_220 nanoseconds. - Weight::from_parts(46_181_000, 0) + // Minimum execution time: 1_510 nanoseconds. + Weight::from_parts(2_930_571, 0) + // Standard Error: 12_242 + .saturating_add(Weight::from_parts(1_185_040, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64divs(_r: u32) -> Weight { + fn instr_i64divs(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_370 nanoseconds. - Weight::from_parts(50_561_000, 0) + // Minimum execution time: 1_600 nanoseconds. + Weight::from_parts(1_624_233, 0) + // Standard Error: 16_359 + .saturating_add(Weight::from_parts(1_390_432, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64divu(_r: u32) -> Weight { + fn instr_i64divu(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_310 nanoseconds. - Weight::from_parts(48_431_000, 0) + // Minimum execution time: 1_600 nanoseconds. + Weight::from_parts(2_410_271, 0) + // Standard Error: 16_801 + .saturating_add(Weight::from_parts(1_218_286, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64rems(_r: u32) -> Weight { + fn instr_i64rems(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_230 nanoseconds. - Weight::from_parts(50_451_000, 0) + // Minimum execution time: 1_430 nanoseconds. + Weight::from_parts(3_137_425, 0) + // Standard Error: 10_578 + .saturating_add(Weight::from_parts(1_368_263, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64remu(_r: u32) -> Weight { + fn instr_i64remu(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_450 nanoseconds. - Weight::from_parts(48_111_000, 0) + // Minimum execution time: 1_490 nanoseconds. + Weight::from_parts(2_270_098, 0) + // Standard Error: 12_685 + .saturating_add(Weight::from_parts(1_290_536, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64and(_r: u32) -> Weight { + fn instr_i64and(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_230 nanoseconds. - Weight::from_parts(47_251_000, 0) + // Minimum execution time: 1_510 nanoseconds. + Weight::from_parts(2_641_167, 0) + // Standard Error: 12_983 + .saturating_add(Weight::from_parts(1_186_671, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64or(_r: u32) -> Weight { + fn instr_i64or(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_240 nanoseconds. - Weight::from_parts(47_301_000, 0) + // Minimum execution time: 1_610 nanoseconds. + Weight::from_parts(3_370_887, 0) + // Standard Error: 9_813 + .saturating_add(Weight::from_parts(1_134_070, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64xor(_r: u32) -> Weight { + fn instr_i64xor(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_480 nanoseconds. - Weight::from_parts(45_921_000, 0) + // Minimum execution time: 1_530 nanoseconds. + Weight::from_parts(2_956_547, 0) + // Standard Error: 10_113 + .saturating_add(Weight::from_parts(1_149_330, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64shl(_r: u32) -> Weight { + fn instr_i64shl(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_300 nanoseconds. - Weight::from_parts(46_191_000, 0) + // Minimum execution time: 1_580 nanoseconds. + Weight::from_parts(2_991_547, 0) + // Standard Error: 15_007 + .saturating_add(Weight::from_parts(1_186_614, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64shrs(_r: u32) -> Weight { + fn instr_i64shrs(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_300 nanoseconds. - Weight::from_parts(47_001_000, 0) + // Minimum execution time: 1_670 nanoseconds. + Weight::from_parts(3_947_502, 0) + // Standard Error: 10_950 + .saturating_add(Weight::from_parts(1_132_980, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64shru(_r: u32) -> Weight { + fn instr_i64shru(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_290 nanoseconds. - Weight::from_parts(47_222_000, 0) + // Minimum execution time: 1_470 nanoseconds. + Weight::from_parts(2_614_403, 0) + // Standard Error: 13_580 + .saturating_add(Weight::from_parts(1_190_584, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64rotl(_r: u32) -> Weight { + fn instr_i64rotl(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_260 nanoseconds. - Weight::from_parts(46_141_000, 0) + // Minimum execution time: 1_510 nanoseconds. + Weight::from_parts(2_626_456, 0) + // Standard Error: 11_759 + .saturating_add(Weight::from_parts(1_209_798, 0).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. - fn instr_i64rotr(_r: u32) -> Weight { + fn instr_i64rotr(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_440 nanoseconds. - Weight::from_parts(46_151_000, 0) + // Minimum execution time: 1_560 nanoseconds. + Weight::from_parts(3_145_135, 0) + // Standard Error: 10_314 + .saturating_add(Weight::from_parts(1_163_468, 0).saturating_mul(r.into())) } } diff --git a/runtime/common/src/weights/pallet_democracy.rs b/runtime/common/src/weights/pallet_democracy.rs index a7b22fe78..a5f9fbf6b 100644 --- a/runtime/common/src/weights/pallet_democracy.rs +++ b/runtime/common/src/weights/pallet_democracy.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_democracy //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_democracy // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -64,8 +64,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `4835` // Estimated: `23413` - // Minimum execution time: 23_280 nanoseconds. - Weight::from_parts(23_280_000, 23413) + // Minimum execution time: 52_740 nanoseconds. + Weight::from_parts(64_651_000, 23413) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -75,8 +75,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `3591` // Estimated: `5705` - // Minimum execution time: 18_950 nanoseconds. - Weight::from_parts(18_950_000, 5705) + // Minimum execution time: 44_080 nanoseconds. + Weight::from_parts(54_891_000, 5705) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -90,8 +90,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `3500` // Estimated: `12732` - // Minimum execution time: 30_630 nanoseconds. - Weight::from_parts(30_630_000, 12732) + // Minimum execution time: 60_500 nanoseconds. + Weight::from_parts(74_880_000, 12732) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -105,8 +105,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `3522` // Estimated: `12732` - // Minimum execution time: 27_401 nanoseconds. - Weight::from_parts(27_401_000, 12732) + // Minimum execution time: 60_861 nanoseconds. + Weight::from_parts(74_420_000, 12732) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -118,8 +118,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `295` // Estimated: `5192` - // Minimum execution time: 12_601 nanoseconds. - Weight::from_parts(12_601_000, 5192) + // Minimum execution time: 25_880 nanoseconds. + Weight::from_parts(31_360_000, 5192) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -139,8 +139,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `6251` // Estimated: `31427` - // Minimum execution time: 48_421 nanoseconds. - Weight::from_parts(48_421_000, 31427) + // Minimum execution time: 114_571 nanoseconds. + Weight::from_parts(117_761_000, 31427) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(7)) } @@ -152,8 +152,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `3419` // Estimated: `6344` - // Minimum execution time: 11_181 nanoseconds. - Weight::from_parts(11_181_000, 6344) + // Minimum execution time: 23_560 nanoseconds. + Weight::from_parts(24_710_000, 6344) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -163,8 +163,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_800 nanoseconds. - Weight::from_parts(2_800_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 5_150 nanoseconds. + Weight::from_parts(5_440_000, 0).saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Democracy NextExternal (r:0 w:1) /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) @@ -172,8 +172,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_740 nanoseconds. - Weight::from_parts(2_740_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 5_170 nanoseconds. + Weight::from_parts(5_410_000, 0).saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Democracy NextExternal (r:1 w:1) /// Proof: Democracy NextExternal (max_values: Some(1), max_size: Some(132), added: 627, mode: MaxEncodedLen) @@ -185,8 +185,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `179` // Estimated: `1126` - // Minimum execution time: 12_060 nanoseconds. - Weight::from_parts(12_060_000, 1126) + // Minimum execution time: 25_400 nanoseconds. + Weight::from_parts(34_080_000, 1126) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -198,8 +198,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `3448` // Estimated: `6344` - // Minimum execution time: 14_791 nanoseconds. - Weight::from_parts(14_791_000, 6344) + // Minimum execution time: 35_771 nanoseconds. + Weight::from_parts(40_850_000, 6344) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -213,8 +213,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `6122` // Estimated: `28116` - // Minimum execution time: 40_661 nanoseconds. - Weight::from_parts(40_661_000, 28116) + // Minimum execution time: 94_010 nanoseconds. + Weight::from_parts(100_940_000, 28116) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -224,8 +224,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_560 nanoseconds. - Weight::from_parts(5_560_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 12_611 nanoseconds. + Weight::from_parts(15_100_000, 0).saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Democracy LowestUnbaked (r:1 w:1) /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) @@ -234,14 +234,18 @@ impl pallet_democracy::weights::WeightInfo for WeightIn /// Storage: Democracy ReferendumInfoOf (r:99 w:0) /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(209), added: 2684, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. - fn on_initialize_base(_r: u32) -> Weight { + fn on_initialize_base(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `150 + r * (125 ±0)` - // Estimated: `266714` - // Minimum execution time: 6_850 nanoseconds. - Weight::from_parts(186_554_000, 266714) - .saturating_add(T::DbWeight::get().reads(101)) + // Measured: `174 + r * (125 ±0)` + // Estimated: `998 + r * (2684 ±0)` + // Minimum execution time: 13_280 nanoseconds. + Weight::from_parts(14_127_260, 998) + // Standard Error: 85_267 + .saturating_add(Weight::from_parts(4_607_877, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2684).saturating_mul(r.into())) } /// Storage: Democracy LowestUnbaked (r:1 w:1) /// Proof: Democracy LowestUnbaked (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) @@ -256,14 +260,18 @@ impl pallet_democracy::weights::WeightInfo for WeightIn /// Storage: Democracy ReferendumInfoOf (r:99 w:0) /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(209), added: 2684, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. - fn on_initialize_base_with_launch_period(_r: u32) -> Weight { + fn on_initialize_base_with_launch_period(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `150 + r * (125 ±0)` - // Estimated: `285034` - // Minimum execution time: 8_340 nanoseconds. - Weight::from_parts(186_275_000, 285034) - .saturating_add(T::DbWeight::get().reads(104)) + // Measured: `174 + r * (125 ±0)` + // Estimated: `19318 + r * (2684 ±0)` + // Minimum execution time: 16_280 nanoseconds. + Weight::from_parts(21_622_107, 19318) + // Standard Error: 37_442 + .saturating_add(Weight::from_parts(4_611_492, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(Weight::from_parts(0, 2684).saturating_mul(r.into())) } /// Storage: Democracy VotingOf (r:3 w:3) /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3799), added: 6274, mode: MaxEncodedLen) @@ -272,28 +280,38 @@ impl pallet_democracy::weights::WeightInfo for WeightIn /// Storage: Balances Locks (r:1 w:1) /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. - fn delegate(_r: u32) -> Weight { + fn delegate(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `695 + r * (149 ±0)` - // Estimated: `288312` - // Minimum execution time: 21_931 nanoseconds. - Weight::from_parts(266_277_000, 288312) - .saturating_add(T::DbWeight::get().reads(103)) - .saturating_add(T::DbWeight::get().writes(103)) + // Measured: `897 + r * (147 ±0)` + // Estimated: `22596 + r * (2684 ±0)` + // Minimum execution time: 57_840 nanoseconds. + Weight::from_parts(77_974_592, 22596) + // Standard Error: 82_756 + .saturating_add(Weight::from_parts(5_829_269, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2684).saturating_mul(r.into())) } /// Storage: Democracy VotingOf (r:2 w:2) /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3799), added: 6274, mode: MaxEncodedLen) /// Storage: Democracy ReferendumInfoOf (r:99 w:99) /// Proof: Democracy ReferendumInfoOf (max_values: None, max_size: Some(209), added: 2684, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. - fn undelegate(_r: u32) -> Weight { + fn undelegate(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `497 + r * (147 ±0)` - // Estimated: `278264` - // Minimum execution time: 14_091 nanoseconds. - Weight::from_parts(250_536_000, 278264) - .saturating_add(T::DbWeight::get().reads(101)) - .saturating_add(T::DbWeight::get().writes(101)) + // Measured: `522 + r * (147 ±0)` + // Estimated: `12548 + r * (2684 ±0)` + // Minimum execution time: 33_540 nanoseconds. + Weight::from_parts(51_316_369, 12548) + // Standard Error: 45_199 + .saturating_add(Weight::from_parts(5_718_552, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2684).saturating_mul(r.into())) } /// Storage: Democracy PublicProps (r:0 w:1) /// Proof: Democracy PublicProps (max_values: Some(1), max_size: Some(16702), added: 17197, mode: MaxEncodedLen) @@ -301,8 +319,8 @@ impl pallet_democracy::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_110 nanoseconds. - Weight::from_parts(2_110_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 5_190 nanoseconds. + Weight::from_parts(5_960_000, 0).saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Democracy VotingOf (r:1 w:1) /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3799), added: 6274, mode: MaxEncodedLen) @@ -313,10 +331,10 @@ impl pallet_democracy::weights::WeightInfo for WeightIn /// The range of component `r` is `[0, 99]`. fn unlock_remove(_r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `326 + r * (2 ±0)` + // Measured: `554` // Estimated: `12655` - // Minimum execution time: 13_670 nanoseconds. - Weight::from_parts(16_441_000, 12655) + // Minimum execution time: 32_230 nanoseconds. + Weight::from_parts(43_644_064, 12655) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -327,12 +345,14 @@ impl pallet_democracy::weights::WeightInfo for WeightIn /// Storage: System Account (r:1 w:1) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `r` is `[0, 99]`. - fn unlock_set(_r: u32) -> Weight { + fn unlock_set(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `554 + r * (22 ±0)` + // Measured: `555 + r * (22 ±0)` // Estimated: `12655` - // Minimum execution time: 15_651 nanoseconds. - Weight::from_parts(19_570_000, 12655) + // Minimum execution time: 34_951 nanoseconds. + Weight::from_parts(41_750_676, 12655) + // Standard Error: 8_881 + .saturating_add(Weight::from_parts(54_025, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -341,12 +361,14 @@ impl pallet_democracy::weights::WeightInfo for WeightIn /// Storage: Democracy VotingOf (r:1 w:1) /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3799), added: 6274, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. - fn remove_vote(_r: u32) -> Weight { + fn remove_vote(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `445 + r * (28 ±0)` + // Measured: `760 + r * (26 ±0)` // Estimated: `8958` - // Minimum execution time: 10_660 nanoseconds. - Weight::from_parts(17_171_000, 8958) + // Minimum execution time: 23_310 nanoseconds. + Weight::from_parts(31_749_195, 8958) + // Standard Error: 7_279 + .saturating_add(Weight::from_parts(80_521, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -355,12 +377,14 @@ impl pallet_democracy::weights::WeightInfo for WeightIn /// Storage: Democracy VotingOf (r:1 w:1) /// Proof: Democracy VotingOf (max_values: None, max_size: Some(3799), added: 6274, mode: MaxEncodedLen) /// The range of component `r` is `[1, 100]`. - fn remove_other_vote(_r: u32) -> Weight { + fn remove_other_vote(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `445 + r * (28 ±0)` + // Measured: `760 + r * (26 ±0)` // Estimated: `8958` - // Minimum execution time: 10_840 nanoseconds. - Weight::from_parts(16_681_000, 8958) + // Minimum execution time: 23_340 nanoseconds. + Weight::from_parts(32_404_729, 8958) + // Standard Error: 9_008 + .saturating_add(Weight::from_parts(72_842, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/common/src/weights/pallet_identity.rs b/runtime/common/src/weights/pallet_identity.rs index 6350ca2ad..8421574d9 100644 --- a/runtime/common/src/weights/pallet_identity.rs +++ b/runtime/common/src/weights/pallet_identity.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_identity //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_identity // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -55,12 +55,14 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Storage: Identity Registrars (r:1 w:1) /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(457), added: 952, mode: MaxEncodedLen) /// The range of component `r` is `[1, 7]`. - fn add_registrar(_r: u32) -> Weight { + fn add_registrar(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `62 + r * (57 ±0)` + // Measured: `64 + r * (57 ±0)` // Estimated: `952` - // Minimum execution time: 7_880 nanoseconds. - Weight::from_parts(8_790_000, 952) + // Minimum execution time: 17_540 nanoseconds. + Weight::from_parts(19_412_422, 952) + // Standard Error: 44_718 + .saturating_add(Weight::from_parts(716_331, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -72,10 +74,10 @@ impl pallet_identity::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `474 + r * (5 ±0)` // Estimated: `7313` - // Minimum execution time: 14_540 nanoseconds. - Weight::from_parts(14_889_142, 7313) - // Standard Error: 10_405 - .saturating_add(Weight::from_parts(138_210, 0).saturating_mul(x.into())) + // Minimum execution time: 25_450 nanoseconds. + Weight::from_parts(49_207_597, 7313) + // Standard Error: 14_331 + .saturating_add(Weight::from_parts(513_639, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -86,14 +88,19 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Storage: Identity SuperOf (r:64 w:64) /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[0, 64]`. - fn set_subs_new(_s: u32) -> Weight { + fn set_subs_new(s: u32) -> Weight { // Proof Size summary in bytes: // Measured: `101` - // Estimated: `177590` - // Minimum execution time: 6_180 nanoseconds. - Weight::from_parts(106_043_000, 177590) - .saturating_add(T::DbWeight::get().reads(66)) - .saturating_add(T::DbWeight::get().writes(65)) + // Estimated: `11894 + s * (2589 ±0)` + // Minimum execution time: 13_130 nanoseconds. + Weight::from_parts(40_210_154, 11894) + // Standard Error: 39_792 + .saturating_add(Weight::from_parts(4_319_815, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(s.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 2589).saturating_mul(s.into())) } /// Storage: Identity IdentityOf (r:1 w:0) /// Proof: Identity IdentityOf (max_values: None, max_size: Some(4838), added: 7313, mode: MaxEncodedLen) @@ -102,14 +109,17 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Storage: Identity SuperOf (r:0 w:64) /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `p` is `[0, 64]`. - fn set_subs_old(_p: u32) -> Weight { + fn set_subs_old(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `101 + p * (33 ±0)` + // Measured: `226 + p * (32 ±0)` // Estimated: `11894` - // Minimum execution time: 5_530 nanoseconds. - Weight::from_parts(50_692_000, 11894) + // Minimum execution time: 13_910 nanoseconds. + Weight::from_parts(38_666_951, 11894) + // Standard Error: 51_955 + .saturating_add(Weight::from_parts(1_774_301, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(65)) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } /// Storage: Identity SubsOf (r:1 w:1) /// Proof: Identity SubsOf (max_values: None, max_size: Some(2106), added: 4581, mode: MaxEncodedLen) @@ -120,20 +130,18 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// The range of component `r` is `[1, 8]`. /// The range of component `s` is `[0, 64]`. /// The range of component `x` is `[0, 64]`. - fn clear_identity(r: u32, s: u32, x: u32) -> Weight { + fn clear_identity(_r: u32, s: u32, x: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `408 + r * (5 ±0) + s * (33 ±0) + x * (66 ±0)` + // Measured: `535 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` // Estimated: `11894` - // Minimum execution time: 22_121 nanoseconds. - Weight::from_parts(12_695_285, 11894) - // Standard Error: 60_892 - .saturating_add(Weight::from_parts(157_714, 0).saturating_mul(r.into())) - // Standard Error: 6_660 - .saturating_add(Weight::from_parts(615_843, 0).saturating_mul(s.into())) - // Standard Error: 6_660 - .saturating_add(Weight::from_parts(127_562, 0).saturating_mul(x.into())) + // Minimum execution time: 51_390 nanoseconds. + Weight::from_parts(48_950_763, 11894) + // Standard Error: 31_792 + .saturating_add(Weight::from_parts(1_828_765, 0).saturating_mul(s.into())) + // Standard Error: 31_792 + .saturating_add(Weight::from_parts(268_175, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } /// Storage: Identity Registrars (r:1 w:0) @@ -142,14 +150,16 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Proof: Identity IdentityOf (max_values: None, max_size: Some(4838), added: 7313, mode: MaxEncodedLen) /// The range of component `r` is `[1, 8]`. /// The range of component `x` is `[0, 64]`. - fn request_judgement(_r: u32, x: u32) -> Weight { + fn request_judgement(r: u32, x: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `428 + r * (57 ±0) + x * (66 ±0)` + // Measured: `431 + r * (57 ±0) + x * (66 ±0)` // Estimated: `8265` - // Minimum execution time: 15_540 nanoseconds. - Weight::from_parts(19_157_142, 8265) - // Standard Error: 135 - .saturating_add(Weight::from_parts(156_500, 0).saturating_mul(x.into())) + // Minimum execution time: 37_700 nanoseconds. + Weight::from_parts(34_649_694, 8265) + // Standard Error: 103_076 + .saturating_add(Weight::from_parts(1_038_785, 0).saturating_mul(r.into())) + // Standard Error: 11_972 + .saturating_add(Weight::from_parts(660_722, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -159,36 +169,40 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// The range of component `x` is `[0, 64]`. fn cancel_request(_r: u32, x: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `429 + x * (66 ±0)` + // Measured: `430 + x * (66 ±0)` // Estimated: `7313` - // Minimum execution time: 13_150 nanoseconds. - Weight::from_parts(16_887_142, 7313) - // Standard Error: 4_600 - .saturating_add(Weight::from_parts(156_890, 0).saturating_mul(x.into())) + // Minimum execution time: 34_050 nanoseconds. + Weight::from_parts(50_054_855, 7313) + // Standard Error: 13_231 + .saturating_add(Weight::from_parts(537_492, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Identity Registrars (r:1 w:1) /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(457), added: 952, mode: MaxEncodedLen) /// The range of component `r` is `[1, 7]`. - fn set_fee(_r: u32) -> Weight { + fn set_fee(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `121 + r * (57 ±0)` // Estimated: `952` - // Minimum execution time: 5_240 nanoseconds. - Weight::from_parts(5_750_000, 952) + // Minimum execution time: 11_460 nanoseconds. + Weight::from_parts(12_342_541, 952) + // Standard Error: 26_113 + .saturating_add(Weight::from_parts(711_064, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Identity Registrars (r:1 w:1) /// Proof: Identity Registrars (max_values: Some(1), max_size: Some(457), added: 952, mode: MaxEncodedLen) /// The range of component `r` is `[1, 7]`. - fn set_account_id(_r: u32) -> Weight { + fn set_account_id(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `121 + r * (57 ±0)` // Estimated: `952` - // Minimum execution time: 4_740 nanoseconds. - Weight::from_parts(5_200_000, 952) + // Minimum execution time: 10_260 nanoseconds. + Weight::from_parts(13_295_725, 952) + // Standard Error: 31_155 + .saturating_add(Weight::from_parts(66_512, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -199,8 +213,8 @@ impl pallet_identity::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `121 + r * (57 ±0)` // Estimated: `952` - // Minimum execution time: 4_800 nanoseconds. - Weight::from_parts(5_030_000, 952) + // Minimum execution time: 10_060 nanoseconds. + Weight::from_parts(12_931_747, 952) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -210,16 +224,14 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Proof: Identity IdentityOf (max_values: None, max_size: Some(4838), added: 7313, mode: MaxEncodedLen) /// The range of component `r` is `[1, 7]`. /// The range of component `x` is `[0, 64]`. - fn provide_judgement(r: u32, x: u32) -> Weight { + fn provide_judgement(_r: u32, x: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `508 + r * (57 ±0) + x * (66 ±0)` + // Measured: `509 + r * (57 ±0) + x * (66 ±0)` // Estimated: `8265` - // Minimum execution time: 12_260 nanoseconds. - Weight::from_parts(11_834_166, 8265) - // Standard Error: 99_592 - .saturating_add(Weight::from_parts(60_833, 0).saturating_mul(r.into())) - // Standard Error: 9_336 - .saturating_add(Weight::from_parts(231_187, 0).saturating_mul(x.into())) + // Minimum execution time: 30_500 nanoseconds. + Weight::from_parts(35_394_279, 8265) + // Standard Error: 16_146 + .saturating_add(Weight::from_parts(1_027_013, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -236,16 +248,16 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// The range of component `x` is `[0, 64]`. fn kill_identity(_r: u32, s: u32, x: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `789 + r * (9 ±0) + s * (33 ±0) + x * (66 ±0)` + // Measured: `954 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)` // Estimated: `17108` - // Minimum execution time: 30_611 nanoseconds. - Weight::from_parts(29_901_714, 17108) - // Standard Error: 33_592 - .saturating_add(Weight::from_parts(643_239, 0).saturating_mul(s.into())) - // Standard Error: 33_592 - .saturating_add(Weight::from_parts(70_255, 0).saturating_mul(x.into())) + // Minimum execution time: 74_220 nanoseconds. + Weight::from_parts(77_339_608, 17108) + // Standard Error: 36_161 + .saturating_add(Weight::from_parts(1_737_934, 0).saturating_mul(s.into())) + // Standard Error: 36_161 + .saturating_add(Weight::from_parts(184_480, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(4)) - .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } /// Storage: Identity IdentityOf (r:1 w:0) @@ -257,10 +269,10 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// The range of component `s` is `[0, 63]`. fn add_sub(_s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `101 + s * (43 ±0)` + // Measured: `355 + s * (41 ±0)` // Estimated: `14483` - // Minimum execution time: 14_570 nanoseconds. - Weight::from_parts(19_940_000, 14483) + // Minimum execution time: 36_160 nanoseconds. + Weight::from_parts(52_735_396, 14483) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -269,12 +281,14 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Storage: Identity SuperOf (r:1 w:1) /// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) /// The range of component `s` is `[1, 64]`. - fn rename_sub(_s: u32) -> Weight { + fn rename_sub(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `297 + s * (8 ±0)` + // Measured: `464 + s * (7 ±0)` // Estimated: `9902` - // Minimum execution time: 7_751 nanoseconds. - Weight::from_parts(9_820_000, 9902) + // Minimum execution time: 17_690 nanoseconds. + Weight::from_parts(22_790_076, 9902) + // Standard Error: 4_956 + .saturating_add(Weight::from_parts(32_433, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -285,12 +299,14 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Storage: Identity SubsOf (r:1 w:1) /// Proof: Identity SubsOf (max_values: None, max_size: Some(2106), added: 4581, mode: MaxEncodedLen) /// The range of component `s` is `[1, 64]`. - fn remove_sub(_s: u32) -> Weight { + fn remove_sub(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `376 + s * (40 ±0)` + // Measured: `544 + s * (39 ±0)` // Estimated: `14483` - // Minimum execution time: 17_470 nanoseconds. - Weight::from_parts(20_470_000, 14483) + // Minimum execution time: 43_240 nanoseconds. + Weight::from_parts(52_869_158, 14483) + // Standard Error: 16_108 + .saturating_add(Weight::from_parts(46_916, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -299,12 +315,14 @@ impl pallet_identity::weights::WeightInfo for WeightInf /// Storage: Identity SubsOf (r:1 w:1) /// Proof: Identity SubsOf (max_values: None, max_size: Some(2106), added: 4581, mode: MaxEncodedLen) /// The range of component `s` is `[0, 63]`. - fn quit_sub(_s: u32) -> Weight { + fn quit_sub(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `357 + s * (42 ±0)` + // Measured: `469 + s * (42 ±0)` // Estimated: `7170` - // Minimum execution time: 11_930 nanoseconds. - Weight::from_parts(15_691_000, 7170) + // Minimum execution time: 29_340 nanoseconds. + Weight::from_parts(34_148_899, 7170) + // Standard Error: 7_721 + .saturating_add(Weight::from_parts(101_826, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/common/src/weights/pallet_membership.rs b/runtime/common/src/weights/pallet_membership.rs index a76c3ed13..c268003a6 100644 --- a/runtime/common/src/weights/pallet_membership.rs +++ b/runtime/common/src/weights/pallet_membership.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_membership //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_membership // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -61,14 +61,17 @@ impl pallet_membership::weights::WeightInfo for WeightI /// Storage: AdvisoryCommittee Prime (r:0 w:1) /// Proof Skipped: AdvisoryCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 99]`. - fn add_member(_m: u32) -> Weight { + fn add_member(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `234 + m * (64 ±0)` - // Estimated: `23917` - // Minimum execution time: 11_551 nanoseconds. - Weight::from_parts(13_041_000, 23917) + // Measured: `237 + m * (64 ±0)` + // Estimated: `4900 + m * (192 ±0)` + // Minimum execution time: 27_951 nanoseconds. + Weight::from_parts(32_200_122, 4900) + // Standard Error: 4_679 + .saturating_add(Weight::from_parts(51_964, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } /// Storage: AdvisoryCommitteeMembership Members (r:1 w:1) /// Proof: AdvisoryCommitteeMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) @@ -81,14 +84,17 @@ impl pallet_membership::weights::WeightInfo for WeightI /// Storage: AdvisoryCommittee Prime (r:0 w:1) /// Proof Skipped: AdvisoryCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. - fn remove_member(_m: u32) -> Weight { + fn remove_member(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `340 + m * (64 ±0)` - // Estimated: `24948` - // Minimum execution time: 12_650 nanoseconds. - Weight::from_parts(14_640_000, 24948) + // Measured: `341 + m * (64 ±0)` + // Estimated: `5739 + m * (192 ±0)` + // Minimum execution time: 29_581 nanoseconds. + Weight::from_parts(37_774_872, 5739) + // Standard Error: 5_232 + .saturating_add(Weight::from_parts(27_127, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } /// Storage: AdvisoryCommitteeMembership Members (r:1 w:1) /// Proof: AdvisoryCommitteeMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) @@ -101,14 +107,17 @@ impl pallet_membership::weights::WeightInfo for WeightI /// Storage: AdvisoryCommittee Prime (r:0 w:1) /// Proof Skipped: AdvisoryCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[2, 100]`. - fn swap_member(_m: u32) -> Weight { + fn swap_member(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `340 + m * (64 ±0)` - // Estimated: `24948` - // Minimum execution time: 12_840 nanoseconds. - Weight::from_parts(15_381_000, 24948) + // Measured: `341 + m * (64 ±0)` + // Estimated: `5739 + m * (192 ±0)` + // Minimum execution time: 31_120 nanoseconds. + Weight::from_parts(34_443_383, 5739) + // Standard Error: 9_979 + .saturating_add(Weight::from_parts(173_291, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } /// Storage: AdvisoryCommitteeMembership Members (r:1 w:1) /// Proof: AdvisoryCommitteeMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) @@ -121,14 +130,17 @@ impl pallet_membership::weights::WeightInfo for WeightI /// Storage: AdvisoryCommittee Prime (r:0 w:1) /// Proof Skipped: AdvisoryCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. - fn reset_member(_m: u32) -> Weight { + fn reset_member(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `338 + m * (64 ±0)` - // Estimated: `24948` - // Minimum execution time: 12_720 nanoseconds. - Weight::from_parts(21_581_000, 24948) + // Measured: `341 + m * (64 ±0)` + // Estimated: `5739 + m * (192 ±0)` + // Minimum execution time: 28_450 nanoseconds. + Weight::from_parts(35_667_710, 5739) + // Standard Error: 7_001 + .saturating_add(Weight::from_parts(258_261, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } /// Storage: AdvisoryCommitteeMembership Members (r:1 w:1) /// Proof: AdvisoryCommitteeMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) @@ -141,14 +153,17 @@ impl pallet_membership::weights::WeightInfo for WeightI /// Storage: AdvisoryCommittee Prime (r:0 w:1) /// Proof Skipped: AdvisoryCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. - fn change_key(_m: u32) -> Weight { + fn change_key(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `338 + m * (64 ±0)` - // Estimated: `24948` - // Minimum execution time: 13_350 nanoseconds. - Weight::from_parts(15_451_000, 24948) + // Measured: `341 + m * (64 ±0)` + // Estimated: `5739 + m * (192 ±0)` + // Minimum execution time: 30_690 nanoseconds. + Weight::from_parts(38_368_668, 5739) + // Standard Error: 5_617 + .saturating_add(Weight::from_parts(70_863, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(4)) + .saturating_add(Weight::from_parts(0, 192).saturating_mul(m.into())) } /// Storage: AdvisoryCommitteeMembership Members (r:1 w:0) /// Proof: AdvisoryCommitteeMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) @@ -157,25 +172,31 @@ impl pallet_membership::weights::WeightInfo for WeightI /// Storage: AdvisoryCommittee Prime (r:0 w:1) /// Proof Skipped: AdvisoryCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. - fn set_prime(_m: u32) -> Weight { + fn set_prime(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `134 + m * (32 ±0)` - // Estimated: `7034` - // Minimum execution time: 5_770 nanoseconds. - Weight::from_parts(6_600_000, 7034) + // Measured: `136 + m * (32 ±0)` + // Estimated: `3833 + m * (32 ±0)` + // Minimum execution time: 12_980 nanoseconds. + Weight::from_parts(14_958_235, 3833) + // Standard Error: 2_397 + .saturating_add(Weight::from_parts(37_346, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) } /// Storage: AdvisoryCommitteeMembership Prime (r:0 w:1) /// Proof: AdvisoryCommitteeMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) /// Storage: AdvisoryCommittee Prime (r:0 w:1) /// Proof Skipped: AdvisoryCommittee Prime (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `m` is `[1, 100]`. - fn clear_prime(_m: u32) -> Weight { + fn clear_prime(m: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_780 nanoseconds. - Weight::from_parts(1_830_000, 0).saturating_add(T::DbWeight::get().writes(2)) + // Minimum execution time: 5_110 nanoseconds. + Weight::from_parts(6_020_436, 0) + // Standard Error: 783 + .saturating_add(Weight::from_parts(2_089, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().writes(2)) } } diff --git a/runtime/common/src/weights/pallet_multisig.rs b/runtime/common/src/weights/pallet_multisig.rs index c395df6ec..c331618bc 100644 --- a/runtime/common/src/weights/pallet_multisig.rs +++ b/runtime/common/src/weights/pallet_multisig.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_multisig //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_multisig // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -53,12 +53,14 @@ use frame_support::{ pub struct WeightInfo(PhantomData); impl pallet_multisig::weights::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. - fn as_multi_threshold_1(_z: u32) -> Weight { + fn as_multi_threshold_1(z: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_020 nanoseconds. - Weight::from_parts(9_430_000, 0) + // Minimum execution time: 17_250 nanoseconds. + Weight::from_parts(18_910_472, 0) + // Standard Error: 48 + .saturating_add(Weight::from_parts(1_138, 0).saturating_mul(z.into())) } /// Storage: Multisig Multisigs (r:1 w:1) /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3350), added: 5825, mode: MaxEncodedLen) @@ -66,14 +68,14 @@ impl pallet_multisig::weights::WeightInfo for WeightInf /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `280 + s * (2 ±0)` + // Measured: `339 + s * (1 ±0)` // Estimated: `5825` - // Minimum execution time: 21_591 nanoseconds. - Weight::from_parts(15_954_265, 5825) - // Standard Error: 16_525 - .saturating_add(Weight::from_parts(56_367, 0).saturating_mul(s.into())) - // Standard Error: 161 - .saturating_add(Weight::from_parts(868, 0).saturating_mul(z.into())) + // Minimum execution time: 48_960 nanoseconds. + Weight::from_parts(49_551_474, 5825) + // Standard Error: 9_903 + .saturating_add(Weight::from_parts(98_277, 0).saturating_mul(s.into())) + // Standard Error: 97 + .saturating_add(Weight::from_parts(2_458, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -83,14 +85,14 @@ impl pallet_multisig::weights::WeightInfo for WeightInf /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `317` + // Measured: `283` // Estimated: `5825` - // Minimum execution time: 15_631 nanoseconds. - Weight::from_parts(11_573_268, 5825) - // Standard Error: 6_160 - .saturating_add(Weight::from_parts(40_577, 0).saturating_mul(s.into())) - // Standard Error: 59 - .saturating_add(Weight::from_parts(809, 0).saturating_mul(z.into())) + // Minimum execution time: 35_221 nanoseconds. + Weight::from_parts(40_315_882, 5825) + // Standard Error: 7_735 + .saturating_add(Weight::from_parts(34_630, 0).saturating_mul(s.into())) + // Standard Error: 75 + .saturating_add(Weight::from_parts(2_013, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -102,50 +104,56 @@ impl pallet_multisig::weights::WeightInfo for WeightInf /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `458 + s * (34 ±0)` + // Measured: `425 + s * (33 ±0)` // Estimated: `8432` - // Minimum execution time: 25_271 nanoseconds. - Weight::from_parts(18_623_040, 8432) - // Standard Error: 11_046 - .saturating_add(Weight::from_parts(66_479, 0).saturating_mul(s.into())) - // Standard Error: 108 - .saturating_add(Weight::from_parts(787, 0).saturating_mul(z.into())) + // Minimum execution time: 56_270 nanoseconds. + Weight::from_parts(53_319_412, 8432) + // Standard Error: 11_781 + .saturating_add(Weight::from_parts(119_161, 0).saturating_mul(s.into())) + // Standard Error: 115 + .saturating_add(Weight::from_parts(2_391, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } /// Storage: Multisig Multisigs (r:1 w:1) /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3350), added: 5825, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(_s: u32) -> Weight { + fn approve_as_multi_create(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `280 + s * (2 ±0)` + // Measured: `343 + s * (1 ±0)` // Estimated: `5825` - // Minimum execution time: 16_990 nanoseconds. - Weight::from_parts(22_170_000, 5825) + // Minimum execution time: 38_210 nanoseconds. + Weight::from_parts(42_949_786, 5825) + // Standard Error: 8_888 + .saturating_add(Weight::from_parts(103_842, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Multisig Multisigs (r:1 w:1) /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3350), added: 5825, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(_s: u32) -> Weight { + fn approve_as_multi_approve(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `317` + // Measured: `283` // Estimated: `5825` - // Minimum execution time: 11_630 nanoseconds. - Weight::from_parts(15_290_000, 5825) + // Minimum execution time: 26_130 nanoseconds. + Weight::from_parts(27_231_490, 5825) + // Standard Error: 7_243 + .saturating_add(Weight::from_parts(121_899, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Multisig Multisigs (r:1 w:1) /// Proof: Multisig Multisigs (max_values: None, max_size: Some(3350), added: 5825, mode: MaxEncodedLen) /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(_s: u32) -> Weight { + fn cancel_as_multi(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `522 + s * (2 ±0)` + // Measured: `491 + s * (1 ±0)` // Estimated: `5825` - // Minimum execution time: 16_390 nanoseconds. - Weight::from_parts(20_881_000, 5825) + // Minimum execution time: 39_530 nanoseconds. + Weight::from_parts(44_170_155, 5825) + // Standard Error: 6_233 + .saturating_add(Weight::from_parts(85_488, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/pallet_parachain_staking.rs b/runtime/common/src/weights/pallet_parachain_staking.rs index ddf1034ec..2e0fcb849 100644 --- a/runtime/common/src/weights/pallet_parachain_staking.rs +++ b/runtime/common/src/weights/pallet_parachain_staking.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_parachain_staking //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_parachain_staking // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -58,8 +58,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `119` // Estimated: `614` - // Minimum execution time: 10_440 nanoseconds. - Weight::from_parts(10_440_000, 614) + // Minimum execution time: 17_690 nanoseconds. + Weight::from_parts(21_220_000, 614) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -69,8 +69,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `119` // Estimated: `614` - // Minimum execution time: 13_821 nanoseconds. - Weight::from_parts(13_821_000, 614) + // Minimum execution time: 62_130 nanoseconds. + Weight::from_parts(75_020_000, 614) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -80,8 +80,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `52` // Estimated: `547` - // Minimum execution time: 11_971 nanoseconds. - Weight::from_parts(11_971_000, 547) + // Minimum execution time: 15_670 nanoseconds. + Weight::from_parts(19_500_000, 547) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -91,8 +91,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `52` // Estimated: `547` - // Minimum execution time: 10_280 nanoseconds. - Weight::from_parts(10_280_000, 547) + // Minimum execution time: 14_900 nanoseconds. + Weight::from_parts(18_460_000, 547) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -102,8 +102,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `28` // Estimated: `523` - // Minimum execution time: 7_890 nanoseconds. - Weight::from_parts(7_890_000, 523) + // Minimum execution time: 16_140 nanoseconds. + Weight::from_parts(19_481_000, 523) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -113,8 +113,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `27` // Estimated: `522` - // Minimum execution time: 8_791 nanoseconds. - Weight::from_parts(8_791_000, 522) + // Minimum execution time: 17_750 nanoseconds. + Weight::from_parts(18_270_000, 522) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -126,8 +126,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `147` // Estimated: `1284` - // Minimum execution time: 19_731 nanoseconds. - Weight::from_parts(19_731_000, 1284) + // Minimum execution time: 66_920 nanoseconds. + Weight::from_parts(81_800_000, 1284) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -148,28 +148,34 @@ impl pallet_parachain_staking::weights::WeightInfo for /// Storage: ParachainStaking BottomDelegations (r:0 w:1) /// Proof Skipped: ParachainStaking BottomDelegations (max_values: None, max_size: None, mode: Measured) /// The range of component `x` is `[3, 1000]`. - fn join_candidates(_x: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `401 + x * (50 ±0)` - // Estimated: `317949` - // Minimum execution time: 25_120 nanoseconds. - Weight::from_parts(69_512_000, 317949) + fn join_candidates(x: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `1898 + x * (49 ±0)` + // Estimated: `22371 + x * (300 ±0)` + // Minimum execution time: 67_450 nanoseconds. + Weight::from_parts(87_054_208, 22371) + // Standard Error: 2_162 + .saturating_add(Weight::from_parts(203_040, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(7)) + .saturating_add(Weight::from_parts(0, 300).saturating_mul(x.into())) } /// Storage: ParachainStaking CandidateInfo (r:1 w:1) /// Proof Skipped: ParachainStaking CandidateInfo (max_values: None, max_size: None, mode: Measured) /// Storage: ParachainStaking CandidatePool (r:1 w:1) /// Proof Skipped: ParachainStaking CandidatePool (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `x` is `[3, 1000]`. - fn schedule_leave_candidates(_x: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `305 + x * (49 ±0)` - // Estimated: `101662` - // Minimum execution time: 12_730 nanoseconds. - Weight::from_parts(44_090_000, 101662) + fn schedule_leave_candidates(x: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `990 + x * (48 ±0)` + // Estimated: `4794 + x * (98 ±0)` + // Minimum execution time: 36_370 nanoseconds. + Weight::from_parts(40_724_049, 4794) + // Standard Error: 2_126 + .saturating_add(Weight::from_parts(171_862, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 98).saturating_mul(x.into())) } /// Storage: ParachainStaking CandidateInfo (r:1 w:1) /// Proof Skipped: ParachainStaking CandidateInfo (max_values: None, max_size: None, mode: Measured) @@ -190,28 +196,36 @@ impl pallet_parachain_staking::weights::WeightInfo for /// Storage: ParachainStaking Total (r:1 w:1) /// Proof Skipped: ParachainStaking Total (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `x` is `[2, 350]`. - fn execute_leave_candidates(_x: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `319 + x * (595 ±0)` - // Estimated: `4570902` - // Minimum execution time: 41_411 nanoseconds. - Weight::from_parts(6_406_310_000, 4570902) - .saturating_add(T::DbWeight::get().reads(1055)) - .saturating_add(T::DbWeight::get().writes(1055)) + fn execute_leave_candidates(x: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `238 + x * (595 ±0)` + // Estimated: `18229 + x * (12995 ±0)` + // Minimum execution time: 121_730 nanoseconds. + Weight::from_parts(123_981_000, 18229) + // Standard Error: 154_533 + .saturating_add(Weight::from_parts(45_598_956, 0).saturating_mul(x.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(x.into()))) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(x.into()))) + .saturating_add(Weight::from_parts(0, 12995).saturating_mul(x.into())) } /// Storage: ParachainStaking CandidateInfo (r:1 w:1) /// Proof Skipped: ParachainStaking CandidateInfo (max_values: None, max_size: None, mode: Measured) /// Storage: ParachainStaking CandidatePool (r:1 w:1) /// Proof Skipped: ParachainStaking CandidatePool (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `x` is `[3, 1000]`. - fn cancel_leave_candidates(_x: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `261 + x * (49 ±0)` - // Estimated: `101574` - // Minimum execution time: 12_311 nanoseconds. - Weight::from_parts(45_751_000, 101574) + fn cancel_leave_candidates(x: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `946 + x * (48 ±0)` + // Estimated: `4704 + x * (98 ±0)` + // Minimum execution time: 26_500 nanoseconds. + Weight::from_parts(36_332_094, 4704) + // Standard Error: 2_111 + .saturating_add(Weight::from_parts(187_547, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 98).saturating_mul(x.into())) } /// Storage: ParachainStaking CandidateInfo (r:1 w:1) /// Proof Skipped: ParachainStaking CandidateInfo (max_values: None, max_size: None, mode: Measured) @@ -221,8 +235,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `371` // Estimated: `3712` - // Minimum execution time: 13_030 nanoseconds. - Weight::from_parts(13_030_000, 3712) + // Minimum execution time: 28_900 nanoseconds. + Weight::from_parts(35_300_000, 3712) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -234,8 +248,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `322` // Estimated: `3614` - // Minimum execution time: 11_990 nanoseconds. - Weight::from_parts(11_990_000, 3614) + // Minimum execution time: 30_500 nanoseconds. + Weight::from_parts(35_560_000, 3614) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -253,8 +267,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `650` // Estimated: `11796` - // Minimum execution time: 25_661 nanoseconds. - Weight::from_parts(25_661_000, 11796) + // Minimum execution time: 63_281 nanoseconds. + Weight::from_parts(75_700_000, 11796) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } @@ -264,8 +278,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `216` // Estimated: `2691` - // Minimum execution time: 9_441 nanoseconds. - Weight::from_parts(9_441_000, 2691) + // Minimum execution time: 23_790 nanoseconds. + Weight::from_parts(29_200_000, 2691) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -283,8 +297,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `670` // Estimated: `11856` - // Minimum execution time: 24_160 nanoseconds. - Weight::from_parts(24_160_000, 11856) + // Minimum execution time: 54_520 nanoseconds. + Weight::from_parts(74_880_000, 11856) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) } @@ -294,8 +308,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `236` // Estimated: `2711` - // Minimum execution time: 9_060 nanoseconds. - Weight::from_parts(9_060_000, 2711) + // Minimum execution time: 26_350 nanoseconds. + Weight::from_parts(27_350_000, 2711) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -317,18 +331,18 @@ impl pallet_parachain_staking::weights::WeightInfo for /// The range of component `y` is `[2, 300]`. fn delegate(x: u32, y: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1472 + x * (108 ±0) + y * (53 ±0)` - // Estimated: `22156 + x * (540 ±0) + y * (270 ±0)` - // Minimum execution time: 45_551 nanoseconds. - Weight::from_parts(31_977_214, 22156) - // Standard Error: 5_812 - .saturating_add(Weight::from_parts(134_695, 0).saturating_mul(x.into())) - // Standard Error: 1_891 - .saturating_add(Weight::from_parts(52_098, 0).saturating_mul(y.into())) + // Measured: `2374 + x * (103 ±0) + y * (52 ±0)` + // Estimated: `25391 + x * (530 ±0) + y * (265 ±0)` + // Minimum execution time: 117_260 nanoseconds. + Weight::from_parts(127_979_202, 25391) + // Standard Error: 7_758 + .saturating_add(Weight::from_parts(273_960, 0).saturating_mul(x.into())) + // Standard Error: 2_545 + .saturating_add(Weight::from_parts(138_185, 0).saturating_mul(y.into())) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(7)) - .saturating_add(Weight::from_parts(0, 540).saturating_mul(x.into())) - .saturating_add(Weight::from_parts(0, 270).saturating_mul(y.into())) + .saturating_add(Weight::from_parts(0, 530).saturating_mul(x.into())) + .saturating_add(Weight::from_parts(0, 265).saturating_mul(y.into())) } /// Storage: ParachainStaking DelegatorState (r:1 w:1) /// Proof Skipped: ParachainStaking DelegatorState (max_values: None, max_size: None, mode: Measured) @@ -338,8 +352,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `176` // Estimated: `5302` - // Minimum execution time: 10_380 nanoseconds. - Weight::from_parts(10_380_000, 5302) + // Minimum execution time: 25_010 nanoseconds. + Weight::from_parts(33_430_000, 5302) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -362,14 +376,19 @@ impl pallet_parachain_staking::weights::WeightInfo for /// Storage: System Account (r:1 w:1) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `x` is `[2, 100]`. - fn execute_leave_delegators(_x: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `115 + x * (563 ±0)` - // Estimated: `1385383` - // Minimum execution time: 36_731 nanoseconds. - Weight::from_parts(1_198_257_000, 1385383) - .saturating_add(T::DbWeight::get().reads(401)) - .saturating_add(T::DbWeight::get().writes(302)) + fn execute_leave_delegators(x: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `755 + x * (558 ±0)` + // Estimated: `26542 + x * (13492 ±2)` + // Minimum execution time: 107_520 nanoseconds. + Weight::from_parts(111_190_000, 26542) + // Standard Error: 83_588 + .saturating_add(Weight::from_parts(37_116_448, 0).saturating_mul(x.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(x.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(x.into()))) + .saturating_add(Weight::from_parts(0, 13492).saturating_mul(x.into())) } /// Storage: ParachainStaking DelegatorState (r:1 w:1) /// Proof Skipped: ParachainStaking DelegatorState (max_values: None, max_size: None, mode: Measured) @@ -379,8 +398,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `298` // Estimated: `5546` - // Minimum execution time: 11_720 nanoseconds. - Weight::from_parts(11_720_000, 5546) + // Minimum execution time: 28_590 nanoseconds. + Weight::from_parts(37_630_000, 5546) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -392,8 +411,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `176` // Estimated: `5302` - // Minimum execution time: 10_110 nanoseconds. - Weight::from_parts(10_110_000, 5302) + // Minimum execution time: 30_010 nanoseconds. + Weight::from_parts(33_610_000, 5302) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -417,8 +436,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1066` // Estimated: `23667` - // Minimum execution time: 32_770 nanoseconds. - Weight::from_parts(32_770_000, 23667) + // Minimum execution time: 91_720 nanoseconds. + Weight::from_parts(94_170_000, 23667) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(7)) } @@ -430,8 +449,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `176` // Estimated: `5302` - // Minimum execution time: 10_041 nanoseconds. - Weight::from_parts(10_041_000, 5302) + // Minimum execution time: 27_890 nanoseconds. + Weight::from_parts(33_760_000, 5302) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -457,8 +476,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1243` // Estimated: `28447` - // Minimum execution time: 37_821 nanoseconds. - Weight::from_parts(37_821_000, 28447) + // Minimum execution time: 109_950 nanoseconds. + Weight::from_parts(127_880_000, 28447) .saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().writes(8)) } @@ -482,8 +501,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1188` // Estimated: `24399` - // Minimum execution time: 32_081 nanoseconds. - Weight::from_parts(32_081_000, 24399) + // Minimum execution time: 93_580 nanoseconds. + Weight::from_parts(108_650_000, 24399) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(8)) } @@ -495,8 +514,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `298` // Estimated: `5546` - // Minimum execution time: 10_330 nanoseconds. - Weight::from_parts(10_330_000, 5546) + // Minimum execution time: 30_350 nanoseconds. + Weight::from_parts(34_140_000, 5546) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -508,8 +527,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `298` // Estimated: `5546` - // Minimum execution time: 10_060 nanoseconds. - Weight::from_parts(10_060_000, 5546) + // Minimum execution time: 30_280 nanoseconds. + Weight::from_parts(36_430_000, 5546) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -531,8 +550,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `438` // Estimated: `11670` - // Minimum execution time: 18_520 nanoseconds. - Weight::from_parts(18_520_000, 11670) + // Minimum execution time: 47_530 nanoseconds. + Weight::from_parts(57_600_000, 11670) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -541,12 +560,16 @@ impl pallet_parachain_staking::weights::WeightInfo for /// Storage: ParachainStaking TopDelegations (r:1 w:0) /// Proof Skipped: ParachainStaking TopDelegations (max_values: None, max_size: None, mode: Measured) /// The range of component `y` is `[0, 100]`. - fn get_rewardable_delegators(_y: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `83 + y * (48 ±0)` - // Estimated: `14788` - // Minimum execution time: 3_630 nanoseconds. - Weight::from_parts(6_521_000, 14788).saturating_add(T::DbWeight::get().reads(2)) + fn get_rewardable_delegators(y: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `118 + y * (48 ±0)` + // Estimated: `5180 + y * (96 ±0)` + // Minimum execution time: 9_090 nanoseconds. + Weight::from_parts(12_813_747, 5180) + // Standard Error: 3_345 + .saturating_add(Weight::from_parts(115_123, 0).saturating_mul(y.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(y.into())) } /// Storage: ParachainStaking TotalSelected (r:1 w:0) /// Proof Skipped: ParachainStaking TotalSelected (max_values: Some(1), max_size: None, mode: Measured) @@ -568,20 +591,20 @@ impl pallet_parachain_staking::weights::WeightInfo for /// The range of component `y` is `[0, 100]`. fn select_top_candidates(x: u32, y: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + x * (5124 ±0) + y * (2390 ±0)` - // Estimated: `13898 + x * (27948 ±1_656) + y * (7648 ±828)` - // Minimum execution time: 14_520 nanoseconds. - Weight::from_parts(14_520_000, 13898) - // Standard Error: 1_776_838 - .saturating_add(Weight::from_parts(8_272_708, 0).saturating_mul(x.into())) - // Standard Error: 888_419 - .saturating_add(Weight::from_parts(1_025_784, 0).saturating_mul(y.into())) + // Measured: `0 + x * (5122 ±0) + y * (2400 ±0)` + // Estimated: `13898 + x * (26124 ±53) + y * (6816 ±26)` + // Minimum execution time: 37_530 nanoseconds. + Weight::from_parts(38_070_000, 13898) + // Standard Error: 167_246 + .saturating_add(Weight::from_parts(29_946_513, 0).saturating_mul(x.into())) + // Standard Error: 83_401 + .saturating_add(Weight::from_parts(2_881_371, 0).saturating_mul(y.into())) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(x.into()))) .saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) - .saturating_add(Weight::from_parts(0, 27948).saturating_mul(x.into())) - .saturating_add(Weight::from_parts(0, 7648).saturating_mul(y.into())) + .saturating_add(Weight::from_parts(0, 26124).saturating_mul(x.into())) + .saturating_add(Weight::from_parts(0, 6816).saturating_mul(y.into())) } /// Storage: ParachainStaking DelayedPayouts (r:1 w:0) /// Proof Skipped: ParachainStaking DelayedPayouts (max_values: None, max_size: None, mode: Measured) @@ -594,21 +617,26 @@ impl pallet_parachain_staking::weights::WeightInfo for /// Storage: System Account (r:301 w:301) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `y` is `[0, 300]`. - fn pay_one_collator_reward(_y: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `511 + y * (219 ±0)` - // Estimated: `1062338` - // Minimum execution time: 25_221 nanoseconds. - Weight::from_parts(1_698_988_000, 1062338) - .saturating_add(T::DbWeight::get().reads(306)) - .saturating_add(T::DbWeight::get().writes(303)) + fn pay_one_collator_reward(y: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `485 + y * (219 ±0)` + // Estimated: `16898 + y * (3483 ±0)` + // Minimum execution time: 53_111 nanoseconds. + Weight::from_parts(59_768_220, 16898) + // Standard Error: 56_493 + .saturating_add(Weight::from_parts(21_235_473, 0).saturating_mul(y.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(y.into()))) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(y.into()))) + .saturating_add(Weight::from_parts(0, 3483).saturating_mul(y.into())) } fn base_on_initialize() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 940 nanoseconds. - Weight::from_parts(940_000, 0) + // Minimum execution time: 2_050 nanoseconds. + Weight::from_parts(2_300_000, 0) } /// Storage: ParachainStaking DelegatorState (r:1 w:0) /// Proof Skipped: ParachainStaking DelegatorState (max_values: None, max_size: None, mode: Measured) @@ -618,18 +646,18 @@ impl pallet_parachain_staking::weights::WeightInfo for /// The range of component `y` is `[0, 100]`. fn set_auto_compound(x: u32, y: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `251 + x * (35 ±0) + y * (47 ±0)` - // Estimated: `5452 + x * (72 ±0) + y * (96 ±0)` - // Minimum execution time: 13_860 nanoseconds. - Weight::from_parts(10_831_000, 5452) - // Standard Error: 1_962 - .saturating_add(Weight::from_parts(37_266, 0).saturating_mul(x.into())) - // Standard Error: 5_888 - .saturating_add(Weight::from_parts(30_290, 0).saturating_mul(y.into())) + // Measured: `718 + x * (34 ±0) + y * (48 ±0)` + // Estimated: `6134 + x * (70 ±0) + y * (98 ±0)` + // Minimum execution time: 43_000 nanoseconds. + Weight::from_parts(54_178_821, 6134) + // Standard Error: 920 + .saturating_add(Weight::from_parts(78_822, 0).saturating_mul(x.into())) + // Standard Error: 2_754 + .saturating_add(Weight::from_parts(66_407, 0).saturating_mul(y.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) - .saturating_add(Weight::from_parts(0, 72).saturating_mul(x.into())) - .saturating_add(Weight::from_parts(0, 96).saturating_mul(y.into())) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(x.into())) + .saturating_add(Weight::from_parts(0, 98).saturating_mul(y.into())) } /// Storage: System Account (r:1 w:1) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) @@ -654,21 +682,21 @@ impl pallet_parachain_staking::weights::WeightInfo for /// The range of component `z` is `[0, 99]`. fn delegate_with_auto_compound(x: u32, y: u32, z: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + x * (86 ±0) + y * (33 ±0) + z * (121 ±0)` - // Estimated: `93843 + x * (425 ±15) + y * (78 ±15) + z * (286 ±55)` - // Minimum execution time: 47_191 nanoseconds. - Weight::from_parts(17_010_666, 93843) - // Standard Error: 3_271 - .saturating_add(Weight::from_parts(86_544, 0).saturating_mul(x.into())) - // Standard Error: 3_281 - .saturating_add(Weight::from_parts(42_262, 0).saturating_mul(y.into())) - // Standard Error: 11_566 - .saturating_add(Weight::from_parts(155_865, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(9)) + // Measured: `0 + x * (84 ±0) + y * (33 ±0) + z * (114 ±0)` + // Estimated: `127262 + x * (367 ±0) + y * (73 ±0) + z * (230 ±1)` + // Minimum execution time: 117_820 nanoseconds. + Weight::from_parts(111_718_224, 127262) + // Standard Error: 2_457 + .saturating_add(Weight::from_parts(237_230, 0).saturating_mul(x.into())) + // Standard Error: 2_464 + .saturating_add(Weight::from_parts(43_725, 0).saturating_mul(y.into())) + // Standard Error: 8_678 + .saturating_add(Weight::from_parts(311_558, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(8)) - .saturating_add(Weight::from_parts(0, 425).saturating_mul(x.into())) - .saturating_add(Weight::from_parts(0, 78).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 286).saturating_mul(z.into())) + .saturating_add(Weight::from_parts(0, 367).saturating_mul(x.into())) + .saturating_add(Weight::from_parts(0, 73).saturating_mul(y.into())) + .saturating_add(Weight::from_parts(0, 230).saturating_mul(z.into())) } /// Storage: System Account (r:1 w:1) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) @@ -676,8 +704,8 @@ impl pallet_parachain_staking::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `139` // Estimated: `2607` - // Minimum execution time: 8_441 nanoseconds. - Weight::from_parts(8_441_000, 2607) + // Minimum execution time: 28_180 nanoseconds. + Weight::from_parts(28_980_000, 2607) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/pallet_preimage.rs b/runtime/common/src/weights/pallet_preimage.rs index 1284d4723..7aa0e5999 100644 --- a/runtime/common/src/weights/pallet_preimage.rs +++ b/runtime/common/src/weights/pallet_preimage.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_preimage //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_preimage // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -57,12 +57,14 @@ impl pallet_preimage::weights::WeightInfo for WeightInf /// Storage: Preimage PreimageFor (r:0 w:1) /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. - fn note_preimage(_s: u32) -> Weight { + fn note_preimage(s: u32) -> Weight { // Proof Size summary in bytes: // Measured: `179` // Estimated: `2566` - // Minimum execution time: 15_300 nanoseconds. - Weight::from_parts(4_487_394_000, 2566) + // Minimum execution time: 35_760 nanoseconds. + Weight::from_parts(42_580_000, 2566) + // Standard Error: 5 + .saturating_add(Weight::from_parts(2_952, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -71,12 +73,14 @@ impl pallet_preimage::weights::WeightInfo for WeightInf /// Storage: Preimage PreimageFor (r:0 w:1) /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. - fn note_requested_preimage(_s: u32) -> Weight { + fn note_requested_preimage(s: u32) -> Weight { // Proof Size summary in bytes: // Measured: `106` // Estimated: `2566` - // Minimum execution time: 10_291 nanoseconds. - Weight::from_parts(4_497_135_000, 2566) + // Minimum execution time: 25_440 nanoseconds. + Weight::from_parts(25_870_000, 2566) + // Standard Error: 5 + .saturating_add(Weight::from_parts(2_931, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -85,12 +89,14 @@ impl pallet_preimage::weights::WeightInfo for WeightInf /// Storage: Preimage PreimageFor (r:0 w:1) /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. - fn note_no_deposit_preimage(_s: u32) -> Weight { + fn note_no_deposit_preimage(s: u32) -> Weight { // Proof Size summary in bytes: // Measured: `106` // Estimated: `2566` - // Minimum execution time: 10_140 nanoseconds. - Weight::from_parts(4_552_098_000, 2566) + // Minimum execution time: 24_220 nanoseconds. + Weight::from_parts(24_880_000, 2566) + // Standard Error: 6 + .saturating_add(Weight::from_parts(2_963, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -102,8 +108,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `357` // Estimated: `2566` - // Minimum execution time: 16_501 nanoseconds. - Weight::from_parts(16_501_000, 2566) + // Minimum execution time: 60_650 nanoseconds. + Weight::from_parts(71_670_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -115,8 +121,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `144` // Estimated: `2566` - // Minimum execution time: 10_910 nanoseconds. - Weight::from_parts(10_910_000, 2566) + // Minimum execution time: 44_380 nanoseconds. + Weight::from_parts(50_081_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -126,8 +132,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `220` // Estimated: `2566` - // Minimum execution time: 9_650 nanoseconds. - Weight::from_parts(9_650_000, 2566) + // Minimum execution time: 39_850 nanoseconds. + Weight::from_parts(44_890_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -137,8 +143,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `144` // Estimated: `2566` - // Minimum execution time: 6_730 nanoseconds. - Weight::from_parts(6_730_000, 2566) + // Minimum execution time: 26_380 nanoseconds. + Weight::from_parts(30_250_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -148,8 +154,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `42` // Estimated: `2566` - // Minimum execution time: 9_060 nanoseconds. - Weight::from_parts(9_060_000, 2566) + // Minimum execution time: 32_940 nanoseconds. + Weight::from_parts(37_240_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -159,8 +165,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `106` // Estimated: `2566` - // Minimum execution time: 6_050 nanoseconds. - Weight::from_parts(6_050_000, 2566) + // Minimum execution time: 14_740 nanoseconds. + Weight::from_parts(15_950_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -172,8 +178,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `144` // Estimated: `2566` - // Minimum execution time: 10_231 nanoseconds. - Weight::from_parts(10_231_000, 2566) + // Minimum execution time: 40_510 nanoseconds. + Weight::from_parts(47_441_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -183,8 +189,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `106` // Estimated: `2566` - // Minimum execution time: 5_771 nanoseconds. - Weight::from_parts(5_771_000, 2566) + // Minimum execution time: 15_111 nanoseconds. + Weight::from_parts(18_110_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -194,8 +200,8 @@ impl pallet_preimage::weights::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `106` // Estimated: `2566` - // Minimum execution time: 5_760 nanoseconds. - Weight::from_parts(5_760_000, 2566) + // Minimum execution time: 15_910 nanoseconds. + Weight::from_parts(16_980_000, 2566) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/pallet_proxy.rs b/runtime/common/src/weights/pallet_proxy.rs index 1708b4214..f47d56e53 100644 --- a/runtime/common/src/weights/pallet_proxy.rs +++ b/runtime/common/src/weights/pallet_proxy.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_proxy //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_proxy // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -55,12 +55,15 @@ impl pallet_proxy::weights::WeightInfo for WeightInfo Weight { + fn proxy(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `120 + p * (41 ±0)` + // Measured: `122 + p * (41 ±0)` // Estimated: `3844` - // Minimum execution time: 9_380 nanoseconds. - Weight::from_parts(10_150_000, 3844).saturating_add(T::DbWeight::get().reads(1)) + // Minimum execution time: 21_330 nanoseconds. + Weight::from_parts(24_473_458, 3844) + // Standard Error: 10_738 + .saturating_add(Weight::from_parts(67_007, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1)) } /// Storage: Proxy Proxies (r:1 w:0) /// Proof: Proxy Proxies (max_values: None, max_size: Some(1369), added: 3844, mode: MaxEncodedLen) @@ -72,14 +75,14 @@ impl pallet_proxy::weights::WeightInfo for WeightInfo Weight { // Proof Size summary in bytes: - // Measured: `555 + a * (72 ±0) + p * (39 ±0)` + // Measured: `521 + a * (72 ±0) + p * (41 ±0)` // Estimated: `11287` - // Minimum execution time: 19_850 nanoseconds. - Weight::from_parts(18_677_683, 11287) - // Standard Error: 45_508 - .saturating_add(Weight::from_parts(70_500, 0).saturating_mul(a.into())) - // Standard Error: 47_025 - .saturating_add(Weight::from_parts(37_816, 0).saturating_mul(p.into())) + // Minimum execution time: 46_980 nanoseconds. + Weight::from_parts(55_388_464, 11287) + // Standard Error: 22_803 + .saturating_add(Weight::from_parts(65_934, 0).saturating_mul(a.into())) + // Standard Error: 23_560 + .saturating_add(Weight::from_parts(51_598, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -91,12 +94,12 @@ impl pallet_proxy::weights::WeightInfo for WeightInfo Weight { // Proof Size summary in bytes: - // Measured: `439 + a * (72 ±0)` + // Measured: `404 + a * (72 ±0)` // Estimated: `7443` - // Minimum execution time: 11_780 nanoseconds. - Weight::from_parts(11_858_016, 7443) - // Standard Error: 1_983 - .saturating_add(Weight::from_parts(53_403, 0).saturating_mul(a.into())) + // Minimum execution time: 27_820 nanoseconds. + Weight::from_parts(36_178_857, 7443) + // Standard Error: 14_677 + .saturating_add(Weight::from_parts(128_354, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -108,14 +111,14 @@ impl pallet_proxy::weights::WeightInfo for WeightInfo Weight { // Proof Size summary in bytes: - // Measured: `439 + a * (72 ±0)` + // Measured: `404 + a * (72 ±0)` // Estimated: `7443` - // Minimum execution time: 11_620 nanoseconds. - Weight::from_parts(11_527_516, 7443) - // Standard Error: 13_437 - .saturating_add(Weight::from_parts(57_758, 0).saturating_mul(a.into())) - // Standard Error: 13_885 - .saturating_add(Weight::from_parts(2_983, 0).saturating_mul(p.into())) + // Minimum execution time: 27_690 nanoseconds. + Weight::from_parts(31_813_643, 7443) + // Standard Error: 15_496 + .saturating_add(Weight::from_parts(175_113, 0).saturating_mul(a.into())) + // Standard Error: 16_011 + .saturating_add(Weight::from_parts(72_840, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -129,26 +132,28 @@ impl pallet_proxy::weights::WeightInfo for WeightInfo Weight { // Proof Size summary in bytes: - // Measured: `370 + a * (75 ±0) + p * (39 ±0)` + // Measured: `449 + a * (72 ±0) + p * (41 ±0)` // Estimated: `11287` - // Minimum execution time: 16_661 nanoseconds. - Weight::from_parts(15_730_483, 11287) - // Standard Error: 5_000 - .saturating_add(Weight::from_parts(82_241, 0).saturating_mul(a.into())) - // Standard Error: 5_167 - .saturating_add(Weight::from_parts(30_016, 0).saturating_mul(p.into())) + // Minimum execution time: 40_250 nanoseconds. + Weight::from_parts(49_708_658, 11287) + // Standard Error: 17_928 + .saturating_add(Weight::from_parts(32_077, 0).saturating_mul(a.into())) + // Standard Error: 18_523 + .saturating_add(Weight::from_parts(52_234, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } /// Storage: Proxy Proxies (r:1 w:1) /// Proof: Proxy Proxies (max_values: None, max_size: Some(1369), added: 3844, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. - fn add_proxy(_p: u32) -> Weight { + fn add_proxy(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `120 + p * (41 ±0)` + // Measured: `122 + p * (41 ±0)` // Estimated: `3844` - // Minimum execution time: 11_750 nanoseconds. - Weight::from_parts(12_601_000, 3844) + // Minimum execution time: 29_381 nanoseconds. + Weight::from_parts(34_688_027, 3844) + // Standard Error: 15_572 + .saturating_add(Weight::from_parts(46_905, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -157,22 +162,24 @@ impl pallet_proxy::weights::WeightInfo for WeightInfo Weight { // Proof Size summary in bytes: - // Measured: `120 + p * (41 ±0)` + // Measured: `122 + p * (41 ±0)` // Estimated: `3844` - // Minimum execution time: 11_700 nanoseconds. - Weight::from_parts(13_341_000, 3844) + // Minimum execution time: 30_520 nanoseconds. + Weight::from_parts(40_076_161, 3844) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Proxy Proxies (r:1 w:1) /// Proof: Proxy Proxies (max_values: None, max_size: Some(1369), added: 3844, mode: MaxEncodedLen) /// The range of component `p` is `[1, 31]`. - fn remove_proxies(_p: u32) -> Weight { + fn remove_proxies(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `120 + p * (41 ±0)` + // Measured: `122 + p * (41 ±0)` // Estimated: `3844` - // Minimum execution time: 10_170 nanoseconds. - Weight::from_parts(10_740_000, 3844) + // Minimum execution time: 24_430 nanoseconds. + Weight::from_parts(29_214_019, 3844) + // Standard Error: 12_319 + .saturating_add(Weight::from_parts(36_314, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -183,20 +190,22 @@ impl pallet_proxy::weights::WeightInfo for WeightInfo Weight { + fn kill_pure(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `162 + p * (41 ±0)` + // Measured: `163 + p * (41 ±0)` // Estimated: `3844` - // Minimum execution time: 10_850 nanoseconds. - Weight::from_parts(11_240_000, 3844) + // Minimum execution time: 25_190 nanoseconds. + Weight::from_parts(31_331_948, 3844) + // Standard Error: 23_594 + .saturating_add(Weight::from_parts(1_979, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } diff --git a/runtime/common/src/weights/pallet_scheduler.rs b/runtime/common/src/weights/pallet_scheduler.rs index 721ef3e42..74d0f09d1 100644 --- a/runtime/common/src/weights/pallet_scheduler.rs +++ b/runtime/common/src/weights/pallet_scheduler.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_scheduler //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_scheduler // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -58,20 +58,22 @@ impl pallet_scheduler::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `35` // Estimated: `503` - // Minimum execution time: 3_070 nanoseconds. - Weight::from_parts(3_070_000, 503) + // Minimum execution time: 6_040 nanoseconds. + Weight::from_parts(7_220_000, 503) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Scheduler Agenda (r:1 w:1) /// Proof: Scheduler Agenda (max_values: None, max_size: Some(10667), added: 13142, mode: MaxEncodedLen) /// The range of component `s` is `[0, 50]`. - fn service_agenda_base(_s: u32) -> Weight { + fn service_agenda_base(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `3 + s * (183 ±0)` + // Measured: `114 + s * (181 ±0)` // Estimated: `13142` - // Minimum execution time: 2_030 nanoseconds. - Weight::from_parts(22_911_000, 13142) + // Minimum execution time: 4_780 nanoseconds. + Weight::from_parts(11_602_646, 13142) + // Standard Error: 11_992 + .saturating_add(Weight::from_parts(563_088, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -79,22 +81,25 @@ impl pallet_scheduler::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_970 nanoseconds. - Weight::from_parts(3_970_000, 0) + // Minimum execution time: 7_360 nanoseconds. + Weight::from_parts(7_750_000, 0) } /// Storage: Preimage PreimageFor (r:1 w:1) /// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) /// Storage: Preimage StatusFor (r:1 w:1) /// Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `s` is `[128, 4194304]`. - fn service_task_fetched(_s: u32) -> Weight { + fn service_task_fetched(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `204 + s * (1 ±0)` - // Estimated: `4199553` - // Minimum execution time: 12_151 nanoseconds. - Weight::from_parts(3_027_077_000, 4199553) + // Measured: `211 + s * (1 ±0)` + // Estimated: `5252 + s * (1 ±0)` + // Minimum execution time: 31_830 nanoseconds. + Weight::from_parts(37_380_000, 5252) + // Standard Error: 6 + .saturating_add(Weight::from_parts(2_229, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) } /// Storage: Scheduler Lookup (r:0 w:1) /// Proof: Scheduler Lookup (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) @@ -102,39 +107,41 @@ impl pallet_scheduler::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_670 nanoseconds. - Weight::from_parts(4_670_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 10_700 nanoseconds. + Weight::from_parts(13_030_000, 0).saturating_add(T::DbWeight::get().writes(1)) } fn service_task_periodic() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_670 nanoseconds. - Weight::from_parts(3_670_000, 0) + // Minimum execution time: 7_980 nanoseconds. + Weight::from_parts(8_790_000, 0) } fn execute_dispatch_signed() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_190 nanoseconds. - Weight::from_parts(2_190_000, 0) + // Minimum execution time: 3_680 nanoseconds. + Weight::from_parts(4_700_000, 0) } fn execute_dispatch_unsigned() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_900 nanoseconds. - Weight::from_parts(1_900_000, 0) + // Minimum execution time: 3_570 nanoseconds. + Weight::from_parts(4_540_000, 0) } /// Storage: Scheduler Agenda (r:1 w:1) /// Proof: Scheduler Agenda (max_values: None, max_size: Some(10667), added: 13142, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. - fn schedule(_s: u32) -> Weight { + fn schedule(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `3 + s * (183 ±0)` + // Measured: `114 + s * (181 ±0)` // Estimated: `13142` - // Minimum execution time: 8_300 nanoseconds. - Weight::from_parts(20_950_000, 13142) + // Minimum execution time: 18_750 nanoseconds. + Weight::from_parts(25_732_878, 13142) + // Standard Error: 21_418 + .saturating_add(Weight::from_parts(627_490, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -143,12 +150,14 @@ impl pallet_scheduler::weights::WeightInfo for WeightIn /// Storage: Scheduler Lookup (r:0 w:1) /// Proof: Scheduler Lookup (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. - fn cancel(_s: u32) -> Weight { + fn cancel(s: u32) -> Weight { // Proof Size summary in bytes: // Measured: `114 + s * (181 ±0)` // Estimated: `13142` - // Minimum execution time: 14_370 nanoseconds. - Weight::from_parts(28_210_000, 13142) + // Minimum execution time: 23_610 nanoseconds. + Weight::from_parts(28_867_441, 13142) + // Standard Error: 12_753 + .saturating_add(Weight::from_parts(732_013, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -157,12 +166,14 @@ impl pallet_scheduler::weights::WeightInfo for WeightIn /// Storage: Scheduler Agenda (r:1 w:1) /// Proof: Scheduler Agenda (max_values: None, max_size: Some(10667), added: 13142, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. - fn schedule_named(_s: u32) -> Weight { + fn schedule_named(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `3 + s * (196 ±0)` + // Measured: `297 + s * (189 ±0)` // Estimated: `15669` - // Minimum execution time: 9_370 nanoseconds. - Weight::from_parts(24_591_000, 15669) + // Minimum execution time: 21_810 nanoseconds. + Weight::from_parts(34_859_221, 15669) + // Standard Error: 14_855 + .saturating_add(Weight::from_parts(533_329, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -171,12 +182,14 @@ impl pallet_scheduler::weights::WeightInfo for WeightIn /// Storage: Scheduler Agenda (r:1 w:1) /// Proof: Scheduler Agenda (max_values: None, max_size: Some(10667), added: 13142, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. - fn cancel_named(_s: u32) -> Weight { + fn cancel_named(s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `142 + s * (192 ±0)` + // Measured: `321 + s * (189 ±0)` // Estimated: `15669` - // Minimum execution time: 11_860 nanoseconds. - Weight::from_parts(32_401_000, 15669) + // Minimum execution time: 26_600 nanoseconds. + Weight::from_parts(38_582_510, 15669) + // Standard Error: 24_205 + .saturating_add(Weight::from_parts(646_684, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/runtime/common/src/weights/pallet_timestamp.rs b/runtime/common/src/weights/pallet_timestamp.rs index d3e944ee0..1f872fb41 100644 --- a/runtime/common/src/weights/pallet_timestamp.rs +++ b/runtime/common/src/weights/pallet_timestamp.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_timestamp //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_timestamp // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -58,10 +58,10 @@ impl pallet_timestamp::weights::WeightInfo for WeightIn /// Proof: Aura CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { // Proof Size summary in bytes: - // Measured: `289` + // Measured: `256` // Estimated: `1006` - // Minimum execution time: 9_970 nanoseconds. - Weight::from_parts(9_970_000, 1006) + // Minimum execution time: 22_220 nanoseconds. + Weight::from_parts(23_490_000, 1006) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -69,7 +69,7 @@ impl pallet_timestamp::weights::WeightInfo for WeightIn // Proof Size summary in bytes: // Measured: `128` // Estimated: `0` - // Minimum execution time: 4_130 nanoseconds. - Weight::from_parts(4_130_000, 0) + // Minimum execution time: 8_560 nanoseconds. + Weight::from_parts(9_640_000, 0) } } diff --git a/runtime/common/src/weights/pallet_treasury.rs b/runtime/common/src/weights/pallet_treasury.rs index 52346a667..8cd14ef08 100644 --- a/runtime/common/src/weights/pallet_treasury.rs +++ b/runtime/common/src/weights/pallet_treasury.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_treasury //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_treasury // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -60,10 +60,10 @@ impl pallet_treasury::weights::WeightInfo for WeightInf /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) fn spend() -> Weight { // Proof Size summary in bytes: - // Measured: `80` + // Measured: `42` // Estimated: `1396` - // Minimum execution time: 11_190 nanoseconds. - Weight::from_parts(11_190_000, 1396) + // Minimum execution time: 23_341 nanoseconds. + Weight::from_parts(24_721_000, 1396) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -73,10 +73,10 @@ impl pallet_treasury::weights::WeightInfo for WeightInf /// Proof: Treasury Proposals (max_values: None, max_size: Some(108), added: 2583, mode: MaxEncodedLen) fn propose_spend() -> Weight { // Proof Size summary in bytes: - // Measured: `217` + // Measured: `179` // Estimated: `499` - // Minimum execution time: 14_720 nanoseconds. - Weight::from_parts(14_720_000, 499) + // Minimum execution time: 36_180 nanoseconds. + Weight::from_parts(37_520_000, 499) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -86,10 +86,10 @@ impl pallet_treasury::weights::WeightInfo for WeightInf /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn reject_proposal() -> Weight { // Proof Size summary in bytes: - // Measured: `583` + // Measured: `545` // Estimated: `7797` - // Minimum execution time: 21_061 nanoseconds. - Weight::from_parts(21_061_000, 7797) + // Minimum execution time: 56_780 nanoseconds. + Weight::from_parts(58_360_000, 7797) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -98,12 +98,14 @@ impl pallet_treasury::weights::WeightInfo for WeightInf /// Storage: Treasury Approvals (r:1 w:1) /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 99]`. - fn approve_proposal(_p: u32) -> Weight { + fn approve_proposal(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `171 + p * (11 ±0)` + // Measured: `500 + p * (8 ±0)` // Estimated: `3480` - // Minimum execution time: 7_920 nanoseconds. - Weight::from_parts(10_680_000, 3480) + // Minimum execution time: 17_220 nanoseconds. + Weight::from_parts(22_887_238, 3480) + // Standard Error: 6_556 + .saturating_add(Weight::from_parts(35_460, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -111,10 +113,10 @@ impl pallet_treasury::weights::WeightInfo for WeightInf /// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) fn remove_approval() -> Weight { // Proof Size summary in bytes: - // Measured: `165` + // Measured: `127` // Estimated: `897` - // Minimum execution time: 6_720 nanoseconds. - Weight::from_parts(6_720_000, 897) + // Minimum execution time: 13_500 nanoseconds. + Weight::from_parts(16_180_000, 897) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -131,13 +133,18 @@ impl pallet_treasury::weights::WeightInfo for WeightInf /// Storage: Bounties BountyApprovals (r:1 w:1) /// Proof: Bounties BountyApprovals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen) /// The range of component `p` is `[0, 100]`. - fn on_initialize_proposals(_p: u32) -> Weight { + fn on_initialize_proposals(p: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `260 + p * (319 ±0)` - // Estimated: `785123` - // Minimum execution time: 22_080 nanoseconds. - Weight::from_parts(1_354_945_000, 785123) - .saturating_add(T::DbWeight::get().reads(305)) - .saturating_add(T::DbWeight::get().writes(305)) + // Measured: `383 + p * (318 ±0)` + // Estimated: `5423 + p * (7797 ±0)` + // Minimum execution time: 64_110 nanoseconds. + Weight::from_parts(112_864_897, 5423) + // Standard Error: 178_607 + .saturating_add(Weight::from_parts(45_837_241, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(p.into()))) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 7797).saturating_mul(p.into())) } } diff --git a/runtime/common/src/weights/pallet_utility.rs b/runtime/common/src/weights/pallet_utility.rs index 00d14a31e..0c0d143e8 100644 --- a/runtime/common/src/weights/pallet_utility.rs +++ b/runtime/common/src/weights/pallet_utility.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_utility //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_utility // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -53,41 +53,47 @@ use frame_support::{ pub struct WeightInfo(PhantomData); impl pallet_utility::weights::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. - fn batch(_c: u32) -> Weight { + fn batch(c: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_580 nanoseconds. - Weight::from_parts(1_509_538_000, 0) + // Minimum execution time: 10_870 nanoseconds. + Weight::from_parts(11_510_000, 0) + // Standard Error: 9_150 + .saturating_add(Weight::from_parts(6_647_766, 0).saturating_mul(c.into())) } fn as_derivative() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_590 nanoseconds. - Weight::from_parts(4_590_000, 0) + // Minimum execution time: 7_520 nanoseconds. + Weight::from_parts(9_410_000, 0) } /// The range of component `c` is `[0, 1000]`. - fn batch_all(_c: u32) -> Weight { + fn batch_all(c: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_170 nanoseconds. - Weight::from_parts(1_550_319_000, 0) + // Minimum execution time: 10_510 nanoseconds. + Weight::from_parts(78_999_068, 0) + // Standard Error: 17_202 + .saturating_add(Weight::from_parts(6_728_886, 0).saturating_mul(c.into())) } fn dispatch_as() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_120 nanoseconds. - Weight::from_parts(7_120_000, 0) + // Minimum execution time: 13_910 nanoseconds. + Weight::from_parts(14_460_000, 0) } /// The range of component `c` is `[0, 1000]`. - fn force_batch(_c: u32) -> Weight { + fn force_batch(c: u32) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_660 nanoseconds. - Weight::from_parts(1_517_079_000, 0) + // Minimum execution time: 11_260 nanoseconds. + Weight::from_parts(8_094_244, 0) + // Standard Error: 58_787 + .saturating_add(Weight::from_parts(6_673_782, 0).saturating_mul(c.into())) } } diff --git a/runtime/common/src/weights/pallet_vesting.rs b/runtime/common/src/weights/pallet_vesting.rs index 66010c976..460b986e7 100644 --- a/runtime/common/src/weights/pallet_vesting.rs +++ b/runtime/common/src/weights/pallet_vesting.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,21 +19,21 @@ //! Autogenerated weights for pallet_vesting //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=pallet_vesting // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/frame_weight_template.hbs @@ -60,14 +60,14 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// The range of component `s` is `[1, 28]`. fn vest_locked(l: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `402 + l * (25 ±0) + s * (40 ±0)` + // Measured: `405 + l * (25 ±0) + s * (40 ±0)` // Estimated: `7418` - // Minimum execution time: 17_120 nanoseconds. - Weight::from_parts(16_221_925, 7418) - // Standard Error: 1_237 - .saturating_add(Weight::from_parts(49_510, 0).saturating_mul(l.into())) - // Standard Error: 2_245 - .saturating_add(Weight::from_parts(32_074, 0).saturating_mul(s.into())) + // Minimum execution time: 38_830 nanoseconds. + Weight::from_parts(40_243_387, 7418) + // Standard Error: 13_742 + .saturating_add(Weight::from_parts(93_058, 0).saturating_mul(l.into())) + // Standard Error: 24_449 + .saturating_add(Weight::from_parts(163_917, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -79,14 +79,14 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// The range of component `s` is `[1, 28]`. fn vest_unlocked(l: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `402 + l * (25 ±0) + s * (40 ±0)` + // Measured: `405 + l * (25 ±0) + s * (40 ±0)` // Estimated: `7418` - // Minimum execution time: 17_381 nanoseconds. - Weight::from_parts(16_156_777, 7418) - // Standard Error: 1_749 - .saturating_add(Weight::from_parts(42_846, 0).saturating_mul(l.into())) - // Standard Error: 3_175 - .saturating_add(Weight::from_parts(43_722, 0).saturating_mul(s.into())) + // Minimum execution time: 38_450 nanoseconds. + Weight::from_parts(43_347_252, 7418) + // Standard Error: 9_766 + .saturating_add(Weight::from_parts(48_570, 0).saturating_mul(l.into())) + // Standard Error: 17_375 + .saturating_add(Weight::from_parts(17_934, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -100,14 +100,14 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// The range of component `s` is `[1, 28]`. fn vest_other_locked(l: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `541 + l * (25 ±0) + s * (40 ±0)` + // Measured: `544 + l * (25 ±0) + s * (40 ±0)` // Estimated: `10025` - // Minimum execution time: 19_411 nanoseconds. - Weight::from_parts(17_824_333, 10025) - // Standard Error: 13_078 - .saturating_add(Weight::from_parts(56_326, 0).saturating_mul(l.into())) - // Standard Error: 23_735 - .saturating_add(Weight::from_parts(56_666, 0).saturating_mul(s.into())) + // Minimum execution time: 43_880 nanoseconds. + Weight::from_parts(46_021_890, 10025) + // Standard Error: 12_235 + .saturating_add(Weight::from_parts(93_769, 0).saturating_mul(l.into())) + // Standard Error: 21_768 + .saturating_add(Weight::from_parts(115_349, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -121,14 +121,14 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// The range of component `s` is `[1, 28]`. fn vest_other_unlocked(l: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `541 + l * (25 ±0) + s * (40 ±0)` + // Measured: `544 + l * (25 ±0) + s * (40 ±0)` // Estimated: `10025` - // Minimum execution time: 19_851 nanoseconds. - Weight::from_parts(18_685_370, 10025) - // Standard Error: 3_358 - .saturating_add(Weight::from_parts(44_163, 0).saturating_mul(l.into())) - // Standard Error: 6_094 - .saturating_add(Weight::from_parts(41_629, 0).saturating_mul(s.into())) + // Minimum execution time: 43_890 nanoseconds. + Weight::from_parts(45_171_083, 10025) + // Standard Error: 14_381 + .saturating_add(Weight::from_parts(100_199, 0).saturating_mul(l.into())) + // Standard Error: 25_587 + .saturating_add(Weight::from_parts(158_229, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -142,12 +142,12 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// The range of component `s` is `[0, 27]`. fn vested_transfer(l: u32, _s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `313 + l * (25 ±0) + s * (51 ±0)` + // Measured: `615 + l * (25 ±0) + s * (40 ±0)` // Estimated: `10025` - // Minimum execution time: 25_141 nanoseconds. - Weight::from_parts(25_246_500, 10025) - // Standard Error: 4_754 - .saturating_add(Weight::from_parts(36_622, 0).saturating_mul(l.into())) + // Minimum execution time: 62_820 nanoseconds. + Weight::from_parts(74_828_952, 10025) + // Standard Error: 20_587 + .saturating_add(Weight::from_parts(27_325, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -161,12 +161,12 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// The range of component `s` is `[0, 27]`. fn force_vested_transfer(l: u32, _s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `452 + l * (25 ±0) + s * (51 ±0)` + // Measured: `754 + l * (25 ±0) + s * (40 ±0)` // Estimated: `12632` - // Minimum execution time: 27_081 nanoseconds. - Weight::from_parts(27_117_000, 12632) - // Standard Error: 4_771 - .saturating_add(Weight::from_parts(50_081, 0).saturating_mul(l.into())) + // Minimum execution time: 66_680 nanoseconds. + Weight::from_parts(78_411_765, 12632) + // Standard Error: 16_120 + .saturating_add(Weight::from_parts(6_898, 0).saturating_mul(l.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -178,16 +178,12 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `l` is `[0, 49]`. /// The range of component `s` is `[2, 28]`. - fn not_unlocking_merge_schedules(l: u32, s: u32) -> Weight { + fn not_unlocking_merge_schedules(_l: u32, _s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `541 + l * (25 ±0) + s * (40 ±0)` + // Measured: `542 + l * (25 ±0) + s * (40 ±0)` // Estimated: `10025` - // Minimum execution time: 19_421 nanoseconds. - Weight::from_parts(17_449_692, 10025) - // Standard Error: 1_749 - .saturating_add(Weight::from_parts(69_785, 0).saturating_mul(l.into())) - // Standard Error: 3_297 - .saturating_add(Weight::from_parts(70_403, 0).saturating_mul(s.into())) + // Minimum execution time: 45_190 nanoseconds. + Weight::from_parts(54_486_163, 10025) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -201,14 +197,14 @@ impl pallet_vesting::weights::WeightInfo for WeightInfo /// The range of component `s` is `[2, 28]`. fn unlocking_merge_schedules(l: u32, s: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `541 + l * (25 ±0) + s * (40 ±0)` + // Measured: `542 + l * (25 ±0) + s * (40 ±0)` // Estimated: `10025` - // Minimum execution time: 19_241 nanoseconds. - Weight::from_parts(17_301_461, 10025) - // Standard Error: 4_241 - .saturating_add(Weight::from_parts(76_530, 0).saturating_mul(l.into())) - // Standard Error: 7_994 - .saturating_add(Weight::from_parts(69_269, 0).saturating_mul(s.into())) + // Minimum execution time: 45_100 nanoseconds. + Weight::from_parts(46_158_877, 10025) + // Standard Error: 14_211 + .saturating_add(Weight::from_parts(105_475, 0).saturating_mul(l.into())) + // Standard Error: 26_245 + .saturating_add(Weight::from_parts(168_563, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/runtime/zeitgeist/Cargo.toml b/runtime/zeitgeist/Cargo.toml index c346ffceb..949e46a7c 100644 --- a/runtime/zeitgeist/Cargo.toml +++ b/runtime/zeitgeist/Cargo.toml @@ -415,7 +415,7 @@ force-debug = ["sp-debug-derive/force-debug"] authors = ["Zeitgeist PM "] edition = "2021" name = "zeitgeist-runtime" -version = "0.4.3" +version = "0.5.0" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/runtime/zeitgeist/src/lib.rs b/runtime/zeitgeist/src/lib.rs index c89fcecb0..b0790d71d 100644 --- a/runtime/zeitgeist/src/lib.rs +++ b/runtime/zeitgeist/src/lib.rs @@ -94,10 +94,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("zeitgeist"), impl_name: create_runtime_str!("zeitgeist"), authoring_version: 1, - spec_version: 52, + spec_version: 53, impl_version: 1, apis: RUNTIME_API_VERSIONS, - transaction_version: 26, + transaction_version: 27, state_version: 1, }; diff --git a/runtime/zeitgeist/src/parameters.rs b/runtime/zeitgeist/src/parameters.rs index 13c1ab58c..4af6be894 100644 --- a/runtime/zeitgeist/src/parameters.rs +++ b/runtime/zeitgeist/src/parameters.rs @@ -348,10 +348,6 @@ parameter_types! { pub const MinAssets: u16 = 2; /// Maximum number of assets. `MaxCategories` plus one base asset. pub const MaxAssets: u16 = MAX_ASSETS; - /// Mathematical constraint set by the Balancer algorithm. DO NOT CHANGE. - pub const MaxInRatio: Balance = (BASE / 3) + 1; - /// Mathematical constraint set by the Balancer algorithm. DO NOT CHANGE. - pub const MaxOutRatio: Balance = (BASE / 3) + 1; /// The maximum fee that is charged for swaps and single asset LP operations. pub const MaxSwapFee: Balance = BASE / 10; // 10% /// The sum of all weights of the assets within the pool is limited by `MaxTotalWeight`. diff --git a/rust-toolchain b/rust-toolchain index faddf04d5..79f0cd6f9 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2023-08-23" +channel = "nightly-2024-01-31" components = ["clippy", "rustfmt", "llvm-tools-preview"] profile = "minimal" targets = ["wasm32-unknown-unknown"] diff --git a/scripts/check-license/src/check_license/copyright.py b/scripts/check-license/src/check_license/copyright.py index f417f202f..267090d6c 100644 --- a/scripts/check-license/src/check_license/copyright.py +++ b/scripts/check-license/src/check_license/copyright.py @@ -44,7 +44,7 @@ def push_year(self, year: int) -> None: if year == self.years[-1].end + 1: self.years[-1].end = year else: - self.years.push(Years(year, year)) + self.years.append(Years(year, year)) @dataclasses.dataclass diff --git a/zrml/asset-router/README.md b/zrml/asset-router/README.md index 554389cdc..34908131e 100644 --- a/zrml/asset-router/README.md +++ b/zrml/asset-router/README.md @@ -4,14 +4,33 @@ The asset router allows to interact with different asset classes using one overaching asset class. The caller is not required to be aware of which pallet handles the asset class of the asset in question, as the asset router internally routes the call to the appropriate pallet as defined in the pallet's -configuration. It implements various ORML `MultiCurrency` traits as well as +configuration. + +## Overview + +The asset router implements various ORML `MultiCurrency` traits as well as various `Fungible` traits, thus it can be used in other pallets that require those implementation (such as ORML Currencies). The asset router also provides managed asset destruction, that handles asset destruction for all the assets registered through the `ManagedDestroy` interface whenever on-chain execution -time is available. +time is available. Finally, the asset router also provides a lazy migration +mechanism for asset types from the `CurrencyType` to the `MarketAssetType`. + +### Terminology + +- _Asset Type_: An asset type is used to represent assets that share the same + purpose. +- _Asset Class_: An asset class is an overarching collection of multible asset + types that share common properties. +- _Tokens_: Tokens are a countable number of instantiations of a specific asset + type that can be moved between accounts. +- _Lazy Migration_: A lazy migration migrates data and the control over the data + from a source to a destination over a prolonged amount of time, usually per + request of the data or after expiry of the data. +- _Managed Asset Destruction_: A mechanism to automatically destroy an asset + type. -## Managed Asset Destruction +### Managed Asset Destruction Once an asset was registered for managed destruction, it's assigned a state and stored in a sorted list within the `DestroyAssets` storage. Whenever weight is @@ -25,7 +44,7 @@ a specific asset (using the `Destroy` interface), throws an error. In that case an asset is considered as `Indestructible` and stored in the `IndestructibleAssets` storage, while also logging the incident. -## Routing support for duplicate asset types in `CurrencyType` and `MarketAssetType` +### Lazy migration from `CurrencyClass` to `MarketAssetClass` As some asset types within `CurrencyType` and `MarketAssetType` map to the same asset type in the overarching `AssetType`, it is necessary to apply some diff --git a/zrml/authorized/Cargo.toml b/zrml/authorized/Cargo.toml index 8dbfc6e58..b55fdd302 100644 --- a/zrml/authorized/Cargo.toml +++ b/zrml/authorized/Cargo.toml @@ -39,4 +39,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-authorized" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/authorized/src/mock_storage.rs b/zrml/authorized/src/mock_storage.rs index 88bf6c02b..a58bb2748 100644 --- a/zrml/authorized/src/mock_storage.rs +++ b/zrml/authorized/src/mock_storage.rs @@ -1,5 +1,4 @@ -// Copyright 2023 Forecasting Technologies LTD. -// Copyright 2022 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // // This file is part of Zeitgeist. // @@ -18,6 +17,7 @@ #![cfg(test)] #![allow(dead_code)] +#![allow(unused_imports)] #[frame_support::pallet] pub(crate) mod pallet { diff --git a/zrml/authorized/src/weights.rs b/zrml/authorized/src/weights.rs index 5ed9f2c48..97bcaf1b3 100644 --- a/zrml/authorized/src/weights.rs +++ b/zrml/authorized/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,7 +19,7 @@ //! Autogenerated weights for zrml_authorized //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` //! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -29,8 +29,8 @@ // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_authorized // --extrinsic=* // --execution=native @@ -70,12 +70,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: PredictionMarkets MarketIdsPerDisputeBlock (r:1 w:1) /// Proof: PredictionMarkets MarketIdsPerDisputeBlock (max_values: None, max_size: Some(1042), added: 3517, mode: MaxEncodedLen) /// The range of component `m` is `[1, 63]`. - fn authorize_market_outcome_first_report(_m: u32) -> Weight { + fn authorize_market_outcome_first_report(m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `609 + m * (24 ±0)` + // Measured: `805 + m * (22 ±0)` // Estimated: `9194` - // Minimum execution time: 19_500 nanoseconds. - Weight::from_parts(21_110_000, 9194) + // Minimum execution time: 40_600 nanoseconds. + Weight::from_parts(46_642_457, 9194) + // Standard Error: 26_413 + .saturating_add(Weight::from_parts(190_563, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -87,8 +89,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `610` // Estimated: `5677` - // Minimum execution time: 15_511 nanoseconds. - Weight::from_parts(15_511_000, 5677) + // Minimum execution time: 35_410 nanoseconds. + Weight::from_parts(36_251_000, 5677) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -96,8 +98,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 190 nanoseconds. - Weight::from_parts(190_000, 0) + // Minimum execution time: 290 nanoseconds. + Weight::from_parts(320_000, 0) } /// Storage: Authorized AuthorizedOutcomeReports (r:1 w:1) /// Proof: Authorized AuthorizedOutcomeReports (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) @@ -105,8 +107,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `250` // Estimated: `2524` - // Minimum execution time: 4_560 nanoseconds. - Weight::from_parts(4_560_000, 2524) + // Minimum execution time: 10_110 nanoseconds. + Weight::from_parts(12_690_000, 2524) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -114,8 +116,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 930 nanoseconds. - Weight::from_parts(930_000, 0) + // Minimum execution time: 2_680 nanoseconds. + Weight::from_parts(2_980_000, 0) } /// Storage: Authorized AuthorizedOutcomeReports (r:1 w:0) /// Proof: Authorized AuthorizedOutcomeReports (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) @@ -123,22 +125,22 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `250` // Estimated: `2524` - // Minimum execution time: 4_200 nanoseconds. - Weight::from_parts(4_200_000, 2524).saturating_add(T::DbWeight::get().reads(1)) + // Minimum execution time: 9_200 nanoseconds. + Weight::from_parts(9_520_000, 2524).saturating_add(T::DbWeight::get().reads(1)) } fn has_failed_weight() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 150 nanoseconds. - Weight::from_parts(150_000, 0) + // Minimum execution time: 250 nanoseconds. + Weight::from_parts(280_000, 0) } fn on_global_dispute_weight() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 220 nanoseconds. - Weight::from_parts(220_000, 0) + // Minimum execution time: 270 nanoseconds. + Weight::from_parts(310_000, 0) } /// Storage: Authorized AuthorizedOutcomeReports (r:0 w:1) /// Proof: Authorized AuthorizedOutcomeReports (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) @@ -146,7 +148,7 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 940 nanoseconds. - Weight::from_parts(940_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 2_390 nanoseconds. + Weight::from_parts(2_970_000, 0).saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/zrml/court/Cargo.toml b/zrml/court/Cargo.toml index 4e2c9eec6..6e1071d7a 100644 --- a/zrml/court/Cargo.toml +++ b/zrml/court/Cargo.toml @@ -9,6 +9,7 @@ rand_chacha = { workspace = true } scale-info = { workspace = true, features = ["derive"] } sp-arithmetic = { workspace = true } sp-runtime = { workspace = true } +zeitgeist-macros = { workspace = true } zeitgeist-primitives = { workspace = true } zrml-market-commons = { workspace = true } @@ -47,4 +48,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-court" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/court/src/benchmarks.rs b/zrml/court/src/benchmarks.rs index 95624c244..603cd619e 100644 --- a/zrml/court/src/benchmarks.rs +++ b/zrml/court/src/benchmarks.rs @@ -122,8 +122,14 @@ where }, ); let consumed_stake = BalanceOf::::zero(); - let pool_item = - CourtPoolItem { stake, court_participant: juror.clone(), consumed_stake, joined_at }; + let pool_item = CourtPoolItem { + stake, + court_participant: juror.clone(), + consumed_stake, + joined_at, + uneligible_index: 0u64.saturated_into::(), + uneligible_stake: BalanceOf::::zero(), + }; match pool.binary_search_by_key(&(stake, &juror), |pool_item| { (pool_item.stake, &pool_item.court_participant) }) { @@ -670,7 +676,7 @@ benchmarks! { let j in 1..T::MaxCourtParticipants::get(); fill_pool::(j)?; - >::set_block_number(T::InflationPeriod::get()); + >::set_block_number(T::InflationPeriod::get().saturating_mul(2u32.into())); let now = >::block_number(); YearlyInflation::::put(Perbill::from_percent(2)); }: { diff --git a/zrml/court/src/lib.rs b/zrml/court/src/lib.rs index 060970b3c..6199490c3 100644 --- a/zrml/court/src/lib.rs +++ b/zrml/court/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -52,12 +52,17 @@ use frame_system::{ }; use rand::{seq::SliceRandom, Rng, RngCore, SeedableRng}; use rand_chacha::ChaCha20Rng; -use sp_arithmetic::{per_things::Perquintill, traits::One}; +use sp_arithmetic::{ + per_things::Perquintill, + traits::{CheckedRem, One}, +}; use sp_runtime::{ - traits::{AccountIdConversion, Hash, Saturating, StaticLookup, Zero}, + traits::{AccountIdConversion, CheckedDiv, Hash, Saturating, StaticLookup, Zero}, DispatchError, Perbill, SaturatedConversion, }; +use zeitgeist_macros::unreachable_non_terminating; use zeitgeist_primitives::{ + math::checked_ops_res::{CheckedAddRes, CheckedRemRes, CheckedSubRes}, traits::{DisputeApi, DisputeMaxWeightApi, DisputeResolutionApi}, types::{ BaseAsset, GlobalDisputeItem, Market, MarketDisputeMechanism, MarketStatus, OutcomeReport, @@ -199,7 +204,7 @@ mod pallet { /// Number of draws for the initial court round. const INITIAL_DRAWS_NUM: usize = 31; /// The current storage version. - const STORAGE_VERSION: StorageVersion = StorageVersion::new(2); + const STORAGE_VERSION: StorageVersion = StorageVersion::new(3); const LOG_TARGET: &str = "runtime::zrml-court"; /// Weight used to increase the number of jurors for subsequent appeals /// of the same court. @@ -208,6 +213,7 @@ mod pallet { const APPEAL_BOND_BASIS: u32 = 2; pub(crate) type AccountIdOf = ::AccountId; + pub(crate) type BlockNumberOf = ::BlockNumber; pub(crate) type BalanceOf = <::Currency as Currency>>::Balance; pub(crate) type NegativeImbalanceOf = <::Currency as Currency>>::NegativeImbalance; @@ -478,6 +484,8 @@ mod pallet { pub enum UnexpectedError { /// The binary search by key functionality failed to find an element, although expected. BinarySearchByKeyFailed, + /// The inflation period is zero. + InflationPeriodIsZero, } #[pallet::hooks] @@ -1184,6 +1192,88 @@ mod pallet { where T: Config, { + fn get_uneligible_stake( + pool_item_opt: Option<&CourtPoolItemOf>, + amount: BalanceOf, + current_period_index: BlockNumberFor, + ) -> Result, DispatchError> { + let pool_item = match pool_item_opt { + Some(pool_item) => pool_item, + None => return Ok(amount), + }; + + if current_period_index != pool_item.uneligible_index { + amount.checked_sub_res(&pool_item.stake) + } else { + let additional_uneligible_stake = amount.checked_sub_res(&pool_item.stake)?; + pool_item.uneligible_stake.checked_add_res(&additional_uneligible_stake) + } + } + + fn get_initial_joined_at( + prev_pool_item: Option<&CourtPoolItemOf>, + now: BlockNumberFor, + ) -> BlockNumberFor { + match prev_pool_item { + Some(i) => i.joined_at, + None => now, + } + } + + #[inline] + fn is_sorted_and_all_greater_than_lowest( + p: &CourtPoolOf, + lowest_stake: BalanceOf, + ) -> bool { + p.windows(2).all(|w| w[0].stake <= w[1].stake && lowest_stake <= w[0].stake) + } + + fn remove_weakest_if_full( + mut p: CourtPoolOf, + amount: BalanceOf, + ) -> Result, DispatchError> { + if p.is_full() { + let lowest_item = p.first(); + let lowest_stake = lowest_item + .map(|pool_item| pool_item.stake) + .unwrap_or_else(>::zero); + unreachable_non_terminating!( + Self::is_sorted_and_all_greater_than_lowest(&p, lowest_stake), + LOG_TARGET, + "Pool is not sorted or not all stakes are greater than the lowest stake.", + ); + ensure!(amount > lowest_stake, Error::::AmountBelowLowestJuror); + p.remove(0); + } + + Ok(p) + } + + fn handle_existing_participant( + who: &T::AccountId, + amount: BalanceOf, + mut pool: CourtPoolOf, + prev_p_info: &CourtParticipantInfoOf, + ) -> Result<(CourtPoolOf, BalanceOf, Option>), DispatchError> + { + ensure!(amount >= prev_p_info.stake, Error::::AmountBelowLastJoin); + + if let Some((index, pool_item)) = Self::get_pool_item(&pool, prev_p_info.stake, who)? { + let consumed_stake = pool_item.consumed_stake; + let prev_pool_item = Some(pool_item.clone()); + + pool.remove(index); + + Ok((pool, consumed_stake, prev_pool_item)) + } else { + let consumed_stake = prev_p_info.active_lock; + + let pool = Self::remove_weakest_if_full(pool, amount)?; + + Ok((pool, consumed_stake, None)) + } + } + fn do_join_court( who: &T::AccountId, amount: BalanceOf, @@ -1197,57 +1287,31 @@ mod pallet { let now = >::block_number(); - let remove_weakest_if_full = - |mut p: CourtPoolOf| -> Result, DispatchError> { - if p.is_full() { - let lowest_item = p.first(); - let lowest_stake = lowest_item - .map(|pool_item| pool_item.stake) - .unwrap_or_else(>::zero); - debug_assert!({ - let mut sorted = p.clone(); - sorted.sort_by_key(|pool_item| { - (pool_item.stake, pool_item.court_participant.clone()) - }); - p.len() == sorted.len() - && p.iter() - .zip(sorted.iter()) - .all(|(a, b)| lowest_stake <= a.stake && a == b) - }); - ensure!(amount > lowest_stake, Error::::AmountBelowLowestJuror); - // remove the lowest staked court participant - p.remove(0); + let (prev_pool_item_opt, active_lock, consumed_stake) = + match >::get(who) { + Some(prev_p_info) => { + let (pruned_pool, old_consumed_stake, prev_pool_item_opt) = + Self::handle_existing_participant(who, amount, pool, &prev_p_info)?; + pool = pruned_pool; + (prev_pool_item_opt, prev_p_info.active_lock, old_consumed_stake) + } + None => { + pool = Self::remove_weakest_if_full(pool, amount)?; + (None, BalanceOf::::zero(), BalanceOf::::zero()) } - - Ok(p) }; - let mut active_lock = BalanceOf::::zero(); - let mut consumed_stake = BalanceOf::::zero(); - let mut joined_at = now; - - if let Some(prev_p_info) = >::get(who) { - ensure!(amount >= prev_p_info.stake, Error::::AmountBelowLastJoin); - - if let Some((index, pool_item)) = - Self::get_pool_item(&pool, prev_p_info.stake, who)? - { - active_lock = prev_p_info.active_lock; - consumed_stake = pool_item.consumed_stake; - joined_at = pool_item.joined_at; - - pool.remove(index); - } else { - active_lock = prev_p_info.active_lock; - consumed_stake = prev_p_info.active_lock; - - pool = remove_weakest_if_full(pool)?; - } - } else { - pool = remove_weakest_if_full(pool)?; - } + let inflation_period = T::InflationPeriod::get(); + let current_period_index = now + .checked_div(&inflation_period) + .ok_or(Error::::Unexpected(UnexpectedError::InflationPeriodIsZero))?; - let (active_lock, consumed_stake, joined_at) = (active_lock, consumed_stake, joined_at); + let uneligible_stake = Self::get_uneligible_stake( + prev_pool_item_opt.as_ref(), + amount, + current_period_index, + )?; + let joined_at = Self::get_initial_joined_at(prev_pool_item_opt.as_ref(), now); match pool.binary_search_by_key(&(amount, who), |pool_item| { (pool_item.stake, &pool_item.court_participant) @@ -1268,6 +1332,8 @@ mod pallet { court_participant: who.clone(), consumed_stake, joined_at, + uneligible_index: current_period_index, + uneligible_stake, }, ) .map_err(|_| { @@ -1299,9 +1365,10 @@ mod pallet { // Handle the external incentivisation of the court system. pub(crate) fn handle_inflation(now: T::BlockNumber) -> Weight { let inflation_period = T::InflationPeriod::get(); - if !(now % inflation_period).is_zero() { - return Weight::zero(); - } + match now.checked_rem(&inflation_period) { + Some(rem) if rem.is_zero() => (), + Some(_) | None => return Weight::zero(), + }; let yearly_inflation_rate = >::get(); if yearly_inflation_rate.is_zero() { @@ -1320,11 +1387,11 @@ mod pallet { let yearly_inflation_amount = yearly_inflation_amount.saturated_into::>(); let issue_per_block = issue_per_block.saturated_into::>(); - let inflation_period = + let inflation_period_balance = inflation_period.saturated_into::().saturated_into::>(); // example: 7979867607 * 7200 * 30 = 1723651403112000 - let inflation_period_mint = issue_per_block.saturating_mul(inflation_period); + let inflation_period_mint = issue_per_block.saturating_mul(inflation_period_balance); // inflation_period_mint shouldn't exceed 0.5% of the total issuance let log_threshold = Perbill::from_perthousand(5u32) @@ -1350,34 +1417,41 @@ mod pallet { let pool = >::get(); let pool_len = pool.len() as u32; - let at_least_one_inflation_period = - |joined_at| now.saturating_sub(joined_at) >= T::InflationPeriod::get(); - let total_stake = pool - .iter() - .filter(|pool_item| at_least_one_inflation_period(pool_item.joined_at)) - .fold(0u128, |acc, pool_item| { - acc.saturating_add(pool_item.stake.saturated_into::()) + debug_assert!(!inflation_period.is_zero()); + let current_period_index = + now.checked_div(&inflation_period).map(|x| x.saturating_sub(One::one())); + let eligible_stake = |pool_item: &CourtPoolItemOf| match current_period_index { + Some(index) if index != pool_item.uneligible_index => pool_item.stake, + _ => pool_item.stake.saturating_sub(pool_item.uneligible_stake), + }; + let total_eligible_stake = + pool.iter().fold(BalanceOf::::zero(), |acc, pool_item| { + eligible_stake(pool_item).saturating_add(acc) }); - if total_stake.is_zero() { + if total_eligible_stake.is_zero() { return T::WeightInfo::handle_inflation(0u32); } let mut total_mint = T::Currency::issue(inflation_period_mint); - for CourtPoolItem { stake, court_participant, joined_at, .. } in pool { - if !at_least_one_inflation_period(joined_at) { - // participants who joined and didn't wait - // at least one full inflation period won't get a reward + for pool_item in pool { + let eligible_stake = eligible_stake(&pool_item); + if eligible_stake.is_zero() { continue; } - let share = Perquintill::from_rational(stake.saturated_into::(), total_stake); + let share = Perquintill::from_rational( + eligible_stake.saturated_into::(), + total_eligible_stake.saturated_into::(), + ); let mint = share.mul_floor(inflation_period_mint.saturated_into::()); let (mint_imb, remainder) = total_mint.split(mint.saturated_into::>()); let mint_amount = mint_imb.peek(); total_mint = remainder; - if let Ok(()) = T::Currency::resolve_into_existing(&court_participant, mint_imb) { + if let Ok(()) = + T::Currency::resolve_into_existing(&pool_item.court_participant, mint_imb) + { Self::deposit_event(Event::MintedInCourt { - court_participant: court_participant.clone(), + court_participant: pool_item.court_participant.clone(), amount: mint_amount, }); } @@ -1393,7 +1467,7 @@ mod pallet { remainder ); - T::Currency::burn(remainder); + let _ = T::Currency::burn(remainder); } T::WeightInfo::handle_inflation(pool_len) @@ -1776,7 +1850,7 @@ mod pallet { .stake .saturating_sub(pool_item.consumed_stake) .saturated_into::(); - let remainder = unconsumed % min_juror_stake; + let remainder = unconsumed.checked_rem_res(&min_juror_stake)?; let unconsumed = unconsumed.saturating_sub(remainder); total_unconsumed = total_unconsumed.saturating_add(unconsumed); running_total = running_total.saturating_add(unconsumed); @@ -2394,7 +2468,9 @@ mod pallet { .stake .saturating_sub(pool_item.consumed_stake) .saturated_into::(); - let remainder = unconsumed % min_juror_stake; + // `unwrap_or_else` is infallible unless the module is misconfigured. + let remainder = + unconsumed.checked_rem_res(&min_juror_stake).unwrap_or_else(|_| Zero::zero()); let unconsumed = unconsumed.saturating_sub(remainder); acc.saturating_add(unconsumed) }); diff --git a/zrml/court/src/migrations.rs b/zrml/court/src/migrations.rs index 16887b73b..b5e2f8630 100644 --- a/zrml/court/src/migrations.rs +++ b/zrml/court/src/migrations.rs @@ -1,4 +1,4 @@ -// Copyright 2021-2022 Zeitgeist PM LLC. +// Copyright 2024 Forecasting Technologies LTD. // // This file is part of Zeitgeist. // @@ -14,3 +14,240 @@ // // You should have received a copy of the GNU General Public License // along with Zeitgeist. If not, see . + +use crate::{ + AccountIdOf, BalanceOf, BlockNumberOf, Config, CourtPoolItemOf, CourtPoolOf, Pallet as Court, +}; +use alloc::vec::Vec; +use core::marker::PhantomData; +use frame_support::{ + log, + pallet_prelude::{StorageVersion, ValueQuery, Weight}, + traits::{Get, OnRuntimeUpgrade}, + BoundedVec, +}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; +use sp_runtime::{traits::CheckedDiv, SaturatedConversion}; + +#[derive(Decode, Encode, MaxEncodedLen, TypeInfo, Clone, Debug, PartialEq, Eq)] +pub struct OldCourtPoolItem { + pub stake: Balance, + pub court_participant: AccountId, + pub consumed_stake: Balance, + pub joined_at: BlockNumber, +} + +type OldCourtPoolItemOf = OldCourtPoolItem, BalanceOf, BlockNumberOf>; +type OldCourtPoolOf = BoundedVec, ::MaxCourtParticipants>; + +#[frame_support::storage_alias] +pub(crate) type CourtPool = StorageValue, OldCourtPoolOf, ValueQuery>; + +const COURT_REQUIRED_STORAGE_VERSION: u16 = 2; +const COURT_NEXT_STORAGE_VERSION: u16 = 3; + +pub struct MigrateCourtPoolItems(PhantomData); + +impl OnRuntimeUpgrade for MigrateCourtPoolItems +where + T: Config, +{ + fn on_runtime_upgrade() -> Weight { + let mut total_weight = T::DbWeight::get().reads(1); + let market_commons_version = StorageVersion::get::>(); + if market_commons_version != COURT_REQUIRED_STORAGE_VERSION { + log::info!( + "MigrateCourtPoolItems: court storage version is {:?}, but {:?} is required", + market_commons_version, + COURT_REQUIRED_STORAGE_VERSION, + ); + return total_weight; + } + log::info!("MigrateCourtPoolItems: Starting..."); + + let res = crate::CourtPool::::translate::, _>(|old_pool_opt| { + old_pool_opt.map(|mut old_pool| { + >::truncate_from( + old_pool + .iter_mut() + .map(|old_pool_item: &mut OldCourtPoolItemOf| CourtPoolItemOf:: { + stake: old_pool_item.stake, + court_participant: old_pool_item.court_participant.clone(), + consumed_stake: old_pool_item.consumed_stake, + joined_at: old_pool_item.joined_at, + uneligible_index: old_pool_item + .joined_at + .checked_div(&T::InflationPeriod::get()) + // because inflation period is not zero checked_div is safe + .unwrap_or(0u64.saturated_into::>()), + // using old_pool_item.stake leads to all joins in period 24 + // to be uneligible, which is exactly what we want + // if using zero, all joins of period 24 would be eligible, + // but only joins in 23 waited the full period yet + // to understand the calculation of the eligible stake look into handle_inflation + uneligible_stake: old_pool_item.stake, + }) + .collect::>(), + ) + }) + }); + match res { + Ok(_) => log::info!("MigrateCourtPoolItems: Success!"), + Err(e) => log::error!("MigrateCourtPoolItems: Error: {:?}", e), + } + + total_weight = total_weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); + + StorageVersion::new(COURT_NEXT_STORAGE_VERSION).put::>(); + total_weight = total_weight.saturating_add(T::DbWeight::get().writes(1)); + log::info!("MigrateCourtPoolItems: Done!"); + total_weight + } + + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, &'static str> { + log::info!("MigrateCourtPoolItems: Preparing to migrate old pool items..."); + let court_pool = CourtPool::::get(); + log::info!( + "MigrateCourtPoolItems: pre-upgrade executed. Migrating {:?} pool items", + court_pool.len() + ); + Ok(court_pool.encode()) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(previous_state: Vec) -> Result<(), &'static str> { + let old_court_pool: OldCourtPoolOf = + OldCourtPoolOf::::decode(&mut previous_state.as_slice()) + .map_err(|_| "MigrateCourtPoolItems: failed to decode old court pool")?; + let new_court_pool = crate::CourtPool::::get(); + assert_eq!(old_court_pool.len(), new_court_pool.len()); + old_court_pool.iter().zip(new_court_pool.iter()).try_for_each( + |(old, new)| -> Result<(), &'static str> { + assert_eq!(old.stake, new.stake); + assert_eq!(old.court_participant, new.court_participant); + assert_eq!(old.consumed_stake, new.consumed_stake); + assert_eq!(old.joined_at, new.joined_at); + let uneligible_index = old + .joined_at + .checked_div(&T::InflationPeriod::get()) + .ok_or("MigrateCourtPoolItems: failed to divide by inflation period")?; + assert_eq!(new.uneligible_index, uneligible_index); + assert_eq!(new.uneligible_stake, old.stake); + + Ok(()) + }, + )?; + log::info!( + "MigrateCourtPoolItems: post-upgrade executed. Migrated {:?} pool items", + new_court_pool.len() + ); + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::mock::{ExtBuilder, Runtime}; + use frame_support::storage_root; + use sp_runtime::StateVersion; + + #[test] + fn on_runtime_upgrade_increments_the_storage_version() { + ExtBuilder::default().build().execute_with(|| { + set_up_version(); + MigrateCourtPoolItems::::on_runtime_upgrade(); + assert_eq!(StorageVersion::get::>(), COURT_NEXT_STORAGE_VERSION); + }); + } + + #[test] + fn on_runtime_upgrade_works_as_expected() { + ExtBuilder::default().build().execute_with(|| { + set_up_version(); + let stake_0 = 100; + let stake_1 = 101; + let court_participant = 200; + let consumed_stake = 300; + let inflation_period = ::InflationPeriod::get(); + assert_eq!(inflation_period, 20u64); + let joined_at_0 = 461; + let joined_at_1 = 481; + let old_court_pool = OldCourtPoolOf::::truncate_from(vec![ + OldCourtPoolItemOf:: { + stake: stake_0, + court_participant, + consumed_stake, + joined_at: joined_at_0, + }, + OldCourtPoolItemOf:: { + stake: stake_1, + court_participant, + consumed_stake, + joined_at: joined_at_1, + }, + ]); + let new_court_pool = CourtPoolOf::::truncate_from(vec![ + CourtPoolItemOf:: { + stake: stake_0, + court_participant, + consumed_stake, + joined_at: joined_at_0, + uneligible_index: 23, + uneligible_stake: stake_0, + }, + CourtPoolItemOf:: { + stake: stake_1, + court_participant, + consumed_stake, + joined_at: joined_at_1, + uneligible_index: 24, + uneligible_stake: stake_1, + }, + ]); + CourtPool::::put::>(old_court_pool); + // notice we use the old storage item here to find out if we added the old elements + // decoding of the values would fail + assert_eq!(crate::CourtPool::::decode_len().unwrap(), 2usize); + MigrateCourtPoolItems::::on_runtime_upgrade(); + + let actual = crate::CourtPool::::get(); + assert_eq!(actual, new_court_pool); + }); + } + + #[test] + fn on_runtime_upgrade_is_noop_if_versions_are_not_correct() { + ExtBuilder::default().build().execute_with(|| { + StorageVersion::new(COURT_NEXT_STORAGE_VERSION).put::>(); + let court_pool = >::truncate_from(vec![ + CourtPoolItemOf:: { + stake: 1, + court_participant: 2, + consumed_stake: 3, + joined_at: 4, + uneligible_index: 23, + uneligible_stake: 1, + }, + CourtPoolItemOf:: { + stake: 8, + court_participant: 9, + consumed_stake: 10, + joined_at: 11, + uneligible_index: 24, + uneligible_stake: 8, + }, + ]); + crate::CourtPool::::put(court_pool); + let tmp = storage_root(StateVersion::V1); + MigrateCourtPoolItems::::on_runtime_upgrade(); + assert_eq!(tmp, storage_root(StateVersion::V1)); + }); + } + + fn set_up_version() { + StorageVersion::new(COURT_REQUIRED_STORAGE_VERSION).put::>(); + } +} diff --git a/zrml/court/src/mock_storage.rs b/zrml/court/src/mock_storage.rs index 13b5818dc..296766ea7 100644 --- a/zrml/court/src/mock_storage.rs +++ b/zrml/court/src/mock_storage.rs @@ -1,4 +1,4 @@ -// Copyright 2023 Forecasting Technologies LTD. +// Copyright 2023-2024 Forecasting Technologies LTD. // // This file is part of Zeitgeist. // @@ -17,6 +17,7 @@ #![cfg(test)] #![allow(dead_code)] +#![allow(unused_imports)] pub use pallet::*; use parity_scale_codec::Encode; diff --git a/zrml/court/src/tests.rs b/zrml/court/src/tests.rs index 8e2bc5288..9a2373003 100644 --- a/zrml/court/src/tests.rs +++ b/zrml/court/src/tests.rs @@ -26,7 +26,7 @@ use crate::{ }, mock_storage::pallet::MarketIdsPerDisputeBlock, types::{CourtStatus, Draw, Vote, VoteItem}, - AppealInfo, BalanceOf, CourtId, CourtIdToMarketId, CourtParticipantInfo, + AppealInfo, BalanceOf, BlockNumberOf, CourtId, CourtIdToMarketId, CourtParticipantInfo, CourtParticipantInfoOf, CourtPool, CourtPoolItem, CourtPoolOf, Courts, Error, Event, MarketIdToCourtId, MarketOf, NegativeImbalanceOf, Participants, RequestBlock, SelectedDraws, YearlyInflation, @@ -225,7 +225,9 @@ fn join_court_successfully_stores_required_data() { stake: amount, court_participant: ALICE, consumed_stake: 0, - joined_at + joined_at, + uneligible_index: 0, + uneligible_stake: amount, }] ); }); @@ -245,7 +247,9 @@ fn join_court_works_multiple_joins() { stake: amount, court_participant: ALICE, consumed_stake: 0, - joined_at: joined_at_0 + joined_at: joined_at_0, + uneligible_index: 0, + uneligible_stake: amount, }] ); assert_eq!( @@ -262,6 +266,8 @@ fn join_court_works_multiple_joins() { )] ); + run_blocks(InflationPeriod::get()); + let joined_at_1 = >::block_number(); assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), amount)); assert_eq!(Balances::locks(BOB), vec![the_lock(amount)]); @@ -272,13 +278,17 @@ fn join_court_works_multiple_joins() { stake: amount, court_participant: ALICE, consumed_stake: 0, - joined_at: joined_at_0 + joined_at: joined_at_0, + uneligible_index: 0, + uneligible_stake: amount, }, CourtPoolItem { stake: amount, court_participant: BOB, consumed_stake: 0, - joined_at: joined_at_1 + joined_at: joined_at_1, + uneligible_index: 1, + uneligible_stake: amount, } ] ); @@ -302,6 +312,8 @@ fn join_court_works_multiple_joins() { } ); + run_blocks(InflationPeriod::get()); + let higher_amount = amount + 1; assert_ok!(Court::join_court(RuntimeOrigin::signed(ALICE), higher_amount)); assert_eq!(Balances::locks(BOB), vec![the_lock(amount)]); @@ -313,13 +325,17 @@ fn join_court_works_multiple_joins() { stake: amount, court_participant: BOB, consumed_stake: 0, - joined_at: joined_at_1 + joined_at: joined_at_1, + uneligible_index: 1, + uneligible_stake: amount, }, CourtPoolItem { stake: higher_amount, court_participant: ALICE, consumed_stake: 0, - joined_at: joined_at_0 + joined_at: joined_at_0, + uneligible_index: 2, + uneligible_stake: higher_amount - amount, }, ] ); @@ -368,6 +384,8 @@ fn join_court_saves_consumed_stake_and_active_lock_for_double_join() { court_participant: ALICE, consumed_stake, joined_at, + uneligible_index: 0, + uneligible_stake: amount, }]; CourtPool::::put::>(juror_pool.try_into().unwrap()); @@ -471,7 +489,9 @@ fn prepare_exit_court_works() { stake: amount, court_participant: ALICE, consumed_stake: 0, - joined_at + joined_at, + uneligible_index: 0, + uneligible_stake: amount, }] ); @@ -607,7 +627,9 @@ fn prepare_exit_court_fails_juror_already_prepared_to_exit() { stake: amount, court_participant: ALICE, consumed_stake: 0, - joined_at + joined_at, + uneligible_index: 0, + uneligible_stake: amount, }] ); @@ -1515,7 +1537,7 @@ fn appeal_emits_event() { let court = Courts::::get(court_id).unwrap(); let new_round_ends = Some(court.round_ends); - let appeal_info = court.appeals.get(0).unwrap().clone(); + let appeal_info = court.appeals.first().unwrap().clone(); System::assert_last_event( Event::CourtAppealed { court_id, appeal_info, new_round_ends }.into(), @@ -3089,30 +3111,288 @@ fn handle_inflation_works() { court_participant: juror, consumed_stake: 0, joined_at, + uneligible_index: 1, + uneligible_stake: 0, }) .unwrap(); } >::put(jurors.clone()); let inflation_period = InflationPeriod::get(); - run_blocks(inflation_period); - let now = >::block_number(); - Court::handle_inflation(now); + run_blocks(inflation_period + 1); let free_balance_after_0 = Balances::free_balance(jurors_list[0]); - assert_eq!(free_balance_after_0 - free_balances_before[&jurors_list[0]], 432_012); + assert_eq!(free_balance_after_0 - free_balances_before[&jurors_list[0]], 216_002); let free_balance_after_1 = Balances::free_balance(jurors_list[1]); - assert_eq!(free_balance_after_1 - free_balances_before[&jurors_list[1]], 4_320_129); + assert_eq!(free_balance_after_1 - free_balances_before[&jurors_list[1]], 2_160_021); let free_balance_after_2 = Balances::free_balance(jurors_list[2]); - assert_eq!(free_balance_after_2 - free_balances_before[&jurors_list[2]], 43_201_302); + assert_eq!(free_balance_after_2 - free_balances_before[&jurors_list[2]], 21_600_219); let free_balance_after_3 = Balances::free_balance(jurors_list[3]); - assert_eq!(free_balance_after_3 - free_balances_before[&jurors_list[3]], 432_013_038); + assert_eq!(free_balance_after_3 - free_balances_before[&jurors_list[3]], 216_002_199); let free_balance_after_4 = Balances::free_balance(jurors_list[4]); - assert_eq!(free_balance_after_4 - free_balances_before[&jurors_list[4]], 4_320_130_393); + assert_eq!(free_balance_after_4 - free_balances_before[&jurors_list[4]], 2_160_021_996); + }); +} + +#[test] +fn block_inflation_reward_after_higher_rejoin() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!(Court::set_inflation(RuntimeOrigin::root(), Perbill::from_percent(2u32))); + + run_to_block(InflationPeriod::get() - 1); + + let low_risk_stake = MinJurorStake::get(); + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), low_risk_stake)); + let charlie_stake = MinJurorStake::get() * 9; + assert_ok!(Court::join_court(RuntimeOrigin::signed(CHARLIE), charlie_stake)); + + let free_bob_before = Balances::free_balance(BOB); + let free_charlie_before = Balances::free_balance(CHARLIE); + + run_blocks(1); + + let free_bob_after = Balances::free_balance(BOB); + assert_eq!(free_bob_after - free_bob_before, 0); + let free_charlie_after = Balances::free_balance(CHARLIE); + assert_eq!(free_charlie_after - free_charlie_before, 0); + + let high_risk_stake = MinJurorStake::get() * 27; + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), high_risk_stake)); + + let free_bob_before = Balances::free_balance(BOB); + let free_charlie_before = Balances::free_balance(CHARLIE); + + let inflation_period = InflationPeriod::get(); + run_blocks(inflation_period); + + let free_bob_after = Balances::free_balance(BOB); + let bob_reward = 240000000; + assert_eq!(free_bob_after - free_bob_before, bob_reward); + + let free_charlie_after = Balances::free_balance(CHARLIE); + let charlie_reward = 2160000000; + assert_eq!(free_charlie_after - free_charlie_before, charlie_reward); + + assert_eq!(bob_reward * 9, charlie_reward); + + let free_bob_before = Balances::free_balance(BOB); + let free_charlie_before = Balances::free_balance(CHARLIE); + + run_blocks(inflation_period); + + let free_bob_after = Balances::free_balance(BOB); + let bob_reward = 1800072000; + assert_eq!(free_bob_after - free_bob_before, bob_reward); + + let free_charlie_after = Balances::free_balance(CHARLIE); + let charlie_reward = 600024000; + assert_eq!(free_charlie_after - free_charlie_before, charlie_reward); + + assert_eq!(bob_reward, charlie_reward * 3); + }); +} + +fn gain_equal( + account: AccountIdTest, + free_before: BalanceOf, + gain: BalanceOf, +) -> BalanceOf { + let free_after = Balances::free_balance(account); + assert_eq!(free_after - free_before, gain); + gain +} + +struct Params { + stake: BalanceOf, + uneligible_index: BlockNumberOf, + uneligible_stake: BalanceOf, +} + +fn check_pool_item_bob(params: Params) { + let jurors = >::get(); + let pool_item_bob = jurors.iter().find(|juror| juror.court_participant == BOB).unwrap().clone(); + + assert_eq!(pool_item_bob.stake, params.stake); + assert_eq!(pool_item_bob.uneligible_index, params.uneligible_index); + assert_eq!(pool_item_bob.uneligible_stake, params.uneligible_stake); +} + +#[test] +fn reward_inflation_correct_for_multiple_rejoins() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!(Court::set_inflation(RuntimeOrigin::root(), Perbill::from_percent(2u32))); + + let alice_amount = MinJurorStake::get(); + assert_ok!(Court::join_court(RuntimeOrigin::signed(ALICE), alice_amount)); + + let amount_0 = MinJurorStake::get(); + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), amount_0)); + + check_pool_item_bob(Params { + stake: amount_0, + uneligible_index: 0, + uneligible_stake: amount_0, + }); + + let free_alice_before = Balances::free_balance(ALICE); + let free_bob_before = Balances::free_balance(BOB); + + // period 0 over + run_to_block(InflationPeriod::get()); + + gain_equal(ALICE, free_alice_before, 0); + gain_equal(BOB, free_bob_before, 0); + + let inflation_period = InflationPeriod::get(); + run_blocks(inflation_period - 1); + + let amount_1 = MinJurorStake::get() * 2; + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), amount_1)); + + check_pool_item_bob(Params { + stake: amount_1, + uneligible_index: 1, + uneligible_stake: amount_1 - amount_0, + }); + + let free_alice_before = Balances::free_balance(ALICE); + let free_bob_before = Balances::free_balance(BOB); + + // period 1 over + run_blocks(1); + + let gain_alice = gain_equal(ALICE, free_alice_before, 1200000000); + let gain_bob = gain_equal(BOB, free_bob_before, 1200000000); + // Alice and Bob gain the same reward, although Bob joined with a higher stake + // but Bob's higher stake is not present for more than one inflation period + // so his stake is not considered for the reward + assert_eq!(gain_alice, gain_bob); + + let free_alice_before = Balances::free_balance(ALICE); + let free_bob_before = Balances::free_balance(BOB); + + // period 2 over + run_blocks(InflationPeriod::get()); + + let amount_2 = MinJurorStake::get() * 3; + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), amount_2)); + + check_pool_item_bob(Params { + stake: amount_2, + uneligible_index: 3, + uneligible_stake: amount_2 - amount_1, + }); + + let gain_alice = gain_equal(ALICE, free_alice_before, 800031999); + let gain_bob = gain_equal(BOB, free_bob_before, 1600063999); + // reward for period 2: + // Bob's higher stake is now present, because of a full inflation period waiting time + assert_eq!(gain_alice * 2 + 1, gain_bob); + + let free_alice_before = Balances::free_balance(ALICE); + let free_bob_before = Balances::free_balance(BOB); + + // period 3 over + run_blocks(InflationPeriod::get()); + + check_pool_item_bob(Params { + stake: amount_2, + uneligible_index: 3, + uneligible_stake: amount_2 - amount_1, + }); + + let gain_alice = gain_equal(ALICE, free_alice_before, 800063999); + let gain_bob = gain_equal(BOB, free_bob_before, 1600127999); + // reward for period 3: + // inflation reward is based on the join with amount_1 + // no join in period 2, so use amount_1 + assert_eq!(gain_alice * 2 + 1, gain_bob); + + let free_alice_before = Balances::free_balance(ALICE); + let free_bob_before = Balances::free_balance(BOB); + + // period 4 over + run_blocks(InflationPeriod::get()); + + check_pool_item_bob(Params { + stake: amount_2, + uneligible_index: 3, + uneligible_stake: amount_2 - amount_1, + }); + + let gain_alice = gain_equal(ALICE, free_alice_before, 600072000); + let gain_bob = gain_equal(BOB, free_bob_before, 1800216000); + // reward for period 4: + // inflation reward is based on the last join (amount_2) + assert_eq!(gain_alice * 3, gain_bob); + }); +} + +#[test] +fn stake_information_is_properly_stored() { + ExtBuilder::default().build().execute_with(|| { + let joined_at_0 = >::block_number(); + let amount_0 = MinJurorStake::get(); + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), amount_0)); + + let jurors = >::get(); + let pool_item_bob = + jurors.iter().find(|juror| juror.court_participant == BOB).unwrap().clone(); + assert_eq!( + pool_item_bob, + CourtPoolItem { + stake: amount_0, + court_participant: BOB, + consumed_stake: BalanceOf::::zero(), + joined_at: joined_at_0, + uneligible_index: 0, + uneligible_stake: amount_0, + } + ); + + run_blocks(InflationPeriod::get()); + + let amount_1 = MinJurorStake::get() * 2; + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), amount_1)); + + let jurors = >::get(); + let pool_item_bob = + jurors.iter().find(|juror| juror.court_participant == BOB).unwrap().clone(); + + assert_eq!( + pool_item_bob, + CourtPoolItem { + stake: amount_1, + court_participant: BOB, + consumed_stake: BalanceOf::::zero(), + joined_at: joined_at_0, + uneligible_index: 1, + uneligible_stake: amount_1 - amount_0, + } + ); + + let amount_2 = MinJurorStake::get() * 3; + assert_ok!(Court::join_court(RuntimeOrigin::signed(BOB), amount_2)); + + let jurors = >::get(); + let pool_item_bob = + jurors.iter().find(|juror| juror.court_participant == BOB).unwrap().clone(); + + assert_eq!( + pool_item_bob, + CourtPoolItem { + stake: amount_2, + court_participant: BOB, + consumed_stake: BalanceOf::::zero(), + joined_at: joined_at_0, + uneligible_index: 1, + uneligible_stake: amount_2 - amount_0, + } + ); }); } @@ -3149,6 +3429,8 @@ fn handle_inflation_without_waiting_one_inflation_period() { court_participant: juror, consumed_stake: 0, joined_at, + uneligible_index: 0, + uneligible_stake: stake, }) .unwrap(); } diff --git a/zrml/court/src/types.rs b/zrml/court/src/types.rs index 5c297ef36..7e8aede81 100644 --- a/zrml/court/src/types.rs +++ b/zrml/court/src/types.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -283,8 +283,13 @@ pub struct CourtPoolItem { /// The consumed amount of the stake for all draws. This is useful to reduce the probability /// of a court participant to be selected again. pub consumed_stake: Balance, - /// The block number at which the participant joined. + /// The block number at which the participant initially joined. pub joined_at: BlockNumber, + /// The index of the inflation period in which the court participant increased the stake lastly. + /// The court participant can increase the stake by joining the court with a higher stake. + pub uneligible_index: BlockNumber, + /// The additional stake added in the inflation period of the uneligible index. + pub uneligible_stake: Balance, } /// The information about an internal selected draw of a juror or delegator. diff --git a/zrml/court/src/weights.rs b/zrml/court/src/weights.rs index 85c59de52..e36156997 100644 --- a/zrml/court/src/weights.rs +++ b/zrml/court/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,7 +19,7 @@ //! Autogenerated weights for zrml_court //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` //! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -29,8 +29,8 @@ // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_court // --extrinsic=* // --execution=native @@ -81,12 +81,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Balances Locks (r:1 w:1) /// Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) /// The range of component `j` is `[0, 999]`. - fn join_court(_j: u32) -> Weight { + fn join_court(j: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `440 + j * (73 ±0)` + // Measured: `1122 + j * (72 ±0)` // Estimated: `78997` - // Minimum execution time: 18_071 nanoseconds. - Weight::from_parts(63_321_000, 78997) + // Minimum execution time: 48_070 nanoseconds. + Weight::from_parts(53_578_638, 78997) + // Standard Error: 1_163 + .saturating_add(Weight::from_parts(123_220, 0).saturating_mul(j.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -100,14 +102,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `d` is `[1, 5]`. fn delegate(j: u32, d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + j * (75 ±0) + d * (685 ±0)` + // Measured: `0 + j * (74 ±0) + d * (683 ±0)` // Estimated: `78997 + d * (2726 ±0)` - // Minimum execution time: 31_951 nanoseconds. - Weight::from_parts(11_783_401, 78997) - // Standard Error: 2_169 - .saturating_add(Weight::from_parts(72_269, 0).saturating_mul(j.into())) - // Standard Error: 539_100 - .saturating_add(Weight::from_parts(3_961_250, 0).saturating_mul(d.into())) + // Minimum execution time: 81_570 nanoseconds. + Weight::from_parts(49_772_271, 78997) + // Standard Error: 1_786 + .saturating_add(Weight::from_parts(165_209, 0).saturating_mul(j.into())) + // Standard Error: 387_683 + .saturating_add(Weight::from_parts(8_924_347, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(d.into()))) .saturating_add(T::DbWeight::get().writes(3)) @@ -118,12 +120,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Court CourtPool (r:1 w:1) /// Proof: Court CourtPool (max_values: Some(1), max_size: Some(72002), added: 72497, mode: MaxEncodedLen) /// The range of component `j` is `[0, 999]`. - fn prepare_exit_court(_j: u32) -> Weight { + fn prepare_exit_court(j: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `378 + j * (73 ±0)` + // Measured: `1060 + j * (72 ±0)` // Estimated: `75223` - // Minimum execution time: 12_601 nanoseconds. - Weight::from_parts(52_961_000, 75223) + // Minimum execution time: 31_170 nanoseconds. + Weight::from_parts(39_874_247, 75223) + // Standard Error: 1_059 + .saturating_add(Weight::from_parts(104_918, 0).saturating_mul(j.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -135,8 +139,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `340` // Estimated: `6500` - // Minimum execution time: 16_850 nanoseconds. - Weight::from_parts(16_850_000, 6500) + // Minimum execution time: 42_610 nanoseconds. + Weight::from_parts(44_230_000, 6500) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -148,8 +152,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `340` // Estimated: `6500` - // Minimum execution time: 15_560 nanoseconds. - Weight::from_parts(15_560_000, 6500) + // Minimum execution time: 37_370 nanoseconds. + Weight::from_parts(43_080_000, 6500) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -158,12 +162,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Court SelectedDraws (r:1 w:1) /// Proof: Court SelectedDraws (max_values: None, max_size: Some(149974), added: 152449, mode: MaxEncodedLen) /// The range of component `d` is `[1, 510]`. - fn vote(_d: u32) -> Weight { + fn vote(d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `482 + d * (53 ±0)` + // Measured: `451 + d * (53 ±0)` // Estimated: `155273` - // Minimum execution time: 17_341 nanoseconds. - Weight::from_parts(47_941_000, 155273) + // Minimum execution time: 55_760 nanoseconds. + Weight::from_parts(63_696_914, 155273) + // Standard Error: 1_663 + .saturating_add(Weight::from_parts(128_245, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -178,12 +184,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Court SelectedDraws (r:1 w:1) /// Proof: Court SelectedDraws (max_values: None, max_size: Some(149974), added: 152449, mode: MaxEncodedLen) /// The range of component `d` is `[1, 510]`. - fn denounce_vote(_d: u32) -> Weight { + fn denounce_vote(d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1570 + d * (53 ±0)` + // Measured: `1576 + d * (53 ±0)` // Estimated: `163667` - // Minimum execution time: 26_670 nanoseconds. - Weight::from_parts(59_282_000, 163667) + // Minimum execution time: 60_591 nanoseconds. + Weight::from_parts(68_553_544, 163667) + // Standard Error: 2_739 + .saturating_add(Weight::from_parts(209_821, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -198,12 +206,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Court SelectedDraws (r:1 w:1) /// Proof: Court SelectedDraws (max_values: None, max_size: Some(149974), added: 152449, mode: MaxEncodedLen) /// The range of component `d` is `[1, 510]`. - fn reveal_vote(_d: u32) -> Weight { + fn reveal_vote(d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `2178 + d * (53 ±0)` + // Measured: `2146 + d * (53 ±0)` // Estimated: `163667` - // Minimum execution time: 30_621 nanoseconds. - Weight::from_parts(60_112_000, 163667) + // Minimum execution time: 98_871 nanoseconds. + Weight::from_parts(112_254_457, 163667) + // Standard Error: 2_693 + .saturating_add(Weight::from_parts(122_916, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -235,20 +245,20 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `f` is `[0, 62]`. fn appeal(j: u32, a: u32, _r: u32, _f: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + j * (141 ±0) + a * (35486 ±0) + r * (16 ±0) + f * (16 ±0)` - // Estimated: `515439 + j * (277 ±105) + a * (281048 ±44_881)` - // Minimum execution time: 2_175_665 nanoseconds. - Weight::from_parts(2_175_665_000, 515439) - // Standard Error: 1_730_902 - .saturating_add(Weight::from_parts(4_467_386, 0).saturating_mul(j.into())) - // Standard Error: 734_954_679 - .saturating_add(Weight::from_parts(1_828_359_258, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(109)) - .saturating_add(T::DbWeight::get().reads((103_u64).saturating_mul(a.into()))) + // Measured: `880 + j * (129 ±0) + a * (27536 ±0) + r * (16 ±0) + f * (16 ±0)` + // Estimated: `515439 + j * (194 ±3) + a * (318078 ±1_049)` + // Minimum execution time: 3_512_041 nanoseconds. + Weight::from_parts(3_757_631_000, 515439) + // Standard Error: 80_324 + .saturating_add(Weight::from_parts(5_861_528, 0).saturating_mul(j.into())) + // Standard Error: 27_966_670 + .saturating_add(Weight::from_parts(4_428_133_284, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(7)) + .saturating_add(T::DbWeight::get().reads((127_u64).saturating_mul(a.into()))) .saturating_add(T::DbWeight::get().writes(100)) - .saturating_add(T::DbWeight::get().writes((104_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 277).saturating_mul(j.into())) - .saturating_add(Weight::from_parts(0, 281048).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().writes((117_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 194).saturating_mul(j.into())) + .saturating_add(Weight::from_parts(0, 318078).saturating_mul(a.into())) } /// Storage: Court Courts (r:1 w:1) /// Proof: Court Courts (max_values: None, max_size: Some(349), added: 2824, mode: MaxEncodedLen) @@ -259,14 +269,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:511 w:510) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `d` is `[5, 510]`. - fn reassign_court_stakes(_d: u32) -> Weight { + fn reassign_court_stakes(d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `520 + d * (588 ±0)` - // Estimated: `2877710` - // Minimum execution time: 61_732 nanoseconds. - Weight::from_parts(9_913_050_000, 2877710) - .saturating_add(T::DbWeight::get().reads(1023)) - .saturating_add(T::DbWeight::get().writes(1022)) + // Measured: `1011 + d * (587 ±0)` + // Estimated: `157880 + d * (5333 ±0)` + // Minimum execution time: 154_111 nanoseconds. + Weight::from_parts(176_730_000, 157880) + // Standard Error: 111_534 + .saturating_add(Weight::from_parts(67_369_442, 0).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(d.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(d.into()))) + .saturating_add(Weight::from_parts(0, 5333).saturating_mul(d.into())) } /// Storage: Court YearlyInflation (r:0 w:1) /// Proof: Court YearlyInflation (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) @@ -274,15 +289,11 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_440 nanoseconds. - Weight::from_parts(7_440_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 17_290 nanoseconds. + Weight::from_parts(22_370_000, 0).saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Court YearlyInflation (r:1 w:0) /// Proof: Court YearlyInflation (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - /// Storage: Court CourtPool (r:1 w:0) - /// Proof: Court CourtPool (max_values: Some(1), max_size: Some(72002), added: 72497, mode: MaxEncodedLen) - /// Storage: System Account (r:1000 w:1000) - /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `j` is `[1, 1000]`. fn handle_inflation(_j: u32) -> Weight { // Proof Size summary in bytes: @@ -302,14 +313,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Court Participants (r:240 w:236) /// Proof: Court Participants (max_values: None, max_size: Some(251), added: 2726, mode: MaxEncodedLen) /// The range of component `a` is `[0, 3]`. - fn select_participants(_a: u32) -> Weight { + fn select_participants(a: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `90768 + a * (22375 ±0)` - // Estimated: `730329` - // Minimum execution time: 1_012_616 nanoseconds. - Weight::from_parts(7_988_843_000, 730329) - .saturating_add(T::DbWeight::get().reads(243)) - .saturating_add(T::DbWeight::get().writes(238)) + // Measured: `90735 + a * (16253 ±0)` + // Estimated: `151425 + a * (136685 ±1_677)` + // Minimum execution time: 1_553_414 nanoseconds. + Weight::from_parts(1_418_346_039, 151425) + // Standard Error: 42_495_557 + .saturating_add(Weight::from_parts(2_742_869_543, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(31)) + .saturating_add(T::DbWeight::get().reads((50_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(26)) + .saturating_add(T::DbWeight::get().writes((50_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 136685).saturating_mul(a.into())) } /// Storage: Court NextCourtId (r:1 w:1) /// Proof: Court NextCourtId (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) @@ -337,17 +353,18 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `r` is `[0, 62]`. fn on_dispute(j: u32, r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `3094 + j * (81 ±0) + r * (17 ±0)` - // Estimated: `142620 + j * (23 ±0)` - // Minimum execution time: 115_813 nanoseconds. - Weight::from_parts(111_223_534, 142620) - // Standard Error: 2_001 - .saturating_add(Weight::from_parts(94_821, 0).saturating_mul(j.into())) - // Standard Error: 31_288 - .saturating_add(Weight::from_parts(26_612, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(29)) - .saturating_add(T::DbWeight::get().writes(31)) - .saturating_add(Weight::from_parts(0, 23).saturating_mul(j.into())) + // Measured: `6187 + j * (80 ±0) + r * (16 ±0)` + // Estimated: `157024 + j * (8 ±0) + r * (25 ±4)` + // Minimum execution time: 305_361 nanoseconds. + Weight::from_parts(406_257_471, 157024) + // Standard Error: 5_212 + .saturating_add(Weight::from_parts(234_425, 0).saturating_mul(j.into())) + // Standard Error: 80_784 + .saturating_add(Weight::from_parts(320_266, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(34)) + .saturating_add(T::DbWeight::get().writes(36)) + .saturating_add(Weight::from_parts(0, 8).saturating_mul(j.into())) + .saturating_add(Weight::from_parts(0, 25).saturating_mul(r.into())) } /// Storage: Court MarketIdToCourtId (r:1 w:0) /// Proof: Court MarketIdToCourtId (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) @@ -362,14 +379,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Court Participants (r:510 w:510) /// Proof: Court Participants (max_values: None, max_size: Some(251), added: 2726, mode: MaxEncodedLen) /// The range of component `d` is `[1, 510]`. - fn on_resolution(_d: u32) -> Weight { + fn on_resolution(d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1482 + d * (255 ±0)` - // Estimated: `1553716` - // Minimum execution time: 22_631 nanoseconds. - Weight::from_parts(1_442_556_000, 1553716) - .saturating_add(T::DbWeight::get().reads(515)) - .saturating_add(T::DbWeight::get().writes(511)) + // Measured: `970 + d * (256 ±0)` + // Estimated: `163456 + d * (2726 ±0)` + // Minimum execution time: 49_430 nanoseconds. + Weight::from_parts(51_040_000, 163456) + // Standard Error: 22_733 + .saturating_add(Weight::from_parts(7_308_501, 0).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(5)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(d.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(d.into()))) + .saturating_add(Weight::from_parts(0, 2726).saturating_mul(d.into())) } /// Storage: Court MarketIdToCourtId (r:1 w:0) /// Proof: Court MarketIdToCourtId (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) @@ -380,14 +402,18 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:4 w:4) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `a` is `[0, 4]`. - fn exchange(_a: u32) -> Weight { + fn exchange(a: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `456 + a * (352 ±0)` - // Estimated: `30663` - // Minimum execution time: 7_140 nanoseconds. - Weight::from_parts(44_891_000, 30663) - .saturating_add(T::DbWeight::get().reads(10)) - .saturating_add(T::DbWeight::get().writes(8)) + // Measured: `420 + a * (352 ±0)` + // Estimated: `5339 + a * (6331 ±0)` + // Minimum execution time: 15_130 nanoseconds. + Weight::from_parts(18_804_523, 5339) + // Standard Error: 178_834 + .saturating_add(Weight::from_parts(34_697_386, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 6331).saturating_mul(a.into())) } /// Storage: Court MarketIdToCourtId (r:1 w:0) /// Proof: Court MarketIdToCourtId (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) @@ -397,8 +423,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `456` // Estimated: `5339` - // Minimum execution time: 5_951 nanoseconds. - Weight::from_parts(5_951_000, 5339).saturating_add(T::DbWeight::get().reads(2)) + // Minimum execution time: 12_750 nanoseconds. + Weight::from_parts(15_520_000, 5339).saturating_add(T::DbWeight::get().reads(2)) } /// Storage: Court MarketIdToCourtId (r:1 w:0) /// Proof: Court MarketIdToCourtId (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) @@ -414,8 +440,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `3222` // Estimated: `83504` - // Minimum execution time: 19_051 nanoseconds. - Weight::from_parts(19_051_000, 83504).saturating_add(T::DbWeight::get().reads(5)) + // Minimum execution time: 38_700 nanoseconds. + Weight::from_parts(45_630_000, 83504).saturating_add(T::DbWeight::get().reads(5)) } /// Storage: Court MarketIdToCourtId (r:1 w:0) /// Proof: Court MarketIdToCourtId (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) @@ -427,16 +453,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Court Participants (max_values: None, max_size: Some(251), added: 2726, mode: MaxEncodedLen) /// The range of component `a` is `[0, 4]`. /// The range of component `d` is `[1, 510]`. - fn on_global_dispute(a: u32, d: u32) -> Weight { + fn on_global_dispute(_a: u32, d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1000 + a * (66 ±0) + d * (255 ±0)` + // Measured: `486 + a * (66 ±0) + d * (256 ±0)` // Estimated: `157788 + d * (2726 ±0)` - // Minimum execution time: 14_930 nanoseconds. - Weight::from_parts(14_930_000, 157788) - // Standard Error: 1_850_182 - .saturating_add(Weight::from_parts(1_407_745, 0).saturating_mul(a.into())) - // Standard Error: 14_511 - .saturating_add(Weight::from_parts(2_752_653, 0).saturating_mul(d.into())) + // Minimum execution time: 45_390 nanoseconds. + Weight::from_parts(49_259_424, 157788) + // Standard Error: 31_231 + .saturating_add(Weight::from_parts(7_486_776, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(d.into()))) .saturating_add(T::DbWeight::get().writes(2)) @@ -452,13 +476,18 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Court Courts (r:0 w:1) /// Proof: Court Courts (max_values: None, max_size: Some(349), added: 2824, mode: MaxEncodedLen) /// The range of component `d` is `[1, 510]`. - fn clear(_d: u32) -> Weight { + fn clear(d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `911 + d * (255 ±0)` - // Estimated: `1545224` - // Minimum execution time: 11_950 nanoseconds. - Weight::from_parts(1_428_246_000, 1545224) - .saturating_add(T::DbWeight::get().reads(512)) - .saturating_add(T::DbWeight::get().writes(512)) + // Measured: `399 + d * (256 ±0)` + // Estimated: `154964 + d * (2726 ±0)` + // Minimum execution time: 26_250 nanoseconds. + Weight::from_parts(26_920_000, 154964) + // Standard Error: 22_958 + .saturating_add(Weight::from_parts(7_260_221, 0).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(d.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(d.into()))) + .saturating_add(Weight::from_parts(0, 2726).saturating_mul(d.into())) } } diff --git a/zrml/global-disputes/Cargo.toml b/zrml/global-disputes/Cargo.toml index 8740e5b02..50d018b3e 100644 --- a/zrml/global-disputes/Cargo.toml +++ b/zrml/global-disputes/Cargo.toml @@ -46,4 +46,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-global-disputes" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/global-disputes/src/tests.rs b/zrml/global-disputes/src/tests.rs index bd861221b..78b3ff94a 100644 --- a/zrml/global-disputes/src/tests.rs +++ b/zrml/global-disputes/src/tests.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // // This file is part of Zeitgeist. // @@ -241,7 +241,7 @@ fn start_global_dispute_fails_if_max_owner_reached() { ExtBuilder::default().build().execute_with(|| { let market_id = 0u128; let market = market_mock::(); - Markets::::insert(market_id, &market); + Markets::::insert(market_id, market); let mut initial_items = Vec::new(); initial_items.push(InitialItem { @@ -269,7 +269,7 @@ fn start_global_dispute_fails_if_shared_possession_required() { ExtBuilder::default().build().execute_with(|| { let market_id = 0u128; let market = market_mock::(); - Markets::::insert(market_id, &market); + Markets::::insert(market_id, market); let outcome_info = OutcomeInfo { outcome_sum: SETUP_AMOUNT, @@ -303,7 +303,7 @@ fn start_global_dispute_adds_owners_for_existing_outcome() { ExtBuilder::default().build().execute_with(|| { let market_id = 0u128; let market = market_mock::(); - Markets::::insert(market_id, &market); + Markets::::insert(market_id, market); let mut initial_items = Vec::new(); initial_items.push(InitialItem { @@ -334,7 +334,7 @@ fn start_global_dispute_updates_to_highest_winner() { ExtBuilder::default().build().execute_with(|| { let market_id = 0u128; let market = market_mock::(); - Markets::::insert(market_id, &market); + Markets::::insert(market_id, market); let mut initial_items = Vec::new(); initial_items.push(InitialItem { @@ -1153,7 +1153,7 @@ fn purge_outcomes_partially_cleaned_works() { ExtBuilder::default().build().execute_with(|| { let market_id = 0u128; let market = market_mock::(); - Markets::::insert(market_id, &market); + Markets::::insert(market_id, market); let mut initial_items = Vec::new(); for i in 0..(2 * RemoveKeysLimit::get()) { @@ -1187,7 +1187,7 @@ fn refund_vote_fees_works() { ExtBuilder::default().build().execute_with(|| { let market_id = 0u128; let market = market_mock::(); - Markets::::insert(market_id, &market); + Markets::::insert(market_id, market); let pushed_outcome_1 = 0; let pushed_outcome_2 = 20; diff --git a/zrml/global-disputes/src/weights.rs b/zrml/global-disputes/src/weights.rs index 894f9b37b..6ccc35602 100644 --- a/zrml/global-disputes/src/weights.rs +++ b/zrml/global-disputes/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,7 +19,7 @@ //! Autogenerated weights for zrml_global_disputes //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` //! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -29,8 +29,8 @@ // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_global_disputes // --extrinsic=* // --execution=native @@ -74,14 +74,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `v` is `[0, 49]`. fn vote_on_outcome(o: u32, v: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `557 + o * (24 ±0) + v * (32 ±0)` + // Measured: `510 + o * (33 ±0) + v * (32 ±0)` // Estimated: `13631` - // Minimum execution time: 23_721 nanoseconds. - Weight::from_parts(23_540_375, 13631) - // Standard Error: 146_250 - .saturating_add(Weight::from_parts(18_062, 0).saturating_mul(o.into())) - // Standard Error: 23_877 - .saturating_add(Weight::from_parts(41_928, 0).saturating_mul(v.into())) + // Minimum execution time: 59_970 nanoseconds. + Weight::from_parts(70_944_535, 13631) + // Standard Error: 99_660 + .saturating_add(Weight::from_parts(158_915, 0).saturating_mul(o.into())) + // Standard Error: 17_527 + .saturating_add(Weight::from_parts(73_873, 0).saturating_mul(v.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -97,14 +97,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `o` is `[1, 10]`. fn unlock_vote_balance_set(l: u32, o: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + l * (468 ±0) + o * (1600 ±0)` - // Estimated: `10554 + l * (2870 ±0)` - // Minimum execution time: 14_491 nanoseconds. - Weight::from_parts(12_323_777, 10554) - // Standard Error: 1_749 - .saturating_add(Weight::from_parts(1_608_230, 0).saturating_mul(l.into())) - // Standard Error: 9_718 - .saturating_add(Weight::from_parts(216_722, 0).saturating_mul(o.into())) + // Measured: `0 + l * (467 ±0) + o * (1600 ±0)` + // Estimated: `10497 + l * (2871 ±0)` + // Minimum execution time: 35_780 nanoseconds. + Weight::from_parts(44_476_307, 10497) + // Standard Error: 53_653 + .saturating_add(Weight::from_parts(4_271_681, 0).saturating_mul(l.into())) + // Standard Error: 281_603 + .saturating_add(Weight::from_parts(439_604, 0).saturating_mul(o.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(l.into()))) .saturating_add(T::DbWeight::get().writes(2)) @@ -122,14 +122,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `o` is `[1, 10]`. fn unlock_vote_balance_remove(l: u32, o: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `0 + l * (452 ±0) + o * (1600 ±0)` - // Estimated: `10554 + l * (2870 ±0)` - // Minimum execution time: 14_091 nanoseconds. - Weight::from_parts(8_142_111, 10554) - // Standard Error: 1_212 - .saturating_add(Weight::from_parts(1_524_320, 0).saturating_mul(l.into())) - // Standard Error: 6_735 - .saturating_add(Weight::from_parts(594_888, 0).saturating_mul(o.into())) + // Measured: `0 + l * (451 ±0) + o * (1600 ±0)` + // Estimated: `10497 + l * (2871 ±0)` + // Minimum execution time: 35_680 nanoseconds. + Weight::from_parts(25_536_660, 10497) + // Standard Error: 40_297 + .saturating_add(Weight::from_parts(4_579_529, 0).saturating_mul(l.into())) + // Standard Error: 211_506 + .saturating_add(Weight::from_parts(1_769_468, 0).saturating_mul(o.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(l.into()))) .saturating_add(T::DbWeight::get().writes(2)) @@ -148,8 +148,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `723 + w * (32 ±0)` // Estimated: `11501` - // Minimum execution time: 28_091 nanoseconds. - Weight::from_parts(28_311_000, 11501) + // Minimum execution time: 69_591 nanoseconds. + Weight::from_parts(88_511_398, 11501) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -160,14 +160,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:11 w:11) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `o` is `[1, 10]`. - fn reward_outcome_owner_shared_possession(_o: u32) -> Weight { + fn reward_outcome_owner_shared_possession(o: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `512 + o * (42 ±0)` - // Estimated: `34418` - // Minimum execution time: 26_261 nanoseconds. - Weight::from_parts(94_423_000, 34418) - .saturating_add(T::DbWeight::get().reads(13)) - .saturating_add(T::DbWeight::get().writes(11)) + // Measured: `490 + o * (41 ±0)` + // Estimated: `8574 + o * (2790 ±20)` + // Minimum execution time: 67_260 nanoseconds. + Weight::from_parts(40_126_687, 8574) + // Standard Error: 326_372 + .saturating_add(Weight::from_parts(36_368_285, 0).saturating_mul(o.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(o.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(o.into()))) + .saturating_add(Weight::from_parts(0, 2790).saturating_mul(o.into())) } /// Storage: GlobalDisputes Outcomes (r:1 w:0) /// Proof: GlobalDisputes Outcomes (max_values: None, max_size: Some(395), added: 2870, mode: MaxEncodedLen) @@ -179,8 +184,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `570` // Estimated: `10955` - // Minimum execution time: 26_021 nanoseconds. - Weight::from_parts(26_021_000, 10955) + // Minimum execution time: 74_690 nanoseconds. + Weight::from_parts(90_080_000, 10955) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -192,12 +197,12 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `o` is `[1, 10]`. fn purge_outcomes(k: u32, _o: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `428 + k * (122 ±0) + o * (32 ±0)` + // Measured: `409 + k * (122 ±0) + o * (32 ±0)` // Estimated: `8611 + k * (2870 ±0)` - // Minimum execution time: 37_701 nanoseconds. - Weight::from_parts(28_303_707, 8611) - // Standard Error: 59_671 - .saturating_add(Weight::from_parts(8_223_646, 0).saturating_mul(k.into())) + // Minimum execution time: 88_640 nanoseconds. + Weight::from_parts(106_570_000, 8611) + // Standard Error: 41_012 + .saturating_add(Weight::from_parts(18_091_486, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(2)) @@ -212,12 +217,12 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `o` is `[1, 10]`. fn refund_vote_fees(k: u32, _o: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `428 + k * (122 ±0) + o * (32 ±0)` + // Measured: `409 + k * (122 ±0) + o * (32 ±0)` // Estimated: `8611 + k * (2870 ±0)` - // Minimum execution time: 36_521 nanoseconds. - Weight::from_parts(47_271_452, 8611) - // Standard Error: 164_967 - .saturating_add(Weight::from_parts(8_146_995, 0).saturating_mul(k.into())) + // Minimum execution time: 85_661 nanoseconds. + Weight::from_parts(320_805_229, 8611) + // Standard Error: 87_560 + .saturating_add(Weight::from_parts(17_351_127, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(1)) diff --git a/zrml/liquidity-mining/Cargo.toml b/zrml/liquidity-mining/Cargo.toml index ce3c51820..358d2b125 100644 --- a/zrml/liquidity-mining/Cargo.toml +++ b/zrml/liquidity-mining/Cargo.toml @@ -41,4 +41,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-liquidity-mining" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/liquidity-mining/src/lib.rs b/zrml/liquidity-mining/src/lib.rs index 0b54af5f8..a2346ebfa 100644 --- a/zrml/liquidity-mining/src/lib.rs +++ b/zrml/liquidity-mining/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -145,7 +145,10 @@ mod pallet { #[pallet::genesis_build] impl GenesisBuild for GenesisConfig { fn build(&self) { - T::Currency::deposit_creating(&Pallet::::pallet_account_id(), self.initial_balance); + let _ = T::Currency::deposit_creating( + &Pallet::::pallet_account_id(), + self.initial_balance, + ); >::put(self.per_block_distribution); } } diff --git a/zrml/liquidity-mining/src/weights.rs b/zrml/liquidity-mining/src/weights.rs index b4402ebf1..6cfe59345 100644 --- a/zrml/liquidity-mining/src/weights.rs +++ b/zrml/liquidity-mining/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,7 +19,7 @@ //! Autogenerated weights for zrml_liquidity_mining //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` //! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -29,8 +29,8 @@ // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_liquidity_mining // --extrinsic=* // --execution=native @@ -61,7 +61,7 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_750 nanoseconds. - Weight::from_parts(2_750_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 4_910 nanoseconds. + Weight::from_parts(5_880_000, 0).saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/zrml/market-commons/Cargo.toml b/zrml/market-commons/Cargo.toml index 215042a49..730d0e5ed 100644 --- a/zrml/market-commons/Cargo.toml +++ b/zrml/market-commons/Cargo.toml @@ -33,4 +33,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-market-commons" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/neo-swaps/Cargo.toml b/zrml/neo-swaps/Cargo.toml index 73f25bf98..4e457f224 100644 --- a/zrml/neo-swaps/Cargo.toml +++ b/zrml/neo-swaps/Cargo.toml @@ -37,9 +37,7 @@ zrml-global-disputes = { workspace = true, optional = true } zrml-liquidity-mining = { workspace = true, optional = true } zrml-prediction-markets = { workspace = true, optional = true } zrml-prediction-markets-runtime-api = { workspace = true, optional = true } -zrml-rikiddo = { workspace = true, optional = true } zrml-simple-disputes = { workspace = true, optional = true } -zrml-swaps = { workspace = true, optional = true } [dev-dependencies] more-asserts = { workspace = true } @@ -59,8 +57,6 @@ mock = [ "sp-io/default", "zeitgeist-primitives/mock", "zrml-prediction-markets-runtime-api/default", - "zrml-rikiddo/default", - "zrml-swaps/default", "xcm/default", "orml-asset-registry/default", "orml-currencies/default", @@ -112,4 +108,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-neo-swaps" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/neo-swaps/src/mock.rs b/zrml/neo-swaps/src/mock.rs index 1ef50ebe8..28de6bf34 100644 --- a/zrml/neo-swaps/src/mock.rs +++ b/zrml/neo-swaps/src/mock.rs @@ -49,7 +49,7 @@ use zeitgeist_primitives::{ CloseEarlyProtectionBlockPeriod, CloseEarlyProtectionTimeFramePeriod, CloseEarlyRequestBond, CloseEarlyTimeFramePeriod, CorrectionPeriod, CourtPalletId, DestroyAccountWeight, DestroyApprovalWeight, DestroyFinishWeight, ExistentialDeposit, - ExistentialDepositsNew, GdVotingPeriod, GetNativeCurrencyId, GlobalDisputeLockId, + ExistentialDeposits, GdVotingPeriod, GetNativeCurrencyId, GlobalDisputeLockId, GlobalDisputesPalletId, InflationPeriod, LiquidityMiningPalletId, LockId, MaxAppeals, MaxApprovals, MaxCourtParticipants, MaxCreatorFee, MaxDelegations, MaxDisputeDuration, MaxDisputes, MaxEditReasonLen, MaxGlobalDisputeVotes, MaxGracePeriod, @@ -459,7 +459,7 @@ impl orml_tokens::Config for Runtime { type CurrencyId = Currencies; type DustRemovalWhitelist = DustRemovalWhitelist; type RuntimeEvent = RuntimeEvent; - type ExistentialDeposits = ExistentialDepositsNew; + type ExistentialDeposits = ExistentialDeposits; type MaxLocks = MaxLocks; type MaxReserves = MaxReserves; type CurrencyHooks = (); diff --git a/zrml/neo-swaps/src/weights.rs b/zrml/neo-swaps/src/weights.rs index c818ef3f0..62c46a7d7 100644 --- a/zrml/neo-swaps/src/weights.rs +++ b/zrml/neo-swaps/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,18 +19,18 @@ //! Autogenerated weights for zrml_neo_swaps //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_neo_swaps // --extrinsic=* // --execution=native @@ -75,14 +75,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Tokens TotalIssuance (r:128 w:128) /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) /// The range of component `n` is `[2, 128]`. - fn buy(_n: u32) -> Weight { + fn buy(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `2726 + n * (195 ±0)` - // Estimated: `1161240` - // Minimum execution time: 105_582 nanoseconds. - Weight::from_parts(1_060_787_000, 1161240) - .saturating_add(T::DbWeight::get().reads(390)) - .saturating_add(T::DbWeight::get().writes(261)) + // Measured: `2693 + n * (195 ±0)` + // Estimated: `160792 + n * (5116 ±0)` + // Minimum execution time: 450_981 nanoseconds. + Weight::from_parts(456_952_561, 160792) + // Standard Error: 210_027 + .saturating_add(Weight::from_parts(19_290_495, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 5116).saturating_mul(n.into())) } /// Storage: MarketCommons Markets (r:1 w:0) /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) @@ -97,14 +102,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Tokens TotalIssuance (r:128 w:128) /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) /// The range of component `n` is `[2, 128]`. - fn sell(_n: u32) -> Weight { + fn sell(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `2888 + n * (195 ±0)` - // Estimated: `1161240` - // Minimum execution time: 104_233 nanoseconds. - Weight::from_parts(1_342_234_000, 1161240) - .saturating_add(T::DbWeight::get().reads(390)) - .saturating_add(T::DbWeight::get().writes(261)) + // Measured: `2855 + n * (195 ±0)` + // Estimated: `160792 + n * (5116 ±0)` + // Minimum execution time: 315_041 nanoseconds. + Weight::from_parts(261_744_587, 160792) + // Standard Error: 130_952 + .saturating_add(Weight::from_parts(28_294_554, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 5116).saturating_mul(n.into())) } /// Storage: MarketCommons Markets (r:1 w:0) /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) @@ -117,14 +127,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `n` is `[2, 128]`. - fn join_in_place(_n: u32) -> Weight { + fn join_in_place(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `140854 + n * (262 ±0)` - // Estimated: `1163668` - // Minimum execution time: 262_077 nanoseconds. - Weight::from_parts(2_163_214_000, 1163668) - .saturating_add(T::DbWeight::get().reads(387)) - .saturating_add(T::DbWeight::get().writes(257)) + // Measured: `140822 + n * (261 ±0)` + // Estimated: `152980 + n * (5196 ±0)` + // Minimum execution time: 541_431 nanoseconds. + Weight::from_parts(901_153_315, 152980) + // Standard Error: 248_938 + .saturating_add(Weight::from_parts(46_826_279, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 5196).saturating_mul(n.into())) } /// Storage: MarketCommons Markets (r:1 w:0) /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) @@ -137,14 +152,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `n` is `[2, 128]`. - fn join_reassigned(_n: u32) -> Weight { + fn join_reassigned(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `140650 + n * (262 ±0)` - // Estimated: `1163668` - // Minimum execution time: 238_976 nanoseconds. - Weight::from_parts(2_197_305_000, 1163668) - .saturating_add(T::DbWeight::get().reads(387)) - .saturating_add(T::DbWeight::get().writes(257)) + // Measured: `140618 + n * (261 ±0)` + // Estimated: `152980 + n * (5196 ±0)` + // Minimum execution time: 770_081 nanoseconds. + Weight::from_parts(977_585_660, 152980) + // Standard Error: 240_547 + .saturating_add(Weight::from_parts(47_067_211, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 5196).saturating_mul(n.into())) } /// Storage: MarketCommons Markets (r:1 w:0) /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) @@ -157,14 +177,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `n` is `[2, 128]`. - fn join_leaf(_n: u32) -> Weight { + fn join_leaf(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `140655 + n * (262 ±0)` - // Estimated: `1163668` - // Minimum execution time: 206_146 nanoseconds. - Weight::from_parts(2_210_306_000, 1163668) - .saturating_add(T::DbWeight::get().reads(387)) - .saturating_add(T::DbWeight::get().writes(257)) + // Measured: `140623 + n * (261 ±0)` + // Estimated: `152980 + n * (5196 ±0)` + // Minimum execution time: 1_106_843 nanoseconds. + Weight::from_parts(1_104_397_667, 152980) + // Standard Error: 342_655 + .saturating_add(Weight::from_parts(49_860_093, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 5196).saturating_mul(n.into())) } /// Storage: MarketCommons Markets (r:1 w:0) /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) @@ -177,14 +202,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `n` is `[2, 128]`. - fn exit(_n: u32) -> Weight { + fn exit(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `140751 + n * (262 ±0)` - // Estimated: `1163668` - // Minimum execution time: 204_295 nanoseconds. - Weight::from_parts(2_236_756_000, 1163668) - .saturating_add(T::DbWeight::get().reads(387)) - .saturating_add(T::DbWeight::get().writes(257)) + // Measured: `140719 + n * (261 ±0)` + // Estimated: `152980 + n * (5196 ±0)` + // Minimum execution time: 1_197_914 nanoseconds. + Weight::from_parts(1_716_602_393, 152980) + // Standard Error: 271_840 + .saturating_add(Weight::from_parts(47_371_723, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 5196).saturating_mul(n.into())) } /// Storage: NeoSwaps Pools (r:1 w:1) /// Proof: NeoSwaps Pools (max_values: None, max_size: Some(144745), added: 147220, mode: MaxEncodedLen) @@ -192,10 +222,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn withdraw_fees() -> Weight { // Proof Size summary in bytes: - // Measured: `139317` + // Measured: `139283` // Estimated: `152434` - // Minimum execution time: 168_114 nanoseconds. - Weight::from_parts(168_114_000, 152434) + // Minimum execution time: 1_407_515 nanoseconds. + Weight::from_parts(1_604_315_000, 152434) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -210,13 +240,18 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:1 w:1) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `n` is `[2, 128]`. - fn deploy_pool(_n: u32) -> Weight { + fn deploy_pool(n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `2121 + n * (113 ±0)` - // Estimated: `1163668` - // Minimum execution time: 77_542 nanoseconds. - Weight::from_parts(1_416_685_000, 1163668) - .saturating_add(T::DbWeight::get().reads(387)) - .saturating_add(T::DbWeight::get().writes(258)) + // Measured: `2069 + n * (113 ±0)` + // Estimated: `152980 + n * (5196 ±0)` + // Minimum execution time: 239_391 nanoseconds. + Weight::from_parts(102_113_981, 152980) + // Standard Error: 537_232 + .saturating_add(Weight::from_parts(47_234_501, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 5196).saturating_mul(n.into())) } } diff --git a/zrml/orderbook/Cargo.toml b/zrml/orderbook/Cargo.toml index 775eb2249..e6ad5bdc3 100644 --- a/zrml/orderbook/Cargo.toml +++ b/zrml/orderbook/Cargo.toml @@ -63,4 +63,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-orderbook" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/orderbook/src/mock.rs b/zrml/orderbook/src/mock.rs index d94ec22a4..03bde6194 100644 --- a/zrml/orderbook/src/mock.rs +++ b/zrml/orderbook/src/mock.rs @@ -39,7 +39,7 @@ use zeitgeist_primitives::{ constants::mock::{ AssetsAccountDeposit, AssetsApprovalDeposit, AssetsDeposit, AssetsMetadataDepositBase, AssetsMetadataDepositPerByte, AssetsStringLimit, BlockHashCount, DestroyAccountWeight, - DestroyApprovalWeight, DestroyFinishWeight, ExistentialDeposit, ExistentialDepositsNew, + DestroyApprovalWeight, DestroyFinishWeight, ExistentialDeposit, ExistentialDeposits, GetNativeCurrencyId, MaxLocks, MaxReserves, MinimumPeriod, OrderbookPalletId, BASE, }, traits::DistributeFees, @@ -164,7 +164,7 @@ impl orml_tokens::Config for Runtime { type CurrencyId = Currencies; type DustRemovalWhitelist = Everything; type RuntimeEvent = RuntimeEvent; - type ExistentialDeposits = ExistentialDepositsNew; + type ExistentialDeposits = ExistentialDeposits; type MaxLocks = (); type MaxReserves = MaxReserves; type CurrencyHooks = (); diff --git a/zrml/orderbook/src/weights.rs b/zrml/orderbook/src/weights.rs index 342b24fc1..7c6ecc1dd 100644 --- a/zrml/orderbook/src/weights.rs +++ b/zrml/orderbook/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,18 +19,18 @@ //! Autogenerated weights for zrml_orderbook //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_orderbook // --extrinsic=* // --execution=native @@ -65,8 +65,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `283` // Estimated: `6341` - // Minimum execution time: 15_550 nanoseconds. - Weight::from_parts(15_550_000, 6341) + // Minimum execution time: 41_041 nanoseconds. + Weight::from_parts(50_010_000, 6341) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -84,11 +84,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) fn fill_order() -> Weight { // Proof Size summary in bytes: - // Measured: `1190` - // Estimated: `19997` - // Minimum execution time: 42_911 nanoseconds. - Weight::from_parts(42_911_000, 19997) - .saturating_add(T::DbWeight::get().reads(7)) + // Measured: `1081` + // Estimated: `17297` + // Minimum execution time: 115_061 nanoseconds. + Weight::from_parts(139_860_000, 17297) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(5)) } /// Storage: MarketCommons Markets (r:1 w:0) @@ -103,11 +103,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Orderbook Orders (max_values: None, max_size: Some(142), added: 2617, mode: MaxEncodedLen) fn place_order() -> Weight { // Proof Size summary in bytes: - // Measured: `410` - // Estimated: `10088` - // Minimum execution time: 21_640 nanoseconds. - Weight::from_parts(21_640_000, 10088) - .saturating_add(T::DbWeight::get().reads(4)) + // Measured: `334` + // Estimated: `7388` + // Minimum execution time: 45_140 nanoseconds. + Weight::from_parts(56_180_000, 7388) + .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } } diff --git a/zrml/parimutuel/Cargo.toml b/zrml/parimutuel/Cargo.toml index bddb5f38f..92cd83486 100644 --- a/zrml/parimutuel/Cargo.toml +++ b/zrml/parimutuel/Cargo.toml @@ -50,4 +50,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-parimutuel" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/parimutuel/src/mock.rs b/zrml/parimutuel/src/mock.rs index 20751b709..e0775e43a 100644 --- a/zrml/parimutuel/src/mock.rs +++ b/zrml/parimutuel/src/mock.rs @@ -41,7 +41,7 @@ use zeitgeist_primitives::{ constants::mock::{ AssetsAccountDeposit, AssetsApprovalDeposit, AssetsDeposit, AssetsMetadataDepositBase, AssetsMetadataDepositPerByte, AssetsStringLimit, BlockHashCount, DestroyAccountWeight, - DestroyApprovalWeight, DestroyFinishWeight, ExistentialDepositsNew, GetNativeCurrencyId, + DestroyApprovalWeight, DestroyFinishWeight, ExistentialDeposits, GetNativeCurrencyId, MaxReserves, MinBetSize, MinimumPeriod, ParimutuelPalletId, BASE, }, traits::DistributeFees, @@ -277,7 +277,7 @@ impl orml_tokens::Config for Runtime { type CurrencyId = Currencies; type DustRemovalWhitelist = Everything; type RuntimeEvent = RuntimeEvent; - type ExistentialDeposits = ExistentialDepositsNew; + type ExistentialDeposits = ExistentialDeposits; type MaxLocks = (); type MaxReserves = MaxReserves; type CurrencyHooks = (); diff --git a/zrml/parimutuel/src/weights.rs b/zrml/parimutuel/src/weights.rs index 95abcf850..a6e9ca6c0 100644 --- a/zrml/parimutuel/src/weights.rs +++ b/zrml/parimutuel/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,7 +19,7 @@ //! Autogenerated weights for zrml_parimutuel //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` //! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -29,8 +29,8 @@ // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_parimutuel // --extrinsic=* // --execution=native @@ -71,11 +71,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) fn buy() -> Weight { // Proof Size summary in bytes: - // Measured: `1924` - // Estimated: `13576` - // Minimum execution time: 48_351 nanoseconds. - Weight::from_parts(48_351_000, 13576) - .saturating_add(T::DbWeight::get().reads(5)) + // Measured: `1815` + // Estimated: `10876` + // Minimum execution time: 134_190 nanoseconds. + Weight::from_parts(155_681_000, 10876) + .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: MarketCommons Markets (r:1 w:0) @@ -90,11 +90,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn claim_rewards() -> Weight { // Proof Size summary in bytes: - // Measured: `2421` - // Estimated: `13576` - // Minimum execution time: 50_071 nanoseconds. - Weight::from_parts(50_071_000, 13576) - .saturating_add(T::DbWeight::get().reads(5)) + // Measured: `2312` + // Estimated: `10876` + // Minimum execution time: 127_580 nanoseconds. + Weight::from_parts(180_511_000, 10876) + .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: MarketCommons Markets (r:1 w:0) @@ -109,11 +109,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn claim_refunds() -> Weight { // Proof Size summary in bytes: - // Measured: `2421` - // Estimated: `18794` - // Minimum execution time: 47_831 nanoseconds. - Weight::from_parts(47_831_000, 18794) - .saturating_add(T::DbWeight::get().reads(7)) + // Measured: `2312` + // Estimated: `13394` + // Minimum execution time: 119_110 nanoseconds. + Weight::from_parts(132_660_000, 13394) + .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(3)) } diff --git a/zrml/prediction-markets/Cargo.toml b/zrml/prediction-markets/Cargo.toml index 8828bd559..707b7c1c1 100644 --- a/zrml/prediction-markets/Cargo.toml +++ b/zrml/prediction-markets/Cargo.toml @@ -32,8 +32,6 @@ sp-io = { workspace = true, optional = true } xcm = { workspace = true, optional = true } zrml-asset-router = { workspace = true, optional = true } zrml-prediction-markets-runtime-api = { workspace = true, optional = true } -zrml-rikiddo = { workspace = true, optional = true } -zrml-swaps = { workspace = true, optional = true } [dev-dependencies] more-asserts = { workspace = true } @@ -58,8 +56,6 @@ mock = [ "zeitgeist-primitives/mock", "zrml-asset-router/default", "zrml-prediction-markets-runtime-api/default", - "zrml-rikiddo/default", - "zrml-swaps/default", "xcm/default", ] parachain = [] @@ -101,4 +97,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-prediction-markets" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/prediction-markets/runtime-api/Cargo.toml b/zrml/prediction-markets/runtime-api/Cargo.toml index 24211e93d..81c32e411 100644 --- a/zrml/prediction-markets/runtime-api/Cargo.toml +++ b/zrml/prediction-markets/runtime-api/Cargo.toml @@ -15,4 +15,4 @@ std = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-prediction-markets-runtime-api" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/prediction-markets/src/mock.rs b/zrml/prediction-markets/src/mock.rs index edfc86a3f..3f0ef4230 100644 --- a/zrml/prediction-markets/src/mock.rs +++ b/zrml/prediction-markets/src/mock.rs @@ -53,7 +53,7 @@ use zeitgeist_primitives::{ CloseEarlyProtectionBlockPeriod, CloseEarlyProtectionTimeFramePeriod, CloseEarlyRequestBond, CloseEarlyTimeFramePeriod, CorrectionPeriod, CourtPalletId, DestroyAccountWeight, DestroyApprovalWeight, DestroyFinishWeight, ExistentialDeposit, - ExistentialDepositsNew, GdVotingPeriod, GetNativeCurrencyId, GlobalDisputeLockId, + ExistentialDeposits, GdVotingPeriod, GetNativeCurrencyId, GlobalDisputeLockId, GlobalDisputesPalletId, InflationPeriod, LiquidityMiningPalletId, LockId, MaxAppeals, MaxApprovals, MaxCategories, MaxCourtParticipants, MaxCreatorFee, MaxDelegations, MaxDisputeDuration, MaxDisputes, MaxEditReasonLen, MaxGlobalDisputeVotes, MaxGracePeriod, @@ -133,8 +133,8 @@ impl MarketTransitionApi for StateTransitionMock { } thread_local! { - pub static DEPLOY_POOL_CALL_DATA: RefCell> = RefCell::new(vec![]); - pub static DEPLOY_POOL_RETURN_VALUE: RefCell = RefCell::new(Ok(())); + pub static DEPLOY_POOL_CALL_DATA: RefCell> = const { RefCell::new(vec![]) }; + pub static DEPLOY_POOL_RETURN_VALUE: RefCell = const { RefCell::new(Ok(())) }; } #[allow(unused)] @@ -323,7 +323,7 @@ impl orml_tokens::Config for Runtime { type CurrencyId = Currencies; type DustRemovalWhitelist = Everything; type RuntimeEvent = RuntimeEvent; - type ExistentialDeposits = ExistentialDepositsNew; + type ExistentialDeposits = ExistentialDeposits; type MaxLocks = (); type MaxReserves = MaxReserves; type CurrencyHooks = (); diff --git a/zrml/prediction-markets/src/weights.rs b/zrml/prediction-markets/src/weights.rs index e635c471e..5b2da9c06 100644 --- a/zrml/prediction-markets/src/weights.rs +++ b/zrml/prediction-markets/src/weights.rs @@ -19,7 +19,7 @@ //! Autogenerated weights for zrml_prediction_markets //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` //! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -29,8 +29,8 @@ // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_prediction_markets // --extrinsic=* // --execution=native @@ -98,10 +98,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `c` is `[0, 63]`. fn admin_move_market_to_closed(_c: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `675 + c * (16 ±0)` + // Measured: `710 + c * (16 ±0)` // Estimated: `7181` - // Minimum execution time: 20_831 nanoseconds. - Weight::from_parts(21_250_000, 7181) + // Minimum execution time: 46_460 nanoseconds. + Weight::from_parts(64_183_834, 7181) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -112,12 +112,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Balances Reserves (r:1 w:1) /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) /// The range of component `r` is `[0, 63]`. - fn admin_move_market_to_resolved_scalar_reported(_r: u32) -> Weight { + fn admin_move_market_to_resolved_scalar_reported(r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `721 + r * (16 ±0)` + // Measured: `756 + r * (16 ±0)` // Estimated: `10394` - // Minimum execution time: 32_171 nanoseconds. - Weight::from_parts(32_361_000, 10394) + // Minimum execution time: 83_360 nanoseconds. + Weight::from_parts(101_009_762, 10394) + // Standard Error: 30_301 + .saturating_add(Weight::from_parts(208_870, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -130,10 +132,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `r` is `[0, 63]`. fn admin_move_market_to_resolved_categorical_reported(_r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `677 + r * (16 ±0)` + // Measured: `712 + r * (16 ±0)` // Estimated: `10394` - // Minimum execution time: 31_781 nanoseconds. - Weight::from_parts(32_291_000, 10394) + // Minimum execution time: 82_630 nanoseconds. + Weight::from_parts(102_975_254, 10394) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -152,10 +154,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `r` is `[0, 63]`. fn admin_move_market_to_resolved_scalar_disputed(_r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1280 + r * (16 ±0)` + // Measured: `1282 + r * (16 ±0)` // Estimated: `22120` - // Minimum execution time: 52_502 nanoseconds. - Weight::from_parts(53_751_000, 22120) + // Minimum execution time: 139_521 nanoseconds. + Weight::from_parts(172_661_579, 22120) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } @@ -174,10 +176,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `r` is `[0, 63]`. fn admin_move_market_to_resolved_categorical_disputed(_r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `1221 + r * (16 ±0)` + // Measured: `1223 + r * (16 ±0)` // Estimated: `22120` - // Minimum execution time: 52_571 nanoseconds. - Weight::from_parts(52_712_000, 22120) + // Minimum execution time: 138_250 nanoseconds. + Weight::from_parts(195_683_366, 22120) .saturating_add(T::DbWeight::get().reads(7)) .saturating_add(T::DbWeight::get().writes(6)) } @@ -191,8 +193,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `580` // Estimated: `10402` - // Minimum execution time: 21_791 nanoseconds. - Weight::from_parts(21_791_000, 10402) + // Minimum execution time: 53_530 nanoseconds. + Weight::from_parts(64_901_000, 10402) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -201,12 +203,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: PredictionMarkets MarketIdsForEdit (r:1 w:1) /// Proof: PredictionMarkets MarketIdsForEdit (max_values: None, max_size: Some(1050), added: 3525, mode: MaxEncodedLen) /// The range of component `r` is `[0, 1024]`. - fn request_edit(_r: u32) -> Weight { + fn request_edit(r: u32) -> Weight { // Proof Size summary in bytes: // Measured: `519` // Estimated: `6678` - // Minimum execution time: 12_401 nanoseconds. - Weight::from_parts(12_451_000, 6678) + // Minimum execution time: 26_100 nanoseconds. + Weight::from_parts(32_383_275, 6678) + // Standard Error: 190 + .saturating_add(Weight::from_parts(4_809, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -221,14 +225,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Tokens TotalIssuance (r:64 w:64) /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) /// The range of component `a` is `[2, 64]`. - fn buy_complete_set(_a: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `663` - // Estimated: `505984` - // Minimum execution time: 39_091 nanoseconds. - Weight::from_parts(438_991_000, 505984) - .saturating_add(T::DbWeight::get().reads(194)) - .saturating_add(T::DbWeight::get().writes(129)) + fn buy_complete_set(a: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `554` + // Estimated: `5760 + a * (5116 ±0)` + // Minimum execution time: 110_781 nanoseconds. + Weight::from_parts(95_160_144, 5760) + // Standard Error: 200_254 + .saturating_add(Weight::from_parts(22_776_250, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 5116).saturating_mul(a.into())) } /// Storage: Timestamp Now (r:1 w:0) /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) @@ -241,12 +250,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: MarketCommons Markets (r:0 w:1) /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) /// The range of component `m` is `[0, 63]`. - fn create_market(_m: u32) -> Weight { + fn create_market(m: u32) -> Weight { // Proof Size summary in bytes: // Measured: `155 + m * (17 ±0)` // Estimated: `8263` - // Minimum execution time: 23_641 nanoseconds. - Weight::from_parts(24_920_000, 8263) + // Minimum execution time: 55_550 nanoseconds. + Weight::from_parts(74_259_340, 8263) + // Standard Error: 7_534 + .saturating_add(Weight::from_parts(63_015, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -263,8 +274,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `700 + m * (16 ±0)` // Estimated: `10706` - // Minimum execution time: 23_060 nanoseconds. - Weight::from_parts(23_201_000, 10706) + // Minimum execution time: 53_490 nanoseconds. + Weight::from_parts(75_146_182, 10706) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -292,14 +303,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `n` is `[1, 64]`. fn start_global_dispute(m: u32, n: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `9188 + m * (16 ±0)` + // Measured: `9158 + m * (16 ±0)` // Estimated: `329717` - // Minimum execution time: 139_494 nanoseconds. - Weight::from_parts(138_828_007, 329717) - // Standard Error: 24_729 - .saturating_add(Weight::from_parts(26_500, 0).saturating_mul(m.into())) - // Standard Error: 24_729 - .saturating_add(Weight::from_parts(9_992, 0).saturating_mul(n.into())) + // Minimum execution time: 325_801 nanoseconds. + Weight::from_parts(403_175_654, 329717) + // Standard Error: 66_094 + .saturating_add(Weight::from_parts(104_261, 0).saturating_mul(m.into())) + // Standard Error: 66_094 + .saturating_add(Weight::from_parts(153_430, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(40)) .saturating_add(T::DbWeight::get().writes(36)) } @@ -311,8 +322,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `626` // Estimated: `6877` - // Minimum execution time: 26_070 nanoseconds. - Weight::from_parts(26_070_000, 6877) + // Minimum execution time: 59_780 nanoseconds. + Weight::from_parts(60_860_000, 6877) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -326,8 +337,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `539` // Estimated: `6877` - // Minimum execution time: 21_700 nanoseconds. - Weight::from_parts(21_700_000, 6877) + // Minimum execution time: 66_010 nanoseconds. + Weight::from_parts(80_071_000, 6877) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -339,8 +350,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `6877` - // Minimum execution time: 22_630 nanoseconds. - Weight::from_parts(22_630_000, 6877) + // Minimum execution time: 64_000 nanoseconds. + Weight::from_parts(78_640_000, 6877) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -354,10 +365,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Authorized AuthorizedOutcomeReports (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) fn internal_resolve_categorical_disputed() -> Weight { // Proof Size summary in bytes: - // Measured: `870` + // Measured: `837` // Estimated: `12272` - // Minimum execution time: 36_260 nanoseconds. - Weight::from_parts(36_260_000, 12272) + // Minimum execution time: 123_140 nanoseconds. + Weight::from_parts(139_681_000, 12272) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -369,8 +380,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `626` // Estimated: `6877` - // Minimum execution time: 21_470 nanoseconds. - Weight::from_parts(21_470_000, 6877) + // Minimum execution time: 58_300 nanoseconds. + Weight::from_parts(71_201_000, 6877) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -384,10 +395,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Authorized AuthorizedOutcomeReports (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) fn internal_resolve_scalar_disputed() -> Weight { // Proof Size summary in bytes: - // Measured: `929` + // Measured: `896` // Estimated: `12272` - // Minimum execution time: 37_031 nanoseconds. - Weight::from_parts(37_031_000, 12272) + // Minimum execution time: 103_430 nanoseconds. + Weight::from_parts(125_710_000, 12272) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -407,8 +418,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `79` // Estimated: `15090` - // Minimum execution time: 11_000 nanoseconds. - Weight::from_parts(11_000_000, 15090) + // Minimum execution time: 24_590 nanoseconds. + Weight::from_parts(30_770_000, 15090) .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(5)) } @@ -424,11 +435,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) fn redeem_shares_categorical() -> Weight { // Proof Size summary in bytes: - // Measured: `2171` - // Estimated: `13576` - // Minimum execution time: 41_521 nanoseconds. - Weight::from_parts(41_521_000, 13576) - .saturating_add(T::DbWeight::get().reads(5)) + // Measured: `2062` + // Estimated: `10876` + // Minimum execution time: 123_791 nanoseconds. + Weight::from_parts(144_701_000, 10876) + .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: MarketCommons Markets (r:1 w:0) @@ -443,11 +454,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) fn redeem_shares_scalar() -> Weight { // Proof Size summary in bytes: - // Measured: `1318` - // Estimated: `21392` - // Minimum execution time: 48_761 nanoseconds. - Weight::from_parts(48_761_000, 21392) - .saturating_add(T::DbWeight::get().reads(8)) + // Measured: `1209` + // Estimated: `15992` + // Minimum execution time: 120_670 nanoseconds. + Weight::from_parts(186_740_000, 15992) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(5)) } /// Storage: MarketCommons Markets (r:1 w:1) @@ -460,14 +471,16 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: PredictionMarkets MarketIdsForEdit (max_values: None, max_size: Some(1050), added: 3525, mode: MaxEncodedLen) /// The range of component `c` is `[0, 63]`. /// The range of component `r` is `[0, 1024]`. - fn reject_market(_c: u32, r: u32) -> Weight { + fn reject_market(c: u32, r: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `608 + c * (16 ±0)` + // Measured: `643 + c * (16 ±0)` // Estimated: `10402` - // Minimum execution time: 33_841 nanoseconds. - Weight::from_parts(34_426_000, 10402) - // Standard Error: 109 - .saturating_add(Weight::from_parts(688, 0).saturating_mul(r.into())) + // Minimum execution time: 89_320 nanoseconds. + Weight::from_parts(101_732_045, 10402) + // Standard Error: 10_471 + .saturating_add(Weight::from_parts(137_908, 0).saturating_mul(c.into())) + // Standard Error: 648 + .saturating_add(Weight::from_parts(8_275, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -480,10 +493,10 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `m` is `[0, 63]`. fn report_market_with_dispute_mechanism(_m: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `647 + m * (1 ±0)` + // Measured: `716` // Estimated: `7173` - // Minimum execution time: 19_451 nanoseconds. - Weight::from_parts(19_650_000, 7173) + // Minimum execution time: 43_530 nanoseconds. + Weight::from_parts(62_963_271, 7173) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -495,8 +508,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `538` // Estimated: `6877` - // Minimum execution time: 29_751 nanoseconds. - Weight::from_parts(29_751_000, 6877) + // Minimum execution time: 96_401 nanoseconds. + Weight::from_parts(97_750_000, 6877) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -511,14 +524,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Tokens TotalIssuance (r:64 w:64) /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) /// The range of component `a` is `[2, 64]`. - fn sell_complete_set(_a: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `895 + a * (161 ±0)` - // Estimated: `505984` - // Minimum execution time: 47_271 nanoseconds. - Weight::from_parts(674_006_000, 505984) - .saturating_add(T::DbWeight::get().reads(194)) - .saturating_add(T::DbWeight::get().writes(129)) + fn sell_complete_set(a: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `793 + a * (161 ±0)` + // Estimated: `5760 + a * (5116 ±0)` + // Minimum execution time: 114_750 nanoseconds. + Weight::from_parts(73_429_594, 5760) + // Standard Error: 110_546 + .saturating_add(Weight::from_parts(32_544_002, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(1)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 5116).saturating_mul(a.into())) } /// Storage: PredictionMarkets MarketIdsPerCloseBlock (r:1 w:1) /// Proof: PredictionMarkets MarketIdsPerCloseBlock (max_values: None, max_size: Some(1050), added: 3525, mode: MaxEncodedLen) @@ -530,14 +548,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `f` is `[1, 31]`. fn market_status_manager(b: u32, f: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `2416 + b * (330 ±0) + f * (334 ±0)` + // Measured: `2539 + b * (329 ±0) + f * (331 ±0)` // Estimated: `7050 + b * (3153 ±0) + f * (3153 ±0)` - // Minimum execution time: 78_562 nanoseconds. - Weight::from_parts(26_970_933, 7050) - // Standard Error: 41_857 - .saturating_add(Weight::from_parts(1_623_200, 0).saturating_mul(b.into())) - // Standard Error: 41_857 - .saturating_add(Weight::from_parts(1_611_866, 0).saturating_mul(f.into())) + // Minimum execution time: 174_211 nanoseconds. + Weight::from_parts(67_095_551, 7050) + // Standard Error: 63_801 + .saturating_add(Weight::from_parts(4_617_980, 0).saturating_mul(b.into())) + // Standard Error: 63_801 + .saturating_add(Weight::from_parts(4_855_146, 0).saturating_mul(f.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(f.into()))) @@ -555,14 +573,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// The range of component `d` is `[1, 31]`. fn market_resolution_manager(r: u32, d: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `2360 + r * (330 ±0) + d * (334 ±0)` + // Measured: `2483 + r * (329 ±0) + d * (331 ±0)` // Estimated: `7034 + r * (3153 ±0) + d * (3153 ±0)` - // Minimum execution time: 76_262 nanoseconds. - Weight::from_parts(26_386_933, 7034) - // Standard Error: 22_805 - .saturating_add(Weight::from_parts(1_558_200, 0).saturating_mul(r.into())) - // Standard Error: 22_805 - .saturating_add(Weight::from_parts(1_570_866, 0).saturating_mul(d.into())) + // Minimum execution time: 169_091 nanoseconds. + Weight::from_parts(56_570_719, 7034) + // Standard Error: 89_416 + .saturating_add(Weight::from_parts(4_792_326, 0).saturating_mul(r.into())) + // Standard Error: 89_416 + .saturating_add(Weight::from_parts(4_925_168, 0).saturating_mul(d.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(d.into()))) @@ -582,12 +600,12 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `675 + o * (16 ±0)` // Estimated: `10706` - // Minimum execution time: 21_971 nanoseconds. - Weight::from_parts(21_711_000, 10706) - // Standard Error: 3_024 - .saturating_add(Weight::from_parts(4_126, 0).saturating_mul(o.into())) - // Standard Error: 3_024 - .saturating_add(Weight::from_parts(16_984, 0).saturating_mul(n.into())) + // Minimum execution time: 51_230 nanoseconds. + Weight::from_parts(61_363_456, 10706) + // Standard Error: 13_970 + .saturating_add(Weight::from_parts(50_244, 0).saturating_mul(o.into())) + // Standard Error: 13_970 + .saturating_add(Weight::from_parts(62_184, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -605,12 +623,12 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `901 + o * (16 ±0)` // Estimated: `14430` - // Minimum execution time: 38_301 nanoseconds. - Weight::from_parts(30_845_500, 14430) - // Standard Error: 139_265 - .saturating_add(Weight::from_parts(130_404, 0).saturating_mul(o.into())) - // Standard Error: 139_265 - .saturating_add(Weight::from_parts(118_341, 0).saturating_mul(n.into())) + // Minimum execution time: 96_271 nanoseconds. + Weight::from_parts(119_475_237, 14430) + // Standard Error: 22_292 + .saturating_add(Weight::from_parts(90_541, 0).saturating_mul(o.into())) + // Standard Error: 22_292 + .saturating_add(Weight::from_parts(12_780, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -628,12 +646,12 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `736 + o * (16 ±0)` // Estimated: `14430` - // Minimum execution time: 30_801 nanoseconds. - Weight::from_parts(30_206_500, 14430) - // Standard Error: 1_800 - .saturating_add(Weight::from_parts(9_436, 0).saturating_mul(o.into())) - // Standard Error: 1_800 - .saturating_add(Weight::from_parts(11_658, 0).saturating_mul(n.into())) + // Minimum execution time: 74_650 nanoseconds. + Weight::from_parts(92_510_070, 14430) + // Standard Error: 11_870 + .saturating_add(Weight::from_parts(29_343, 0).saturating_mul(o.into())) + // Standard Error: 11_870 + .saturating_add(Weight::from_parts(37_672, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -647,14 +665,16 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: PredictionMarkets MarketIdsPerCloseTimeFrame (max_values: None, max_size: Some(1050), added: 3525, mode: MaxEncodedLen) /// The range of component `o` is `[0, 63]`. /// The range of component `n` is `[0, 63]`. - fn dispute_early_close(o: u32, _n: u32) -> Weight { + fn dispute_early_close(o: u32, n: u32) -> Weight { // Proof Size summary in bytes: // Measured: `852 + o * (16 ±0) + n * (16 ±0)` // Estimated: `14430` - // Minimum execution time: 29_971 nanoseconds. - Weight::from_parts(31_721_000, 14430) - // Standard Error: 2_474 - .saturating_add(Weight::from_parts(14_126, 0).saturating_mul(o.into())) + // Minimum execution time: 71_610 nanoseconds. + Weight::from_parts(86_696_361, 14430) + // Standard Error: 13_050 + .saturating_add(Weight::from_parts(59_792, 0).saturating_mul(o.into())) + // Standard Error: 13_050 + .saturating_add(Weight::from_parts(64_792, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } @@ -666,14 +686,16 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: PredictionMarkets MarketIdsPerCloseTimeFrame (max_values: None, max_size: Some(1050), added: 3525, mode: MaxEncodedLen) /// The range of component `o` is `[0, 63]`. /// The range of component `n` is `[0, 63]`. - fn reject_early_close_after_authority(o: u32, _n: u32) -> Weight { + fn reject_early_close_after_authority(o: u32, n: u32) -> Weight { // Proof Size summary in bytes: // Measured: `742 + o * (16 ±0) + n * (16 ±0)` // Estimated: `10706` - // Minimum execution time: 24_391 nanoseconds. - Weight::from_parts(24_525_500, 10706) - // Standard Error: 948 - .saturating_add(Weight::from_parts(8_642, 0).saturating_mul(o.into())) + // Minimum execution time: 55_950 nanoseconds. + Weight::from_parts(70_714_615, 10706) + // Standard Error: 14_905 + .saturating_add(Weight::from_parts(63_828, 0).saturating_mul(o.into())) + // Standard Error: 14_905 + .saturating_add(Weight::from_parts(40_198, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(3)) } @@ -685,8 +707,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `672` // Estimated: `6877` - // Minimum execution time: 26_471 nanoseconds. - Weight::from_parts(26_471_000, 6877) + // Minimum execution time: 80_670 nanoseconds. + Weight::from_parts(84_290_000, 6877) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -697,12 +719,14 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Timestamp Now (r:1 w:0) /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) /// The range of component `c` is `[0, 63]`. - fn close_trusted_market(_c: u32) -> Weight { + fn close_trusted_market(c: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `674 + c * (16 ±0)` + // Measured: `709 + c * (16 ±0)` // Estimated: `7181` - // Minimum execution time: 21_180 nanoseconds. - Weight::from_parts(21_531_000, 7181) + // Minimum execution time: 46_550 nanoseconds. + Weight::from_parts(57_766_022, 7181) + // Standard Error: 7_003 + .saturating_add(Weight::from_parts(122_020, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -716,8 +740,6 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: PredictionMarkets MarketIdsPerCloseTimeFrame (max_values: None, max_size: Some(1050), added: 3525, mode: MaxEncodedLen) /// Storage: System Account (r:2 w:2) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) - /// Storage: MarketAssets Asset (r:64 w:0) - /// Proof: MarketAssets Asset (max_values: None, max_size: Some(225), added: 2700, mode: MaxEncodedLen) /// Storage: Tokens Accounts (r:128 w:128) /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) /// Storage: Tokens TotalIssuance (r:64 w:64) @@ -728,33 +750,39 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) /// The range of component `m` is `[0, 63]`. /// The range of component `n` is `[2, 64]`. - fn create_market_and_deploy_pool(_m: u32, n: u32) -> Weight { - // Proof Size summary in bytes: - // Measured: `395 + m * (17 ±0)` - // Estimated: `160697 + n * (10414 ±0)` - // Minimum execution time: 91_033 nanoseconds. - Weight::from_parts(78_894_548, 160697) - // Standard Error: 71_935 - .saturating_add(Weight::from_parts(14_756_725, 0).saturating_mul(n.into())) + fn create_market_and_deploy_pool(m: u32, n: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `410 + m * (16 ±0)` + // Estimated: `160697 + n * (7714 ±0)` + // Minimum execution time: 308_311 nanoseconds. + Weight::from_parts(79_670_419, 160697) + // Standard Error: 618_510 + .saturating_add(Weight::from_parts(1_958_104, 0).saturating_mul(m.into())) + // Standard Error: 627_776 + .saturating_add(Weight::from_parts(61_182_580, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(7)) - .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(7)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) - .saturating_add(Weight::from_parts(0, 10414).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(0, 7714).saturating_mul(n.into())) } - /// Storage: MarketCommons Markets (r:1 w:1) - /// Proof: MarketCommons Markets (max_values: None, max_size: Some(678), added: 3153, mode: MaxEncodedLen) /// Storage: Timestamp Now (r:1 w:0) /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Balances Reserves (r:1 w:1) + /// Proof: Balances Reserves (max_values: None, max_size: Some(1249), added: 3724, mode: MaxEncodedLen) + /// Storage: MarketCommons MarketCounter (r:1 w:1) + /// Proof: MarketCommons MarketCounter (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) /// Storage: PredictionMarkets MarketIdsPerCloseTimeFrame (r:1 w:1) /// Proof: PredictionMarkets MarketIdsPerCloseTimeFrame (max_values: None, max_size: Some(1050), added: 3525, mode: MaxEncodedLen) /// The range of component `o` is `[1, 63]`. - fn manually_close_market(_o: u32) -> Weight { + fn manually_close_market(o: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `658 + o * (16 ±0)` + // Measured: `694 + o * (16 ±0)` // Estimated: `7181` - // Minimum execution time: 20_381 nanoseconds. - Weight::from_parts(20_441_000, 7181) + // Minimum execution time: 53_830 nanoseconds. + Weight::from_parts(57_209_302, 7181) + // Standard Error: 9_825 + .saturating_add(Weight::from_parts(91_256, 0).saturating_mul(o.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) } diff --git a/zrml/rikiddo/Cargo.toml b/zrml/rikiddo/Cargo.toml index 8859b1f7e..4732ba6ba 100644 --- a/zrml/rikiddo/Cargo.toml +++ b/zrml/rikiddo/Cargo.toml @@ -44,4 +44,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-rikiddo" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/cost.rs b/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/cost.rs index 4630380b8..953825267 100644 --- a/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/cost.rs +++ b/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/cost.rs @@ -1,4 +1,5 @@ -// Copyright 2021-2022 Zeitgeist PM LLC. +// Copyright 2024 Forecasting Technologies LTD. +// Copyright 2021-2022, 2024 Zeitgeist PM LLC. // // This file is part of Zeitgeist. // @@ -15,6 +16,8 @@ // You should have received a copy of the GNU General Public License // along with Zeitgeist. If not, see . +#![allow(clippy::useless_vec)] + use frame_support::assert_err; use hashbrown::HashMap; use substrate_fixed::{traits::ToFixed, types::extra::U64, FixedI128, FixedU128}; diff --git a/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/misc.rs b/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/misc.rs index e7b099457..a11438f4a 100644 --- a/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/misc.rs +++ b/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/misc.rs @@ -1,4 +1,5 @@ -// Copyright 2021-2022 Zeitgeist PM LLC. +// Copyright 2024 Forecasting Technologies LTD. +// Copyright 2021-2022, 2024 Zeitgeist PM LLC. // // This file is part of Zeitgeist. // @@ -15,6 +16,8 @@ // You should have received a copy of the GNU General Public License // along with Zeitgeist. If not, see . +#![allow(clippy::useless_vec)] + use frame_support::assert_err; use substrate_fixed::{traits::ToFixed, types::extra::U64, FixedI128}; diff --git a/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/price.rs b/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/price.rs index c9480981e..07cb4b0b5 100644 --- a/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/price.rs +++ b/zrml/rikiddo/src/tests/rikiddo_sigmoid_mv/price.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -17,6 +17,8 @@ // along with Zeitgeist. If not, see . #![allow(clippy::needless_late_init)] +#![allow(clippy::useless_vec)] + use frame_support::assert_err; use substrate_fixed::{traits::ToFixed, types::extra::U64, FixedI128, FixedU128}; diff --git a/zrml/simple-disputes/Cargo.toml b/zrml/simple-disputes/Cargo.toml index e85f005a0..8841cdfee 100644 --- a/zrml/simple-disputes/Cargo.toml +++ b/zrml/simple-disputes/Cargo.toml @@ -42,4 +42,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-simple-disputes" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/simple-disputes/src/mock.rs b/zrml/simple-disputes/src/mock.rs index 267470416..1fc79d844 100644 --- a/zrml/simple-disputes/src/mock.rs +++ b/zrml/simple-disputes/src/mock.rs @@ -30,7 +30,7 @@ use sp_runtime::{ }; use zeitgeist_primitives::{ constants::mock::{ - BlockHashCount, ExistentialDeposits, GetNativeCurrencyId, MaxDisputes, MaxReserves, + BlockHashCount, ExistentialDepositsAssets, GetNativeCurrencyId, MaxDisputes, MaxReserves, MinimumPeriod, OutcomeBond, OutcomeFactor, SimpleDisputesPalletId, BASE, }, traits::DisputeResolutionApi, @@ -174,7 +174,7 @@ impl orml_tokens::Config for Runtime { type CurrencyId = Assets; type DustRemovalWhitelist = Everything; type RuntimeEvent = (); - type ExistentialDeposits = ExistentialDeposits; + type ExistentialDeposits = ExistentialDepositsAssets; type MaxLocks = (); type MaxReserves = MaxReserves; type CurrencyHooks = (); diff --git a/zrml/styx/Cargo.toml b/zrml/styx/Cargo.toml index 95889877d..d24e381de 100644 --- a/zrml/styx/Cargo.toml +++ b/zrml/styx/Cargo.toml @@ -37,4 +37,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-styx" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/styx/src/benchmarks.rs b/zrml/styx/src/benchmarks.rs index c38aa77c2..86d1dd06a 100644 --- a/zrml/styx/src/benchmarks.rs +++ b/zrml/styx/src/benchmarks.rs @@ -1,4 +1,4 @@ -// Copyright 2023 Forecasting Technologies LTD. +// Copyright 2023-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -40,7 +40,7 @@ benchmarks! { cross { let caller: T::AccountId = whitelisted_caller(); let balance = (90_000_000 * BASE).saturated_into(); - T::Currency::deposit_creating(&caller, balance); + let _ = T::Currency::deposit_creating(&caller, balance); }: _(RawOrigin::Signed(caller)) set_burn_amount { @@ -48,7 +48,7 @@ benchmarks! { let caller: T::AccountId = whitelisted_caller(); let balance = (10_000 * BASE).saturated_into(); let amount = (20 * BASE).saturated_into(); - T::Currency::deposit_creating(&caller, balance); + let _ = T::Currency::deposit_creating(&caller, balance); let call = Call::::set_burn_amount { amount }; }: { call.dispatch_bypass_filter(origin)? } diff --git a/zrml/styx/src/weights.rs b/zrml/styx/src/weights.rs index 6933adeaa..4594eb18b 100644 --- a/zrml/styx/src/weights.rs +++ b/zrml/styx/src/weights.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Forecasting Technologies LTD. +// Copyright 2022-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -19,7 +19,7 @@ //! Autogenerated weights for zrml_styx //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` //! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -29,8 +29,8 @@ // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_styx // --extrinsic=* // --execution=native @@ -64,8 +64,8 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3034` - // Minimum execution time: 14_370 nanoseconds. - Weight::from_parts(14_370_000, 3034) + // Minimum execution time: 33_900 nanoseconds. + Weight::from_parts(43_980_000, 3034) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -75,7 +75,7 @@ impl WeightInfoZeitgeist for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_370 nanoseconds. - Weight::from_parts(5_370_000, 0).saturating_add(T::DbWeight::get().writes(1)) + // Minimum execution time: 14_260 nanoseconds. + Weight::from_parts(15_690_000, 0).saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/zrml/swaps/Cargo.toml b/zrml/swaps/Cargo.toml index 94c2386dd..3cc8ac8be 100644 --- a/zrml/swaps/Cargo.toml +++ b/zrml/swaps/Cargo.toml @@ -10,7 +10,6 @@ serde = { workspace = true, features = ["derive"] } sp-arithmetic = { workspace = true } sp-runtime = { workspace = true } zeitgeist-primitives = { workspace = true } -zrml-liquidity-mining = { workspace = true } # Mock @@ -57,7 +56,6 @@ std = [ "parity-scale-codec/std", "sp-runtime/std", "zeitgeist-primitives/std", - "zrml-liquidity-mining/std", ] try-runtime = [ "frame-support/try-runtime", @@ -67,4 +65,4 @@ try-runtime = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-swaps" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/swaps/README.md b/zrml/swaps/README.md index 36952b819..d706c6463 100644 --- a/zrml/swaps/README.md +++ b/zrml/swaps/README.md @@ -1,4 +1,35 @@ # Swaps Module -A module to handle swapping shares out for different ones. Allows liquidity -providers to deposit full outcome shares and earn fees. +Legacy module which implements Balancer style liquidity pools. + +## Overview + +See the [Balancer whitepaper](https://www.balancer.fi/whitepaper.pdf) for +details. + +### Terminology + +- _Exit_: Refers to removing (part of) the liquidity from a liquidity pool in + exchange for burning pool shares. Amounts received by the LP are + proportional to their ownership of the pool. +- _Join_: Refers to adding more liquidity to a pool and receiving pool shares + in return. Amounts moved into the pool are proportional to the LP's + ownership of the pool. +- _Liquidity provider_: A user who owns pool shares indicating their stake in + the liquidity pool. +- _Pool Shares_: A token indicating the owner's per rate share of the + liquidity pool. +- _Single Asset Operation_: An operation which combines joining or withdrawing + from the pool and selling unwanted tokens. The end result is like entering + (resp. leaving) the pool but paying (resp. receiving payment) in a single + asset. +- _Swap fees_: Part of the collateral paid or received by informants that is + moved to a separate account owned by the liquidity providers. They need to + be withdrawn using the `withdraw_fees` extrinsic. + +### Exact Amounts + +Almost all operations come in two variants, one where the assets entering the +pool are exact, the other where the assets leaving the pool are exact. Due to +the permissionless nature of the pallet, if multiple trades are placed in the +same block, the non-exact amount might slip for some of the parties. diff --git a/zrml/swaps/rpc/Cargo.toml b/zrml/swaps/rpc/Cargo.toml index f162e166d..a5f97ab16 100644 --- a/zrml/swaps/rpc/Cargo.toml +++ b/zrml/swaps/rpc/Cargo.toml @@ -11,4 +11,4 @@ zrml-swaps-runtime-api = { workspace = true, features = ["default"] } authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-swaps-rpc" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/swaps/runtime-api/Cargo.toml b/zrml/swaps/runtime-api/Cargo.toml index 00c0c3276..a3a1c88b5 100644 --- a/zrml/swaps/runtime-api/Cargo.toml +++ b/zrml/swaps/runtime-api/Cargo.toml @@ -18,4 +18,4 @@ std = [ authors = ["Zeitgeist PM "] edition = "2021" name = "zrml-swaps-runtime-api" -version = "0.4.3" +version = "0.5.0" diff --git a/zrml/swaps/src/benchmarks.rs b/zrml/swaps/src/benchmarks.rs index d4d414be0..c7442491a 100644 --- a/zrml/swaps/src/benchmarks.rs +++ b/zrml/swaps/src/benchmarks.rs @@ -29,7 +29,7 @@ use super::*; #[cfg(test)] use crate::Pallet as Swaps; -use crate::{types::PoolStatus, AssetOf, Config, Event}; +use crate::{types::PoolStatus, AssetOf, Config, Event, MAX_IN_RATIO, MAX_OUT_RATIO}; use frame_benchmarking::{benchmarks, vec, whitelisted_caller, Vec}; use frame_support::traits::Get; use frame_system::RawOrigin; @@ -72,7 +72,7 @@ fn bench_create_pool( caller: T::AccountId, asset_count: usize, opt_asset_amount: Option>, - opt_weights: Option>, + opt_weights: Option>>, open: bool, ) -> (u128, Vec>, BalanceOf) where @@ -159,7 +159,7 @@ benchmarks! { let max_asset_amount: BalanceOf = u128::MAX.saturated_into(); }: _(RawOrigin::Signed(caller), pool_id, assets[0], pool_amount, max_asset_amount) - swap_exact_amount_in_cpmm { + swap_exact_amount_in { // We're trying to get as many iterations in `bpow_approx` as possible. Experiments have // shown that y = 3/4, weight_ratio=1/2 (almost) maximizes the number of iterations for // calculating y^r within the set of values allowed in `swap_exact_amount_in` (see @@ -167,9 +167,9 @@ benchmarks! { // amount_in = 1/3 * balance_in, weight_in = 1, weight_out = 2. let asset_count = T::MaxAssets::get(); let balance: BalanceOf = LIQUIDITY.saturated_into(); - let asset_amount_in: BalanceOf = balance.bmul(T::MaxInRatio::get()).unwrap(); + let asset_amount_in: BalanceOf = balance.bmul(MAX_IN_RATIO.saturated_into()).unwrap(); let weight_in = T::MinWeight::get(); - let weight_out = 2 * weight_in; + let weight_out = weight_in * 2u8.into(); let mut weights = vec![weight_in; asset_count as usize]; weights[asset_count as usize - 1] = weight_out; let caller: T::AccountId = whitelisted_caller(); @@ -195,7 +195,7 @@ benchmarks! { max_price ) - swap_exact_amount_out_cpmm { + swap_exact_amount_out { // We're trying to get as many iterations in `bpow_approx` as possible. Experiments have // shown that y = 3/2, weight_ratio=1/4 (almost) maximizes the number of iterations for // calculating y^r within the set of values allowed in `swap_exact_amount_out` (see @@ -203,9 +203,9 @@ benchmarks! { // amount_out = 1/3 * balance_out, weight_out = 1, weight_in = 4. let asset_count = T::MaxAssets::get(); let balance: BalanceOf = LIQUIDITY.saturated_into(); - let asset_amount_out: BalanceOf = balance.bmul(T::MaxOutRatio::get()).unwrap(); + let asset_amount_out: BalanceOf = balance.bmul(MAX_OUT_RATIO.saturated_into()).unwrap(); let weight_out = T::MinWeight::get(); - let weight_in = 4 * weight_out; + let weight_in = weight_out * 4u8.into(); let mut weights = vec![weight_out; asset_count as usize]; weights[0] = weight_in; let caller: T::AccountId = whitelisted_caller(); @@ -269,7 +269,7 @@ benchmarks! { Pallet::::destroy_pool(pool_id).unwrap(); } verify { assert!(Pallet::::pool_by_id(pool_id).is_err()); - assert_last_event::(Event::PoolDestroyed::(pool_id).into()); + assert_last_event::(Event::PoolDestroyed::{ pool_id }.into()); } impl_benchmark_test_suite!( diff --git a/zrml/swaps/src/fixed.rs b/zrml/swaps/src/fixed.rs index ee74c799b..aa1aec648 100644 --- a/zrml/swaps/src/fixed.rs +++ b/zrml/swaps/src/fixed.rs @@ -1,4 +1,4 @@ -// Copyright 2023 Forecasting Technologies LTD. +// Copyright 2023-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -26,7 +26,9 @@ use frame_support::dispatch::DispatchError; use zeitgeist_primitives::{ constants::BASE, math::{ - checked_ops_res::{CheckedAddRes, CheckedDivRes, CheckedMulRes, CheckedSubRes}, + checked_ops_res::{ + CheckedAddRes, CheckedDivRes, CheckedMulRes, CheckedRemRes, CheckedSubRes, + }, fixed::{FixedDiv, FixedMul}, }, }; @@ -53,7 +55,7 @@ pub fn bsub_sign(a: u128, b: u128) -> Result<(u128, bool), DispatchError> { } pub fn bpowi(a: u128, n: u128) -> Result { - let mut z = if n % 2 != 0 { a } else { BASE }; + let mut z = if n.checked_rem_res(&2)? != 0 { a } else { BASE }; let mut b = a; let mut m = n.checked_div_res(&2)?; @@ -61,7 +63,7 @@ pub fn bpowi(a: u128, n: u128) -> Result { while m != 0 { b = b.bmul(b)?; - if m % 2 != 0 { + if m.checked_rem_res(&2)? != 0 { z = z.bmul(b)?; } diff --git a/zrml/swaps/src/lib.rs b/zrml/swaps/src/lib.rs index 42c9c4fab..17e2e0132 100644 --- a/zrml/swaps/src/lib.rs +++ b/zrml/swaps/src/lib.rs @@ -58,9 +58,10 @@ mod pallet { use alloc::{collections::btree_map::BTreeMap, vec, vec::Vec}; use core::marker::PhantomData; use frame_support::{ - dispatch::{DispatchResultWithPostInfo, Weight}, + dispatch::Weight, ensure, pallet_prelude::{OptionQuery, StorageMap, StorageValue, ValueQuery}, + require_transactional, traits::{Get, IsType, StorageVersion}, transactional, Blake2_128Concat, PalletError, PalletId, Parameter, }; @@ -74,7 +75,7 @@ mod pallet { DispatchError, DispatchResult, RuntimeDebug, SaturatedConversion, }; use zeitgeist_primitives::{ - constants::CENT, + constants::{BASE, CENT}, math::{ checked_ops_res::{CheckedAddRes, CheckedMulRes}, fixed::FixedMul, @@ -94,32 +95,28 @@ mod pallet { pub(crate) type PoolOf = Pool, BalanceOf>; const MIN_BALANCE: u128 = CENT; + pub(crate) const MAX_IN_RATIO: u128 = BASE / 3 + 1; + pub(crate) const MAX_OUT_RATIO: u128 = BASE / 3 + 1; #[pallet::call] impl Pallet { - /// Pool - Exit - /// - /// Retrieves a given set of assets from `pool_id` to `origin`. + /// Exchanges an LP's (liquidity provider's) pool shares for a proportionate amount of each + /// of the pool's assets. The assets received are distributed according to the LP's + /// percentage ownership of the pool. /// /// # Arguments /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `pool_amount`: The amount of LP shares of this pool being burned based on the - /// retrieved assets. - /// * `min_assets_out`: List of asset lower bounds. No asset should be lower than the - /// provided values. + /// * `pool_id`: The ID of the pool to withdraw from. + /// * `pool_amount`: The amount of pool shares to burn. + /// * `min_assets_out`: List of lower bounds on the assets received. The transaction is + /// rolled back if any of the specified lower bounds are violated. /// /// # Weight /// - /// Complexity: `O(n)` where `n` is the number of assets in the specified pool - // Using `min_assets_out.len()` is fine because we don't iterate over the assets before - // verifying that `min_assets_out` has the correct length. We do limit the linear factor to - // the maximum number of assets to prevent unnecessary spending in case of erroneous input, - // though. + /// Complexity: `O(n)` where `n` is the number of assets in the specified pool. #[pallet::call_index(1)] #[pallet::weight(T::WeightInfo::pool_exit( - min_assets_out.len().min(T::MaxAssets::get().into()) as u32 + min_assets_out.len().min(T::MaxAssets::get().into()) as u32, ))] #[transactional] pub fn pool_exit( @@ -132,57 +129,43 @@ mod pallet { Self::do_pool_exit(who, pool_id, pool_amount, min_assets_out) } - /// Pool - Exit with exact pool amount - /// - /// Takes an asset from `pool_id` and transfers to `origin`. Differently from `pool_exit`, - /// this method injects the exactly amount of `asset_amount` to `origin`. - /// - /// # Arguments - /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset`: Asset leaving the pool. - /// * `asset_amount`: Asset amount that is leaving the pool. - /// * `max_pool_amount`: The calculated amount of assets for the pool must be equal or - /// greater than the given value. + /// See [`zeitgeist_primitives::traits::Swaps::pool_exit_with_exact_asset_amount`]. /// /// # Weight /// /// Complexity: `O(1)` #[pallet::call_index(3)] #[pallet::weight(T::WeightInfo::pool_exit_with_exact_asset_amount())] - // MARK(non-transactional): Immediately calls and returns a transactional. + #[transactional] pub fn pool_exit_with_exact_asset_amount( origin: OriginFor, #[pallet::compact] pool_id: PoolId, - asset: AssetOf, + asset_out: AssetOf, #[pallet::compact] asset_amount: BalanceOf, #[pallet::compact] max_pool_amount: BalanceOf, ) -> DispatchResult { let who = ensure_signed(origin)?; - >::pool_exit_with_exact_asset_amount( + Self::do_pool_exit_with_exact_asset_amount( who, pool_id, - asset, + asset_out, asset_amount, max_pool_amount, ) - .map(|_| ()) } - /// Pool - Exit with exact pool amount - /// - /// Takes an asset from `pool_id` and transfers to `origin`. Differently from `pool_exit`, - /// this method injects the exactly amount of `pool_amount` to `pool_id`. + /// Exchanges an exact amount of an LP's (liquidity provider's) pool shares for a + /// proportionate amount of _one_ of the pool's assets. The assets received are distributed + /// according to the LP's percentage ownership of the pool. /// /// # Arguments /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset`: Asset leaving the pool. + /// * `pool_id`: The ID of the pool to withdraw from. + /// * `asset`: The asset received by the LP. + /// * `asset_amount`: The amount of `asset` leaving the pool. /// * `pool_amount`: Pool amount that is entering the pool. - /// * `min_asset_amount`: The calculated amount for the asset must the equal or less - /// than the given value. + /// * `min_asset_amount`: The minimum amount the LP asks to receive. The transaction is + /// rolled back if this bound is violated. /// /// # Weight /// @@ -197,67 +180,29 @@ mod pallet { #[pallet::compact] pool_amount: BalanceOf, #[pallet::compact] min_asset_amount: BalanceOf, ) -> DispatchResult { - ensure!(pool_amount != Zero::zero(), Error::::ZeroAmount); - let pool = Self::pool_by_id(pool_id)?; - let pool_ref = &pool; let who = ensure_signed(origin)?; - let who_clone = who.clone(); - Self::ensure_minimum_liquidity_shares(pool_id, &pool, pool_amount)?; - - let params = PoolExitWithExactAmountParams { - asset, - asset_amount: |asset_balance: BalanceOf, total_supply: BalanceOf| { - let mul: BalanceOf = total_supply.bmul(T::MaxInRatio::get())?; - ensure!(pool_amount <= mul, Error::::MaxInRatio); - let asset_amount: BalanceOf = crate::math::calc_single_out_given_pool_in( - asset_balance.saturated_into(), - Self::pool_weight_rslt(&pool, &asset)?, - total_supply.saturated_into(), - pool.total_weight.saturated_into(), - pool_amount.saturated_into(), - pool.swap_fee.saturated_into(), - T::ExitFee::get().saturated_into(), - )? - .saturated_into(); - ensure!(asset_amount != Zero::zero(), Error::::ZeroAmount); - ensure!(asset_amount >= min_asset_amount, Error::::LimitOut); - ensure!( - asset_amount <= asset_balance.bmul(T::MaxOutRatio::get())?, - Error::::MaxOutRatio - ); - Self::ensure_minimum_balance(pool_id, &pool, asset, asset_amount)?; - Ok(asset_amount) - }, - bound: min_asset_amount, - ensure_balance: |_| Ok(()), - event: |evt| Self::deposit_event(Event::PoolExitWithExactPoolAmount(evt)), - who: who_clone, - pool_amount: |_, _| Ok(pool_amount), + Self::do_pool_exit_with_exact_pool_amount( + who, pool_id, - pool: pool_ref, - }; - pool_exit_with_exact_amount::<_, _, _, _, T>(params) + asset, + pool_amount, + min_asset_amount, + ) } - /// Pool - Join - /// - /// Joins a given set of assets provided from `origin` to `pool_id`. + /// Exchanges a proportional amount of each asset of the pool for pool shares. /// /// # Arguments /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be transferred. - /// * `pool_id`: Unique pool identifier. - /// * `pool_amount`: The amount of LP shares for this pool that should be minted to the provider. - /// * `max_assets_in`: List of asset upper bounds. No asset should be greater than the - /// provided values. + /// * `pool_id`: The ID of the pool to join. + /// * `pool_amount`: The amount of LP shares for this pool that should be minted to the + /// provider. + /// * `max_assets_in`: List of upper bounds on the assets to move to the pool. The + /// transaction is rolled back if any of the specified lower bounds are violated. /// /// # Weight /// /// Complexity: `O(n)` where `n` is the number of assets in the specified pool - // Using `min_assets_out.len()` is fine because we don't iterate over the assets before - // verifying that `min_assets_out` has the correct length. We do limit the linear factor to - // the maximum number of assets to prevent unnecessary spending in case of erroneous input, - // though. #[pallet::call_index(5)] #[pallet::weight(T::WeightInfo::pool_join( max_assets_in.len().min(T::MaxAssets::get().into()) as u32, @@ -268,54 +213,19 @@ mod pallet { #[pallet::compact] pool_id: PoolId, #[pallet::compact] pool_amount: BalanceOf, max_assets_in: Vec>, - ) -> DispatchResultWithPostInfo { + ) -> DispatchResult { let who = ensure_signed(origin)?; - ensure!(pool_amount != Zero::zero(), Error::::ZeroAmount); - let pool = Self::pool_by_id(pool_id)?; - ensure!(pool.status == PoolStatus::Open, Error::::InvalidPoolStatus); - let pool_account_id = Pallet::::pool_account_id(&pool_id); - - let params = PoolParams { - asset_bounds: max_assets_in, - event: |evt| Self::deposit_event(Event::PoolJoin(evt)), - pool_account_id: &pool_account_id, - pool_amount, - pool_id, - pool: &pool, - transfer_asset: |amount, amount_bound, asset| { - ensure!(amount <= amount_bound, Error::::LimitIn); - T::AssetManager::transfer(asset, &who, &pool_account_id, amount)?; - Ok(()) - }, - transfer_pool: || Self::mint_pool_shares(pool_id, &who, pool_amount), - fee: |_| Ok(0u128.saturated_into()), - who: who.clone(), - }; - - crate::utils::pool::<_, _, _, _, T>(params)?; - Ok(Some(T::WeightInfo::pool_join(pool.assets.len().saturated_into())).into()) + Self::do_pool_join(who, pool_id, pool_amount, max_assets_in) } - /// Pool - Join with exact asset amount - /// - /// Joins an asset provided from `origin` to `pool_id`. Differently from `pool_join`, - /// this method transfers the exactly amount of `asset_amount` to `pool_id`. - /// - /// # Arguments - /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Asset entering the pool. - /// * `asset_amount`: Asset amount that is entering the pool. - /// * `min_pool_amount`: The calculated amount for the pool must be equal or greater - /// than the given value. + /// See [`zeitgeist_primitives::traits::Swaps::pool_join_with_exact_asset_amount`]. /// /// # Weight /// /// Complexity: O(1) - // MARK(non-transactional): Immediately calls and returns a transactional. #[pallet::call_index(7)] #[pallet::weight(T::WeightInfo::pool_join_with_exact_asset_amount())] + #[transactional] pub fn pool_join_with_exact_asset_amount( origin: OriginFor, #[pallet::compact] pool_id: PoolId, @@ -324,29 +234,25 @@ mod pallet { #[pallet::compact] min_pool_amount: BalanceOf, ) -> DispatchResult { let who = ensure_signed(origin)?; - >::pool_join_with_exact_asset_amount( + Self::do_pool_join_with_exact_asset_amount( who, pool_id, asset_in, asset_amount, min_pool_amount, ) - .map(|_| ()) } - /// Pool - Join with exact pool amount - /// - /// Joins an asset provided from `origin` to `pool_id`. Differently from `pool_join`, - /// this method injects the exactly amount of `pool_amount` to `origin`. + /// Exchanges an LP's (liquidity provider's) holdings of _one_ of the assets in the pool for + /// an exact amount of pool shares. /// /// # Arguments /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset`: Asset entering the pool. + /// * `pool_id`: The ID of the pool to withdraw from. + /// * `asset`: The asset entering the pool. /// * `pool_amount`: Asset amount that is entering the pool. - /// * `max_asset_amount`: The calculated amount of assets for the pool must be equal or - /// less than the given value. + /// * `max_asset_amount`: The maximum amount of `asset` that the LP is willing to pay. The + /// transaction is rolled back if this bound is violated. /// /// # Weight /// @@ -361,63 +267,23 @@ mod pallet { #[pallet::compact] pool_amount: BalanceOf, #[pallet::compact] max_asset_amount: BalanceOf, ) -> DispatchResult { - let pool = Pallet::::pool_by_id(pool_id)?; - let pool_account_id = Pallet::::pool_account_id(&pool_id); let who = ensure_signed(origin)?; - let who_clone = who.clone(); - let params = PoolJoinWithExactAmountParams { - asset, - asset_amount: |asset_balance: BalanceOf, total_supply: BalanceOf| { - let mul: BalanceOf = total_supply.bmul(T::MaxOutRatio::get())?; - ensure!(pool_amount <= mul, Error::::MaxOutRatio); - let asset_amount: BalanceOf = crate::math::calc_single_in_given_pool_out( - asset_balance.saturated_into(), - Self::pool_weight_rslt(&pool, &asset)?, - total_supply.saturated_into(), - pool.total_weight.saturated_into(), - pool_amount.saturated_into(), - pool.swap_fee.saturated_into(), - )? - .saturated_into(); - ensure!(asset_amount != Zero::zero(), Error::::ZeroAmount); - ensure!(asset_amount <= max_asset_amount, Error::::LimitIn); - ensure!( - asset_amount <= asset_balance.checked_mul_res(&T::MaxInRatio::get())?, - Error::::MaxInRatio - ); - Ok(asset_amount) - }, - bound: max_asset_amount, - event: |evt| Self::deposit_event(Event::PoolJoinWithExactPoolAmount(evt)), - pool_account_id: &pool_account_id, - pool_amount: |_, _| Ok(pool_amount), + Self::do_pool_join_with_exact_pool_amount( + who, pool_id, - pool: &pool, - who: who_clone, - }; - pool_join_with_exact_amount::<_, _, _, T>(params) + asset, + pool_amount, + max_asset_amount, + ) } - /// Swap - Exact amount in - /// - /// Swaps a given `asset_amount_in` of the `asset_in/asset_out` pair to `pool_id`. - /// - /// # Arguments - /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be transferred. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Asset entering the pool. - /// * `asset_amount_in`: Amount that will be transferred from the provider to the pool. - /// * `asset_out`: Asset leaving the pool. - /// * `min_asset_amount_out`: Minimum asset amount that can leave the pool. - /// * `max_price`: Market price must be equal or less than the provided value. + /// See [`zeitgeist_primitives::traits::Swaps::swap_exact_amount_in`]. /// /// # Weight /// - /// Complexity: `O(1)` if the scoring rule is CPMM, `O(n)` where `n` is the amount of - /// assets if the scoring rule is Rikiddo. + /// Complexity: `O(1)` #[pallet::call_index(9)] - #[pallet::weight(T::WeightInfo::swap_exact_amount_in_cpmm())] + #[pallet::weight(T::WeightInfo::swap_exact_amount_in())] #[transactional] pub fn swap_exact_amount_in( origin: OriginFor, @@ -427,9 +293,9 @@ mod pallet { asset_out: AssetOf, min_asset_amount_out: Option>, max_price: Option>, - ) -> DispatchResultWithPostInfo { + ) -> DispatchResult { let who = ensure_signed(origin)?; - let weight = >::swap_exact_amount_in( + Self::do_swap_exact_amount_in( who, pool_id, asset_in, @@ -437,30 +303,16 @@ mod pallet { asset_out, min_asset_amount_out, max_price, - )?; - Ok(Some(weight).into()) + ) } - /// Swap - Exact amount out - /// - /// Swaps a given `asset_amount_out` of the `asset_in/asset_out` pair to `origin`. - /// - /// # Arguments - /// - /// * `origin`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Asset entering the pool. - /// * `max_asset_amount_in`: Maximum asset amount that can enter the pool. - /// * `asset_out`: Asset leaving the pool. - /// * `asset_amount_out`: Amount that will be transferred from the pool to the provider. - /// * `max_price`: Market price must be equal or less than the provided value. + /// See [`zeitgeist_primitives::traits::Swaps::swap_exact_amount_out`]. /// /// # Weight /// - /// Complexity: `O(1)` if the scoring rule is CPMM, `O(n)` where `n` is the amount of - /// assets if the scoring rule is Rikiddo. + /// Complexity: `O(1)` #[pallet::call_index(10)] - #[pallet::weight(T::WeightInfo::swap_exact_amount_out_cpmm())] + #[pallet::weight(T::WeightInfo::swap_exact_amount_out())] #[transactional] pub fn swap_exact_amount_out( origin: OriginFor, @@ -470,9 +322,9 @@ mod pallet { asset_out: AssetOf, #[pallet::compact] asset_amount_out: BalanceOf, max_price: Option>, - ) -> DispatchResultWithPostInfo { + ) -> DispatchResult { let who = ensure_signed(origin)?; - let weight = >::swap_exact_amount_out( + Self::do_swap_exact_amount_out( who, pool_id, asset_in, @@ -480,13 +332,17 @@ mod pallet { asset_out, asset_amount_out, max_price, - )?; - Ok(Some(weight).into()) + ) } + /// Forcibly withdraw an LPs share. All parameters as in `exit`, except that `who` is the LP + /// whose shares are withdrawn. + /// + /// Used in the migration from swaps to neo-swaps. Deprecated and scheduled for removal in + /// v0.5.3. #[pallet::call_index(11)] #[pallet::weight(T::WeightInfo::pool_exit( - min_assets_out.len().min(T::MaxAssets::get().into()) as u32 + min_assets_out.len().min(T::MaxAssets::get().into()) as u32, ))] #[transactional] pub fn force_pool_exit( @@ -503,7 +359,6 @@ mod pallet { #[pallet::config] pub trait Config: frame_system::Config { - /// Shares of outcome assets and native currency type AssetManager: MultiCurrency; type Asset: Parameter @@ -517,125 +372,123 @@ mod pallet { type RuntimeEvent: From> + IsType<::RuntimeEvent>; - /// The weight information for swap's dispatchable functions. type WeightInfo: WeightInfoZeitgeist; /// The fee for exiting a pool. #[pallet::constant] type ExitFee: Get>; + /// The maximum number of assets allowed in a single pool. #[pallet::constant] type MaxAssets: Get; - #[pallet::constant] - type MaxInRatio: Get>; - - #[pallet::constant] - type MaxOutRatio: Get>; - + /// The maximum allowed swap fee. #[pallet::constant] type MaxSwapFee: Get>; + /// The maximum total weight of assets in a pool. #[pallet::constant] - type MaxTotalWeight: Get; + type MaxTotalWeight: Get>; + /// The maximum weight of each individual asset in a pool. #[pallet::constant] - type MaxWeight: Get; + type MaxWeight: Get>; + /// The minimum number of assets allowed in a single pool. #[pallet::constant] - /// The minimum amount of assets in a pool. type MinAssets: Get; + /// The minimum weight of each individual asset in a pool. #[pallet::constant] - type MinWeight: Get; + type MinWeight: Get>; - /// The module identifier. #[pallet::constant] type PalletId: Get; } #[pallet::error] pub enum Error { - /// The weight of an asset in a CPMM swap pool is greather than the upper weight cap. + /// The weight of an asset in a CPMM swap pool is greater than the upper weight cap. + #[codec(index = 0)] AboveMaximumWeight, - /// The weight of an asset in a CPMM swap pool could not be found. - AssetNotBound, /// The asset in question could not be found within the pool. + #[codec(index = 2)] AssetNotInPool, - /// The base asset of the swaps pool was None although a value was expected. - BaseAssetNotFound, /// The spot price of an asset pair was greater than the specified limit. + #[codec(index = 4)] BadLimitPrice, /// The weight of an asset in a CPMM swap pool is lower than the upper weight cap. + #[codec(index = 5)] BelowMinimumWeight, /// Some funds could not be transferred due to a too low balance. + #[codec(index = 6)] InsufficientBalance, /// Liquidity provided to new CPMM pool is less than the minimum allowed balance. + #[codec(index = 7)] InsufficientLiquidity, - /// Could not create CPMM pool since no amount was specified. - InvalidAmountArgument, - /// Could not create CPMM pool since no fee was supplied. - InvalidFeeArgument, /// Dispatch called on pool with invalid status. + #[codec(index = 10)] InvalidPoolStatus, /// A function was called for a swaps pool that does not fulfill the state requirement. + #[codec(index = 11)] InvalidStateTransition, - /// Could not create CPMM pool since no weights were supplied. - InvalidWeightArgument, - /// A transferal of funds into a swaps pool was above a threshhold specified by the sender. + /// A transferal of funds into a swaps pool was above a threshold specified by the sender. + #[codec(index = 13)] LimitIn, - /// Subsidy amount is too small. - InvalidSubsidyAmount, /// No limit was specified for a swap. + #[codec(index = 15)] LimitMissing, - /// A transferal of funds out of a swaps pool was below a threshhold specified by the + /// A transferal of funds out of a swaps pool was below a threshold specified by the /// receiver. + #[codec(index = 16)] LimitOut, /// The custom math library yielded an invalid result (most times unexpected zero value). + #[codec(index = 17)] MathApproximation, /// The proportion of an asset added into a pool in comparison to the amount - /// of that asset in the pool is above the threshhold specified by a constant. + /// of that asset in the pool is above the threshold specified by a constant. + #[codec(index = 18)] MaxInRatio, /// The proportion of an asset taken from a pool in comparison to the amount - /// of that asset in the pool is above the threshhold specified by a constant. + /// of that asset in the pool is above the threshold specified by a constant. + #[codec(index = 19)] MaxOutRatio, - /// The total weight of all assets within a CPMM pool is above a treshhold specified + /// The total weight of all assets within a CPMM pool is above a threshold specified /// by a constant. + #[codec(index = 20)] MaxTotalWeight, /// The pool in question does not exist. + #[codec(index = 21)] PoolDoesNotExist, /// A pool balance dropped below the allowed minimum. + #[codec(index = 22)] PoolDrain, /// The pool in question is inactive. + #[codec(index = 23)] PoolIsNotActive, - /// The CPMM pool in question does not have a fee, although it should. - PoolMissingFee, - /// The Rikiddo pool in question does not have subsidy, although it should. - PoolMissingSubsidy, - /// The CPPM pool in question does not have weights, although it should. - PoolMissingWeight, /// Two vectors do not have the same length (usually CPMM pool assets and weights). + #[codec(index = 27)] ProvidedValuesLenMustEqualAssetsLen, - /// No swap fee information found for CPMM pool - SwapFeeMissing, /// The swap fee is higher than the allowed maximum. + #[codec(index = 29)] SwapFeeTooHigh, - /// Tried to create a pool that has less assets than the lower threshhold specified by + /// Tried to create a pool that has less assets than the lower threshold specified by /// a constant. + #[codec(index = 30)] TooFewAssets, - /// Tried to create a pool that has more assets than the upper threshhold specified by + /// Tried to create a pool that has more assets than the upper threshold specified by /// a constant. + #[codec(index = 31)] TooManyAssets, /// Tried to create a pool with at least two identical assets. + #[codec(index = 32)] SomeIdenticalAssets, - /// The pool does not support swapping the assets in question. - UnsupportedTrade, - /// The outcome asset specified as the winning asset was not found in the pool. - WinningAssetNotFound, /// Some amount in a transaction equals zero. + #[codec(index = 35)] ZeroAmount, /// An unexpected error occurred. This is the result of faulty pallet logic and should be /// reported to the pallet maintainers. + #[codec(index = 36)] Unexpected(UnexpectedError), } @@ -656,56 +509,57 @@ mod pallet { where T: Config, { - /// Share holder rewards were distributed. \[pool_id, num_accounts_rewarded, amount\] - DistributeShareHolderRewards(PoolId, u64, BalanceOf), - /// A new pool has been created. \[CommonPoolEventParams, pool, pool_amount, pool_account\] - PoolCreate( - CommonPoolEventParams<::AccountId>, - PoolOf, - BalanceOf, - T::AccountId, - ), - /// A pool was closed. \[pool_id\] - PoolClosed(PoolId), - /// A pool was cleaned up. \[pool_id\] - PoolCleanedUp(PoolId), - /// A pool was opened. \[pool_id\] - PoolActive(PoolId), - /// Someone has exited a pool. \[PoolAssetsEvent\] - PoolExit(PoolAssetsEvent<::AccountId, AssetOf, BalanceOf>), - /// Exits a pool given an exact amount of an asset. \[PoolAssetEvent\] - PoolExitWithExactAssetAmount( - PoolAssetEvent<::AccountId, AssetOf, BalanceOf>, - ), - /// Exits a pool given an exact pool's amount. \[PoolAssetEvent\] - PoolExitWithExactPoolAmount( - PoolAssetEvent<::AccountId, AssetOf, BalanceOf>, - ), - /// Someone has joined a pool. \[PoolAssetsEvent\] - PoolJoin(PoolAssetsEvent<::AccountId, AssetOf, BalanceOf>), - /// Joins a pool given an exact amount of an asset. \[PoolAssetEvent\] - PoolJoinWithExactAssetAmount( - PoolAssetEvent<::AccountId, AssetOf, BalanceOf>, - ), - /// Joins a pool given an exact pool's amount. \[PoolAssetEvent\] - PoolJoinWithExactPoolAmount( - PoolAssetEvent<::AccountId, AssetOf, BalanceOf>, - ), - /// Pool was manually destroyed. \[pool_id\] - PoolDestroyed(PoolId), - /// Pool destroyed due to insufficient subsidy. \[pool_id, \[(provider, subsidy), ...\]\] - PoolDestroyedInSubsidyPhase( - PoolId, - Vec<(::AccountId, BalanceOf)>, - ), - /// An exact amount of an asset is entering the pool. \[SwapEvent\] - SwapExactAmountIn( - SwapEvent<::AccountId, AssetOf, BalanceOf>, - ), - /// An exact amount of an asset is leaving the pool. \[SwapEvent\] - SwapExactAmountOut( - SwapEvent<::AccountId, AssetOf, BalanceOf>, - ), + /// Share holder rewards were distributed. + #[codec(index = 0)] + DistributeShareHolderRewards { + pool_id: PoolId, + num_accounts_rewarded: u64, + amount: BalanceOf, + }, + /// A new pool has been created. + #[codec(index = 1)] + PoolCreate { + common: CommonPoolEventParams>, + pool: PoolOf, + pool_amount: BalanceOf, + pool_account: T::AccountId, + }, + /// A pool was closed. + #[codec(index = 2)] + PoolClosed { pool_id: PoolId }, + /// A pool was cleaned up. + #[codec(index = 3)] + PoolCleanedUp { pool_id: PoolId }, + /// A pool was opened. + #[codec(index = 4)] + PoolActive { pool_id: PoolId }, + /// Someone has exited a pool. + #[codec(index = 5)] + PoolExit(PoolAssetsEvent, AssetOf, BalanceOf>), + /// Exits a pool given an exact amount of an asset. + #[codec(index = 6)] + PoolExitWithExactAssetAmount(PoolAssetEvent, AssetOf, BalanceOf>), + /// Exits a pool given an exact pool's amount. + #[codec(index = 7)] + PoolExitWithExactPoolAmount(PoolAssetEvent, AssetOf, BalanceOf>), + /// Someone has joined a pool. + #[codec(index = 8)] + PoolJoin(PoolAssetsEvent, AssetOf, BalanceOf>), + /// Joins a pool given an exact amount of an asset. + #[codec(index = 9)] + PoolJoinWithExactAssetAmount(PoolAssetEvent, AssetOf, BalanceOf>), + /// Joins a pool given an exact pool's amount. + #[codec(index = 10)] + PoolJoinWithExactPoolAmount(PoolAssetEvent, AssetOf, BalanceOf>), + /// Pool was manually destroyed. + #[codec(index = 11)] + PoolDestroyed { pool_id: PoolId }, + /// An exact amount of an asset is entering the pool. + #[codec(index = 13)] + SwapExactAmountIn(SwapEvent, AssetOf, BalanceOf>), + /// An exact amount of an asset is leaving the pool. + #[codec(index = 14)] + SwapExactAmountOut(SwapEvent, AssetOf, BalanceOf>), } #[pallet::pallet] @@ -723,6 +577,7 @@ mod pallet { pub(crate) type NextPoolId = StorageValue<_, PoolId, ValueQuery>; impl Pallet { + #[require_transactional] fn do_pool_exit( who: T::AccountId, pool_id: PoolId, @@ -730,11 +585,11 @@ mod pallet { min_assets_out: Vec>, ) -> DispatchResult { ensure!(pool_amount != Zero::zero(), Error::::ZeroAmount); - let who_clone = who.clone(); let pool = Self::pool_by_id(pool_id)?; // If the pool is still in use, prevent a pool drain. Self::ensure_minimum_liquidity_shares(pool_id, &pool, pool_amount)?; let pool_account_id = Pallet::::pool_account_id(&pool_id); + let params = PoolParams { asset_bounds: min_assets_out, event: |evt| Self::deposit_event(Event::PoolExit(evt)), @@ -744,8 +599,17 @@ mod pallet { pool: &pool, transfer_asset: |amount, amount_bound, asset| { Self::ensure_minimum_balance(pool_id, &pool, asset, amount)?; - ensure!(amount >= amount_bound, Error::::LimitOut); - T::AssetManager::transfer(asset, &pool_account_id, &who, amount)?; + // If transferring to `who` triggers the existential deposit, burn the tokens + // instead. + let new_balance = + T::AssetManager::free_balance(asset, &who).checked_add_res(&amount)?; + if new_balance >= T::AssetManager::minimum_balance(asset) { + ensure!(amount >= amount_bound, Error::::LimitOut); + T::AssetManager::transfer(asset, &pool_account_id, &who, amount)?; + } else { + ensure!(amount_bound.is_zero(), Error::::LimitOut); + T::AssetManager::withdraw(asset, &pool_account_id, amount)?; + } Ok(()) }, transfer_pool: || { @@ -756,80 +620,410 @@ mod pallet { let exit_fee_amount = amount.bmul(Self::calc_exit_fee(&pool))?; Ok(exit_fee_amount) }, - who: who_clone, + who: who.clone(), }; + crate::utils::pool::<_, _, _, _, T>(params) } - pub fn get_spot_price( - pool_id: &PoolId, - asset_in: &AssetOf, - asset_out: &AssetOf, - with_fees: bool, - ) -> Result, DispatchError> { - let pool = Self::pool_by_id(*pool_id)?; - ensure!(pool.assets.binary_search(asset_in).is_ok(), Error::::AssetNotInPool); - ensure!(pool.assets.binary_search(asset_out).is_ok(), Error::::AssetNotInPool); - let pool_account = Self::pool_account_id(pool_id); - let balance_in = T::AssetManager::free_balance(*asset_in, &pool_account); - let balance_out = T::AssetManager::free_balance(*asset_out, &pool_account); - let in_weight = Self::pool_weight_rslt(&pool, asset_in)?; - let out_weight = Self::pool_weight_rslt(&pool, asset_out)?; + #[require_transactional] + fn do_pool_exit_with_exact_pool_amount( + who: AccountIdOf, + pool_id: PoolId, + asset: AssetOf, + pool_amount: BalanceOf, + min_asset_amount: BalanceOf, + ) -> DispatchResult { + ensure!(pool_amount != Zero::zero(), Error::::ZeroAmount); + let pool = Self::pool_by_id(pool_id)?; + let pool_ref = &pool; + Self::ensure_minimum_liquidity_shares(pool_id, &pool, pool_amount)?; - let swap_fee = if with_fees { - pool.swap_fee.saturated_into() - } else { - BalanceOf::::zero().saturated_into() + let params = PoolExitWithExactAmountParams { + asset, + asset_amount: |asset_balance: BalanceOf, total_supply: BalanceOf| { + let mul = total_supply.bmul(MAX_IN_RATIO.saturated_into())?; + ensure!(pool_amount <= mul, Error::::MaxInRatio); + let asset_amount: BalanceOf = crate::math::calc_single_out_given_pool_in( + asset_balance.saturated_into(), + Self::pool_weight_rslt(&pool, &asset)?.saturated_into(), + total_supply.saturated_into(), + pool.total_weight.saturated_into(), + pool_amount.saturated_into(), + pool.swap_fee.saturated_into(), + T::ExitFee::get().saturated_into(), + )? + .saturated_into(); + ensure!(asset_amount != Zero::zero(), Error::::ZeroAmount); + ensure!(asset_amount >= min_asset_amount, Error::::LimitOut); + ensure!( + asset_amount <= asset_balance.bmul(MAX_OUT_RATIO.saturated_into())?, + Error::::MaxOutRatio + ); + Self::ensure_minimum_balance(pool_id, &pool, asset, asset_amount)?; + Ok(asset_amount) + }, + bound: min_asset_amount, + ensure_balance: |_| Ok(()), + event: |evt| Self::deposit_event(Event::PoolExitWithExactPoolAmount(evt)), + who, + pool_amount: |_, _| Ok(pool_amount), + pool_id, + pool: pool_ref, }; - Ok(crate::math::calc_spot_price( - balance_in.saturated_into(), - in_weight, - balance_out.saturated_into(), - out_weight, - swap_fee, - )? - .saturated_into()) + pool_exit_with_exact_amount::<_, _, _, _, T>(params) } - #[inline] - pub fn pool_account_id(pool_id: &PoolId) -> T::AccountId { - T::PalletId::get().into_sub_account_truncating((*pool_id).saturated_into::()) - } + #[require_transactional] + fn do_pool_join( + who: AccountIdOf, + pool_id: PoolId, + pool_amount: BalanceOf, + max_assets_in: Vec>, + ) -> DispatchResult { + ensure!(pool_amount != Zero::zero(), Error::::ZeroAmount); + let pool = Self::pool_by_id(pool_id)?; + ensure!(pool.status == PoolStatus::Open, Error::::InvalidPoolStatus); + let pool_account_id = Pallet::::pool_account_id(&pool_id); - /// The minimum allowed balance of `asset` in a liquidity pool. - pub(crate) fn min_balance(asset: AssetOf) -> BalanceOf { - T::AssetManager::minimum_balance(asset).max(MIN_BALANCE.saturated_into()) - } + let params = PoolParams { + asset_bounds: max_assets_in, + event: |evt| Self::deposit_event(Event::PoolJoin(evt)), + pool_account_id: &pool_account_id, + pool_amount, + pool_id, + pool: &pool, + transfer_asset: |amount, amount_bound, asset| { + ensure!(amount <= amount_bound, Error::::LimitIn); + T::AssetManager::transfer(asset, &who, &pool_account_id, amount)?; + Ok(()) + }, + transfer_pool: || Self::mint_pool_shares(pool_id, &who, pool_amount), + fee: |_| Ok(0u128.saturated_into()), + who: who.clone(), + }; - /// Returns the minimum allowed balance allowed for a pool with id `pool_id` containing - /// `assets`. - /// - /// The minimum allowed balance is the maximum of all minimum allowed balances of assets - /// contained in the pool, _including_ the pool shares asset. This ensures that none of the - /// accounts involved are slashed when a pool is created with the minimum amount. - /// - /// **Should** only be called if `assets` is non-empty. Note that the existence of a pool - /// with the specified `pool_id` is not mandatory. - pub(crate) fn min_balance_of_pool(pool_id: PoolId, assets: &[AssetOf]) -> BalanceOf { - assets - .iter() - .map(|asset| Self::min_balance(*asset)) - .max() - .unwrap_or_else(|| MIN_BALANCE.saturated_into()) - .max(Self::min_balance(Self::pool_shares_id(pool_id))) + crate::utils::pool::<_, _, _, _, T>(params) } - fn ensure_minimum_liquidity_shares( + #[require_transactional] + fn do_pool_exit_with_exact_asset_amount( + who: AccountIdOf, pool_id: PoolId, - pool: &PoolOf, - amount: BalanceOf, + asset: AssetOf, + asset_amount: BalanceOf, + max_pool_amount: BalanceOf, ) -> DispatchResult { - if pool.status == PoolStatus::Closed { - return Ok(()); - } - let pool_shares_id = Self::pool_shares_id(pool_id); - let total_issuance = T::AssetManager::total_issuance(pool_shares_id); + let pool = Self::pool_by_id(pool_id)?; + Self::ensure_minimum_balance(pool_id, &pool, asset, asset_amount)?; + let pool_ref = &pool; + + let params = PoolExitWithExactAmountParams { + asset, + asset_amount: |_, _| Ok(asset_amount), + bound: max_pool_amount, + ensure_balance: |asset_balance: BalanceOf| { + ensure!( + asset_amount <= asset_balance.bmul(MAX_OUT_RATIO.saturated_into())?, + Error::::MaxOutRatio + ); + Ok(()) + }, + pool_amount: |asset_balance: BalanceOf, total_supply: BalanceOf| { + let pool_amount: BalanceOf = crate::math::calc_pool_in_given_single_out( + asset_balance.saturated_into(), + Self::pool_weight_rslt(pool_ref, &asset)?.saturated_into(), + total_supply.saturated_into(), + pool_ref.total_weight.saturated_into(), + asset_amount.saturated_into(), + pool_ref.swap_fee.saturated_into(), + T::ExitFee::get().saturated_into(), + )? + .saturated_into(); + ensure!(pool_amount != Zero::zero(), Error::::ZeroAmount); + ensure!(pool_amount <= max_pool_amount, Error::::LimitIn); + Self::ensure_minimum_liquidity_shares(pool_id, &pool, pool_amount)?; + Ok(pool_amount) + }, + event: |evt| Self::deposit_event(Event::PoolExitWithExactAssetAmount(evt)), + who, + pool_id, + pool: pool_ref, + }; + + pool_exit_with_exact_amount::<_, _, _, _, T>(params) + } + + #[require_transactional] + fn do_pool_join_with_exact_asset_amount( + who: AccountIdOf, + pool_id: PoolId, + asset_in: AssetOf, + asset_amount: BalanceOf, + min_pool_amount: BalanceOf, + ) -> DispatchResult { + ensure!(asset_amount != Zero::zero(), Error::::ZeroAmount); + let pool = Pallet::::pool_by_id(pool_id)?; + let pool_ref = &pool; + let pool_account_id = Pallet::::pool_account_id(&pool_id); + + let params = PoolJoinWithExactAmountParams { + asset: asset_in, + asset_amount: |_, _| Ok(asset_amount), + bound: min_pool_amount, + pool_amount: move |asset_balance: BalanceOf, total_supply: BalanceOf| { + let mul = asset_balance.bmul(MAX_IN_RATIO.saturated_into())?; + ensure!(asset_amount <= mul, Error::::MaxInRatio); + let pool_amount: BalanceOf = crate::math::calc_pool_out_given_single_in( + asset_balance.saturated_into(), + Self::pool_weight_rslt(pool_ref, &asset_in)?.saturated_into(), + total_supply.saturated_into(), + pool_ref.total_weight.saturated_into(), + asset_amount.saturated_into(), + pool_ref.swap_fee.saturated_into(), + )? + .saturated_into(); + ensure!(pool_amount >= min_pool_amount, Error::::LimitOut); + Ok(pool_amount) + }, + event: |evt| Self::deposit_event(Event::PoolJoinWithExactAssetAmount(evt)), + who, + pool_account_id: &pool_account_id, + pool_id, + pool: pool_ref, + }; + + pool_join_with_exact_amount::<_, _, _, T>(params) + } + + #[require_transactional] + fn do_pool_join_with_exact_pool_amount( + who: AccountIdOf, + pool_id: PoolId, + asset: AssetOf, + pool_amount: BalanceOf, + max_asset_amount: BalanceOf, + ) -> DispatchResult { + let pool = Pallet::::pool_by_id(pool_id)?; + let pool_account_id = Pallet::::pool_account_id(&pool_id); + + let params = PoolJoinWithExactAmountParams { + asset, + asset_amount: |asset_balance: BalanceOf, total_supply: BalanceOf| { + let mul = total_supply.bmul(MAX_OUT_RATIO.saturated_into())?; + ensure!(pool_amount <= mul, Error::::MaxOutRatio); + let asset_amount: BalanceOf = crate::math::calc_single_in_given_pool_out( + asset_balance.saturated_into(), + Self::pool_weight_rslt(&pool, &asset)?.saturated_into(), + total_supply.saturated_into(), + pool.total_weight.saturated_into(), + pool_amount.saturated_into(), + pool.swap_fee.saturated_into(), + )? + .saturated_into(); + ensure!(asset_amount != Zero::zero(), Error::::ZeroAmount); + ensure!(asset_amount <= max_asset_amount, Error::::LimitIn); + ensure!( + asset_amount + <= asset_balance.checked_mul_res(&MAX_IN_RATIO.saturated_into())?, + Error::::MaxInRatio + ); + Ok(asset_amount) + }, + bound: max_asset_amount, + event: |evt| Self::deposit_event(Event::PoolJoinWithExactPoolAmount(evt)), + pool_account_id: &pool_account_id, + pool_amount: |_, _| Ok(pool_amount), + pool_id, + pool: &pool, + who, + }; + + pool_join_with_exact_amount::<_, _, _, T>(params) + } + + #[require_transactional] + fn do_swap_exact_amount_in( + who: T::AccountId, + pool_id: PoolId, + asset_in: AssetOf, + asset_amount_in: BalanceOf, + asset_out: AssetOf, + min_asset_amount_out: Option>, + max_price: Option>, + ) -> DispatchResult { + ensure!( + min_asset_amount_out.is_some() || max_price.is_some(), + Error::::LimitMissing, + ); + let pool = Pallet::::pool_by_id(pool_id)?; + let pool_account_id = Pallet::::pool_account_id(&pool_id); + ensure!( + T::AssetManager::free_balance(asset_in, &who) >= asset_amount_in, + Error::::InsufficientBalance + ); + + let params = SwapExactAmountParams { + // TODO(#1215): This probably doesn't need to be a closure. + asset_amounts: || { + let balance_out = T::AssetManager::free_balance(asset_out, &pool_account_id); + let balance_in = T::AssetManager::free_balance(asset_in, &pool_account_id); + ensure!( + asset_amount_in <= balance_in.bmul(MAX_IN_RATIO.saturated_into())?, + Error::::MaxInRatio + ); + let asset_amount_out: BalanceOf = crate::math::calc_out_given_in( + balance_in.saturated_into(), + Self::pool_weight_rslt(&pool, &asset_in)?.saturated_into(), + balance_out.saturated_into(), + Self::pool_weight_rslt(&pool, &asset_out)?.saturated_into(), + asset_amount_in.saturated_into(), + pool.swap_fee.saturated_into(), + )? + .saturated_into(); + + if let Some(maao) = min_asset_amount_out { + ensure!(asset_amount_out >= maao, Error::::LimitOut); + } + + Self::ensure_minimum_balance(pool_id, &pool, asset_out, asset_amount_out)?; + + Ok([asset_amount_in, asset_amount_out]) + }, + asset_bound: min_asset_amount_out, + asset_in, + asset_out, + event: |evt| Self::deposit_event(Event::SwapExactAmountIn(evt)), + max_price, + pool_account_id: &pool_account_id, + pool_id, + pool: &pool, + who: who.clone(), + }; + + swap_exact_amount::<_, _, T>(params) + } + + #[require_transactional] + fn do_swap_exact_amount_out( + who: AccountIdOf, + pool_id: PoolId, + asset_in: AssetOf, + max_asset_amount_in: Option>, + asset_out: AssetOf, + asset_amount_out: BalanceOf, + max_price: Option>, + ) -> DispatchResult { + let pool = Pallet::::pool_by_id(pool_id)?; + let pool_account_id = Pallet::::pool_account_id(&pool_id); + ensure!(max_asset_amount_in.is_some() || max_price.is_some(), Error::::LimitMissing); + Self::ensure_minimum_balance(pool_id, &pool, asset_out, asset_amount_out)?; + + let params = SwapExactAmountParams { + asset_amounts: || { + let balance_out = T::AssetManager::free_balance(asset_out, &pool_account_id); + ensure!( + asset_amount_out <= balance_out.bmul(MAX_OUT_RATIO.saturated_into())?, + Error::::MaxOutRatio, + ); + + let balance_in = T::AssetManager::free_balance(asset_in, &pool_account_id); + let asset_amount_in: BalanceOf = crate::math::calc_in_given_out( + balance_in.saturated_into(), + Self::pool_weight_rslt(&pool, &asset_in)?.saturated_into(), + balance_out.saturated_into(), + Self::pool_weight_rslt(&pool, &asset_out)?.saturated_into(), + asset_amount_out.saturated_into(), + pool.swap_fee.saturated_into(), + )? + .saturated_into(); + + if let Some(maai) = max_asset_amount_in { + ensure!(asset_amount_in <= maai, Error::::LimitIn); + } + + Ok([asset_amount_in, asset_amount_out]) + }, + asset_bound: max_asset_amount_in, + asset_in, + asset_out, + event: |evt| Self::deposit_event(Event::SwapExactAmountOut(evt)), + max_price, + pool_account_id: &pool_account_id, + pool_id, + pool: &pool, + who, + }; + + swap_exact_amount::<_, _, T>(params) + } + + pub fn get_spot_price( + pool_id: &PoolId, + asset_in: &AssetOf, + asset_out: &AssetOf, + with_fees: bool, + ) -> Result, DispatchError> { + let pool = Self::pool_by_id(*pool_id)?; + ensure!(pool.assets.binary_search(asset_in).is_ok(), Error::::AssetNotInPool); + ensure!(pool.assets.binary_search(asset_out).is_ok(), Error::::AssetNotInPool); + let pool_account = Self::pool_account_id(pool_id); + let balance_in = T::AssetManager::free_balance(*asset_in, &pool_account); + let balance_out = T::AssetManager::free_balance(*asset_out, &pool_account); + let in_weight = Self::pool_weight_rslt(&pool, asset_in)?; + let out_weight = Self::pool_weight_rslt(&pool, asset_out)?; + + let swap_fee = if with_fees { pool.swap_fee } else { BalanceOf::::zero() }; + + Ok(crate::math::calc_spot_price( + balance_in.saturated_into(), + in_weight.saturated_into(), + balance_out.saturated_into(), + out_weight.saturated_into(), + swap_fee.saturated_into(), + )? + .saturated_into()) + } + + #[inline] + pub fn pool_account_id(pool_id: &PoolId) -> T::AccountId { + T::PalletId::get().into_sub_account_truncating((*pool_id).saturated_into::()) + } + + /// The minimum allowed balance of `asset` in a liquidity pool. + pub(crate) fn min_balance(asset: AssetOf) -> BalanceOf { + T::AssetManager::minimum_balance(asset).max(MIN_BALANCE.saturated_into()) + } + + /// Returns the minimum allowed balance allowed for a pool with id `pool_id` containing + /// `assets`. + /// + /// The minimum allowed balance is the maximum of all minimum allowed balances of assets + /// contained in the pool, _including_ the pool shares asset. This ensures that none of the + /// accounts involved are slashed when a pool is created with the minimum amount. + /// + /// **Should** only be called if `assets` is non-empty. Note that the existence of a pool + /// with the specified `pool_id` is not mandatory. + pub(crate) fn min_balance_of_pool(pool_id: PoolId, assets: &[AssetOf]) -> BalanceOf { + assets + .iter() + .map(|asset| Self::min_balance(*asset)) + .max() + .unwrap_or_else(|| MIN_BALANCE.saturated_into()) + .max(Self::min_balance(Self::pool_shares_id(pool_id))) + } + + fn ensure_minimum_liquidity_shares( + pool_id: PoolId, + pool: &PoolOf, + amount: BalanceOf, + ) -> DispatchResult { + if pool.status == PoolStatus::Closed { + return Ok(()); + } + let pool_shares_id = Self::pool_shares_id(pool_id); + let total_issuance = T::AssetManager::total_issuance(pool_shares_id); let max_withdraw = total_issuance.saturating_sub(Self::min_balance(pool_shares_id).saturated_into()); ensure!(amount <= max_withdraw, Error::::PoolDrain); @@ -862,14 +1056,7 @@ mod pallet { // Check that the account has at least as many free shares as we wish to burn! T::AssetManager::ensure_can_withdraw(shares_id, from, amount) .map_err(|_| Error::::InsufficientBalance)?; - let missing = T::AssetManager::slash(shares_id, from, amount); - debug_assert!( - missing.is_zero(), - "Could not slash all of the amount. shares_id {:?}, who: {:?}, amount: {:?}.", - shares_id, - &from, - amount, - ); + T::AssetManager::withdraw(shares_id, from, amount)?; Ok(()) } @@ -881,9 +1068,10 @@ mod pallet { where T: Config, { - if assets.len() != provided_values.len() { - return Err(Error::::ProvidedValuesLenMustEqualAssetsLen); - } + ensure!( + assets.len() == provided_values.len(), + Error::::ProvidedValuesLenMustEqualAssetsLen + ); Ok(()) } @@ -923,7 +1111,7 @@ mod pallet { Ok(id) } - // Mutates a stored pool. Returns `Err` if `pool_id` does not exist. + /// Mutates a stored pool. pub(crate) fn mutate_pool(pool_id: PoolId, mut cb: F) -> DispatchResult where F: FnMut(&mut PoolOf) -> DispatchResult, @@ -938,8 +1126,11 @@ mod pallet { }) } - fn pool_weight_rslt(pool: &PoolOf, asset: &AssetOf) -> Result> { - pool.weights.get(asset).cloned().ok_or(Error::::AssetNotBound) + fn pool_weight_rslt( + pool: &PoolOf, + asset: &AssetOf, + ) -> Result, Error> { + pool.weights.get(asset).cloned().ok_or(Error::::AssetNotInPool) } /// Calculate the exit fee percentage for `pool`. @@ -960,27 +1151,13 @@ mod pallet { type Asset = AssetOf; type Balance = BalanceOf; - /// Creates an initial active pool. - /// - /// # Arguments - /// - /// * `who`: The account that is the creator of the pool. Must have enough - /// funds for each of the assets to cover the `amount`. - /// * `assets`: The assets that are used in the pool. - /// * `base_asset`: The base asset in a prediction market swap pool (usually a currency). - /// * `market_id`: The market id of the market the pool belongs to. - /// * `swap_fee`: The fee applied to each swap on a CPMM pool, specified as fixed-point - /// ratio (0.1 equals 10% swap fee) - /// * `amount`: The amount of each asset added to the pool; **may** be `None` only if - /// `scoring_rule` is `RikiddoSigmoidFeeMarketEma`. - /// * `weights`: These are the raw/denormalized weights (mandatory if scoring rule is CPMM). #[frame_support::transactional] fn create_pool( who: T::AccountId, assets: Vec>, swap_fee: BalanceOf, amount: BalanceOf, - weights: Vec, + weights: Vec>, ) -> Result { ensure!(assets.len() <= usize::from(T::MaxAssets::get()), Error::::TooManyAssets); ensure!(assets.len() >= usize::from(T::MinAssets::get()), Error::::TooFewAssets); @@ -988,7 +1165,7 @@ mod pallet { let pool_shares_id = Self::pool_shares_id(next_pool_id); let pool_account = Self::pool_account_id(&next_pool_id); let mut map = BTreeMap::new(); - let mut total_weight = 0; + let mut total_weight: BalanceOf = Zero::zero(); let mut sorted_assets = assets.clone(); sorted_assets.sort(); let has_duplicates = sorted_assets @@ -1035,12 +1212,12 @@ mod pallet { Pools::::insert(next_pool_id, pool.clone()); - Self::deposit_event(Event::PoolCreate( - CommonPoolEventParams { pool_id: next_pool_id, who }, + Self::deposit_event(Event::PoolCreate { + common: CommonPoolEventParams { pool_id: next_pool_id, who }, pool, - amount, + pool_amount: amount, pool_account, - )); + }); Ok(next_pool_id) } @@ -1053,7 +1230,7 @@ mod pallet { pool.status = PoolStatus::Closed; Ok(pool.assets.len() as u32) })?; - Self::deposit_event(Event::PoolClosed(pool_id)); + Self::deposit_event(Event::PoolClosed { pool_id }); Ok(T::WeightInfo::close_pool(asset_len)) } @@ -1063,20 +1240,12 @@ mod pallet { let asset_len = pool.assets.len() as u32; for asset in pool.assets.into_iter() { let amount = T::AssetManager::free_balance(asset, &pool_account); - let missing = T::AssetManager::slash(asset, &pool_account, amount); - debug_assert!( - missing.is_zero(), - "Could not slash all of the amount. asset {:?}, pool_account: {:?}, amount: \ - {:?}.", - asset, - &pool_account, - amount, - ); + T::AssetManager::withdraw(asset, &pool_account, amount)?; } // NOTE: Currently we don't clean up accounts with pool_share_id. // TODO(#792): Remove pool_share_id asset for accounts! It may require storage migration. Pools::::remove(pool_id); - Self::deposit_event(Event::PoolDestroyed(pool_id)); + Self::deposit_event(Event::PoolDestroyed { pool_id }); Ok(T::WeightInfo::destroy_pool(asset_len)) } @@ -1088,143 +1257,42 @@ mod pallet { })?; let pool = Pools::::get(pool_id).ok_or(Error::::PoolDoesNotExist)?; let asset_len = pool.assets.len() as u32; - Self::deposit_event(Event::PoolActive(pool_id)); + Self::deposit_event(Event::PoolActive { pool_id }); Ok(T::WeightInfo::open_pool(asset_len)) } - /// Pool - Exit with exact pool amount - /// - /// Takes an asset from `pool_id` and transfers to `origin`. Differently from `pool_exit`, - /// this method injects the exactly amount of `asset_amount` to `origin`. - /// - /// # Arguments - /// - /// * `who`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset`: Asset leaving the pool. - /// * `asset_amount`: Asset amount that is leaving the pool. - /// * `max_pool_amount`: The calculated amount of assets for the pool must be equal or - /// greater than the given value. - #[frame_support::transactional] fn pool_exit_with_exact_asset_amount( who: T::AccountId, pool_id: PoolId, asset: AssetOf, asset_amount: BalanceOf, max_pool_amount: BalanceOf, - ) -> Result { - let pool = Self::pool_by_id(pool_id)?; - Self::ensure_minimum_balance(pool_id, &pool, asset, asset_amount)?; - let pool_ref = &pool; - let who_clone = who.clone(); - - let params = PoolExitWithExactAmountParams { - asset, - asset_amount: |_, _| Ok(asset_amount), - bound: max_pool_amount, - ensure_balance: |asset_balance: BalanceOf| { - ensure!( - asset_amount <= asset_balance.bmul(T::MaxOutRatio::get())?, - Error::::MaxOutRatio - ); - Ok(()) - }, - pool_amount: |asset_balance: BalanceOf, total_supply: BalanceOf| { - let pool_amount: BalanceOf = crate::math::calc_pool_in_given_single_out( - asset_balance.saturated_into(), - Self::pool_weight_rslt(pool_ref, &asset)?, - total_supply.saturated_into(), - pool_ref.total_weight.saturated_into(), - asset_amount.saturated_into(), - pool_ref.swap_fee.saturated_into(), - T::ExitFee::get().saturated_into(), - )? - .saturated_into(); - ensure!(pool_amount != Zero::zero(), Error::::ZeroAmount); - ensure!(pool_amount <= max_pool_amount, Error::::LimitIn); - Self::ensure_minimum_liquidity_shares(pool_id, &pool, pool_amount)?; - Ok(pool_amount) - }, - event: |evt| Self::deposit_event(Event::PoolExitWithExactAssetAmount(evt)), - who: who_clone, + ) -> DispatchResult { + Self::do_pool_exit_with_exact_asset_amount( + who, pool_id, - pool: pool_ref, - }; - let weight = T::WeightInfo::pool_exit_with_exact_asset_amount(); - pool_exit_with_exact_amount::<_, _, _, _, T>(params).map(|_| weight) + asset, + asset_amount, + max_pool_amount, + ) } - /// Pool - Join with exact asset amount - /// - /// Joins an asset provided from `origin` to `pool_id`. Differently from `pool_join`, - /// this method transfers the exactly amount of `asset_amount` to `pool_id`. - /// - /// # Arguments - /// - /// * `who`: Liquidity Provider (LP). The account whose assets should be received. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Asset entering the pool. - /// * `asset_amount`: Asset amount that is entering the pool. - /// * `min_pool_amount`: The calculated amount for the pool must be equal or greater - /// than the given value. - #[frame_support::transactional] fn pool_join_with_exact_asset_amount( who: T::AccountId, pool_id: PoolId, asset_in: AssetOf, asset_amount: BalanceOf, min_pool_amount: BalanceOf, - ) -> Result { - ensure!(asset_amount != Zero::zero(), Error::::ZeroAmount); - let pool = Pallet::::pool_by_id(pool_id)?; - let pool_ref = &pool; - let pool_account_id = Pallet::::pool_account_id(&pool_id); - let who_clone = who.clone(); - - let params = PoolJoinWithExactAmountParams { - asset: asset_in, - asset_amount: |_, _| Ok(asset_amount), - bound: min_pool_amount, - pool_amount: move |asset_balance: BalanceOf, total_supply: BalanceOf| { - let mul: BalanceOf = asset_balance.bmul(T::MaxInRatio::get())?; - ensure!(asset_amount <= mul, Error::::MaxInRatio); - let pool_amount: BalanceOf = crate::math::calc_pool_out_given_single_in( - asset_balance.saturated_into(), - Self::pool_weight_rslt(pool_ref, &asset_in)?, - total_supply.saturated_into(), - pool_ref.total_weight.saturated_into(), - asset_amount.saturated_into(), - pool_ref.swap_fee.saturated_into(), - )? - .saturated_into(); - ensure!(pool_amount >= min_pool_amount, Error::::LimitOut); - Ok(pool_amount) - }, - event: |evt| Self::deposit_event(Event::PoolJoinWithExactAssetAmount(evt)), - who: who_clone, - pool_account_id: &pool_account_id, + ) -> DispatchResult { + Self::do_pool_join_with_exact_asset_amount( + who, pool_id, - pool: pool_ref, - }; - let weight = T::WeightInfo::pool_join_with_exact_asset_amount(); - pool_join_with_exact_amount::<_, _, _, T>(params).map(|_| weight) + asset_in, + asset_amount, + min_pool_amount, + ) } - /// Swap - Exact amount in - /// - /// Swaps a given `asset_amount_in` of the `asset_in/asset_out` pair to `pool_id`. - /// - /// # Arguments - /// - /// * `who`: The account whose assets should be transferred. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Asset entering the pool. - /// * `asset_amount_in`: Amount that will be transferred from the provider to the pool. - /// * `asset_out`: Asset leaving the pool. - /// * `min_asset_amount_out`: Minimum asset amount that can leave the pool. - /// * `max_price`: Market price must be equal or less than the provided value. - /// * `handle_fees`: Optional parameter to override the swap fee - #[allow(clippy::too_many_arguments)] fn swap_exact_amount_in( who: T::AccountId, pool_id: PoolId, @@ -1233,77 +1301,18 @@ mod pallet { asset_out: AssetOf, min_asset_amount_out: Option>, max_price: Option>, - ) -> Result { - ensure!( - min_asset_amount_out.is_some() || max_price.is_some(), - Error::::LimitMissing, - ); - - let pool = Pallet::::pool_by_id(pool_id)?; - let pool_account_id = Pallet::::pool_account_id(&pool_id); - - ensure!( - T::AssetManager::free_balance(asset_in, &who) >= asset_amount_in, - Error::::InsufficientBalance - ); - - let params = SwapExactAmountParams { - // TODO(#1215): This probably doesn't need to be a closure. - asset_amounts: || { - let balance_out = T::AssetManager::free_balance(asset_out, &pool_account_id); - let balance_in = T::AssetManager::free_balance(asset_in, &pool_account_id); - ensure!( - asset_amount_in <= balance_in.bmul(T::MaxInRatio::get())?, - Error::::MaxInRatio - ); - let asset_amount_out: BalanceOf = crate::math::calc_out_given_in( - balance_in.saturated_into(), - Self::pool_weight_rslt(&pool, &asset_in)?, - balance_out.saturated_into(), - Self::pool_weight_rslt(&pool, &asset_out)?, - asset_amount_in.saturated_into(), - pool.swap_fee.saturated_into(), - )? - .saturated_into(); - - if let Some(maao) = min_asset_amount_out { - ensure!(asset_amount_out >= maao, Error::::LimitOut); - } - - Self::ensure_minimum_balance(pool_id, &pool, asset_out, asset_amount_out)?; - - Ok([asset_amount_in, asset_amount_out]) - }, - asset_bound: min_asset_amount_out, + ) -> DispatchResult { + Self::do_swap_exact_amount_in( + who, + pool_id, asset_in, + asset_amount_in, asset_out, - event: |evt| Self::deposit_event(Event::SwapExactAmountIn(evt)), + min_asset_amount_out, max_price, - pool_account_id: &pool_account_id, - pool_id, - pool: &pool, - who: who.clone(), - }; - swap_exact_amount::<_, _, T>(params)?; - - Ok(T::WeightInfo::swap_exact_amount_in_cpmm()) + ) } - /// Swap - Exact amount out - /// - /// Swaps a given `asset_amount_out` of the `asset_in/asset_out` pair to `origin`. - /// - /// # Arguments - /// - /// * `who`: The account whose assets should be transferred. - /// * `pool_id`: Unique pool identifier. - /// * `asset_in`: Asset entering the pool. - /// * `max_amount_asset_in`: Maximum asset amount that can enter the pool. - /// * `asset_out`: Asset leaving the pool. - /// * `asset_amount_out`: Amount that will be transferred from the pool to the provider. - /// * `max_price`: Market price must be equal or less than the provided value. - /// * `handle_fees`: Whether additional fees are handled or not (sets LP fee to 0) - #[allow(clippy::too_many_arguments)] fn swap_exact_amount_out( who: T::AccountId, pool_id: PoolId, @@ -1312,50 +1321,16 @@ mod pallet { asset_out: AssetOf, asset_amount_out: BalanceOf, max_price: Option>, - ) -> Result { - let pool = Pallet::::pool_by_id(pool_id)?; - let pool_account_id = Pallet::::pool_account_id(&pool_id); - ensure!(max_asset_amount_in.is_some() || max_price.is_some(), Error::::LimitMissing); - Self::ensure_minimum_balance(pool_id, &pool, asset_out, asset_amount_out)?; - - let params = SwapExactAmountParams { - asset_amounts: || { - let balance_out = T::AssetManager::free_balance(asset_out, &pool_account_id); - ensure!( - asset_amount_out <= balance_out.bmul(T::MaxOutRatio::get(),)?, - Error::::MaxOutRatio, - ); - - let balance_in = T::AssetManager::free_balance(asset_in, &pool_account_id); - let asset_amount_in: BalanceOf = crate::math::calc_in_given_out( - balance_in.saturated_into(), - Self::pool_weight_rslt(&pool, &asset_in)?, - balance_out.saturated_into(), - Self::pool_weight_rslt(&pool, &asset_out)?, - asset_amount_out.saturated_into(), - pool.swap_fee.saturated_into(), - )? - .saturated_into(); - - if let Some(maai) = max_asset_amount_in { - ensure!(asset_amount_in <= maai, Error::::LimitIn); - } - - Ok([asset_amount_in, asset_amount_out]) - }, - asset_bound: max_asset_amount_in, + ) -> DispatchResult { + Self::do_swap_exact_amount_out( + who, + pool_id, asset_in, + max_asset_amount_in, asset_out, - event: |evt| Self::deposit_event(Event::SwapExactAmountOut(evt)), + asset_amount_out, max_price, - pool_account_id: &pool_account_id, - pool_id, - pool: &pool, - who: who.clone(), - }; - swap_exact_amount::<_, _, T>(params)?; - - Ok(T::WeightInfo::swap_exact_amount_out_cpmm()) + ) } } } diff --git a/zrml/swaps/src/math.rs b/zrml/swaps/src/math.rs index c76ed5227..64b4d9606 100644 --- a/zrml/swaps/src/math.rs +++ b/zrml/swaps/src/math.rs @@ -1,4 +1,4 @@ -// Copyright 2023 Forecasting Technologies LTD. +// Copyright 2023-2024 Forecasting Technologies LTD. // Copyright 2021-2022 Zeitgeist PM LLC. // // This file is part of Zeitgeist. @@ -127,7 +127,7 @@ pub fn calc_in_given_out( /// tokens of a single asset. /// /// See _Single-Asset Deposit/Withdrawal_ of Martinelli-Mushegian: Balancer Whitepaper v2019-09-19 -/// (https://balancer.fi/whitepaper.pdf) for details. +/// () for details. /// /// * `asset_balance_in` - The pool balance of the ingoing asset /// * `asset_weight_in` - The weight of the ingoing asset @@ -166,7 +166,7 @@ pub fn calc_pool_out_given_single_in( /// specified amount of pool tokens. /// /// See _Single-Asset Deposit/Withdrawal_ of Martinelli-Mushegian: Balancer Whitepaper v2019-09-19 -/// (https://balancer.fi/whitepaper.pdf) for details. +/// () for details. /// /// * `asset_balance_in` - The pool balance of the ingoing asset /// * `asset_weight_in` - The weight of the ingoing asset @@ -203,7 +203,7 @@ pub fn calc_single_in_given_pool_out( /// pool tokens. /// /// See _Single-Asset Deposit/Withdrawal_ of Martinelli-Mushegian: Balancer Whitepaper v2019-09-19 -/// (https://balancer.fi/whitepaper.pdf) for details. +/// () for details. /// /// * `asset_balance_in` - The pool balance of the ingoing asset /// * `asset_weight_in` - The weight of the ingoing asset @@ -243,7 +243,7 @@ pub fn calc_single_out_given_pool_in( /// Calculate the required amount of pool tokens to exit the pool with to receive the specified number of tokens of a single asset. /// /// See _Single-Asset Deposit/Withdrawal_ of Martinelli-Mushegian: Balancer Whitepaper v2019-09-19 -/// (https://balancer.fi/whitepaper.pdf) for details. +/// () for details. /// /// * `asset_balance_in` - The pool balance of the ingoing asset /// * `asset_weight_in` - The weight of the ingoing asset diff --git a/zrml/swaps/src/mock.rs b/zrml/swaps/src/mock.rs index 235706cc6..de0c3fa27 100644 --- a/zrml/swaps/src/mock.rs +++ b/zrml/swaps/src/mock.rs @@ -40,9 +40,9 @@ use sp_runtime::{ }; use zeitgeist_primitives::{ constants::mock::{ - BlockHashCount, ExistentialDeposit, GetNativeCurrencyId, MaxAssets, MaxInRatio, MaxLocks, - MaxOutRatio, MaxReserves, MaxSwapFee, MaxTotalWeight, MaxWeight, MinAssets, MinWeight, - MinimumPeriod, SwapsPalletId, BASE, + BlockHashCount, ExistentialDeposit, GetNativeCurrencyId, MaxAssets, MaxLocks, MaxReserves, + MaxSwapFee, MaxTotalWeight, MaxWeight, MinAssets, MinWeight, MinimumPeriod, SwapsPalletId, + BASE, }, types::{ AccountIdTest, Amount, Asset, Assets, Balance, BasicCurrencyAdapter, BlockNumber, @@ -99,8 +99,6 @@ impl crate::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ExitFee = ExitFeeMock; type MaxAssets = MaxAssets; - type MaxInRatio = MaxInRatio; - type MaxOutRatio = MaxOutRatio; type MaxSwapFee = MaxSwapFee; type MaxTotalWeight = MaxTotalWeight; type MaxWeight = MaxWeight; @@ -150,7 +148,7 @@ parameter_type_with_key! { match currency_id { &BASE_ASSET => ExistentialDeposit::get(), Asset::Ztg => ExistentialDeposit::get(), - _ => 0, + _ => 10_000_000, } }; } diff --git a/zrml/swaps/src/tests.rs b/zrml/swaps/src/tests.rs index c12fbd0c1..b5e3e264e 100644 --- a/zrml/swaps/src/tests.rs +++ b/zrml/swaps/src/tests.rs @@ -29,14 +29,16 @@ use crate::{ events::{CommonPoolEventParams, PoolAssetEvent, PoolAssetsEvent, SwapEvent}, math::calc_out_given_in, mock::*, - types::PoolStatus, - AssetOf, BalanceOf, Config, Error, Event, + types::{Pool, PoolStatus}, + AssetOf, BalanceOf, Config, Error, Event, Pools, }; use frame_support::{assert_err, assert_noop, assert_ok}; use more_asserts::{assert_ge, assert_le}; use orml_traits::MultiCurrency; +use sp_arithmetic::traits::Zero; #[allow(unused_imports)] use test_case::test_case; +use zeitgeist_macros::create_b_tree_map; use zeitgeist_primitives::{ constants::BASE, traits::Swaps as _, @@ -153,7 +155,7 @@ fn destroy_pool_emits_correct_event() { frame_system::Pallet::::set_block_number(1); create_initial_pool(0, true); assert_ok!(Swaps::destroy_pool(DEFAULT_POOL_ID)); - System::assert_last_event(Event::PoolDestroyed(DEFAULT_POOL_ID).into()); + System::assert_last_event(Event::PoolDestroyed { pool_id: DEFAULT_POOL_ID }.into()); }); } @@ -256,7 +258,7 @@ fn assets_must_be_bounded() { Some(1), Some(1) ), - Error::::AssetNotBound + Error::::AssetNotInPool ); assert_noop!( Swaps::swap_exact_amount_in( @@ -268,7 +270,7 @@ fn assets_must_be_bounded() { Some(1), Some(1) ), - Error::::AssetNotBound + Error::::AssetNotInPool ); assert_noop!( @@ -281,7 +283,7 @@ fn assets_must_be_bounded() { 1, Some(1) ), - Error::::AssetNotBound + Error::::AssetNotInPool ); assert_noop!( Swaps::swap_exact_amount_out( @@ -293,7 +295,7 @@ fn assets_must_be_bounded() { 1, Some(1) ), - Error::::AssetNotBound + Error::::AssetNotInPool ); assert_noop!( @@ -304,16 +306,16 @@ fn assets_must_be_bounded() { 1, 1 ), - Error::::AssetNotBound + Error::::AssetNotInPool ); assert_noop!( Swaps::pool_join_with_exact_pool_amount(alice_signed(), DEFAULT_POOL_ID, ASSET_B, 1, 1), - Error::::AssetNotBound + Error::::AssetNotInPool ); assert_noop!( Swaps::pool_exit_with_exact_pool_amount(alice_signed(), DEFAULT_POOL_ID, ASSET_B, 1, 1), - Error::::AssetNotBound + Error::::AssetNotInPool ); assert_noop!( Swaps::pool_exit_with_exact_asset_amount( @@ -323,7 +325,7 @@ fn assets_must_be_bounded() { 1, 1 ), - Error::::AssetNotBound + Error::::AssetNotInPool ); }); } @@ -358,12 +360,12 @@ fn create_pool_generates_a_new_pool_with_correct_parameters_for_cpmm() { let pool_account = Swaps::pool_account_id(&DEFAULT_POOL_ID); System::assert_last_event( - Event::PoolCreate( - CommonPoolEventParams { pool_id: next_pool_before, who: BOB }, + Event::PoolCreate { + common: CommonPoolEventParams { pool_id: next_pool_before, who: BOB }, pool, - amount, + pool_amount: amount, pool_account, - ) + } .into(), ); }); @@ -1903,7 +1905,7 @@ fn close_pool_succeeds_and_emits_correct_event_if_pool_exists() { assert_ok!(Swaps::close_pool(DEFAULT_POOL_ID)); let pool = Swaps::pool_by_id(DEFAULT_POOL_ID).unwrap(); assert_eq!(pool.status, PoolStatus::Closed); - System::assert_last_event(Event::PoolClosed(DEFAULT_POOL_ID).into()); + System::assert_last_event(Event::PoolClosed { pool_id: DEFAULT_POOL_ID }.into()); }); } @@ -1944,7 +1946,7 @@ fn open_pool_succeeds_and_emits_correct_event_if_pool_exists() { assert_ok!(Swaps::open_pool(DEFAULT_POOL_ID)); let pool = Swaps::pool_by_id(DEFAULT_POOL_ID).unwrap(); assert_eq!(pool.status, PoolStatus::Open); - System::assert_last_event(Event::PoolActive(DEFAULT_POOL_ID).into()); + System::assert_last_event(Event::PoolActive { pool_id: DEFAULT_POOL_ID }.into()); }); } @@ -2566,6 +2568,43 @@ fn pool_exit_with_exact_asset_amount_fails_if_liquidity_drops_too_low() { }); } +#[test] +fn pool_exit_burns_small_amounts() { + ExtBuilder::default().build().execute_with(|| { + // Create a mock-up of a closed pool with ZTG balance dusted and winning outcome balance + // below ED. + let pool_id = 0; + let assets = vec![Asset::CategoricalOutcome(0, 3), Asset::Ztg].try_into().unwrap(); + let weights = create_b_tree_map!({ + Asset::CategoricalOutcome(0, 3) => 10_000_000_000, + Asset::Ztg => 100_000_000_000, + }) + .try_into() + .unwrap(); + let pool = Pool { + assets, + status: PoolStatus::Closed, + swap_fee: Zero::zero(), + total_weight: 200_000_000_000, + weights, + }; + Pools::::insert(pool_id, pool); + let pool_shares_amount = 14_624_689; + Currencies::deposit(Swaps::pool_shares_id(pool_id), &ALICE, pool_shares_amount).unwrap(); + let pool_account_id = Swaps::pool_account_id(&pool_id); + let balance = 445_496; + Currencies::deposit(Asset::CategoricalOutcome(0, 3), &pool_account_id, balance).unwrap(); + + assert_ok!(Swaps::pool_exit( + RuntimeOrigin::signed(ALICE), + pool_id, + pool_shares_amount, + vec![0; 2], + )); + assert_eq!(Currencies::free_balance(Asset::CategoricalOutcome(0, 3), &ALICE), 0); + }); +} + fn alice_signed() -> RuntimeOrigin { RuntimeOrigin::signed(ALICE) } diff --git a/zrml/swaps/src/types/pool.rs b/zrml/swaps/src/types/pool.rs index 79fe8c234..917fe4a47 100644 --- a/zrml/swaps/src/types/pool.rs +++ b/zrml/swaps/src/types/pool.rs @@ -30,15 +30,13 @@ impl Get for MaxAssets { } } -// TODO(#1213): Replace `u128` with `PoolWeight` type which implements `Into` and -// `From`! Or just replace it with `Balance`. #[derive(TypeInfo, Clone, Encode, Eq, Decode, MaxEncodedLen, PartialEq, RuntimeDebug)] pub struct Pool { pub assets: BoundedVec, pub status: PoolStatus, pub swap_fee: Balance, - pub total_weight: u128, - pub weights: BoundedBTreeMap, + pub total_weight: Balance, + pub weights: BoundedBTreeMap, } impl Pool diff --git a/zrml/swaps/src/utils.rs b/zrml/swaps/src/utils.rs index cf0979ebd..7e746b808 100644 --- a/zrml/swaps/src/utils.rs +++ b/zrml/swaps/src/utils.rs @@ -50,7 +50,7 @@ where T: Config, { Pallet::::ensure_pool_is_active(p.pool)?; - ensure!(p.pool.bound(&p.asset), Error::::AssetNotBound); + ensure!(p.pool.bound(&p.asset), Error::::AssetNotInPool); let pool_account = Pallet::::pool_account_id(&p.pool_id); let asset_balance = T::AssetManager::free_balance(p.asset, &pool_account); @@ -91,7 +91,7 @@ where let pool_account_id = Pallet::::pool_account_id(&p.pool_id); let total_issuance = T::AssetManager::total_issuance(pool_shares_id); - ensure!(p.pool.bound(&p.asset), Error::::AssetNotBound); + ensure!(p.pool.bound(&p.asset), Error::::AssetNotInPool); let asset_balance = T::AssetManager::free_balance(p.asset, p.pool_account_id); let asset_amount = (p.asset_amount)(asset_balance, total_issuance)?; @@ -131,6 +131,10 @@ where for (asset, amount_bound) in p.pool.assets.iter().cloned().zip(p.asset_bounds.iter().cloned()) { let balance = T::AssetManager::free_balance(asset, p.pool_account_id); + // Dusting may result in zero balances in the pool; just ignore these. + if balance.is_zero() { + continue; + } let amount = ratio.bmul(balance)?; let fee = (p.fee)(amount)?; let amount_minus_fee = amount.checked_sub_res(&fee)?; @@ -164,8 +168,8 @@ where Pallet::::ensure_pool_is_active(p.pool)?; ensure!(p.pool.assets.binary_search(&p.asset_in).is_ok(), Error::::AssetNotInPool); ensure!(p.pool.assets.binary_search(&p.asset_out).is_ok(), Error::::AssetNotInPool); - ensure!(p.pool.bound(&p.asset_in), Error::::AssetNotBound); - ensure!(p.pool.bound(&p.asset_out), Error::::AssetNotBound); + ensure!(p.pool.bound(&p.asset_in), Error::::AssetNotInPool); + ensure!(p.pool.bound(&p.asset_out), Error::::AssetNotInPool); let spot_price_before = Pallet::::get_spot_price(&p.pool_id, &p.asset_in, &p.asset_out, true)?; diff --git a/zrml/swaps/src/weights.rs b/zrml/swaps/src/weights.rs index d2078e41c..b178a6f56 100644 --- a/zrml/swaps/src/weights.rs +++ b/zrml/swaps/src/weights.rs @@ -19,21 +19,21 @@ //! Autogenerated weights for zrml_swaps //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: `2024-02-15`, STEPS: `2`, REPEAT: `0`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: `2024-01-15`, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `zafoi`, CPU: `AMD Ryzen 9 5900X 12-Core Processor` -//! EXECUTION: `Some(Native)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` +//! HOSTNAME: `zeitgeist-benchmark`, CPU: `AMD EPYC 7601 32-Core Processor` +//! EXECUTION: `Some(Wasm)`, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./target/release/zeitgeist +// ./target/production/zeitgeist // benchmark // pallet // --chain=dev -// --steps=2 -// --repeat=0 +// --steps=50 +// --repeat=20 // --pallet=zrml_swaps // --extrinsic=* -// --execution=native +// --execution=wasm // --wasm-execution=compiled // --heap-pages=4096 // --template=./misc/weight_template.hbs @@ -55,8 +55,8 @@ pub trait WeightInfoZeitgeist { fn pool_join(a: u32) -> Weight; fn pool_join_with_exact_asset_amount() -> Weight; fn pool_join_with_exact_pool_amount() -> Weight; - fn swap_exact_amount_in_cpmm() -> Weight; - fn swap_exact_amount_out_cpmm() -> Weight; + fn swap_exact_amount_in() -> Weight; + fn swap_exact_amount_out() -> Weight; fn open_pool(a: u32) -> Weight; fn close_pool(a: u32) -> Weight; fn destroy_pool(a: u32) -> Weight; @@ -76,14 +76,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) /// The range of component `a` is `[2, 65]`. - fn pool_exit(_a: u32) -> Weight { + fn pool_exit(a: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `845 + a * (176 ±0)` - // Estimated: `529717` - // Minimum execution time: 56_181 nanoseconds. - Weight::from_parts(821_990_000, 529717) - .saturating_add(T::DbWeight::get().reads(200)) - .saturating_add(T::DbWeight::get().writes(132)) + // Measured: `848 + a * (176 ±0)` + // Estimated: `13777 + a * (5196 ±0)` + // Minimum execution time: 129_570 nanoseconds. + Weight::from_parts(128_926_395, 13777) + // Standard Error: 377_426 + .saturating_add(Weight::from_parts(36_975_518, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 5196).saturating_mul(a.into())) } /// Storage: Swaps Pools (r:1 w:0) /// Proof: Swaps Pools (max_values: None, max_size: Some(3579), added: 6054, mode: MaxEncodedLen) @@ -97,11 +102,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn pool_exit_with_exact_asset_amount() -> Weight { // Proof Size summary in bytes: - // Measured: `5655` - // Estimated: `24373` - // Minimum execution time: 55_472 nanoseconds. - Weight::from_parts(55_472_000, 24373) - .saturating_add(T::DbWeight::get().reads(8)) + // Measured: `5546` + // Estimated: `18973` + // Minimum execution time: 119_830 nanoseconds. + Weight::from_parts(147_671_000, 18973) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } /// Storage: Swaps Pools (r:1 w:0) @@ -116,11 +121,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) fn pool_exit_with_exact_pool_amount() -> Weight { // Proof Size summary in bytes: - // Measured: `5655` - // Estimated: `24373` - // Minimum execution time: 54_581 nanoseconds. - Weight::from_parts(54_581_000, 24373) - .saturating_add(T::DbWeight::get().reads(8)) + // Measured: `5546` + // Estimated: `18973` + // Minimum execution time: 141_210 nanoseconds. + Weight::from_parts(147_801_000, 18973) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } /// Storage: Swaps Pools (r:1 w:0) @@ -132,14 +137,19 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Tokens Accounts (r:131 w:131) /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) /// The range of component `a` is `[2, 65]`. - fn pool_join(_a: u32) -> Weight { + fn pool_join(a: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `710 + a * (289 ±0)` - // Estimated: `527110` - // Minimum execution time: 46_761 nanoseconds. - Weight::from_parts(663_186_000, 527110) - .saturating_add(T::DbWeight::get().reads(199)) - .saturating_add(T::DbWeight::get().writes(132)) + // Measured: `726 + a * (289 ±0)` + // Estimated: `11170 + a * (5196 ±0)` + // Minimum execution time: 125_590 nanoseconds. + Weight::from_parts(63_107_045, 11170) + // Standard Error: 353_437 + .saturating_add(Weight::from_parts(30_963_348, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 5196).saturating_mul(a.into())) } /// Storage: Swaps Pools (r:1 w:0) /// Proof: Swaps Pools (max_values: None, max_size: Some(3579), added: 6054, mode: MaxEncodedLen) @@ -151,11 +161,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) fn pool_join_with_exact_asset_amount() -> Weight { // Proof Size summary in bytes: - // Measured: `6338` - // Estimated: `21766` - // Minimum execution time: 50_152 nanoseconds. - Weight::from_parts(50_152_000, 21766) - .saturating_add(T::DbWeight::get().reads(7)) + // Measured: `6229` + // Estimated: `16366` + // Minimum execution time: 120_300 nanoseconds. + Weight::from_parts(138_451_000, 16366) + .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } /// Storage: Swaps Pools (r:1 w:0) @@ -168,11 +178,11 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) fn pool_join_with_exact_pool_amount() -> Weight { // Proof Size summary in bytes: - // Measured: `6338` - // Estimated: `21766` - // Minimum execution time: 49_132 nanoseconds. - Weight::from_parts(49_132_000, 21766) - .saturating_add(T::DbWeight::get().reads(7)) + // Measured: `6229` + // Estimated: `16366` + // Minimum execution time: 101_230 nanoseconds. + Weight::from_parts(126_591_000, 16366) + .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(4)) } /// Storage: Swaps Pools (r:1 w:0) @@ -183,13 +193,13 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) - fn swap_exact_amount_in_cpmm() -> Weight { + fn swap_exact_amount_in() -> Weight { // Proof Size summary in bytes: - // Measured: `5253` - // Estimated: `24453` - // Minimum execution time: 81_022 nanoseconds. - Weight::from_parts(81_022_000, 24453) - .saturating_add(T::DbWeight::get().reads(8)) + // Measured: `5144` + // Estimated: `19053` + // Minimum execution time: 163_771 nanoseconds. + Weight::from_parts(201_801_000, 19053) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } /// Storage: Swaps Pools (r:1 w:0) @@ -200,36 +210,40 @@ impl WeightInfoZeitgeist for WeightInfo { /// Proof: Tokens Accounts (max_values: None, max_size: Some(123), added: 2598, mode: MaxEncodedLen) /// Storage: System Account (r:1 w:0) /// Proof: System Account (max_values: None, max_size: Some(132), added: 2607, mode: MaxEncodedLen) - fn swap_exact_amount_out_cpmm() -> Weight { + fn swap_exact_amount_out() -> Weight { // Proof Size summary in bytes: - // Measured: `5253` - // Estimated: `24453` - // Minimum execution time: 79_882 nanoseconds. - Weight::from_parts(79_882_000, 24453) - .saturating_add(T::DbWeight::get().reads(8)) + // Measured: `5144` + // Estimated: `19053` + // Minimum execution time: 166_981 nanoseconds. + Weight::from_parts(202_971_000, 19053) + .saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().writes(4)) } /// Storage: Swaps Pools (r:1 w:1) /// Proof: Swaps Pools (max_values: None, max_size: Some(3579), added: 6054, mode: MaxEncodedLen) /// The range of component `a` is `[2, 65]`. - fn open_pool(_a: u32) -> Weight { + fn open_pool(a: u32) -> Weight { // Proof Size summary in bytes: // Measured: `167 + a * (54 ±0)` // Estimated: `6054` - // Minimum execution time: 8_391 nanoseconds. - Weight::from_parts(20_700_000, 6054) + // Minimum execution time: 18_030 nanoseconds. + Weight::from_parts(19_889_995, 6054) + // Standard Error: 12_386 + .saturating_add(Weight::from_parts(570_444, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: Swaps Pools (r:1 w:1) /// Proof: Swaps Pools (max_values: None, max_size: Some(3579), added: 6054, mode: MaxEncodedLen) /// The range of component `a` is `[2, 65]`. - fn close_pool(_a: u32) -> Weight { + fn close_pool(a: u32) -> Weight { // Proof Size summary in bytes: // Measured: `167 + a * (54 ±0)` // Estimated: `6054` - // Minimum execution time: 7_530 nanoseconds. - Weight::from_parts(14_680_000, 6054) + // Minimum execution time: 17_140 nanoseconds. + Weight::from_parts(19_467_788, 6054) + // Standard Error: 3_011 + .saturating_add(Weight::from_parts(283_373, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -244,13 +258,18 @@ impl WeightInfoZeitgeist for WeightInfo { /// Storage: Tokens TotalIssuance (r:65 w:65) /// Proof: Tokens TotalIssuance (max_values: None, max_size: Some(43), added: 2518, mode: MaxEncodedLen) /// The range of component `a` is `[2, 65]`. - fn destroy_pool(_a: u32) -> Weight { + fn destroy_pool(a: u32) -> Weight { // Proof Size summary in bytes: - // Measured: `655 + a * (215 ±0)` - // Estimated: `516701` - // Minimum execution time: 36_371 nanoseconds. - Weight::from_parts(640_556_000, 516701) - .saturating_add(T::DbWeight::get().reads(197)) - .saturating_add(T::DbWeight::get().writes(132)) + // Measured: `569 + a * (214 ±0)` + // Estimated: `8661 + a * (5116 ±0)` + // Minimum execution time: 99_530 nanoseconds. + Weight::from_parts(13_849_323, 8661) + // Standard Error: 316_948 + .saturating_add(Weight::from_parts(31_161_021, 0).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 5116).saturating_mul(a.into())) } }