diff --git a/.github/workflows/010_build_and_test.yaml b/.github/workflows/010_build_and_test.yaml index 5db61fcd2..7f150a3df 100644 --- a/.github/workflows/010_build_and_test.yaml +++ b/.github/workflows/010_build_and_test.yaml @@ -39,6 +39,7 @@ jobs: - name: Build run: | cd substrate-node + cargo clean cargo build --release - name: Unit tests diff --git a/.github/workflows/020_lint_and_test_go_client.yaml b/.github/workflows/020_lint_and_test_go_client.yaml index 5d8362908..5694ef912 100644 --- a/.github/workflows/020_lint_and_test_go_client.yaml +++ b/.github/workflows/020_lint_and_test_go_client.yaml @@ -6,29 +6,28 @@ on: - clients/tfchain-client-go/** workflow_dispatch: -defaults: - run: - working-directory: clients/tfchain-client-go - jobs: lint: name: lint runs-on: ubuntu-latest timeout-minutes: 5 - steps: + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + with: + submodules: "true" + sparse-checkout: clients/tfchain-client-go + - name: Set up Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: "1.20" + cache: false + # cache-dependency-path: clients/tfchain-client-go/go.sum id: go - - name: Check out code into the Go module directory - uses: actions/checkout@v3.5.0 - with: - submodules: "true" - - name: golangci-lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v3.7.0 with: args: --timeout 3m --verbose working-directory: clients/tfchain-client-go @@ -44,4 +43,5 @@ jobs: - name: gofmt uses: Jerome1337/gofmt-action@v1.0.5 with: - gofmt-flags: "-l -d" \ No newline at end of file + gofmt-path: './clients/tfchain-client-go' + gofmt-flags: "-l -d" diff --git a/.github/workflows/060_generate_benchmark_weights.yml b/.github/workflows/060_generate_benchmark_weights.yml new file mode 100644 index 000000000..3d60c0b08 --- /dev/null +++ b/.github/workflows/060_generate_benchmark_weights.yml @@ -0,0 +1,80 @@ +name: Generate benchmark weights + +on: + workflow_dispatch: + +jobs: + generate-benchmark-weights: + runs-on: [self-hosted, tfchainrunner01] + container: + image: threefolddev/tfchain:4 + env: + DEBIAN_FRONTEND: noninteractive + PATH: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin + RUSTUP_HOME: /root/.rustup + CARGO_HOME: /root/.cargo + + steps: + - name: Fail if branch is main + if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/development' + run: | + echo "This workflow should not be triggered with workflow_dispatch on main branch" + exit 1 + + - name: Checkout the repo + uses: actions/checkout@v3 + + - name: Chown user + run: | + chown -R $USER:$USER $GITHUB_WORKSPACE + + - name: Cache build + uses: actions/cache@v3 + timeout-minutes: 6 + continue-on-error: true + with: + path: | + /root/.cargo/bin/ + /root/.cargo/registry/index/ + /root/.cargo/registry/cache/ + /root/.cargo/git/db/ + substrate-node/target/ + key: ${{ runner.os }}-tfchain-build-cache-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ runner.os }}-tfchain-build-cache + + - name: Build + run: | + cd substrate-node + cargo build --profile=production --features runtime-benchmarks + + - name: Run benchmarking + shell: bash + run: | + cd substrate-node + for weights_rs_file in ./pallets/*/src/weights.rs + do + rm $weights_rs_file + pal_name=$(awk -F'pallets/|/src' '{print $2}' <<< $weights_rs_file) + ./target/production/tfchain benchmark pallet \ + --chain=dev \ + --wasm-execution=compiled \ + --pallet="$pal_name" \ + --extrinsic="*" \ + --steps=50 \ + --repeat=20 \ + --heap-pages=409 \ + --output ./pallets/"$pal_name"/src/weights.rs \ + --template ./.maintain/frame-weight-template.hbs + done + + - name: Git config + run: | + git config --global --add safe.directory /__w/tfchain/tfchain + git status + + - name: Commit & Push changes + uses: actions-js/push@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + message: 'chore: update benchmark `weights.rs` file for all pallets' + branch: ${{ github.ref_name }} diff --git a/.github/workflows/060_publish_tfchain_image.yml b/.github/workflows/060_publish_tfchain_image.yml new file mode 100644 index 000000000..3f487bbdb --- /dev/null +++ b/.github/workflows/060_publish_tfchain_image.yml @@ -0,0 +1,42 @@ +name: Publish tfchain image + +on: + push: + tags: + - v* + workflow_dispatch: + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout the repo + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/threefoldtech/tfchain + tags: | + type=semver,pattern={{version}} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + file: ./substrate-node/Dockerfile + context: ./substrate-node/. + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/070_lint_and_test_go_bridge.yaml b/.github/workflows/070_lint_and_test_go_bridge.yaml new file mode 100644 index 000000000..41c6aad90 --- /dev/null +++ b/.github/workflows/070_lint_and_test_go_bridge.yaml @@ -0,0 +1,49 @@ +name: Lint Go bridge + +on: + push: + paths: + - bridge/tfchain_bridge/** + workflow_dispatch: + +jobs: + lint: + name: lint + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + with: + submodules: "true" + sparse-checkout: | + clients/tfchain-client-go + bridge/tfchain_bridge + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: "1.20" + cache: false + # cache-dependency-path: bridge/tfchain_bridge/go.sum + id: go + + - name: golangci-lint + uses: golangci/golangci-lint-action@v3.7.0 + with: + args: --timeout 3m --verbose + working-directory: bridge/tfchain_bridge + + - name: staticcheck + uses: dominikh/staticcheck-action@v1.3.0 + with: + version: "2022.1.3" + working-directory: bridge/tfchain_bridge + env: + GO111MODULE: on + + - name: gofmt + uses: Jerome1337/gofmt-action@v1.0.5 + with: + gofmt-path: './bridge/tfchain_bridge' + gofmt-flags: "-l -d" diff --git a/.github/workflows/080_check_benchmark_weights.yml b/.github/workflows/080_check_benchmark_weights.yml new file mode 100644 index 000000000..06ba6edf4 --- /dev/null +++ b/.github/workflows/080_check_benchmark_weights.yml @@ -0,0 +1,77 @@ +name: Check benchmark weights + +on: + push: + branches-ignore: + - development + paths: + - '**.rs' + - 'substrate-node/pallets/**' + +jobs: + check-benchmark-weights: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout the repo + uses: actions/checkout@v3 + + - name: Get all rust files that have changed in pallets + id: pallets-changed-rust-files + uses: tj-actions/changed-files@v42 + with: + files: | + substrate-node/pallets/**/src/*.rs + + - name: Get all pallets with changes in src dir + id: pallets-changed-src-dir + uses: tj-actions/changed-files@v42 + with: + dir_names: "true" + files: | + substrate-node/pallets/**/src/*.rs + + - name: List all changed files + env: + ALL_CHANGED_FILES: ${{ steps.pallets-changed-rust-files.outputs.all_changed_files }} + run: | + for file in ${ALL_CHANGED_FILES}; do + echo "$file file was changed" + done + + - name: List all changed dir + env: + ALL_CHANGED_DIR: ${{ steps.pallets-changed-src-dir.outputs.all_changed_files }} + run: | + for dir in ${ALL_CHANGED_DIR}; do + echo "$dir has changes" + done + + - name: Run benchmarking + env: + ALL_CHANGED_PALLETS_SRC_DIR: ${{ steps.pallets-changed-src-dir.outputs.all_changed_files }} + ALL_CHANGED_PALLETS_FILES: ${{ steps.pallets-changed-rust-files.outputs.all_changed_files }} + run: | + count=0 + for pallet_src_dir in ${ALL_CHANGED_PALLETS_SRC_DIR}; do + echo "pallet src dir: $pallet_src_dir" + weights_file="$pallet_src_dir"/weights.rs + echo "weights file: $weights_file" + updated_weights=false + for changed_file in ${ALL_CHANGED_PALLETS_FILES}; do + if [ "$changed_file" = "$weights_file" ]; then + updated_weights=true + break + fi + done + if [ "$updated_weights" = false ] ; then + let "count=count+1" + fi + done + if [ "$count" -gt 0 ]; then + echo "Found changes on src rust file(s) for $count pallet(s) and respective weights.rs file(s) was not updated." + echo "Make sure to generate these files again if pallet logic has changed by running generate_benchmark_weights workflow on branch." + exit 1 + else + echo "Found changes on src rust file(s) and respective weights.rs file(s) was updated." + fi diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..cc94da7cf --- /dev/null +++ b/Makefile @@ -0,0 +1,46 @@ +.PHONY: version-bump + +# * Usage Examples:* +# type=patch make version-bump +# type=minor make version-bump +# type=major make version-bump +# ** skip increment spec_version in substrate-node/runtime/src/lib.rs ** +# type=patch retain_spec_version=1 make version-bump +version-bump: + set -e; \ + if [ "$(type)" = "patch" ] || [ "$(type)" = "minor" ] || [ "$(type)" = "major" ]; then \ + default_branch=$$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'); \ + git checkout $$default_branch; \ + git pull origin $$default_branch; \ + new_version=$$(npx semver -i $(type) $$(jq -r .version clients/tfchain-client-js/package.json)); \ + branch_name="$$default_branch-bump-version-to-$$new_version"; \ + git checkout -b $$branch_name; \ + current_spec_version=$$(sed -n -e 's/^.*spec_version: \([0-9]\+\),$$/\1/p' substrate-node/runtime/src/lib.rs); \ + if [ -z "$${retain_spec_version}" ]; then \ + current_spec_version=$$(sed -n -e 's/^.*spec_version: \([0-9]\+\),$$/\1/p' substrate-node/runtime/src/lib.rs); \ + echo "Current spec_version: $$current_spec_version"; \ + new_spec_version=$$((current_spec_version + 1)); \ + echo "New spec_version: $$new_spec_version"; \ + sed -i "s/spec_version: $$current_spec_version,/spec_version: $$new_spec_version,/" substrate-node/runtime/src/lib.rs; \ + fi; \ + jq ".version = \"$$new_version\"" activation-service/package.json > temp.json && mv temp.json activation-service/package.json; \ + jq ".version = \"$$new_version\"" clients/tfchain-client-js/package.json > temp.json && mv temp.json clients/tfchain-client-js/package.json; \ + jq ".version = \"$$new_version\"" scripts/package.json > temp.json && mv temp.json scripts/package.json; \ + jq ".version = \"$$new_version\"" tools/fork-off-substrate/package.json > temp.json && mv temp.json tools/fork-off-substrate/package.json; \ + sed -i "s/^version = .*/version = \"$$new_version\"/" substrate-node/Cargo.toml; \ + sed -i "s/^version: .*/version: $$new_version/" substrate-node/charts/substrate-node/Chart.yaml; \ + sed -i "s/^appVersion: .*/appVersion: '$$new_version'/" substrate-node/charts/substrate-node/Chart.yaml; \ + sed -i "s/^version: .*/version: $$new_version/" bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml; \ + sed -i "s/^appVersion: .*/appVersion: '$$new_version'/" bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml; \ + sed -i "s/^version: .*/version: $$new_version/" activation-service/helm/tfchainactivationservice/Chart.yaml; \ + sed -i "s/^appVersion: .*/appVersion: '$$new_version'/" activation-service/helm/tfchainactivationservice/Chart.yaml; \ + cd substrate-node && cargo metadata -q 1> /dev/null && cd ..; \ + git add substrate-node/Cargo.toml substrate-node/Cargo.lock substrate-node/charts/substrate-node/Chart.yaml bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml activation-service/helm/tfchainactivationservice/Chart.yaml activation-service/package.json clients/tfchain-client-js/package.json scripts/package.json tools/fork-off-substrate/package.json substrate-node/runtime/src/lib.rs; \ + if [ -z "$${new_spec_version}" ]; then \ + git commit -m "Bump version to $$new_version"; \ + else \ + git commit -m "Bump version to $$new_version (spec v$$new_spec_version)"; \ + fi \ + else \ + echo "Invalid version type. Please use patch, minor, or major."; \ + fi diff --git a/activation-service/Dockerfile b/activation-service/Dockerfile index 1491a9ce4..f1519b299 100644 --- a/activation-service/Dockerfile +++ b/activation-service/Dockerfile @@ -4,11 +4,10 @@ FROM node:16 WORKDIR /usr/src/app # Install app dependencies -# A wildcard is used to ensure both package.json AND package-lock.json are copied -# where available (npm@5+) -COPY package*.json ./ +COPY package.json yarn.lock ./ + +RUN yarn install && yarn cache clean -RUN yarn install # If you are building your code for production # RUN npm ci --only=production diff --git a/activation-service/helm/tfchainactivationservice/Chart.yaml b/activation-service/helm/tfchainactivationservice/Chart.yaml index 4b2942a85..0a4afa782 100644 --- a/activation-service/helm/tfchainactivationservice/Chart.yaml +++ b/activation-service/helm/tfchainactivationservice/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: tfchainactivationservice description: TFchain account activation funding service type: application -version: 2.6.0-rc1 -appVersion: '2.6.0-rc1' +version: 2.9.0 +appVersion: '2.9.0' diff --git a/activation-service/package.json b/activation-service/package.json index 99e5b46e7..95cd30c93 100644 --- a/activation-service/package.json +++ b/activation-service/package.json @@ -1,6 +1,6 @@ { "name": "substrate-funding-service", - "version": "2.6.0-rc1", + "version": "2.9.0", "description": "Substrate funding service", "main": "index.js", "scripts": { @@ -36,4 +36,4 @@ "pino-pretty": "^5.0.2", "standard": "^16.0.3" } -} \ No newline at end of file +} diff --git a/bridge/docs/observability.md b/bridge/docs/observability.md new file mode 100644 index 000000000..0288a8205 --- /dev/null +++ b/bridge/docs/observability.md @@ -0,0 +1,1449 @@ +# Bridge Observability +The bridge is event-driven distributed system, it can be challenging to understand how requests or transfers move through the system and where bottlenecks may occur. +This is where techniques like distributed tracing, structured logs, and structured events comes in to allows developers and operators to monitor and understand the behavior of complex systems. + +By using these techniques, developers and operators can gain a more complete understanding of how their applications are performing in production and quickly identify issues when they arise. + +## Structured events +This section describes the structure and contents of the bridge logs. +It defines a common set of field names and data types, as well as descriptions and examples of how to use them. + +Bridge logs are structured and represented in JSON format. +It uses a common structure for logs, making it easier to ingest, correlate, search, and aggregate on individual fields within your logs. + +For interfaces designed for humans, they can simply display the "message" key and hide the other metadata, making the log easy to ready without sacrificing the metadata. + +The logs entries serve as events (represents an immutable event that occurred in the past), and adopting past-tense verb naming schema. + +### Events: +#### Operational Events: +These events to audit how the bridge system is operating. + +##### Bridge availability events +- `bridge_init_aborted`: The bridge failed to initiated mostly due to misconfiguration. +- `bridge_started`: The bridge started successfully. +- `bridge_unexpectedly_exited`: The bridge panicked. +- `bridge_stopped`: The bridge stopped normally mostly for maintenance or new version enrollment. + +##### Persistency events +- `stellar_cursor_saved`: The bridge saved the account operation cursor. + +##### Stellar monitor events +- `transactions_fetched`: The bridge fetched transactions data from stellar network. Should be received periodically and can be used as a mark message to detect availability issues. Also include stellar cursor position. +- `fetch_transactions_failed`: The bridge failed to fetch transactions data from stellar network. + +##### TFChain monitor events +- `block_events_fetched`: The bridge fetched transactions data from TFChain network for a block. Should be received every block and can be used as a mark message to detect availability issues. Also include the TFChain height. +- `fetch_finalized_Heads_failed`: The bridge failed to fetch transactions data from TFChain network. + +#### Business Events: +These events are for business intelligence and always tied to a user transfer, and include a `trace_id` field. + +you can use `trace_id` to correlate multiple log entries and track an transfer from one chain to the other. it is simply a stellar tx ID or TFChain burn ID depend on the side the transfer initiated from. + +For example, if a customer is complaining that their deposit never bridged, you could filter logs using `trace_id` field with the id of the customer deposit to get overview of all events related to this deposit id and see what went wrong. + +##### Cross-chain transfer events +- `transfer_initiated`: The bridge initiated a cross chain transfer (after receiving a deposit from stellar side or burn event from TFChain side). +- `transfer_completed`: The bridge has completed a cross chain transfer (either by bridging tokens to the other chain or issuing a refund if something went wrong). +- `transfer_failed`: a withdraw can not be completed and refund is not possible as well. + +##### Cross-chain transfer phases +##### Mint related +- `mint_skipped`: a mint request skipped by the bridge instance as it has already been minted. +- `mint_proposed`: a mint has proposed or voted by the bridge instance. +- `mint_completed`: a mint has completed and received on the target TFChain account. + +##### Refund related +- `event_refund_tx_ready_received`: The bridge instance has received TFChain `RefundTransactionReady` event which means all bridge validators signed a refund transaction. +- `event_refund_tx_expired_received`: The bridge instance has received TFChain `RefundTransactionExpired` event. +- `refund_skipped`: a refund request skipped by the bridge instance as it has already been refunded. +- `refund_proposed`: a refund has proposed or signed by the bridge instance. +- `refund_completed`: a refund has completed and received on the target stellar account. + +##### Withdraw related +- `event_burn_tx_created_received`: The bridge instance has received TFChain `BurnTransactionCreated` event. +- `event_burn_tx_ready_received`: The bridge instance has received TFChain `BurnTransactionReady` event which means all bridge validators signed a withdraw transaction. +- `event_burn_tx_expired_received`: The bridge instance has received TFChain `BurnTransactionExpired` event. +- `withdraw_skipped`: a refund request skipped by the bridge instance as it has already been refunded. +- `withdraw_proposed`: a withdraw has proposed or signed by the bridge instance. +- `withdraw_postponed`: a withdraw has postponed due to a problem in sending this transaction to the stellar network and will be retried later. +- `withdraw_completed`: a withdraw has completed and received on the target stellar account. + +##### Bridge vault account related +- `payment_received` : This event represents successful payment to the bridge account (a deposit). +- `stellar_transaction_submitted` : This event represents successful transaction from the bridge account (a refund or a withdraw). + +### Metrics: + +This events describes a numeric measurement taken at given point in time. +Metric events are often collected on a predictable frequency. + +#### Bridge vault account related +- `wallet_balance`: This event describes a tft balance locked on the bridge and collected once a minute. + +### Log schema: + +#### Base fields +The base field set contains all fields which are at the root of the events. These fields are common across all types of events. + +| Field | Type | Description | Required | +| --- | --- | --- | --- | +| level | string | yes | The level or severity of the log event | +| version | number | yes |Log schema version | +| source | object | yes | Information about the bridge instance | +| event_action | string | yes | The action captured by the event | +| event_kind | string | yes | Can gives high-level information about what type of information the event contains, without being specific to the contents of the event. One of `Event`, `Alert`, `Error`, `metric` | +| metadata | object | no | Only present for logs that contain meta data about the event | +| message | string | yes | The log message | +| time | time | yes | The timestamp of the log event | +| error | string | no | Only present for logs that contain an exception or error. The message of the exception or error | +| category | string | no | One of `availability`, `persistency`, `stellar_monitor`, `tfchain_monitor`, `transfer`, `mint`, `refund`, `withdraw`, `vault` | +| trace_id | string | no | Only present on business events. a unique identifier that is assigned to a trace, which represents a complete cross-chain transfer flow. | + +#### Categorization Fields +##### event_kind field +The value of this field can be used to inform how these kinds of events should be handled. + +- alert: This value indicates an event such as an alert or notable event. + +- event: This value is the most general and most common value for this field. It is used to represent events that indicate that something happened. + +- error: This value indicates that an error occurred during the operation of the bridge. + +- metric: This events describes a numeric measurement taken at given point in time. + +##### category field +The value of this represents the "big buckets" of event categories + +- availability +- persistency +- stellar_monitor +- tfchain_monitor +- transfer +- mint +- refund +- withdraw +- vault + +#### source object +the source field set contains all fields which are included in the source object, it is common across all types of events except of `bridge_init_aborted` error event. + +| Field | Type | Required | Description | +| --- | --- | --- | --- | +| Instance_public_key | string | yes | Instance public key which you can use to filter logs by instance | +| Bridge_wallet_address | string | yes | The bridge account address which you can use to filter logs by bridge | +| Stellar_network | string | yes | Stellar network name which you can use to filter logs by environment | +| Tfchain_url | string | yes | The url of the substrate rpc node which you can use to filter logs by environment | + +#### Event-specific fields: + +##### bridge_init_aborted + +- kind: error + +- category: availability + + + + + + + + + + + + + + + + +
bridge_init_aborted Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### bridge_started + +- kind: event + +- category: availability + + + + + + + + + + + + + + + + + + + + + + + + + +
bridge_started Event Properties
PropertyTypeRequiredDescription
rescan_flagboolyesThe value of the bridge configuration flag which used to instruct the bridge to scan the vault account from the earliest known operation.
deposit_feenumberyesThe bridge fees to charge per deposit which fetched from TFChain.
+ +##### bridge_unexpectedly_exited + +- kind: error + +- category: availability + + + + + + + + + + + + + + + + +
bridge_unexpectedly_exited Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### bridge_stopped + +- kind: event + +- category: availability + + + + + + + + + + + + + + + + +
bridge_stopped Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### stellar_cursor_saved + +- kind: event + +- category: persistency + + + + + + + + + + + + + + + + + + + +
stellar_cursor_saved Event Properties
PropertyTypeRequiredDescription
cursornumberyesthe Cursor is an integer that points to a specific location in a collection of horizon responses.
+ +##### transactions_fetched + +- kind: event + +- category: stellar_monitor + + + + + + + + + + + + + + + + + + + + + + + + + +
transactions_fetched Event Properties
PropertyTypeRequiredDescription
cursornumberyesthe Cursor is an integer that points to a specific location in a collection of horizon responses.
countnumberyesThe count of the fetched transactions from horizon.
+ +##### fetch_transactions_failed + +- kind: alert + +- category: stellar_monitor + + + + + + + + + + + + + + + + + + + +
fetch_transactions_failed Event Properties
PropertyTypeRequiredDescription
cursornumberyesthe Cursor is an integer that points to a specific location in a collection of horizon responses.
+ +##### block_events_fetched + +- kind: event + +- category: tfchain_monitor + + + + + + + + + + + + + + + + + + + +
block_events_fetched Event Properties
PropertyTypeRequiredDescription
heightnumberyesThe block height of a TFChain
+ +##### fetch_finalized_Heads_failed + +- kind: alert + +- category: tfchain_monitor + + + + + + + + + + + + + + + + +
fetch_finalized_Heads_failed Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### transfer_initiated + +- kind: event + +- category: transfer + + + + + + + + + + + + + + + + + + + +
transfer_initiated Event Properties
PropertyTypeRequiredDescription
typestringyesThe type of this transfer. One of `burn` (from tfchain side) or `deposit` (from stellar side).
+ +##### transfer_completed + +- kind: event + +- category: transfer + + + + + + + + + + + + + + + + + + + +
transfer_completed Event Properties
PropertyTypeRequiredDescription
outcomestringyesOne of `refunded` or `bridged`.
+ +##### transfer_failed + +- kind: alert + +- category: transfer + + + + + + + + + + + + + + + + + + + + + + + + + +
transfer_failed Event Properties
PropertyTypeRequiredDescription
reasonstringyesThe reason behind the failure of this transfer.
typestringyesThe type of this transfer. One of `burn` (from tfchain side) or `deposit` (from stellar side).
+ +##### mint_skipped + +- kind: event + +- category: mint + + + + + + + + + + + + + + + + +
mint_skipped Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### mint_proposed + +- kind: event + +- category: mint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mint_proposed Event Properties
PropertyTypeRequiredDescription
amountnumberyesdeposited amount to be minted on tfchain.
tx_idnumberyesThe stellar deposit tx ID.
tostringyesThe tfchain target account address.
+ +##### mint_completed + +- kind: event + +- category: mint + + + + + + + + + + + + + + + + +
mint_completed Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### event_refund_tx_ready_received + +- kind: event + +- category: refund + + + + + + + + + + + + + + + + +
event_refund_tx_ready_received Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### event_refund_tx_expired_received + +- kind: alert + +- category: refund + + + + + + + + + + + + + + + + +
event_refund_tx_expired_received Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### refund_skipped + +- kind: event + +- category: refund + + + + + + + + + + + + + + + + +
refund_skipped Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### refund_proposed + +- kind: event + +- category: refund + + + + + + + + + + + + + + + + + + + +
refund_proposed Event Properties
PropertyTypeRequiredDescription
reasonstringyesThe reason for refunding this transaction.
+ +##### refund_completed + +- kind: event + +- category: refund + + + + + + + + + + + + + + + + +
refund_completed Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### event_burn_tx_created_received + +- kind: event + +- category: withdraw + + + + + + + + + + + + + + + + +
event_burn_tx_created_received Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### event_burn_tx_ready_received + +- kind: event + +- category: withdraw + + + + + + + + + + + + + + + + +
event_burn_tx_ready_received Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### event_burn_tx_expired_received + +- kind: alert + +- category: withdraw + + + + + + + + + + + + + + + + +
event_burn_tx_expired_received Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### withdraw_skipped + +- kind: event + +- category: withdraw + + + + + + + + + + + + + + + + +
withdraw_skipped Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### withdraw_proposed + +- kind: event + +- category: withdraw + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
withdraw_proposed Event Properties
PropertyTypeRequiredDescription
amountnumberyesBurned amount.
tx_idnumberyesThe burn ID.
tostringyesThe stellar target account address.
+ +##### withdraw_postponed + +- kind: event + +- category: withdraw + + + + + + + + + + + + + + + + + + + +
withdraw_postponed Event Properties
PropertyTypeRequiredDescription
reasonstringyesThe reason behind the postponed of this transfer.
+ +##### withdraw_completed + +- kind: event + +- category: withdraw + + + + + + + + + + + + + + + + +
withdraw_completed Event Properties
PropertyTypeRequiredDescription
No metadata
+ +##### payment_received + +- kind: event + +- category: vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
payment_received Event Properties
PropertyTypeRequiredDescription
fromstringyesThe stellar source account address
amountdecimalyesDeposit amount
tx_hashstringyestransaction hash
ledger_close_timetimeyestransaction time
+ +##### stellar_transaction_submitted + +- kind: event + +- category: vault + + + + + + + + + + + + + + + + + + + +
stellar_transaction_submitted Event Properties
PropertyTypeRequiredDescription
result_tx_idstringyesThe stellar id of the bridge executed transaction.
+ +##### wallet_balance + +- kind: metric + +- category: vault + + + + + + + + + + + + + + + + + + + +
wallet_balance Event Properties
PropertyTypeRequiredDescription
tftnumberyesThe tft amount locked in the bridge vault account. collected once a minute
+ +## Usage examples: + +### Example 1 + +One example, if a customer is complaining that their deposit never bridged, you could filter logs using `trace_id` field with the id of the customer deposit to get overview of all events related to this deposit id and see what went wrong. + + - trace_id = `16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354` + +The result would be an array of well defined events, and for a well behave cross-transfer from stellar network to tfchain network it should include these events in the same order: + +*payment_received* --> *transfer_initiated* --> *mint_proposed* --> *mint_completed* --> *transfer_completed* + +the filtered result would be similar to the one below: + +``` +[ + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354", + "event_action": "payment_received", + "event_kind": "event", + "category": "vault", + "metadata": { + "from": "GD4MUF7FTWOGNREGKMQWC3NOJGBNASEFNEOUJTLNW4FDONV5CEUTGKS4", + "amount": "5.0000000" + }, + "tx_hash": "16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354", + "ledger_close_time": "2023-11-05 17:08:28 +0000 UTC", + "time": "2023-11-05T19:08:32+02:00", + "message": "a payment has received on bridge Stellar account" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354", + "event_action": "transfer_initiated", + "event_kind": "event", + "category": "transfer", + "metadata": { + "type": "deposit" + }, + "time": "2023-11-05T19:08:33+02:00", + "message": "a transfer has initiated" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354", + "event_action": "mint_proposed", + "event_kind": "event", + "category": "mint", + "metadata": { + "amount": 50000000, + "tx_id": "16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354", + "to": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + }, + "time": "2023-11-05T19:08:36+02:00", + "message": "a mint has proposed with the target substrate address of 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354", + "event_action": "mint_completed", + "event_kind": "event", + "category": "mint", + "time": "2023-11-05T19:08:49+02:00", + "message": "found MintCompleted event" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "16d8b06b59aaa5514c645260263e5477bb8aad211502c56cb8849ed5b423d354", + "event_action": "transfer_completed", + "event_kind": "event", + "category": "transfer", + "metadata": { + "outcome": "bridged" + }, + "time": "2023-11-05T19:08:49+02:00", + "message": "transfer has completed" + } +] +``` + +The `transfer_completed` event’s `outcome` field value of `bridged` indicates that the TFT was successfully transferred. + +### Example 2 + +For a cross-chain transfer from TFChain to Stellar, the trace_id will be an integer. + + - trace_id = `10` + +Let’s examine the event actions for this transfer: + +*event_burn_tx_created_received* --> *transfer_initiated* --> *mint_proposed* --> *mint_completed* --> *transfer_completed* + +This time, the transfer was not completed on the other network and was instead refunded. However, using the `trace_id`, you can still trace the transfer from start to end. The filtered result would be similar to the one below: + + +``` +[ + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "10", + "event_action": "event_burn_tx_created_received", + "event_kind": "event", + "category": "withdraw", + "time": "2023-11-05T20:16:31+02:00", + "message": "found BurnTransactionCreated event" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "10", + "event_action": "transfer_initiated", + "event_kind": "event", + "category": "transfer", + "metadata": { + "type": "burn" + }, + "time": "2023-11-05T20:16:31+02:00", + "message": "a transfer has initiated" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "10", + "event_action": "mint_proposed", + "event_kind": "event", + "category": "mint", + "metadata": { + "amount": 40000000, + "tx_id": "10", + "to": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d" + }, + "time": "2023-11-05T20:16:36+02:00", + "message": "a mint has proposed with the target substrate address of 0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "10", + "event_action": "mint_completed", + "event_kind": "event", + "category": "mint", + "time": "2023-11-05T20:16:50+02:00", + "message": "found MintCompleted event" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "10", + "event_action": "transfer_completed", + "event_kind": "event", + "category": "transfer", + "metadata": { + "outcome": "refunded" + }, + "time": "2023-11-05T20:16:50+02:00", + "message": "transfer has completed" + } +] +``` + +Notably, the `transfer_completed` event’s `outcome` field value of refunded indicates that the TFT was refunded to the source account. + +### Example 3 + +Here is another example of a cross-chain transfer from TFChain to Stellar, where the events show that the transfer was successful. + + - trace_id = `13` + +*event_burn_tx_created_received* --> *transfer_initiated* --> *withdraw_proposed* --> *event_burn_tx_ready_received* --> *stellar_transaction_submitted* --> *withdraw_completed* --> *transfer_completed* + +For a more simplified view, you can filter events by the transfer category to display only the start and end events of the transfer in question. + +``` +[ + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "13", + "event_action": "event_burn_tx_created_received", + "event_kind": "event", + "category": "withdraw", + "time": "2023-11-05T20:57:08+02:00", + "message": "found BurnTransactionCreated event" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "13", + "event_action": "transfer_initiated", + "event_kind": "event", + "category": "transfer", + "metadata": { + "type": "burn" + }, + "time": "2023-11-05T20:57:08+02:00", + "message": "a transfer has initiated" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "13", + "event_action": "withdraw_proposed", + "event_kind": "event", + "category": "withdraw", + "metadata": { + "amount": 40000000, + "tx_id": "13", + "to": "GBK4SQ5HUMWKMSYVEAFPPO4W27YRPGHE4CGQOKEFQ3WGPTSNURZPISO3" + }, + "time": "2023-11-05T20:57:12+02:00", + "message": "a withdraw has proposed with the target stellar address of GBK4SQ5HUMWKMSYVEAFPPO4W27YRPGHE4CGQOKEFQ3WGPTSNURZPISO3" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "13", + "event_action": "event_burn_tx_ready_received", + "event_kind": "event", + "category": "withdraw", + "time": "2023-11-05T20:57:25+02:00", + "message": "found BurnTransactionReady event" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "13", + "event_action": "stellar_transaction_submitted", + "event_kind": "event", + "category": "vault", + "metadata": { + "result_tx_id": "777f561a4b91928f4679ad182be2178a29d5f0a3ee28a0461708d183d0a00a7d" + }, + "time": "2023-11-05T20:57:32+02:00", + "message": "the transaction submitted to the Stellar network, and its unique identifier is 777f561a4b91928f4679ad182be2178a29d5f0a3ee28a0461708d183d0a00a7d" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "13", + "event_action": "withdraw_completed", + "event_kind": "event", + "category": "withdraw", + "time": "2023-11-05T20:57:32+02:00", + "message": "the withdraw has proceed" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "13", + "event_action": "transfer_completed", + "event_kind": "event", + "category": "transfer", + "metadata": { + "outcome": "bridged" + }, + "time": "2023-11-05T20:57:32+02:00", + "message": "the transfer has completed" + } +] +``` + +### Example 4 + +The final example illustrates the expected events when a transfer from Stellar to TFChin fails. We will filter the events using the `trace_id`, which is the deposit transaction ID. + + - trace_id = `7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f` + +The `transfer_completed` event contains the `outcome` of the transfer, which is refunded. + +Also Upon reviewing the `refund_proposed` event, we found that the `reason` field indicates that the memo was not properly formatted. + +``` +[ + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "event_action": "payment_received", + "event_kind": "event", + "category": "vault", + "metadata": { + "from": "GD4MUF7FTWOGNREGKMQWC3NOJGBNASEFNEOUJTLNW4FDONV5CEUTGKS4", + "amount": "5.0000000" + }, + "tx_hash": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "ledger_close_time": "2023-11-05 19:05:48 +0000 UTC", + "time": "2023-11-05T21:05:57+02:00", + "message": "a payment has received on bridge Stellar account" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "event_action": "transfer_initiated", + "event_kind": "event", + "category": "transfer", + "metadata": { + "type": "deposit" + }, + "time": "2023-11-05T21:05:57+02:00", + "message": "a transfer has initiated" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "event_action": "refund_proposed", + "event_kind": "event", + "category": "refund", + "metadata": { + "reason": "memo is not properly formatted" + }, + "time": "2023-11-05T21:06:00+02:00", + "message": "a refund has proposed due to memo is not properly formatted" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "event_action": "event_refund_tx_ready_received", + "event_kind": "event", + "category": "refund", + "time": "2023-11-05T21:06:12+02:00", + "message": "found RefundTransactionReady event" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "event_action": "stellar_transaction_submitted", + "event_kind": "event", + "category": "vault", + "metadata": { + "result_tx_id": "161c06d9ebd518beee0147c5e9e8b67c851f1c443b30444aff415668e76b09de" + }, + "time": "2023-11-05T21:06:16+02:00", + "message": "the transaction submitted to the Stellar network, and its unique identifier is 161c06d9ebd518beee0147c5e9e8b67c851f1c443b30444aff415668e76b09de" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "event_action": "refund_completed", + "event_kind": "event", + "category": "refund", + "time": "2023-11-05T21:06:18+02:00", + "message": "the transaction has refunded" + }, + { + "level": "info", + "version": 1, + "source": { + "Instance_public_key": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Bridge_wallet_address": "GBD3PXJEQOCQ5VR2JSMFNXYBBQF5RDEZP5GMTXDYZWMNZQJHR6HFX3AJ", + "Stellar_network": "testnet", + "Tfchain_url": "ws://localhost:9944" + }, + "trace_id": "7f0406ad7b8d4f0de6dade19eb3979ef93857a56c6daa4bf9f2b0bb22a21d84f", + "event_action": "transfer_completed", + "event_kind": "event", + "category": "transfer", + "metadata": { + "outcome": "refunded" + }, + "time": "2023-11-05T21:06:18+02:00", + "message": "the transfer has completed" + } +] +``` diff --git a/bridge/docs/readme.md b/bridge/docs/readme.md index 65eb72780..66e030883 100644 --- a/bridge/docs/readme.md +++ b/bridge/docs/readme.md @@ -37,4 +37,8 @@ Refer to [production](./production.md) for more information on how to setup a pr When you have setup the bridge in either development or production mode you can start bridging. -See [bridging](./bridging.md) for more information on how to bridge. \ No newline at end of file +See [bridging](./bridging.md) for more information on how to bridge. + +## Log schema +Bridge validators use simple event log for the sake of improving observability and perform tracing on workflows and data. +you can find more about the log schema and how it can improve the observability of the system in [the bride observability document](./observability.md). diff --git a/bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml b/bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml index 3f81449dd..59581355e 100644 --- a/bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml +++ b/bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: tfchainbridge description: Bridge for TFT between Tfchain Stellar type: application -version: 2.6.0-rc1 -appVersion: '2.6.0-rc1' +version: 2.9.0 +appVersion: '2.9.0' diff --git a/bridge/tfchain_bridge/go.mod b/bridge/tfchain_bridge/go.mod index 9e95a6ebb..da1ebb8a0 100644 --- a/bridge/tfchain_bridge/go.mod +++ b/bridge/tfchain_bridge/go.mod @@ -1,4 +1,4 @@ -module github.com/threefoldtech/tfchain_bridge +module github.com/threefoldtech/tfchain/bridge/tfchain_bridge go 1.17 @@ -52,4 +52,4 @@ require ( gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) -replace github.com/threefoldtech/tfchain/clients/tfchain-client-go => ../../clients/tfchain-client-go \ No newline at end of file +replace github.com/threefoldtech/tfchain/clients/tfchain-client-go => ../../clients/tfchain-client-go diff --git a/bridge/tfchain_bridge/main.go b/bridge/tfchain_bridge/main.go index 43fba8724..f8f677567 100644 --- a/bridge/tfchain_bridge/main.go +++ b/bridge/tfchain_bridge/main.go @@ -7,11 +7,11 @@ import ( "syscall" "time" - "github.com/rs/zerolog" "github.com/rs/zerolog/log" flag "github.com/spf13/pflag" - "github.com/threefoldtech/tfchain_bridge/pkg" - "github.com/threefoldtech/tfchain_bridge/pkg/bridge" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/bridge" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/logger" ) func main() { @@ -30,12 +30,7 @@ func main() { flag.Parse() - log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout}) - zerolog.SetGlobalLevel(zerolog.InfoLevel) - if debug { - zerolog.SetGlobalLevel(zerolog.DebugLevel) - log.Debug().Msg("debug mode enabled") - } + logger.InitLogger(debug) ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -43,23 +38,46 @@ func main() { timeout, timeoutCancel := context.WithTimeout(ctx, time.Second*15) defer timeoutCancel() - br, err := bridge.NewBridge(timeout, bridgeCfg) + br, address, err := bridge.NewBridge(timeout, bridgeCfg) if err != nil { - panic(err) + log.Fatal(). + Err(err). + Str("event_action", "bridge_init_aborted"). + Str("event_kind", "error"). + Str("category", "availability"). + Msg("the bridge instance cannot be started") + } + sourceLogEntry := logger.SourceCommonLogEntry{ + Instance_public_key: address, + Bridge_wallet_address: bridgeCfg.StellarBridgeAccount, + Stellar_network: bridgeCfg.StellarNetwork, + Tfchain_url: bridgeCfg.TfchainURL, } + log.Logger = log.Logger.With().Interface("source", sourceLogEntry).Logger() + sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) go func() { - log.Info().Msg("awaiting signal") + log.Debug().Msg("awaiting signal") <-sigs - log.Info().Msg("shutting now") + log.Debug().Msg("shutting now") cancel() }() if err = br.Start(ctx); err != nil && err != context.Canceled { - log.Fatal().Err(err).Msg("exited unexpectedly") + log.Fatal(). + Err(err). + Str("event_action", "bridge_unexpectedly_exited"). + Str("event_kind", "error"). + Str("category", "availability"). + Msg("the bridge instance has exited unexpectedly") } + log.Info(). + Str("event_action", "bridge_stopped"). + Str("event_kind", "event"). + Str("category", "availability"). + Msg("the bridge instance has stopped") } diff --git a/bridge/tfchain_bridge/pkg/bridge/bridge.go b/bridge/tfchain_bridge/pkg/bridge/bridge.go index 6dc7c69cb..92c9d48d7 100644 --- a/bridge/tfchain_bridge/pkg/bridge/bridge.go +++ b/bridge/tfchain_bridge/pkg/bridge/bridge.go @@ -2,16 +2,20 @@ package bridge import ( "context" + "strconv" + "time" "github.com/pkg/errors" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" - "github.com/threefoldtech/tfchain_bridge/pkg" - "github.com/threefoldtech/tfchain_bridge/pkg/stellar" - subpkg "github.com/threefoldtech/tfchain_bridge/pkg/substrate" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/stellar" + subpkg "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/substrate" ) const ( - BridgeNetwork = "stellar" + BridgeNetwork = "stellar" + MinimumBalance = 0 ) // Bridge is a high lvl structure which listens on contract events and bridge-related @@ -24,20 +28,20 @@ type Bridge struct { depositFee int64 } -func NewBridge(ctx context.Context, cfg pkg.BridgeConfig) (*Bridge, error) { +func NewBridge(ctx context.Context, cfg pkg.BridgeConfig) (*Bridge, string, error) { subClient, err := subpkg.NewSubstrateClient(cfg.TfchainURL, cfg.TfchainSeed) if err != nil { - return nil, err + return nil, "", err } blockPersistency, err := pkg.InitPersist(cfg.PersistencyFile) if err != nil { - return nil, err + return nil, "", err } wallet, err := stellar.NewStellarWallet(ctx, &cfg.StellarConfig) if err != nil { - return nil, err + return nil, "", err } if cfg.RescanBridgeAccount { @@ -46,18 +50,18 @@ func NewBridge(ctx context.Context, cfg pkg.BridgeConfig) (*Bridge, error) { // and mint accordingly err = blockPersistency.SaveStellarCursor("0") if err != nil { - return nil, err + return nil, "", err } err = blockPersistency.SaveHeight(0) if err != nil { - return nil, err + return nil, "", err } } // fetch the configured depositfee depositFee, err := subClient.GetDepositFee() if err != nil { - return nil, err + return nil, "", err } bridge := &Bridge{ @@ -67,39 +71,82 @@ func NewBridge(ctx context.Context, cfg pkg.BridgeConfig) (*Bridge, error) { config: &cfg, depositFee: depositFee, } + // stat deposit fee? + return bridge, wallet.GetKeypair().Address(), nil +} + +func (bridge *Bridge) preCheckBalance(ctx context.Context) error { + balance, err := bridge.wallet.StatBridgeAccount() - return bridge, nil + if err != nil { + return errors.Wrap(err, "can't retrieve the wallet balance at the moment") + } + s, err := strconv.ParseFloat(balance, 64) + if err != nil { + return errors.Wrap(err, "can't parse the wallet balance") + } + + if s < MinimumBalance { + return errors.Errorf("wallet balance insufficient: %s", balance) + } + return nil } func (bridge *Bridge) Start(ctx context.Context) error { + // pre-check wallet balance + if err := bridge.preCheckBalance(ctx); err != nil { + return err + } + + log.Info(). + Str("event_action", "bridge_started"). + Str("event_kind", "event"). + Str("category", "availability"). + Dict("metadata", zerolog.Dict(). + Bool("rescan_flag", bridge.config.RescanBridgeAccount). + Int64("deposit_fee", bridge.depositFee)). + Msg("the bridge instance has started") height, err := bridge.blockPersistency.GetHeight() if err != nil { - return errors.Wrap(err, "failed to get block height from persistency") + return errors.Wrap(err, "an error occurred while reading block height from persistency") } - log.Info().Msg("starting stellar subscription...") + log.Debug(). + Msg("The Stellar subscription is starting") stellarSub := make(chan stellar.MintEventSubscription) go func() { defer close(stellarSub) if err = bridge.wallet.StreamBridgeStellarTransactions(ctx, stellarSub, height.StellarCursor); err != nil { - log.Fatal().Msgf("failed to monitor bridge account %s", err.Error()) + log.Fatal(). + Err(err). + Str("event_action", "bridge_unexpectedly_exited"). + Str("event_kind", "error"). + Str("category", "availability"). + Msg("the bridge instance has exited unexpectedly") } }() - log.Info().Msg("starting tfchain subscription...") + log.Debug(). + Msg("The TFChain subscription is starting") tfchainSub := make(chan subpkg.EventSubscription) go func() { defer close(tfchainSub) if err := bridge.subClient.SubscribeTfchainBridgeEvents(ctx, tfchainSub); err != nil { - log.Fatal().Msgf("failed to subscribe to tfchain %s", err.Error()) + log.Fatal(). + Err(err). + Str("event_action", "bridge_unexpectedly_exited"). + Str("event_kind", "error"). + Str("category", "availability"). + Msg("the bridge instance has exited unexpectedly") } }() + afterMinute := time.After(60 * time.Second) for { select { case data := <-tfchainSub: if data.Err != nil { - return errors.Wrap(err, "failed to process events") + return errors.Wrap(err, "failed to get tfchain events") } for _, withdrawCreatedEvent := range data.Events.WithdrawCreatedEvents { err := bridge.handleWithdrawCreated(ctx, withdrawCreatedEvent) @@ -108,13 +155,13 @@ func (bridge *Bridge) Start(ctx context.Context) error { if errors.Is(err, pkg.ErrTransactionAlreadyBurned) || errors.Is(err, pkg.ErrTransactionAlreadyMinted) { continue } - return errors.Wrap(err, "failed to handle withdraw created") + return errors.Wrap(err, "an error occurred while handling WithdrawCreatedEvents") } } for _, withdrawExpiredEvent := range data.Events.WithdrawExpiredEvents { err := bridge.handleWithdrawExpired(ctx, withdrawExpiredEvent) if err != nil { - return errors.Wrap(err, "failed to handle withdraw expired") + return errors.Wrap(err, "an error occurred while handling WithdrawExpiredEvents") } } for _, withdawReadyEvent := range data.Events.WithdrawReadyEvents { @@ -123,14 +170,13 @@ func (bridge *Bridge) Start(ctx context.Context) error { if errors.Is(err, pkg.ErrTransactionAlreadyBurned) { continue } - return errors.Wrap(err, "failed to handle withdraw ready") + return errors.Wrap(err, "an error occurred while handling WithdrawReadyEvents") } - log.Info().Uint64("ID", withdawReadyEvent.ID).Msg("withdraw processed") } for _, refundExpiredEvent := range data.Events.RefundExpiredEvents { err := bridge.handleRefundExpired(ctx, refundExpiredEvent) if err != nil { - return errors.Wrap(err, "failed to handle refund expired") + return errors.Wrap(err, "an error occurred while handling RefundExpiredEvents") } } for _, refundReadyEvent := range data.Events.RefundReadyEvents { @@ -139,13 +185,12 @@ func (bridge *Bridge) Start(ctx context.Context) error { if errors.Is(err, pkg.ErrTransactionAlreadyRefunded) { continue } - return errors.Wrap(err, "failed to handle refund ready") + return errors.Wrap(err, "an error occurred while handling RefundReadyEvents") } - log.Info().Str("hash", refundReadyEvent.Hash).Msg("refund processed") } case data := <-stellarSub: if data.Err != nil { - return errors.Wrap(err, "failed to get mint events") + return errors.Wrap(err, "failed to get stellar payments") } for _, mEvent := range data.Events { @@ -154,12 +199,26 @@ func (bridge *Bridge) Start(ctx context.Context) error { if errors.Is(err, pkg.ErrTransactionAlreadyMinted) { continue } - return errors.Wrap(err, "failed to handle mint") + return errors.Wrap(err, "an error occurred while processing the payment received") // mint could be initiated already but there is a problem saving the cursor } - log.Info().Str("hash", mEvent.Tx.Hash).Msg("mint processed") } + time.Sleep(0) + case <-afterMinute: + balance, err := bridge.wallet.StatBridgeAccount() + if err != nil { + log.Logger.Warn().Err(err).Msgf("Can't retrieve the wallet balance at the moment") + } + log.Logger.Info(). + Str("event_action", "wallet_balance"). + Str("event_kind", "metric"). + Str("category", "vault"). + Dict("metadata", zerolog.Dict(). + Str("tft", balance)). + Msgf("TFT Balance is %s", balance) + afterMinute = time.After(60 * time.Second) case <-ctx.Done(): return ctx.Err() } + time.Sleep(1 * time.Second) } } diff --git a/bridge/tfchain_bridge/pkg/bridge/mint.go b/bridge/tfchain_bridge/pkg/bridge/mint.go index 38479d470..244f001b8 100644 --- a/bridge/tfchain_bridge/pkg/bridge/mint.go +++ b/bridge/tfchain_bridge/pkg/bridge/mint.go @@ -7,14 +7,18 @@ import ( "strings" "github.com/pkg/errors" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" hProtocol "github.com/stellar/go/protocols/horizon" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg" + _logger "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/logger" substrate "github.com/threefoldtech/tfchain/clients/tfchain-client-go" - "github.com/threefoldtech/tfchain_bridge/pkg" ) // mint handler for stellar func (bridge *Bridge) mint(ctx context.Context, senders map[string]*big.Int, tx hProtocol.Transaction) error { + logger := log.Logger.With().Str("trace_id", tx.ID).Logger() + minted, err := bridge.subClient.IsMintedAlready(tx.Hash) if err != nil { if !errors.Is(err, substrate.ErrMintTransactionNotFound) { @@ -23,18 +27,30 @@ func (bridge *Bridge) mint(ctx context.Context, senders map[string]*big.Int, tx } if minted { - log.Info().Str("tx_id", tx.Hash).Msg("transaction is already minted") + logger.Info(). + Str("event_action", "mint_skipped"). + Str("event_kind", "event"). + Str("category", "mint"). + Msg("the transaction has already been minted") return pkg.ErrTransactionAlreadyMinted } if len(senders) == 0 { return nil } - + logger.Info(). + Str("event_action", "transfer_initiated"). + Str("event_kind", "event"). + Str("category", "transfer"). + Dict("metadata", zerolog.Dict(). + Str("type", "deposit")). + Msg("a transfer has initiated") + + // only one payment in transaction is allowed if len(senders) > 1 { - log.Info().Msgf("cannot process mint transaction, multiple senders found, refunding now") + ctx = _logger.WithRefundReason(ctx, "multiple senders found") for sender, depositAmount := range senders { - return bridge.refund(context.Background(), sender, depositAmount.Int64(), tx) + return bridge.refund(ctx, sender, depositAmount.Int64(), tx) // so how this should refund the multiple senders ? } } @@ -46,37 +62,35 @@ func (bridge *Bridge) mint(ctx context.Context, senders map[string]*big.Int, tx } if tx.Memo == "" { - log.Info().Str("tx_id", tx.Hash).Msg("transaction has empty memo, refunding now") - return bridge.refund(context.Background(), receiver, depositedAmount.Int64(), tx) + ctx = _logger.WithRefundReason(ctx, "no memo in transaction") + return bridge.refund(ctx, receiver, depositedAmount.Int64(), tx) } if tx.MemoType == "return" { - log.Debug().Str("tx_id", tx.Hash).Msg("transaction has a return memo hash, skipping this transaction") + logger.Debug().Str("tx_id", tx.Hash).Msg("the transaction is being skipped because it contains a return memo") // save cursor cursor := tx.PagingToken() err := bridge.blockPersistency.SaveStellarCursor(cursor) if err != nil { - log.Err(err).Msg("error while saving cursor") - return err + return errors.Wrap(err, "an error occurred while saving stellar cursor") } - log.Info().Msg("stellar cursor saved") return nil } - // if the deposited amount is lower than the depositfee, trigger a refund + // if the deposited amount is lower than the deposit fee, trigger a refund if depositedAmount.Cmp(big.NewInt(bridge.depositFee)) <= 0 { - return bridge.refund(context.Background(), receiver, depositedAmount.Int64(), tx) + ctx = _logger.WithRefundReason(ctx, "insufficient deposit amount to cover fee") + return bridge.refund(ctx, receiver, depositedAmount.Int64(), tx) } destinationSubstrateAddress, err := bridge.getSubstrateAddressFromMemo(tx.Memo) if err != nil { - log.Info().Msgf("error while decoding tx memo: %s", err.Error()) + logger.Debug().Err(err).Msg("there was an issue decoding the memo for the transaction") // memo is not formatted correctly, issue a refund - return bridge.refund(context.Background(), receiver, depositedAmount.Int64(), tx) + ctx = _logger.WithRefundReason(ctx, "memo is not properly formatted") + return bridge.refund(ctx, receiver, depositedAmount.Int64(), tx) } - log.Info().Int64("amount", depositedAmount.Int64()).Str("tx_id", tx.Hash).Msgf("target substrate address to mint on: %s", destinationSubstrateAddress) - accountID, err := substrate.FromAddress(destinationSubstrateAddress) if err != nil { return err @@ -87,11 +101,20 @@ func (bridge *Bridge) mint(ctx context.Context, senders map[string]*big.Int, tx return err } + logger.Info(). + Str("event_action", "mint_proposed"). + Str("event_kind", "event"). + Str("category", "mint"). + Dict("metadata", zerolog.Dict(). + Int64("amount", depositedAmount.Int64()). + Str("tx_id", tx.Hash). + Str("to", destinationSubstrateAddress)). + Msgf("a mint has proposed with the target substrate address of %s", destinationSubstrateAddress) + // save cursor cursor := tx.PagingToken() if err = bridge.blockPersistency.SaveStellarCursor(cursor); err != nil { - log.Err(err).Msgf("error while saving cursor") - return err + return errors.Wrap(err, "an error occurred while saving stellar cursor") } return nil diff --git a/bridge/tfchain_bridge/pkg/bridge/refund.go b/bridge/tfchain_bridge/pkg/bridge/refund.go index ffa2e055a..f713595ac 100644 --- a/bridge/tfchain_bridge/pkg/bridge/refund.go +++ b/bridge/tfchain_bridge/pkg/bridge/refund.go @@ -3,10 +3,13 @@ package bridge import ( "context" + "github.com/pkg/errors" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" hProtocol "github.com/stellar/go/protocols/horizon" - "github.com/threefoldtech/tfchain_bridge/pkg" - subpkg "github.com/threefoldtech/tfchain_bridge/pkg/substrate" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg" + _logger "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/logger" + subpkg "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/substrate" ) // refund handler for stellar @@ -22,22 +25,25 @@ func (bridge *Bridge) refund(ctx context.Context, destination string, amount int // save cursor cursor := tx.PagingToken() - log.Info().Msgf("saving cursor now %s", cursor) - if err = bridge.blockPersistency.SaveStellarCursor(cursor); err != nil { - log.Error().Msgf("error while saving cursor: %s", err.Error()) - return err - } - return nil + err = bridge.blockPersistency.SaveStellarCursor(cursor) + // no need to check for err, if err is nil, Wrap returns nil. + return errors.Wrap(err, "an error occurred while saving stellar cursor") } func (bridge *Bridge) handleRefundExpired(ctx context.Context, refundExpiredEvent subpkg.RefundTransactionExpiredEvent) error { + logger := log.Logger.With().Str("trace_id", refundExpiredEvent.Hash).Logger() + refunded, err := bridge.subClient.IsRefundedAlready(refundExpiredEvent.Hash) if err != nil { return err } if refunded { - log.Info().Str("tx_id", refundExpiredEvent.Hash).Msg("tx is refunded already, skipping...") + logger.Info(). + Str("event_action", "refund_skipped"). + Str("event_kind", "event"). + Str("category", "refund"). + Msg("the transaction has already been refunded") return nil } @@ -46,17 +52,35 @@ func (bridge *Bridge) handleRefundExpired(ctx context.Context, refundExpiredEven return err } - return bridge.subClient.RetryCreateRefundTransactionOrAddSig(ctx, refundExpiredEvent.Hash, refundExpiredEvent.Target, int64(refundExpiredEvent.Amount), signature, bridge.wallet.GetKeypair().Address(), sequenceNumber) + err = bridge.subClient.RetryCreateRefundTransactionOrAddSig(ctx, refundExpiredEvent.Hash, refundExpiredEvent.Target, int64(refundExpiredEvent.Amount), signature, bridge.wallet.GetKeypair().Address(), sequenceNumber) + if err != nil { + return err + } + + reason := _logger.GetRefundReason(ctx) + logger.Info(). + Str("event_action", "refund_proposed"). + Str("event_kind", "event"). + Str("category", "refund"). + Dict("metadata", zerolog.Dict(). + Str("reason", reason)). + Msgf("a refund has proposed due to %s", reason) + return nil } func (bridge *Bridge) handleRefundReady(ctx context.Context, refundReadyEvent subpkg.RefundTransactionReadyEvent) error { + logger := log.Logger.With().Str("trace_id", refundReadyEvent.Hash).Logger() refunded, err := bridge.subClient.IsRefundedAlready(refundReadyEvent.Hash) if err != nil { return err } if refunded { - log.Info().Str("tx_id", refundReadyEvent.Hash).Msg("tx is refunded already, skipping...") + logger.Info(). + Str("event_action", "refund_skipped"). + Str("event_kind", "event"). + Str("category", "refund"). + Msg("the transaction has already been refunded") return pkg.ErrTransactionAlreadyRefunded } @@ -70,5 +94,22 @@ func (bridge *Bridge) handleRefundReady(ctx context.Context, refundReadyEvent su return err } - return bridge.subClient.RetrySetRefundTransactionExecutedTx(ctx, refund.TxHash) + err = bridge.subClient.RetrySetRefundTransactionExecutedTx(ctx, refund.TxHash) + if err != nil { + return err + } + logger.Info(). + Str("event_action", "refund_completed"). + Str("event_kind", "event"). + Str("category", "refund"). + Msg("the transaction has refunded") + logger.Info(). + Str("event_action", "transfer_completed"). + Str("event_kind", "event"). + Str("category", "transfer"). + Dict("metadata", zerolog.Dict(). + Str("outcome", "refunded")). + Msg("the transfer has completed") + + return nil } diff --git a/bridge/tfchain_bridge/pkg/bridge/withdraw.go b/bridge/tfchain_bridge/pkg/bridge/withdraw.go index 0dc82961b..55c4a5450 100644 --- a/bridge/tfchain_bridge/pkg/bridge/withdraw.go +++ b/bridge/tfchain_bridge/pkg/bridge/withdraw.go @@ -7,23 +7,39 @@ import ( "math/big" "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg" + subpkg "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg/substrate" substrate "github.com/threefoldtech/tfchain/clients/tfchain-client-go" - "github.com/threefoldtech/tfchain_bridge/pkg" - subpkg "github.com/threefoldtech/tfchain_bridge/pkg/substrate" ) func (bridge *Bridge) handleWithdrawCreated(ctx context.Context, withdraw subpkg.WithdrawCreatedEvent) error { + logger := log.Logger.With().Str("trace_id", fmt.Sprint(withdraw.ID)).Logger() + burned, err := bridge.subClient.IsBurnedAlready(types.U64(withdraw.ID)) if err != nil { return err } if burned { - log.Info().Uint64("ID", uint64(withdraw.ID)).Msgf("tx is burned already, skipping...") + logger.Info(). + Str("event_action", "withdraw_skipped"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Msg("the withdraw transaction has already been processed") return pkg.ErrTransactionAlreadyBurned } + logger.Info(). + Str("event_action", "transfer_initiated"). + Str("event_kind", "event"). + Str("category", "transfer"). + Dict("metadata", zerolog.Dict(). + Str("type", "burn")). + Msg("a transfer has initiated") + + // check if it can hold tft : TODO check trust line TFT limit if it can receive the amount if err := bridge.wallet.CheckAccount(withdraw.Target); err != nil { return bridge.handleBadWithdraw(ctx, withdraw) } @@ -34,17 +50,74 @@ func (bridge *Bridge) handleWithdrawCreated(ctx context.Context, withdraw subpkg } log.Debug().Msgf("stellar account sequence number: %d", sequenceNumber) - return bridge.subClient.RetryProposeWithdrawOrAddSig(ctx, withdraw.ID, withdraw.Target, big.NewInt(int64(withdraw.Amount)), signature, bridge.wallet.GetKeypair().Address(), sequenceNumber) + err = bridge.subClient.RetryProposeWithdrawOrAddSig(ctx, withdraw.ID, withdraw.Target, big.NewInt(int64(withdraw.Amount)), signature, bridge.wallet.GetKeypair().Address(), sequenceNumber) + if err != nil { + return nil + } + + logger.Info(). + Str("event_action", "withdraw_proposed"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Dict("metadata", zerolog.Dict(). + Uint64("amount", withdraw.Amount). + Str("tx_id", fmt.Sprint(withdraw.ID)). + Str("to", withdraw.Target)). + Msgf("a withdraw has proposed with the target stellar address of %s", withdraw.Target) + return nil } func (bridge *Bridge) handleWithdrawExpired(ctx context.Context, withdrawExpired subpkg.WithdrawExpiredEvent) error { - ok, source := withdrawExpired.Source.Unwrap() + logger := log.Logger.With().Str("trace_id", fmt.Sprint(withdrawExpired.ID)).Logger() + + ok, source := withdrawExpired.Source.Unwrap() // transfers from the previous runtime before 147 has no source address if !ok { - // log and skip + // This path is intended solely for processing transfers that lack a source address + // and should be retained until the network has been verified to have no transfers from the previous runtime before 147. + + if err := bridge.wallet.CheckAccount(withdrawExpired.Target); err != nil { + logger.Warn(). + Str("event_action", "transfer_failed"). + Str("event_kind", "alert"). + Str("category", "transfer"). + Dict("metadata", zerolog.Dict(). + Str("reason", err.Error())). + Str("type", "burn"). + Msg("a withdraw failed with no way to refund!") + return bridge.subClient.RetrySetWithdrawExecuted(ctx, withdrawExpired.ID) + } + + signature, sequenceNumber, err := bridge.wallet.CreatePaymentAndReturnSignature(ctx, withdrawExpired.Target, withdrawExpired.Amount, withdrawExpired.ID) + if err != nil { + return err + } + log.Debug().Msgf("stellar account sequence number: %d", sequenceNumber) + + err = bridge.subClient.RetryProposeWithdrawOrAddSig(ctx, withdrawExpired.ID, withdrawExpired.Target, big.NewInt(int64(withdrawExpired.Amount)), signature, bridge.wallet.GetKeypair().Address(), sequenceNumber) + if err != nil { + return err + } + logger.Info(). + Str("event_action", "transfer_initiated"). + Str("event_kind", "event"). + Str("category", "transfer"). + Dict("metadata", zerolog.Dict(). + Str("type", "burn")). + Msg("a transfer has initiated") + logger.Info(). + Str("event_action", "withdraw_proposed"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Dict("metadata", zerolog.Dict(). + Uint64("amount", withdrawExpired.Amount). + Str("tx_id", fmt.Sprint(withdrawExpired.ID)). + Str("to", withdrawExpired.Target)). + Msgf("a withdraw has proposed with the target stellar address of %s", withdrawExpired.Target) return nil } + // refundable path (starting from tfchain runtime 147) return bridge.handleWithdrawCreated(ctx, subpkg.WithdrawCreatedEvent{ ID: withdrawExpired.ID, Source: source, @@ -54,13 +127,19 @@ func (bridge *Bridge) handleWithdrawExpired(ctx context.Context, withdrawExpired } func (bridge *Bridge) handleWithdrawReady(ctx context.Context, withdrawReady subpkg.WithdrawReadyEvent) error { + logger := log.Logger.With().Str("trace_id", fmt.Sprint(withdrawReady.ID)).Logger() + // ctx_with_trace_id := context.WithValue(ctx, "trace_id", fmt.Sprint(withdrawReady.ID)) burned, err := bridge.subClient.IsBurnedAlready(types.U64(withdrawReady.ID)) if err != nil { return err } if burned { - log.Info().Uint64("ID", uint64(withdrawReady.ID)).Msg("tx is burned already, skipping...") + logger.Info(). + Str("event_action", "withdraw_skipped"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Msg("the withdraw transaction has already been processed") return pkg.ErrTransactionAlreadyBurned } @@ -70,21 +149,41 @@ func (bridge *Bridge) handleWithdrawReady(ctx context.Context, withdrawReady sub } if len(burnTx.Signatures) == 0 { - log.Info().Msg("found 0 signatures, aborting") return pkg.ErrNoSignatures } // todo add memo hash - err = bridge.wallet.CreatePaymentWithSignaturesAndSubmit(ctx, burnTx.Target, uint64(burnTx.Amount), "", burnTx.Signatures, int64(burnTx.SequenceNumber)) + err = bridge.wallet.CreatePaymentWithSignaturesAndSubmit(ctx, burnTx.Target, uint64(burnTx.Amount), fmt.Sprint(withdrawReady.ID), burnTx.Signatures, int64(burnTx.SequenceNumber)) if err != nil { - return err + // we can log and skip here as we could depend on tfcahin retry mechanism + // to notify us again about related burn tx + logger.Info(). + Str("event_action", "withdraw_postponed"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Dict("metadata", zerolog.Dict(). + Str("reason", err.Error())). + Msgf("the withdraw has been postponed due to a problem in sending this transaction to the stellar network. error was %s", err.Error()) + return nil } + logger.Info(). + Str("event_action", "withdraw_completed"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Msg("the withdraw has proceed") + logger.Info(). + Str("event_action", "transfer_completed"). + Str("event_kind", "event"). + Str("category", "transfer"). + Dict("metadata", zerolog.Dict(). + Str("outcome", "bridged")). + Msg("the transfer has completed") return bridge.subClient.RetrySetWithdrawExecuted(ctx, withdrawReady.ID) } func (bridge *Bridge) handleBadWithdraw(ctx context.Context, withdraw subpkg.WithdrawCreatedEvent) error { - log.Info().Uint64("ID", uint64(withdraw.ID)).Msg("tx is an invalid burn transaction, minting on chain again...") + logger := log.Logger.With().Str("trace_id", fmt.Sprint(withdraw.ID)).Logger() mintID := fmt.Sprintf("refund-%d", withdraw.ID) minted, err := bridge.subClient.IsMintedAlready(mintID) @@ -95,16 +194,27 @@ func (bridge *Bridge) handleBadWithdraw(ctx context.Context, withdraw subpkg.Wit } if minted { - log.Debug().Str("txHash", mintID).Msg("transaction is already minted") + logger.Info(). + Str("event_action", "mint_skipped"). + Str("event_kind", "event"). + Str("category", "mint"). + Msg("the transaction has already been minted") return pkg.ErrTransactionAlreadyMinted } - log.Info().Str("mintID", mintID).Msg("going to propose mint transaction") err = bridge.subClient.RetryProposeMintOrVote(ctx, mintID, substrate.AccountID(withdraw.Source), big.NewInt(int64(withdraw.Amount))) if err != nil { return err } - log.Info().Uint64("ID", uint64(withdraw.ID)).Msg("setting invalid burn transaction as executed") + logger.Info(). + Str("event_action", "mint_proposed"). + Str("event_kind", "event"). + Str("category", "mint"). + Dict("metadata", zerolog.Dict(). + Int64("amount", int64(withdraw.Amount)). + Str("tx_id", fmt.Sprint(withdraw.ID)). + Str("to", withdraw.Source.ToHexString())). + Msgf("a mint has proposed with the target substrate address of %s", withdraw.Source.ToHexString()) return bridge.subClient.RetrySetWithdrawExecuted(ctx, withdraw.ID) } diff --git a/bridge/tfchain_bridge/pkg/logger/logger.go b/bridge/tfchain_bridge/pkg/logger/logger.go new file mode 100644 index 000000000..e4b371818 --- /dev/null +++ b/bridge/tfchain_bridge/pkg/logger/logger.go @@ -0,0 +1,45 @@ +package logger + +import ( + "context" + "os" + + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" +) + +const VERSION = 1 + +func InitLogger(isDebug bool) { + log.Logger = zerolog.New(os.Stdout).With().Timestamp().Uint("version", VERSION).Logger() + logLevel := zerolog.InfoLevel + if isDebug { + logLevel = zerolog.DebugLevel + log.Logger = log.Logger.With().Caller().Logger() + } + + zerolog.SetGlobalLevel(logLevel) +} + +type SourceCommonLogEntry struct { + Instance_public_key string + Bridge_wallet_address string + Stellar_network string + Tfchain_url string +} + +type refundReasonKey struct{} + +func WithRefundReason(ctx context.Context, reason string) context.Context { + return context.WithValue(ctx, refundReasonKey{}, reason) +} + +func GetRefundReason(ctx context.Context) string { + reason := ctx.Value(refundReasonKey{}) + if reason == nil { + return "" + } + return reason.(string) +} + +// TODO: event log interfaces diff --git a/bridge/tfchain_bridge/pkg/persistency.go b/bridge/tfchain_bridge/pkg/persistency.go index da5c8d0a0..8d68beee6 100644 --- a/bridge/tfchain_bridge/pkg/persistency.go +++ b/bridge/tfchain_bridge/pkg/persistency.go @@ -3,6 +3,9 @@ package pkg import ( "encoding/json" "os" + + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" ) type Blockheight struct { @@ -37,7 +40,18 @@ func (b *ChainPersistency) SaveStellarCursor(cursor string) error { } blockheight.StellarCursor = cursor - return b.Save(blockheight) + err = b.Save(blockheight) + if err != nil { + return err + } + log.Debug(). + Str("event_action", "stellar_cursor_saved"). + Str("event_kind", "event"). + Str("category", "persistency"). + Dict("metadata", zerolog.Dict(). + Str("cursor", cursor)). + Msg("the Stellar cursor has been saved") + return nil } func (b *ChainPersistency) GetHeight() (*Blockheight, error) { diff --git a/bridge/tfchain_bridge/pkg/stellar/stellar.go b/bridge/tfchain_bridge/pkg/stellar/stellar.go index 71380146c..b498e02a2 100644 --- a/bridge/tfchain_bridge/pkg/stellar/stellar.go +++ b/bridge/tfchain_bridge/pkg/stellar/stellar.go @@ -11,6 +11,7 @@ import ( "time" "github.com/pkg/errors" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" "github.com/stellar/go/amount" "github.com/stellar/go/clients/horizonclient" @@ -20,8 +21,8 @@ import ( horizoneffects "github.com/stellar/go/protocols/horizon/effects" "github.com/stellar/go/protocols/horizon/operations" "github.com/stellar/go/txnbuild" + "github.com/threefoldtech/tfchain/bridge/tfchain_bridge/pkg" substrate "github.com/threefoldtech/tfchain/clients/tfchain-client-go" - "github.com/threefoldtech/tfchain_bridge/pkg" ) const ( @@ -41,6 +42,8 @@ type StellarWallet struct { sequenceNumber int64 } +type TraceIdKey struct{} + func NewStellarWallet(ctx context.Context, config *pkg.StellarConfig) (*StellarWallet, error) { kp, err := keypair.ParseFull(config.StellarSeed) @@ -92,6 +95,8 @@ func (w *StellarWallet) CreatePaymentAndReturnSignature(ctx context.Context, tar } func (w *StellarWallet) CreatePaymentWithSignaturesAndSubmit(ctx context.Context, target string, amount uint64, txHash string, signatures []substrate.StellarSignature, sequenceNumber int64) error { + ctx_with_trace_id := context.WithValue(ctx, TraceIdKey{}, txHash) + txnBuild, err := w.generatePaymentOperation(amount, target, sequenceNumber) if err != nil { return err @@ -115,10 +120,11 @@ func (w *StellarWallet) CreatePaymentWithSignaturesAndSubmit(ctx context.Context } } - return w.submitTransaction(ctx, txn) + return w.submitTransaction(ctx_with_trace_id, txn) } func (w *StellarWallet) CreateRefundPaymentWithSignaturesAndSubmit(ctx context.Context, target string, amount uint64, txHash string, signatures []substrate.StellarSignature, sequenceNumber int64) error { + ctx_with_trace_id := context.WithValue(ctx, TraceIdKey{}, txHash) txnBuild, err := w.generatePaymentOperation(amount, target, sequenceNumber) if err != nil { return err @@ -152,7 +158,7 @@ func (w *StellarWallet) CreateRefundPaymentWithSignaturesAndSubmit(ctx context.C } } - return w.submitTransaction(ctx, txn) + return w.submitTransaction(ctx_with_trace_id, txn) } func (w *StellarWallet) CreateRefundAndReturnSignature(ctx context.Context, target string, amount uint64, message string) (string, uint64, error) { @@ -215,7 +221,7 @@ func (w *StellarWallet) generatePaymentOperation(amount uint64, destination stri sourceAccount, err := w.getAccountDetails(w.config.StellarBridgeAccount) if err != nil { - return txnbuild.TransactionParams{}, errors.Wrap(err, "failed to get source account") + return txnbuild.TransactionParams{}, errors.Wrap(err, "an error occurred while getting source account details") } asset := w.getAssetCodeAndIssuer() @@ -252,7 +258,7 @@ func (w *StellarWallet) generatePaymentOperation(amount uint64, destination stri func (w *StellarWallet) createTransaction(ctx context.Context, txn txnbuild.TransactionParams, sign bool) (*txnbuild.Transaction, error) { tx, err := txnbuild.NewTransaction(txn) if err != nil { - return nil, errors.Wrap(err, "failed to build transaction") + return nil, errors.Wrap(err, "an error occurred while building the transaction") } if sign { @@ -261,7 +267,7 @@ func (w *StellarWallet) createTransaction(ctx context.Context, txn txnbuild.Tran if hError, ok := err.(*horizonclient.Error); ok { log.Error().Msgf("Error submitting tx %+v", hError.Problem.Extras) } - return nil, errors.Wrap(err, "failed to sign transaction with keypair") + return nil, errors.Wrap(err, "an error occurred while signing the transaction with keypair") } } @@ -271,7 +277,7 @@ func (w *StellarWallet) createTransaction(ctx context.Context, txn txnbuild.Tran func (w *StellarWallet) submitTransaction(ctx context.Context, txn *txnbuild.Transaction) error { client, err := w.getHorizonClient() if err != nil { - return errors.Wrap(err, "failed to get horizon client") + return errors.Wrap(err, "an error occurred while getting horizon client") } // Submit the transaction @@ -287,9 +293,16 @@ func (w *StellarWallet) submitTransaction(ctx context.Context, txn *txnbuild.Tra if errSequence != nil { return errSequence } - return errors.Wrap(err, "error submitting transaction") - } - log.Info().Str("hash", txResult.Hash).Msg("transaction submitted to the stellar network") + return errors.Wrap(err, "an error occurred while submitting the transaction") + } + log.Info(). + Str("trace_id", fmt.Sprint(ctx.Value("trace_id"))). + Str("event_action", "stellar_transaction_submitted"). + Str("event_kind", "event"). + Str("category", "vault"). + Dict("metadata", zerolog.Dict(). + Str("result_tx_id", txResult.ID)). + Msgf("the transaction submitted to the Stellar network, and its unique identifier is %s", txResult.ID) return nil } @@ -353,10 +366,16 @@ func (w *StellarWallet) StreamBridgeStellarTransactions(ctx context.Context, min case <-ctx.Done(): return ctx.Err() default: - log.Info().Str("account", opRequest.ForAccount).Str("horizon", client.HorizonURL).Str("cursor", opRequest.Cursor).Msgf("fetching stellar transactions") response, err := client.Transactions(opRequest) if err != nil { - log.Err(err).Msg("Error getting transactions for stellar account") + log.Logger.Warn(). + Err(err). + Str("event_action", "fetch_transactions_failed"). + Str("event_kind", "alert"). + Str("category", "stellar_monitor"). + Dict("metadata", zerolog.Dict(). + Str("cursor", opRequest.Cursor)). + Msg("encountered an error while retrieving transactions for bridge Stellar account, retrying in 5 sec") select { case <-ctx.Done(): return ctx.Err() @@ -365,6 +384,15 @@ func (w *StellarWallet) StreamBridgeStellarTransactions(ctx context.Context, min } } + log.Logger.Info(). + Str("event_action", "transactions_fetched"). + Str("event_kind", "event"). + Str("category", "stellar_monitor"). + Dict("metadata", zerolog.Dict(). + Str("cursor", opRequest.Cursor). + Int("count", len(response.Embedded.Records))). + Msg("stellar transactions fetched") + for _, tx := range response.Embedded.Records { mintEvents, err := w.processTransaction(tx) if err != nil { @@ -388,15 +416,15 @@ func (w *StellarWallet) StreamBridgeStellarTransactions(ctx context.Context, min } func (w *StellarWallet) processTransaction(tx hProtocol.Transaction) ([]MintEvent, error) { + logger := log.Logger.With().Str("trace_id", tx.ID).Logger() + if !tx.Successful { return nil, nil } - log.Info().Str("hash", tx.Hash).Msg("received transaction on bridge stellar account") effects, err := w.getTransactionEffects(tx.Hash) if err != nil { - log.Error().Str("error while fetching transaction effects:", err.Error()) - return nil, err + return nil, errors.Wrapf(err, "failed to fetch transaction effects for transaction with id is %s", tx.ID) } asset := w.getAssetCodeAndIssuer() @@ -427,23 +455,33 @@ func (w *StellarWallet) processTransaction(tx hProtocol.Transaction) ([]MintEven return nil, nil } - paymentOpation := op.(operations.Payment) - if paymentOpation.To != w.config.StellarBridgeAccount { + PaymentOperation := op.(operations.Payment) + if PaymentOperation.To != w.config.StellarBridgeAccount { continue } - parsedAmount, err := amount.ParseInt64(paymentOpation.Amount) + parsedAmount, err := amount.ParseInt64(PaymentOperation.Amount) if err != nil { continue } depositedAmount := big.NewInt(int64(parsedAmount)) - if _, ok := senders[paymentOpation.From]; !ok { - senders[paymentOpation.From] = depositedAmount + logger.Info(). + Str("event_action", "payment_received"). + Str("event_kind", "event"). + Str("category", "vault"). + Dict("metadata", zerolog.Dict(). + Str("from", PaymentOperation.From). + Str("amount", PaymentOperation.Amount)). + Str("tx_hash", PaymentOperation.TransactionHash). + Str("ledger_close_time", PaymentOperation.LedgerCloseTime.String()). + Msg("a payment has received on bridge Stellar account") + if _, ok := senders[PaymentOperation.From]; !ok { + senders[PaymentOperation.From] = depositedAmount } else { - senderAmount := senders[paymentOpation.From] + senderAmount := senders[PaymentOperation.From] senderAmount = senderAmount.Add(senderAmount, depositedAmount) - senders[paymentOpation.From] = senderAmount + senders[PaymentOperation.From] = senderAmount } } @@ -529,3 +567,19 @@ func (w *StellarWallet) getAssetCodeAndIssuer() []string { return strings.Split(TFTTest, ":") } } + +func (w *StellarWallet) StatBridgeAccount() (string, error) { + acc, err := w.getAccountDetails(w.config.StellarBridgeAccount) + if err != nil { + return "", err + } + + asset := w.getAssetCodeAndIssuer() + + for _, balance := range acc.Balances { + if balance.Code == asset[0] || balance.Issuer == asset[1] { + return balance.Balance, nil + } + } + return "", errors.New("source account does not have trustline") +} diff --git a/bridge/tfchain_bridge/pkg/substrate/events.go b/bridge/tfchain_bridge/pkg/substrate/events.go index 44be57afd..466ac8655 100644 --- a/bridge/tfchain_bridge/pkg/substrate/events.go +++ b/bridge/tfchain_bridge/pkg/substrate/events.go @@ -2,11 +2,15 @@ package substrate import ( "context" + "fmt" + "strings" "time" "github.com/cenkalti/backoff/v4" "github.com/centrifuge/go-substrate-rpc-client/v4/types" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "github.com/stellar/go/support/errors" substrate "github.com/threefoldtech/tfchain/clients/tfchain-client-go" ) @@ -60,14 +64,15 @@ type RefundTransactionExpiredEvent struct { } func (client *SubstrateClient) SubscribeTfchainBridgeEvents(ctx context.Context, eventChannel chan<- EventSubscription) error { + cl, _, err := client.GetClient() if err != nil { - log.Fatal().Msg("failed to get client") + return errors.Wrap(err, "an error occurred while getting substrate client") } chainHeadsSub, err := cl.RPC.Chain.SubscribeFinalizedHeads() if err != nil { - log.Fatal().Msg("failed to subscribe to finalized heads") + return errors.Wrap(err, "an error occurred while subscribing to finalized heads") } for { @@ -80,7 +85,6 @@ func (client *SubstrateClient) SubscribeTfchainBridgeEvents(ctx context.Context, } eventChannel <- data case err := <-chainHeadsSub.Err(): - log.Err(err).Msg("error with subscription") bo := backoff.NewExponentialBackOff() bo.MaxElapsedTime = time.Duration(time.Minute * 10) // 10 minutes @@ -88,7 +92,12 @@ func (client *SubstrateClient) SubscribeTfchainBridgeEvents(ctx context.Context, chainHeadsSub, err = cl.RPC.Chain.SubscribeFinalizedHeads() return err }, bo, func(err error, d time.Duration) { - log.Warn().Err(err).Msgf("connection to chain lost, reopening connection in %s", d.String()) + log.Warn(). + Err(err). + Str("event_action", "fetch_finalized_Heads_failed"). + Str("event_kind", "alert"). + Str("category", "tfchain_monitor"). + Msgf("connection to chain lost, reopening connection in %s", d.String()) }) case <-ctx.Done(): @@ -99,16 +108,23 @@ func (client *SubstrateClient) SubscribeTfchainBridgeEvents(ctx context.Context, } func (client *SubstrateClient) processEventsForHeight(height uint32) (Events, error) { - log.Info().Uint32("ID", height).Msg("fetching events for blockheight") + if height == 0 { return Events{}, nil } records, err := client.GetEventsForBlock(height) if err != nil { - log.Err(err).Uint32("ID", height).Msg("failed to decode block for height") - return Events{}, err + return Events{}, errors.Wrapf(err, "an error occurred while decoding events for height %d", height) + } + log.Info(). + Str("event_action", "block_events_fetched"). + Str("event_kind", "event"). + Str("category", "tfchain_monitor"). + Dict("metadata", zerolog.Dict(). + Uint32("height", height)). + Msg("tfchain events fetched") return client.processEventRecords(records), nil } @@ -121,14 +137,24 @@ func (client *SubstrateClient) processEventRecords(events *substrate.EventRecord var withdrawExpiredEvents []WithdrawExpiredEvent for _, e := range events.TFTBridgeModule_RefundTransactionReady { - log.Info().Str("hash", string(e.RefundTransactionHash)).Msg("found refund transaction ready event") + log.Info(). + Str("trace_id", string(e.RefundTransactionHash)). + Str("event_action", "event_refund_tx_ready_received"). + Str("event_kind", "event"). + Str("category", "refund"). + Msg("found RefundTransactionReady event") refundTransactionReadyEvents = append(refundTransactionReadyEvents, RefundTransactionReadyEvent{ Hash: string(e.RefundTransactionHash), }) } for _, e := range events.TFTBridgeModule_RefundTransactionExpired { - log.Info().Str("hash", string(e.RefundTransactionHash)).Msgf("found expired refund transaction") + log.Info(). + Str("trace_id", string(e.RefundTransactionHash)). + Str("event_action", "event_refund_tx_expired_received"). + Str("event_kind", "alert"). + Str("category", "refund"). + Msgf("found RefundTransactionExpired event") refundTransactionExpiredEvents = append(refundTransactionExpiredEvents, RefundTransactionExpiredEvent{ Hash: string(e.RefundTransactionHash), Target: string(e.Target), @@ -137,7 +163,12 @@ func (client *SubstrateClient) processEventRecords(events *substrate.EventRecord } for _, e := range events.TFTBridgeModule_BurnTransactionCreated { - log.Info().Uint64("ID", uint64(e.BurnTransactionID)).Msg("found burn transaction created event") + log.Info(). + Str("trace_id", fmt.Sprint(e.BurnTransactionID)). + Str("event_action", "event_burn_tx_created_received"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Msg("found BurnTransactionCreated event") withdrawCreatedEvents = append(withdrawCreatedEvents, WithdrawCreatedEvent{ ID: uint64(e.BurnTransactionID), Source: e.Source, @@ -147,14 +178,24 @@ func (client *SubstrateClient) processEventRecords(events *substrate.EventRecord } for _, e := range events.TFTBridgeModule_BurnTransactionReady { - log.Info().Uint64("ID", uint64(e.BurnTransactionID)).Msg("found burn transaction ready event") + log.Info(). + Str("trace_id", fmt.Sprint(e.BurnTransactionID)). + Str("event_action", "event_burn_tx_ready_received"). + Str("event_kind", "event"). + Str("category", "withdraw"). + Msg("found BurnTransactionReady event") withdrawReadyEvents = append(withdrawReadyEvents, WithdrawReadyEvent{ ID: uint64(e.BurnTransactionID), }) } for _, e := range events.TFTBridgeModule_BurnTransactionExpired { - log.Info().Uint64("ID", uint64(e.BurnTransactionID)).Msg("found burn transaction expired event") + log.Info(). + Str("trace_id", fmt.Sprint(e.BurnTransactionID)). + Str("event_action", "event_burn_tx_expired_received"). + Str("event_kind", "alert"). + Str("category", "withdraw"). + Msg("found BurnTransactionExpired event") withdrawExpiredEvents = append(withdrawExpiredEvents, WithdrawExpiredEvent{ ID: uint64(e.BurnTransactionID), Source: e.Source, @@ -163,6 +204,31 @@ func (client *SubstrateClient) processEventRecords(events *substrate.EventRecord }) } + for _, e := range events.TFTBridgeModule_MintCompleted { + trace_id := e.TxHash + logger := log.Logger.With().Str("trace_id", strings.TrimLeft(trace_id, "refund-")).Logger() + outcome := "" + if strings.HasPrefix(trace_id, "refund") { + outcome = "refunded" + } else { + outcome = "bridged" + } + + logger.Info(). + Str("event_action", "mint_completed"). + Str("event_kind", "event"). + Str("category", "mint"). + Msg("found MintCompleted event") + + logger.Info(). + Str("event_action", "transfer_completed"). + Str("event_kind", "event"). + Str("category", "transfer"). + Dict("metadata", zerolog.Dict(). + Str("outcome", outcome)). + Msg("transfer has completed") + } + return Events{ WithdrawCreatedEvents: withdrawCreatedEvents, WithdrawReadyEvents: withdrawReadyEvents, diff --git a/clients/tfchain-client-go/account.go b/clients/tfchain-client-go/account.go index 41308ad6b..1f36901e2 100644 --- a/clients/tfchain-client-go/account.go +++ b/clients/tfchain-client-go/account.go @@ -52,6 +52,19 @@ type AccountInfo struct { Data Balance `json:"data"` } +// TODO: Add service response status code if avialble +type ActivationServiceError struct { + StatusCode int // 0 or a valid HTTP status code. 0 indicates that a response was not recived due to an error such host unreachable. + Err error +} + +func (e ActivationServiceError) Error() string { + if e.StatusCode != 0 { + return fmt.Sprintf("Activation service error (status code %d): %s", e.StatusCode, e.Err.Error()) + } + return fmt.Sprintf("Activation service error: %s", e.Err.Error()) +} + // PublicKey gets public key from account id func (a AccountID) PublicKey() []byte { return a[:] @@ -135,7 +148,7 @@ func (s *Substrate) activateAccount(identity Identity, activationURL string) err response, err := http.Post(activationURL, "application/json", &buf) if err != nil { - return errors.Wrap(err, "failed to call activation service") + return ActivationServiceError{Err: errors.Wrap(err, "failed to call activation service")} } defer response.Body.Close() @@ -145,22 +158,22 @@ func (s *Substrate) activateAccount(identity Identity, activationURL string) err return nil } - return fmt.Errorf("failed to activate account: %s", response.Status) + return ActivationServiceError{StatusCode: response.StatusCode, Err: fmt.Errorf("activation service returned status code %d", response.StatusCode)} } // EnsureAccount makes sure account is available on blockchain // if not, it uses activation service to create one. // EnsureAccount is safe to call on already activated accounts and it's mostly // a NO-OP operation unless the account funds are very low, it will then make -// sure to reactivate the account (fund it) if the free tokes are <= ReactivateThreefold uTFT -func (s *Substrate) EnsureAccount(identity Identity, activationURL, termsAndConditionsLink, terminsAndConditionsHash string) (info AccountInfo, err error) { +// sure to reactivate the account (fund it) if the free tokens are <= ReactivateThreefold uTFT +func (s *Substrate) EnsureAccount(identity Identity, activationURL, termsAndConditionsLink, termsAndConditionsHash string) (info AccountInfo, err error) { log.Debug().Str("account", identity.Address()).Msg("ensuring account") cl, meta, err := s.GetClient() if err != nil { return info, err } info, err = s.getAccount(cl, meta, identity) - // if account does not exist OR account has tokes less that reactivateAt + // if account does not exist OR account has tokens less than reactivateAt // then we activate the account. if errors.Is(err, ErrAccountNotFound) || info.Data.Free.Cmp(reactivateAt) <= 0 { // account activation @@ -203,7 +216,7 @@ func (s *Substrate) EnsureAccount(identity Identity, activationURL, termsAndCond return info, nil } - return info, s.AcceptTermsAndConditions(identity, termsAndConditionsLink, terminsAndConditionsHash) + return info, s.AcceptTermsAndConditions(identity, termsAndConditionsLink, termsAndConditionsHash) } // Identity is a user identity diff --git a/clients/tfchain-client-go/account_test.go b/clients/tfchain-client-go/account_test.go index b7938aba5..edafcfdbf 100644 --- a/clients/tfchain-client-go/account_test.go +++ b/clients/tfchain-client-go/account_test.go @@ -40,3 +40,18 @@ func TestGetBalance(t *testing.T) { _, err = cl.GetBalance(account) require.NoError(err) } + +func TestEnsureAccountWithDownActivationService(t *testing.T) { + cl := startLocalConnection(t) + defer cl.Close() + + require := require.New(t) + id, err := NewIdentityFromEd25519Phrase("paper endless radio rude wage hood cabin praise girl income chief craft") + require.NoError(err) + _, err = cl.EnsureAccount(id, "https://test.wrong-activation-service-url.tf", "test", "test") + require.Error(err) + require.IsType(ActivationServiceError{}, err) + _, err = cl.EnsureAccount(id, "https://httpstat.us/503", "test", "test") + require.Error(err) + require.IsType(ActivationServiceError{}, err) +} diff --git a/clients/tfchain-client-go/burning.go b/clients/tfchain-client-go/burning.go index 03489df4f..b2079b6a7 100644 --- a/clients/tfchain-client-go/burning.go +++ b/clients/tfchain-client-go/burning.go @@ -15,7 +15,7 @@ var ( ) type BurnTransaction struct { - Block types.U32 `json:"block"` + Block BlockNumber `json:"block"` Amount types.U64 `json:"amount"` Source types.OptionAccountID `json:"source"` Target string `json:"target"` diff --git a/clients/tfchain-client-go/contract.go b/clients/tfchain-client-go/contract.go index f6f966d13..45296b93a 100644 --- a/clients/tfchain-client-go/contract.go +++ b/clients/tfchain-client-go/contract.go @@ -9,8 +9,9 @@ import ( ) type DeletedState struct { - IsCanceledByUser bool `json:"is_canceled_by_user"` - IsOutOfFunds bool `json:"is_out_of_funds"` + IsCanceledByUser bool `json:"is_canceled_by_user"` + IsOutOfFunds bool `json:"is_out_of_funds"` + IsCanceledByCollective bool `json:"is_canceled_by_collective"` } // Decode implementation for the enum type @@ -25,6 +26,8 @@ func (r *DeletedState) Decode(decoder scale.Decoder) error { r.IsCanceledByUser = true case 1: r.IsOutOfFunds = true + case 2: + r.IsCanceledByCollective = true default: return fmt.Errorf("unknown deleted state value") } @@ -38,6 +41,8 @@ func (r DeletedState) Encode(encoder scale.Encoder) (err error) { err = encoder.PushByte(0) } else if r.IsOutOfFunds { err = encoder.PushByte(1) + } else if r.IsCanceledByCollective { + err = encoder.PushByte(2) } return } diff --git a/clients/tfchain-client-go/contract_events.go b/clients/tfchain-client-go/contract_events.go index 556f33c9b..47a8c0ceb 100644 --- a/clients/tfchain-client-go/contract_events.go +++ b/clients/tfchain-client-go/contract_events.go @@ -242,3 +242,33 @@ type NodeExtraFeeSet struct { ExtraFee types.U64 `json:"extra_fee"` Topics []types.Hash } + +type RentWaived struct { + Phase types.Phase + ContractID types.U64 `json:"contract_id"` + Topics []types.Hash +} + +type ContractGracePeriodElapsed struct { + Phase types.Phase + ContractID types.U64 `json:"contract_id"` + GracePeriod types.U64 `json:"grace_period"` + Topics []types.Hash +} + +type ContractPaymentOverdrawn struct { + Phase types.Phase + ContractID types.U64 `json:"contract_id"` + Timestamp types.U64 `json:"timestamp"` + PartiallyBilledAmount types.U128 `json:"partially_billed_amount"` + Overdraft types.U128 `json:"overdraft"` + Topics []types.Hash +} + +type RewardDistributed struct { + Phase types.Phase + ContractID types.U64 `json:"contract_id"` + StandardRewards types.U128 `json:"standard_rewards"` + AdditionalRewards types.U128 `json:"additional_rewards"` + Topics []types.Hash +} diff --git a/clients/tfchain-client-go/events.go b/clients/tfchain-client-go/events.go index 0910e780a..2538fa374 100644 --- a/clients/tfchain-client-go/events.go +++ b/clients/tfchain-client-go/events.go @@ -389,6 +389,10 @@ type EventRecords struct { SmartContractModule_ServiceContractBilled []ServiceContractBilled //nolint:stylecheck,golint SmartContractModule_BillingFrequencyChanged []BillingFrequencyChanged //nolint:stylecheck,golint SmartContractModule_NodeExtraFeeSet []NodeExtraFeeSet //nolint:stylecheck,golint + SmartContractModule_RentWaived []RentWaived //nolint:stylecheck,golint + SmartContractModule_ContractGracePeriodElapsed []ContractGracePeriodElapsed //nolint:stylecheck,golint + SmartContractModule_ContractPaymentOverdrawn []ContractPaymentOverdrawn //nolint:stylecheck,golint + SmartContractModule_RewardDistributed []RewardDistributed //nolint:stylecheck,golint // farm events TfgridModule_FarmStored []FarmStored //nolint:stylecheck,golint diff --git a/clients/tfchain-client-go/node.go b/clients/tfchain-client-go/node.go index 0d18362a1..6eade3661 100644 --- a/clients/tfchain-client-go/node.go +++ b/clients/tfchain-client-go/node.go @@ -688,6 +688,32 @@ func (s *Substrate) SetNodePowerState(identity Identity, up bool) (hash types.Ha return callResponse.Hash, nil } +// SetNodePowerTarget updates the power target of a node +func (s *Substrate) SetNodePowerTarget(identity Identity, nodeID uint32, up bool) (hash types.Hash, err error) { + cl, meta, err := s.GetClient() + if err != nil { + return hash, err + } + + power := Power{ + IsUp: up, + IsDown: !up, + } + + c, err := types.NewCall(meta, "TfgridModule.change_power_target", nodeID, power) + + if err != nil { + return hash, errors.Wrap(err, "failed to create call") + } + + callResponse, err := s.Call(cl, meta, identity, c) + if err != nil { + return hash, errors.Wrap(err, "failed to change node power target") + } + + return callResponse.Hash, nil +} + // GetPowerTarget returns the power target for a node func (s *Substrate) GetPowerTarget(nodeID uint32) (power NodePower, err error) { cl, meta, err := s.GetClient() @@ -778,3 +804,24 @@ func (s *Substrate) GetDedicatedNodePrice(nodeID uint32) (uint64, error) { return uint64(price), nil } + +// SetNodeCertificate sets the node certificate type +func (s *Substrate) SetNodeCertificate(identity Identity, id uint32, cert NodeCertification) error { + cl, meta, err := s.GetClient() + if err != nil { + return err + } + + c, err := types.NewCall(meta, "TfgridModule.set_node_certification", + id, cert, + ) + if err != nil { + return errors.Wrap(err, "failed to create call") + } + + if _, err := s.Call(cl, meta, identity, c); err != nil { + return errors.Wrap(err, "failed to set node certificate") + } + + return nil +} diff --git a/clients/tfchain-client-go/utils.go b/clients/tfchain-client-go/utils.go index 1ec6c3356..e1d214240 100644 --- a/clients/tfchain-client-go/utils.go +++ b/clients/tfchain-client-go/utils.go @@ -127,6 +127,8 @@ var smartContractModuleErrors = []string{ "WrongAuthority", "UnauthorizedToChangeSolutionProviderId", "UnauthorizedToSetExtraFee", + "RewardDistributionError", + "ContractPaymentStateNotExists", } // https://github.com/threefoldtech/tfchain/blob/development/substrate-node/pallets/pallet-tfgrid/src/lib.rs#L442 @@ -243,8 +245,10 @@ var tfgridModuleErrors = []string{ "InvalidDocumentHashInput", "InvalidPublicConfig", "UnauthorizedToChangePowerTarget", + "NodeHasActiveContracts", "InvalidRelayAddress", "InvalidTimestampHint", + "InvalidStorageInput", } // https://github.com/threefoldtech/tfchain/blob/development/substrate-node/pallets/pallet-tft-bridge/src/lib.rs#L152 @@ -534,7 +538,7 @@ func (s *Substrate) checkForError(callResponse *CallResponse) error { if int(errIndex) >= len(moduleErrors[e.DispatchError.ModuleError.Index]) || moduleErrors[e.DispatchError.ModuleError.Index] == nil { return fmt.Errorf("module error (%d) with unknown code %d occured, please update the module error list", e.DispatchError.ModuleError.Index, e.DispatchError.ModuleError.Error) } - return fmt.Errorf(moduleErrors[e.DispatchError.ModuleError.Index][errIndex]) + return errors.New(moduleErrors[e.DispatchError.ModuleError.Index][errIndex]) } else { return fmt.Errorf("unknown module error (%d) with code %d occured, please create the module error list", e.DispatchError.ModuleError.Index, e.DispatchError.ModuleError.Error) } diff --git a/clients/tfchain-client-js/package.json b/clients/tfchain-client-js/package.json index f88a483b2..5b4ab23c2 100644 --- a/clients/tfchain-client-js/package.json +++ b/clients/tfchain-client-js/package.json @@ -1,6 +1,6 @@ { "name": "tfgrid-api-client", - "version": "2.6.0-rc1", + "version": "2.9.0", "description": "API client for the TF Grid", "main": "index.js", "scripts": { @@ -17,4 +17,4 @@ "devDependencies": { "standard": "^16.0.3" } -} \ No newline at end of file +} diff --git a/clients/tfchain-client-js/types.json b/clients/tfchain-client-js/types.json index ce15a1412..11461013e 100644 --- a/clients/tfchain-client-js/types.json +++ b/clients/tfchain-client-js/types.json @@ -168,7 +168,8 @@ "Cause": { "_enum": [ "CanceledByUser", - "OutOfFunds" + "OutOfFunds", + "CanceledByCollective" ] }, "NruConsumption": { @@ -334,4 +335,4 @@ "farm_id": "u32", "weight": "u64" } -} +} \ No newline at end of file diff --git a/docs/architecture/0015-duplicate-veto.md b/docs/architecture/0015-duplicate-veto.md index 80e8e28d0..cdd55ab93 100644 --- a/docs/architecture/0015-duplicate-veto.md +++ b/docs/architecture/0015-duplicate-veto.md @@ -8,9 +8,12 @@ Accepted ## Context -See [here](https://github.com/threefoldtech/tfchain/issues/858) for more details. +See [here](https://github.com/threefoldtech/tfchain/issues/858) for more +details. ## Decision -Since we don't want a council member to veto a DAO proposal alone by being able to submit its veto more than once we need to prevent duplicate veto. -In `pallet-dao`, `veto()` extrinsic should return an appropriate error while this situation occures. +Since we don't want a council member to veto a DAO proposal alone by being able +to submit its veto more than once we need to prevent duplicate veto. In +`pallet-dao`, `veto()` extrinsic should return an appropriate error while this +situation occures. diff --git a/docs/architecture/0016-BurnTransaction-BurnTransactionExpired-changed.md b/docs/architecture/0016-BurnTransaction-BurnTransactionExpired-changed.md deleted file mode 100644 index f1a441016..000000000 --- a/docs/architecture/0016-BurnTransaction-BurnTransactionExpired-changed.md +++ /dev/null @@ -1,15 +0,0 @@ -# 16. Add Source account ID to BurnTransaction storage type and BurnTransactionExpired event - -Date: 2023-11-14 - -## Status - -Accepted - -## Context - -See [here](https://github.com/threefoldtech/tfchain/issues/883) for more details. - -## Decision - -Add `Source` account ID to `BurnTransaction` storage type and `BurnTransactionExpired` event and migrate previous `BurnTransactions` and `ExecutedBurnTransactions` storages diff --git a/docs/architecture/0016-rework-dao-voting.md b/docs/architecture/0016-rework-dao-voting.md new file mode 100644 index 000000000..fe62dbe68 --- /dev/null +++ b/docs/architecture/0016-rework-dao-voting.md @@ -0,0 +1,19 @@ +# 16. Add condition to DAO motion approval + +Date: 2023-11-07 + +## Status + +Accepted + +## Context + +See [here](https://github.com/threefoldtech/tfchain/issues/803) for more +details. + +## Decision + +Stick to specs initial idea by adding new condition +`number of votes >= threshold` for proposal to be approved. If by the end of the +vote the minimal amount of votes is not reached, the proposal fails due to +insufficient interest. diff --git a/docs/architecture/0017-BurnTransaction-BurnTransactionExpired-changed.md b/docs/architecture/0017-BurnTransaction-BurnTransactionExpired-changed.md new file mode 100644 index 000000000..c4c172bf0 --- /dev/null +++ b/docs/architecture/0017-BurnTransaction-BurnTransactionExpired-changed.md @@ -0,0 +1,18 @@ +# 17. Add Source account ID to BurnTransaction and BurnTransactionExpired + +Date: 2023-11-14 + +## Status + +Accepted + +## Context + +See [here](https://github.com/threefoldtech/tfchain/issues/883) for more +details. + +## Decision + +Add `Source` account ID to `BurnTransaction` storage type and +`BurnTransactionExpired` event and migrate previous `BurnTransactions` and +`ExecutedBurnTransactions` storages diff --git a/docs/architecture/0017-rework_cancel_contracts.md b/docs/architecture/0017-rework_cancel_contracts.md deleted file mode 100644 index 56693ea05..000000000 --- a/docs/architecture/0017-rework_cancel_contracts.md +++ /dev/null @@ -1,16 +0,0 @@ -# 17. Allow collective approval to cancel contracts - -Date: 2023-11-06 - -## Status - -Accepted - -## Context - -See [here](https://github.com/threefoldtech/tfchain/issues/884) for more details. - -## Decision - -In `pallet-smart-contract`, add `cancel_contract_collective()` extrinsic to allow a collective approval (council or farmers) to cancel a contract. -For this purpose we also add a new entry `CanceledByCollective` in `Cause` enum to better qualify the cancelation cause. diff --git a/docs/architecture/0018-rework_cancel_contracts.md b/docs/architecture/0018-rework_cancel_contracts.md new file mode 100644 index 000000000..bc090d87b --- /dev/null +++ b/docs/architecture/0018-rework_cancel_contracts.md @@ -0,0 +1,19 @@ +# 18. Allow collective approval to cancel contracts + +Date: 2023-11-06 + +## Status + +Accepted + +## Context + +See [here](https://github.com/threefoldtech/tfchain/issues/884) for more +details. + +## Decision + +In `pallet-smart-contract`, add `cancel_contract_collective()` extrinsic to +allow a collective approval (council or farmers) to cancel a contract. For this +purpose we also add a new entry `CanceledByCollective` in `Cause` enum to better +qualify the cancelation cause. diff --git a/docs/architecture/0019-allow-renting-standby-node.md b/docs/architecture/0019-allow-renting-standby-node.md new file mode 100644 index 000000000..450073be0 --- /dev/null +++ b/docs/architecture/0019-allow-renting-standby-node.md @@ -0,0 +1,27 @@ +# 19. Allow renting standby node + +Date: 2024-01-09 + +## Status + +Accepted + +## Context + +See [here](https://github.com/threefoldtech/tfchain/issues/923) for more +details. + +## Decision + +We want to be able to create a rent contract on node even if it is in standby +phase. Moreover, user should be billed for this contract only during online +periods. + +In `pallet-smart-contract`: + +- Remove the `node_power.is_down()` restriction when trying to create a rent + contract in `create_rent_contract()` extrinsic. restriction + +- Modify rent contract billing logic by allowing billing only if the node is + online (`PowerState` = `Up`). To skip the billing during the standby period we + update the contract lock when the node power state is switched to `Up`. diff --git a/docs/architecture/0020-rework_change_power_target.md b/docs/architecture/0020-rework_change_power_target.md new file mode 100644 index 000000000..4a9390eea --- /dev/null +++ b/docs/architecture/0020-rework_change_power_target.md @@ -0,0 +1,17 @@ +# 20. Rework change power target on node + +Date: 2024-01-09 + +## Status + +Accepted + +## Context + +See [here](https://github.com/threefoldtech/tfchain/issues/924) for more +details. + +## Decision + +Make sure that node has no active contracts on it to be able to change its +`PowerTarget` to `Down` when calling `change_power_target()` extrinsic. diff --git a/docs/architecture/0021-rework-dao-voting.md b/docs/architecture/0021-rework-dao-voting.md new file mode 100644 index 000000000..a58c755dc --- /dev/null +++ b/docs/architecture/0021-rework-dao-voting.md @@ -0,0 +1,20 @@ +# 21. Harden closing of a DAO motion voting + +Date: 2024-05-02 + +## Status + +Accepted + +## Context + +See [here](https://github.com/threefoldtech/tfchain/issues/889) for more +details. + +## Decision + +In `propose()` extrinsic, set a minimum threshold `MotionMinThreshold` of 5 +votes for a motion to be proposed and if threshold is lower then return error +`TresholdTooLow`. Also in `propose()`extrinsic, add a minimum motion duration of +1 day and return error `InvalidProposalDuration` if optional duration is not set +in the 1 day - 30 days interval. diff --git a/docs/architecture/0022-allow-hdd-only-nodes.md b/docs/architecture/0022-allow-hdd-only-nodes.md new file mode 100644 index 000000000..999c3e494 --- /dev/null +++ b/docs/architecture/0022-allow-hdd-only-nodes.md @@ -0,0 +1,18 @@ +# 22. Allow 'only hdd' nodes to register on chain + +Date: 2024-05-22 + +## Status + +Accepted + +## Context + +See [here](https://github.com/threefoldtech/tfchain/issues/967) for more +details. + +## Decision + +Similar to what already exists for SSD, add a minimum HDD size requirement (also +100 GB) on `resources.validate_hru()`. Then, on validating, make sure node has +at least 1 minimum storage capacity available. diff --git a/docs/architecture/0023-billing-refactor.md b/docs/architecture/0023-billing-refactor.md new file mode 100644 index 000000000..0ad1d310c --- /dev/null +++ b/docs/architecture/0023-billing-refactor.md @@ -0,0 +1,48 @@ +# 23. Billing Refactor in pallet-smart-contract Module + +Date: 2024-08-18 + +## Status + +Accepted + +## Context + +The billing logic within the pallet-smart-contract module faced several issues, including critical bugs, inefficiencies in handling validators, and inadequate fund reservation mechanisms. +The goal of this refactor was to address these issues while enhancing the overall reliability and robustness of the billing process. + +## Decision + +The following architectural decisions were made to improve the billing logic: + +### Refactoring Billing Logic + +- Enhanced Tracking: +Improved tracking mechanisms were introduced for contract payments, especially during grace periods and when handling overdue payments. +The new ContractPaymentState was introduced to accurately manage contract payment states and resolve liquidity issues. +- Overdraft Handling: +Partial payments are now allowed, where users can cover part of their billing due if they lack sufficient funds for the full amount. Overdraft are tracked separately. +- Fund Reservation: +The use of balance locks/freezes was replaced with a more reliable reservation system, reducing issues related to fund availability for reward distribution. + +### Improved Off-Chain Worker Logic + +- Runtime Verification: +The is_next_block_author function was removed, with verification now occurring at runtime. +This change ensures transaction fees are reliably waived for validators and still prevents duplicate transactions. + +### New Events Introduced + +- ContractGracePeriodElapsed: Indicates that a contract's grace period has elapsed. +- ContractPaymentOverdrawn: Indicates that a contract's payment is overdrawn. +- RewardDistributed: Indicates that rewards have been distributed. + +### Certified vs DIY Capacity + +The system now correctly charges certified capacity at a higher rate (25% more) than DIY capacity. + +## Consequences + +- Increased Robustness: The billing process is now more robust and less prone to errors, particularly in scenarios involving partial payments and fund reservations. +- Better Visibility: The introduction of new events and improved logging provides better visibility into the billing and payment processes, aiding in debugging and monitoring. +- Backward Compatibility: While significant refactoring has been done, efforts were made to ensure backward compatibility where possible, especially concerning contract migration. diff --git a/docs/development/fork-off-substrate.md b/docs/development/fork-off-substrate.md index 3937fbee8..457f3a24d 100644 --- a/docs/development/fork-off-substrate.md +++ b/docs/development/fork-off-substrate.md @@ -33,7 +33,7 @@ Before you start, you need to have the following items: ```bash cp ../../substrate-node/target/debug/wbuild/tfchain-runtime/tfchain_runtime.compact.wasm ./data/runtime.wasm ``` -* Run a full node for your blockchain locally (Recommended but should be fully synced) or have an external endpoint handy (but should be running with `--rpc-methods Unsafe` flag) +* Run a full node for your blockchain locally (Recommended but should be fully synced) or have an external endpoint handy (but should be running with `--rpc-methods Unsafe` flag, and depending on the chain size you may need to increase the node's default `rpc-max-response-size`) ```bash ../../substrate-node/target/debug/tfchain --chain ../../substrate-node/chainspecs/dev/chainSpecRaw.json --rpc-external --rpc-methods Unsafe ``` @@ -41,12 +41,16 @@ Before you start, you need to have the following items: * If using a local node, simply run the script using ```bash - npm start + ALICE="true" npm start ``` * If you are using an external/non-default endpoint, you need to provide it to the script via the HTTP\_RPC\_ENDPOINT environment variable ```bash - HTTP_RPC_ENDPOINT=https:// npm start + HTTP_RPC_ENDPOINT=https:// ALICE="true" npm start + ``` + * If you are getting `HeadersTimeoutError`, likely on the main net, set `FORK_CHUNKS_LEVEL` to 2 + ```bash + FORK_CHUNKS_LEVEL=2 ALICE="true" npm start ``` * You should have the genesis file for the forked chain inside the data folder. It will be called `fork.json`. * You can now run a new chain using this genesis file diff --git a/docs/misc/try_runtime.md b/docs/misc/try_runtime.md index 11a67ccde..aae8f53f3 100644 --- a/docs/misc/try_runtime.md +++ b/docs/misc/try_runtime.md @@ -2,17 +2,28 @@ List of available endpoints for our networks: -- Devnet: 10.10.0.151 -- QAnet: 10.10.0.152 -- Testnet: 10.10.0.22 -- Mainnet: 10.10.0.19 +- Devnet: 10.10.0.40 +- QAnet: 10.10.0.42 +- Testnet: 10.10.0.55 +- Mainnet: 10.10.0.56 -(If you are not in lochristi office you probably need vpn to reach to ips) +(If you are not in Lochristi office you probably need VPN to reach to ips) ## Select a network you wish to try the runtime upgrade upon -Now go the release you want to test with try-runtime and compile as following: +Now select the release you want to test with `try-runtime` and follow instructions [here](https://paritytech.github.io/try-runtime-cli/try_runtime/). +Example of commands sequence for running migrations of a given runtime on top of Devnet live state: ```sh -cargo run --release --features=try-runtime try-runtime --runtime ./target/release/wbuild/tfchain-runtime/tfchain_runtime.compact.wasm --chain chainspecs/NETWORK/chainSpecRaw.json on-runtime-upgrade live --uri NETWORK_URL +# Install try-runtime latest version (recommended for local development) +cargo install --git https://github.com/paritytech/try-runtime-cli --locked +``` +```sh +# Compile substrate node +cd substrate-node +cargo build --features try-runtime --release +``` +```sh +# Run the runtime migrations on top of Devnet live state +try-runtime --runtime ./target/release/wbuild/tfchain-runtime/tfchain_runtime.compact.compressed.wasm on-runtime-upgrade live --uri ws://10.10.0.40:9944 ``` diff --git a/docs/production/releases.md b/docs/production/releases.md index dabb78e28..2b96aed7b 100644 --- a/docs/production/releases.md +++ b/docs/production/releases.md @@ -1,46 +1,78 @@ -## Releases +# Releases -Releases are automated by [this workflow](.github/workflows/030_create_release.yaml). When a release should be created following things need to be done: +Releases are automated by [this workflow](.github/workflows/030_create_release.yaml). +When a release should be created following things need to be done: -* substrate-node - * Increment spec version in the runtime [lib.rs](../../substrate-node/runtime/src/lib.rs) - * Increment version in [Cargo.toml](../../substrate-node/Cargo.toml) - * Increment chart `version` filed in [Chart.yaml](../../substrate-node/charts/substrate-node/Chart.yaml) - * Increment chart `appVersion` filed in [Chart.yaml](../../substrate-node/charts/substrate-node/Chart.yaml) +## Version bump -* tfchainbridge - * Increment chart `version` filed in [Chart.yaml](../../bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml) - * Increment chart `appVersion` filed in [Chart.yaml](../../bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml) +This step can be done using Makefile or manually. -* activation-service - * Increment chart `version` filed in [Chart.yaml](../../activation-service/helm/tfchainactivationservice/Chart.yaml) - * Increment chart `appVersion` filed in [Chart.yaml](../../activation-service/helm/tfchainactivationservice/Chart.yaml) - * Increment package `version` in [package.json](../../activation-service/package.json) +### Makefile -* Js TFChain Client - * Increment package `version` in [package.json](../../clients/tfchain-client-js/package.json) +see makefile [here](../../Makefile) -* Scripts - * Increment package `version` in [package.json](../../scripts/package.json) +#### Usage -* Tools/fork-off-substrate - * Increment package `version` in [package.json](../../tools/fork-off-substrate/package.json) +```bash +type=patch make version-bump # incrment the patch version +type=minor make version-bump # incrment the minor version +type=major make version-bump # incrment the major version +``` -* Commit the changes +This function will take care also of branch and commit creation. +Review the changes and push them, then follow the steps 3 and 4 below to finish the release. -* Create a new tag with the version number prefixed with a `v` (e.g. `v1.0.0`, `v1.0.0-rc1` for release candidates) +Important: This function will also incrment the spec version in the runtime. +If you already did this in another commit or you don't need to do this, you can instruct the Makefile version-bump function to skip it by setting the `retain_spec_version` variable to 1 or any other value. -* Push the tag to the repository +```bash +type=patch retain_spec_version=1 make version-bump +``` -* The workflow will create a release draft with the changelog and the binaries attached +### Manually -A changelog will be generated based on the Pull requests merged, so having PRs with meaningful titles is important. +1 - Create a new branch for the release, increment the version for all components in the monorepo. +Here is a list of the files that need to be changed to make the release: + +* substrate-node + * Increment spec version in the runtime [lib.rs](../../substrate-node/runtime/src/lib.rs) + * Increment version in [Cargo.toml](../../substrate-node/Cargo.toml) + * Increment chart `version` filed in [Chart.yaml](../../substrate-node/charts/substrate-node/Chart.yaml) + * Increment chart `appVersion` filed in [Chart.yaml](../../substrate-node/charts/substrate-node/Chart.yaml) + +* tfchainbridge + * Increment chart `version` filed in [Chart.yaml](../../bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml) + * Increment chart `appVersion` filed in [Chart.yaml](../../bridge/tfchain_bridge/chart/tfchainbridge/Chart.yaml) + +* activation-service + * Increment chart `version` filed in [Chart.yaml](../../activation-service/helm/tfchainactivationservice/Chart.yaml) + * Increment chart `appVersion` filed in [Chart.yaml](../../activation-service/helm/tfchainactivationservice/Chart.yaml) + * Increment package `version` in [package.json](../../activation-service/package.json) + +* Js TFChain Client + * Increment package `version` in [package.json](../../clients/tfchain-client-js/package.json) + +* Scripts + * Increment package `version` in [package.json](../../scripts/package.json) + +* Tools/fork-off-substrate + * Increment package `version` in [package.json](../../tools/fork-off-substrate/package.json) + +2 - Commit the changes + +3 - Create a new tag with the version number prefixed with a `v` (e.g. `v1.0.0`) + +4 - Push the tag to the repository + +The workflow will create a release draft with the changelog and the binaries attached + +The generated changelog will be based on the merged Pull requests, so having PRs with meaningful titles is important. ## Validate a runtime See [validate](../misc/validating_runtime.md) for instructions on how to validate a runtime. -### Upgrade runtime +## Upgrade runtime -To upgrade the runtime for a network based on a release, download the runtime attached to the release (tfchain\_runtime.compact.compressed.wasm) -and upload it to the network using a council proposal. The proposal should be a `set_code` proposal with the runtime as the code and majority of the council should vote in favor of the proposal. +To upgrade the runtime for a network based on a release, download the runtime attached to the release (tfchain\_runtime.compact.compressed.wasm) and upload it to the network using a council proposal. +The proposal should be a `set_code` proposal with the runtime as the code and majority of the council should vote in favor of the proposal. diff --git a/scripts/package.json b/scripts/package.json index 4695b06f7..d7bba576f 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -1,6 +1,6 @@ { "name": "tfchain-js-scripts", - "version": "2.6.0-rc1", + "version": "2.9.0", "description": "scripts to fetch data / write data to tfchain", "main": "index.js", "scripts": { @@ -20,4 +20,4 @@ "devDependencies": { "standard": "^16.0.3" } -} \ No newline at end of file +} diff --git a/substrate-node/.maintain/benchmark.sh b/substrate-node/.maintain/benchmark.sh index 73abcbca1..dda20655c 100644 --- a/substrate-node/.maintain/benchmark.sh +++ b/substrate-node/.maintain/benchmark.sh @@ -3,37 +3,37 @@ echo "starting benchmark" echo "generating pallet-burning" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_burning --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-burning/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_burning --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-burning/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating pallet-dao" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_dao --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-dao/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_dao --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-dao/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating pallet-kvstore" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_kvstore --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-kvstore/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_kvstore --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-kvstore/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating pallet-smart-contract" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_smart_contract --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-smart-contract/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_smart_contract --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-smart-contract/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating pallet-tfgrid weights" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_tfgrid --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-tfgrid/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_tfgrid --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-tfgrid/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating pallet-tft-bridge" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_tft_bridge --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-tft-bridge/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_tft_bridge --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-tft-bridge/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating pallet-tft-price" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_tft_price --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-tft-price/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_tft_price --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-tft-price/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating pallet-validator" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_validator --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/pallet-validator/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=pallet_validator --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/pallet-validator/src/weights.rs --template ./frame-weight-template.hbs" $cmd echo "generating substrate-validator-set" -cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=validatorset --extrinsic="*" --steps=50 --repeat=20 --execution=wasm --heap-pages=409 --output ../pallets/substrate-validator-set/src/weights.rs --template ./frame-weight-template.hbs" +cmd="../target/release/tfchain benchmark pallet --chain=dev --pallet=substrate_validator_set --extrinsic="*" --steps=50 --repeat=20 --heap-pages=409 --output ../pallets/substrate-validator-set/src/weights.rs --template ./frame-weight-template.hbs" $cmd \ No newline at end of file diff --git a/substrate-node/Cargo.lock b/substrate-node/Cargo.lock index 80baf3d22..a284cc150 100644 --- a/substrate-node/Cargo.lock +++ b/substrate-node/Cargo.lock @@ -14,20 +14,20 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.26.2", + "gimli 0.27.3", ] [[package]] name = "addr2line" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ - "gimli 0.27.2", + "gimli 0.28.1", ] [[package]] @@ -36,25 +36,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aead" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", -] - [[package]] name = "aead" version = "0.5.2" @@ -67,123 +48,58 @@ dependencies = [ [[package]] name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aes" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", - "cipher 0.4.4", + "cipher", "cpufeatures", ] [[package]] name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "ghash 0.4.4", - "subtle", -] - -[[package]] -name = "aes-gcm" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ - "aead 0.5.2", - "aes 0.8.2", - "cipher 0.4.4", - "ctr 0.9.2", - "ghash 0.5.0", + "aead", + "aes", + "cipher", + "ctr", + "ghash", "subtle", ] -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.12", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", - "getrandom 0.2.9", + "getrandom 0.2.12", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "aho-corasick" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -214,58 +130,57 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "approx" @@ -277,16 +192,209 @@ dependencies = [ ] [[package]] -name = "arc-swap" -version = "1.6.0" +name = "aquamarine" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1da02abba9f9063d786eab1509833ebb2fac0f966862ca59439c76b9c566760" +dependencies = [ + "include_dir", + "itertools", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste 1.0.14", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-scale" +version = "0.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b08346a3e38e2be792ef53ee168623c9244d968ff00cd70fb9932f6fe36393" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "parity-scale-codec 3.6.9", +] + +[[package]] +name = "ark-scale" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "parity-scale-codec 3.6.9", + "scale-info", +] + +[[package]] +name = "ark-secret-scalar" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "ark-transcript", + "digest 0.10.7", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-transcript" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] [[package]] name = "array-bytes" -version = "4.2.0" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" [[package]] name = "arrayref" @@ -302,25 +410,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "asn1-rs" -version = "0.3.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" -dependencies = [ - "asn1-rs-derive 0.1.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time 0.3.21", -] +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "asn1-rs" @@ -328,26 +420,14 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive 0.4.0", + "asn1-rs-derive", "asn1-rs-impl", "displaydoc", "nom", "num-traits", "rusticata-macros", "thiserror", - "time 0.3.21", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", + "time", ] [[package]] @@ -373,93 +453,91 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "asn1_der" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" - [[package]] name = "async-channel" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 2.5.3", "futures-core", ] [[package]] name = "async-io" -version = "1.13.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744" dependencies = [ - "async-lock", - "autocfg", + "async-lock 3.3.0", "cfg-if", "concurrent-queue", + "futures-io", "futures-lite", - "log", "parking", "polling", - "rustix 0.37.19", + "rustix 0.38.30", "slab", - "socket2", - "waker-fn", + "tracing", + "windows-sys 0.52.0", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "event-listener", + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy", + "pin-project-lite 0.2.13", ] [[package]] name = "async-recursion" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "asynchronous-codec" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ "bytes", "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", ] -[[package]] -name = "atomic-waker" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" - [[package]] name = "atty" version = "0.2.14" @@ -479,31 +557,47 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ - "addr2line 0.19.0", + "addr2line 0.21.0", "cc", "cfg-if", "libc", - "miniz_oxide 0.6.2", - "object 0.30.3", + "miniz_oxide", + "object 0.32.2", "rustc-demangle", ] +[[package]] +name = "bandersnatch_vrfs" +version = "0.0.1" +source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-scale 0.0.12", + "ark-serialize", + "ark-std", + "dleq_vrf", + "fflonk", + "merlin 3.0.0", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "ring 0.1.0", + "sha2 0.10.8", + "zeroize", +] + [[package]] name = "base-x" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - [[package]] name = "base16ct" version = "0.2.0" @@ -518,9 +612,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -548,22 +642,23 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.64.0" +version = "0.65.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", "lazycell", "peeking_take_while", + "prettyplease 0.2.16", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] @@ -572,6 +667,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + [[package]] name = "bitvec" version = "1.0.1" @@ -595,34 +696,34 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec 0.7.4", "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec 0.7.4", "constant_time_eq", ] [[package]] name = "blake3" -version = "1.3.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec 0.7.4", "cc", "cfg-if", "constant_time_eq", @@ -634,7 +735,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -658,16 +759,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding 0.2.1", - "cipher 0.2.5", -] - [[package]] name = "block-padding" version = "0.1.5" @@ -677,20 +768,14 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "bounded-collections" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbd1d11282a1eb134d3c3b7cf8ce213b5161c6e5f73fb1b98618482c606b64" +checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" dependencies = [ "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", ] @@ -701,11 +786,20 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +[[package]] +name = "bs58" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +dependencies = [ + "tinyvec", +] + [[package]] name = "bstr" -version = "1.5.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5" +checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" dependencies = [ "memchr", "serde", @@ -722,9 +816,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -740,21 +834,21 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "bzip2-sys" @@ -769,18 +863,18 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.4" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" dependencies = [ "serde", ] @@ -793,7 +887,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.21", "serde", "serde_json", "thiserror", @@ -801,22 +895,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", -] - -[[package]] -name = "ccm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" -dependencies = [ - "aead 0.3.2", - "cipher 0.2.5", - "subtle", + "libc", ] [[package]] @@ -830,9 +914,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.10.3" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" dependencies = [ "smallvec", ] @@ -851,75 +935,55 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chacha20" -version = "0.8.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", - "cipher 0.3.0", + "cipher", "cpufeatures", - "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ - "aead 0.4.3", + "aead", "chacha20", - "cipher 0.3.0", + "cipher", "poly1305", "zeroize", ] [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.48.5", ] [[package]] name = "cid" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" +checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" dependencies = [ "core2", "multibase", - "multihash 0.16.3", + "multihash", "serde", "unsigned-varint", ] -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array 0.14.7", -] - [[package]] name = "cipher" version = "0.4.4" @@ -928,13 +992,14 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" dependencies = [ "glob", "libc", @@ -943,45 +1008,43 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.0" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.0" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" dependencies = [ "anstream", "anstyle", - "bitflags", "clap_lex", "strsim", ] [[package]] name = "clap_derive" -version = "4.3.0" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "codespan-reporting" @@ -1001,41 +1064,94 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "comfy-table" -version = "6.2.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" +checksum = "7c64043d6c7b7a4c58e39e7efccfdea7b93d885a795d0c054a69dbbf4dd52686" dependencies = [ - "strum", - "strum_macros", + "strum 0.25.0", + "strum_macros 0.25.3", "unicode-width", ] +[[package]] +name = "common" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof?rev=0e948f3#0e948f3c28cbacecdd3020403c4841c0eb339213" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "fflonk", + "merlin 3.0.0", +] + +[[package]] +name = "common-path" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" + [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + [[package]] name = "const-oid" -version = "0.9.2" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.12", + "once_cell", + "tiny-keccak", +] [[package]] name = "constant_time_eq" -version = "0.2.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -1043,9 +1159,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core2" @@ -1067,37 +1183,36 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] [[package]] name = "cranelift-bforest" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b" +checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e" +checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" dependencies = [ - "arrayvec 0.7.2", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli 0.26.2", - "hashbrown 0.12.3", + "gimli 0.27.3", + "hashbrown 0.13.2", "log", "regalloc2", "smallvec", @@ -1106,33 +1221,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8" +checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4" +checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" [[package]] name = "cranelift-entity" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1" +checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e" +checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" dependencies = [ "cranelift-codegen", "log", @@ -1142,15 +1257,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59" +checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" [[package]] name = "cranelift-native" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49" +checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" dependencies = [ "cranelift-codegen", "libc", @@ -1159,9 +1274,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1" +checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1173,21 +1288,6 @@ dependencies = [ "wasmtime-types", ] -[[package]] -name = "crc" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" - [[package]] name = "crc32fast" version = "1.3.2" @@ -1197,48 +1297,30 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.8.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -1248,21 +1330,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-bigint" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", @@ -1301,22 +1371,13 @@ dependencies = [ "subtle", ] -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher 0.3.0", -] - [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.4", + "cipher", ] [[package]] @@ -1347,23 +1408,37 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.1" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" dependencies = [ "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", "fiat-crypto", - "packed_simd_2", - "platforms 3.0.2", + "platforms", + "rustc_version", "subtle", "zeroize", ] +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "cxx" -version = "1.0.95" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109308c20e8445959c2792e81871054c6a17e6976489a93d2769641a2ba5839c" +checksum = "8de00f15a6fa069c99b88c5c78c4541d0e7899a33b86f7480e23df2431fce0bc" dependencies = [ "cc", "cxxbridge-flags", @@ -1373,9 +1448,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.95" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf4c6755cdf10798b97510e0e2b3edb9573032bd9379de8fffa59d68165494f" +checksum = "0a71e1e631fa2f2f5f92e8b0d860a00c198c6771623a6cefcc863e3554f0d8d6" dependencies = [ "cc", "codespan-reporting", @@ -1383,72 +1458,37 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "cxxbridge-flags" -version = "1.0.95" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882074421238e84fe3b4c65d0081de34e5b323bf64555d3e61991f76eb64a7bb" +checksum = "6f3fed61d56ba497c4efef9144dfdbaa25aa58f2f6b3a7cf441d4591c583745c" [[package]] name = "cxxbridge-macro" -version = "1.0.95" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a076022ece33e7686fb76513518e219cca4fce5750a8ae6d1ce6c0f48fd1af9" +checksum = "8908e380a8efd42150c017b0cfa31509fc49b6d47f7cb6b33e93ffb8f4e3661e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", -] - -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "data-encoding-macro" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99" +checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1456,9 +1496,9 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772" +checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" dependencies = [ "data-encoding", "syn 1.0.109", @@ -1466,46 +1506,21 @@ dependencies = [ [[package]] name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "der" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56acb310e15652100da43d130af8d97b509e95af61aab1c5a7939ef24337ee17" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", "zeroize", ] -[[package]] -name = "der-parser" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" -dependencies = [ - "asn1-rs 0.3.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - [[package]] name = "der-parser" version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs", "displaydoc", "nom", "num-bigint", @@ -1514,44 +1529,33 @@ dependencies = [ ] [[package]] -name = "derive-syn-parse" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder" -version = "0.11.2" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "derive_builder_macro", + "powerfmt", ] [[package]] -name = "derive_builder_core" -version = "0.11.2" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "darling", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] -name = "derive_builder_macro" -version = "0.11.2" +name = "derive-syn-parse" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ - "derive_builder_core", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -1651,26 +1655,64 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] -name = "downcast" -version = "0.11.0" +name = "dleq_vrf" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-scale 0.0.10", + "ark-secret-scalar", + "ark-serialize", + "ark-std", + "ark-transcript", + "arrayvec 0.7.4", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "docify" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +checksum = "7cc4fd38aaa9fb98ac70794c82a00360d1e165a87fbf96a8a91f9dfc602aaee2" +dependencies = [ + "docify_macros", +] [[package]] -name = "downcast-rs" -version = "1.2.0" +name = "docify_macros" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63fa215f3a0d40fb2a221b3aa90d8e1fbb8379785a990cb60d62ac71ebdc6460" +dependencies = [ + "common-path", + "derive-syn-parse", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.48", + "termcolor", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "downcast" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dtoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dyn-clonable" @@ -1695,56 +1737,46 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" - -[[package]] -name = "ecdsa" -version = "0.14.8" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der 0.6.1", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", -] +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" [[package]] name = "ecdsa" -version = "0.16.7" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.7.6", + "der", "digest 0.10.7", - "elliptic-curve 0.13.5", - "rfc6979 0.4.0", - "signature 2.1.0", - "spki 0.7.2", + "elliptic-curve", + "rfc6979", + "signature", + "spki", ] [[package]] name = "ed25519" -version = "1.5.3" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "signature 1.6.4", + "pkcs8", + "signature", ] [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.1.1", "ed25519", - "rand 0.7.3", + "rand_core 0.6.4", "serde", - "sha2 0.9.9", + "sha2 0.10.8", + "subtle", "zeroize", ] @@ -1764,50 +1796,34 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.12.3" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.4.9", - "der 0.6.1", + "base16ct", + "crypto-bigint", "digest 0.10.7", - "ff 0.12.1", + "ff", "generic-array 0.14.7", - "group 0.12.1", - "hkdf", - "pem-rfc7468", - "pkcs8 0.9.0", + "group", + "pkcs8", "rand_core 0.6.4", - "sec1 0.3.0", + "sec1", "subtle", "zeroize", ] [[package]] -name = "elliptic-curve" -version = "0.13.5" +name = "encode_unicode" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" -dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.2", - "digest 0.10.7", - "ff 0.13.0", - "generic-array 0.14.7", - "group 0.13.0", - "pkcs8 0.10.2", - "rand_core 0.6.4", - "sec1 0.7.2", - "subtle", - "zeroize", -] +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "enum-as-inner" @@ -1823,9 +1839,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ "humantime", "is-terminal", @@ -1841,24 +1857,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] -name = "errno" -version = "0.3.1" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "errno" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1867,6 +1878,27 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite 0.2.13", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite 0.2.13", +] + [[package]] name = "exit-future" version = "0.2.0" @@ -1878,15 +1910,15 @@ dependencies = [ [[package]] name = "expander" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f360349150728553f92e4c997a16af8915f418d3a0f21b440d34c5632f16ed84" +checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7" dependencies = [ "blake2", "fs-err", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] @@ -1903,12 +1935,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fdlimit" @@ -1921,29 +1950,32 @@ dependencies = [ [[package]] name = "ff" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core 0.6.4", "subtle", ] [[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +name = "fflonk" +version = "0.1.0" +source = "git+https://github.com/w3f/fflonk#1e854f35e9a65d08b11a86291405cdc95baa0a35" dependencies = [ - "rand_core 0.6.4", - "subtle", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "merlin 3.0.0", ] [[package]] name = "fiat-crypto" -version = "0.1.20" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" [[package]] name = "file-per-thread-logger" @@ -1957,14 +1989,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.21" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", ] [[package]] @@ -1978,7 +2010,7 @@ dependencies = [ "futures-timer", "log", "num-traits", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "scale-info", ] @@ -2003,13 +2035,13 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "libz-sys", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] @@ -2030,16 +2062,16 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", ] [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -2053,15 +2085,15 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support", "frame-support-procedural", "frame-system", "linregress", "log", - "parity-scale-codec 3.5.0", - "paste 1.0.12", + "parity-scale-codec 3.6.9", + "paste 1.0.14", "scale-info", "serde", "sp-api", @@ -2070,7 +2102,7 @@ dependencies = [ "sp-io", "sp-runtime", "sp-runtime-interface", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-storage", "static_assertions", ] @@ -2078,7 +2110,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "Inflector", "array-bytes", @@ -2094,7 +2126,7 @@ dependencies = [ "lazy_static", "linked-hash-map", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "rand 0.8.5", "rand_pcg", "sc-block-builder", @@ -2112,12 +2144,13 @@ dependencies = [ "sp-database", "sp-externalities", "sp-inherents", + "sp-io", "sp-keystore", "sp-runtime", "sp-state-machine", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", "sp-storage", "sp-trie", + "sp-wasm-interface", "thiserror", "thousands", ] @@ -2125,56 +2158,57 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-election-provider-solution-type", "frame-support", "frame-system", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-arithmetic", "sp-core", "sp-npos-elections", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support", "frame-system", "frame-try-runtime", - "parity-scale-codec 3.5.0", + "log", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-tracing", ] [[package]] name = "frame-metadata" -version = "15.1.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" dependencies = [ "cfg-if", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", ] @@ -2182,106 +2216,120 @@ dependencies = [ [[package]] name = "frame-remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-recursion", "futures", + "indicatif", "jsonrpsee", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "serde", "sp-core", "sp-io", "sp-runtime", + "sp-state-machine", + "spinners", "substrate-rpc-client", "tokio", + "tokio-retry", ] [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "bitflags", + "aquamarine", + "bitflags 1.3.2", + "docify", "environmental", "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", "k256", "log", - "once_cell", - "parity-scale-codec 3.5.0", - "paste 1.0.12", + "macro_magic", + "parity-scale-codec 3.6.9", + "paste 1.0.14", "scale-info", "serde", + "serde_json", "smallvec", "sp-api", "sp-arithmetic", "sp-core", "sp-core-hashing-proc-macro", + "sp-debug-derive", + "sp-genesis-builder", "sp-inherents", "sp-io", + "sp-metadata-ir", "sp-runtime", "sp-staking", "sp-state-machine", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-tracing", "sp-weights", + "static_assertions", "tt-call", ] [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "Inflector", "cfg-expr", "derive-syn-parse", + "expander", "frame-support-procedural-tools", "itertools", + "macro_magic", "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ + "cfg-if", "frame-support", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-version", "sp-weights", ] @@ -2289,44 +2337,47 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sp-api", ] [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sp-api", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "fs-err" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] [[package]] name = "fs2" @@ -2338,16 +2389,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "fs4" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7672706608ecb74ab2e055c68327ffc25ae4cac1e12349204fd5fb0f3487cce2" -dependencies = [ - "rustix 0.37.19", - "windows-sys 0.48.0", -] - [[package]] name = "funty" version = "2.0.0" @@ -2356,9 +2397,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -2371,9 +2412,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -2381,15 +2422,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -2399,34 +2440,29 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" -version = "1.13.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" dependencies = [ - "fastrand", "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.9", - "waker-fn", + "pin-project-lite 0.2.13", ] [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] @@ -2436,21 +2472,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", - "rustls 0.20.8", - "webpki 0.22.0", + "rustls 0.20.9", + "webpki", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" @@ -2460,9 +2496,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -2471,7 +2507,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", "pin-utils", "slab", ] @@ -2528,25 +2564,15 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] -[[package]] -name = "ghash" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" -dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.5.3", -] - [[package]] name = "ghash" version = "0.5.0" @@ -2554,25 +2580,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug 0.3.0", - "polyval 0.6.0", + "polyval", ] [[package]] name = "gimli" -version = "0.26.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ "fallible-iterator", - "indexmap", + "indexmap 1.9.3", "stable_deref_trait", ] [[package]] name = "gimli" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -2582,26 +2608,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.10" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ - "aho-corasick 0.7.20", + "aho-corasick", "bstr", - "fnv", "log", - "regex", -] - -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff 0.12.1", - "rand_core 0.6.4", - "subtle", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -2610,16 +2625,16 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.0", + "ff", "rand_core 0.6.4", "subtle", ] [[package]] name = "h2" -version = "0.3.19" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -2627,7 +2642,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 2.1.0", "slab", "tokio", "tokio-util", @@ -2636,9 +2651,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.3.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -2669,7 +2684,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", ] [[package]] @@ -2678,9 +2693,15 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", ] +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + [[package]] name = "heck" version = "0.4.1" @@ -2698,18 +2719,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" [[package]] name = "hex" @@ -2725,9 +2737,9 @@ checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] name = "hkdf" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ "hmac 0.12.1", ] @@ -2772,6 +2784,15 @@ dependencies = [ "hmac 0.8.1", ] +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "hostname" version = "0.3.1" @@ -2785,9 +2806,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -2796,20 +2817,20 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", ] [[package]] name = "http-range-header" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" @@ -2819,9 +2840,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -2831,9 +2852,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -2845,8 +2866,8 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.9", - "socket2", + "pin-project-lite 0.2.13", + "socket2 0.5.5", "tokio", "tower-service", "tracing", @@ -2855,32 +2876,33 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ + "futures-util", "http", "hyper", "log", - "rustls 0.20.8", + "rustls 0.21.10", "rustls-native-certs", "tokio", "tokio-rustls", - "webpki-roots", + "webpki-roots 0.25.3", ] [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.48.0", + "windows-core 0.52.0", ] [[package]] @@ -2892,12 +2914,6 @@ dependencies = [ "cc", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.2.3" @@ -2911,9 +2927,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2921,19 +2937,19 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.7.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" dependencies = [ "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "if-watch" -version = "3.0.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" +checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" dependencies = [ "async-io", "core-foundation", @@ -2945,7 +2961,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows 0.34.0", + "windows", ] [[package]] @@ -2954,27 +2970,46 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "impl-serde" -version = "0.4.0" +name = "include_dir" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" dependencies = [ - "serde", + "include_dir_macros", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" +name = "include_dir_macros" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", ] [[package]] @@ -2994,6 +3029,29 @@ dependencies = [ "serde", ] +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + [[package]] name = "inout" version = "0.1.3" @@ -3021,32 +3079,13 @@ dependencies = [ "num-traits", ] -[[package]] -name = "interceptor" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" -dependencies = [ - "async-trait", - "bytes", - "log", - "rand 0.8.5", - "rtcp", - "rtp", - "thiserror", - "tokio", - "waitgroup", - "webrtc-srtp", - "webrtc-util", -] - [[package]] name = "io-lifetimes" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.4", "libc", "windows-sys 0.48.0", ] @@ -3059,32 +3098,31 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.5", "widestring", - "winapi", + "windows-sys 0.48.0", "winreg", ] [[package]] name = "ipnet" -version = "2.7.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix 0.37.19", - "windows-sys 0.48.0", + "hermit-abi 0.3.4", + "rustix 0.38.30", + "windows-sys 0.52.0", ] [[package]] @@ -3098,33 +3136,33 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.63" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] [[package]] name = "jsonrpsee" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" +checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" dependencies = [ "jsonrpsee-core", "jsonrpsee-http-client", @@ -3137,9 +3175,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" +checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a" dependencies = [ "futures-util", "http", @@ -3153,18 +3191,18 @@ dependencies = [ "tokio-rustls", "tokio-util", "tracing", - "webpki-roots", + "webpki-roots 0.25.3", ] [[package]] name = "jsonrpsee-core" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" +checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" dependencies = [ "anyhow", - "arrayvec 0.7.2", - "async-lock", + "arrayvec 0.7.4", + "async-lock 2.8.0", "async-trait", "beef", "futures-channel", @@ -3186,9 +3224,9 @@ dependencies = [ [[package]] name = "jsonrpsee-http-client" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc345b0a43c6bc49b947ebeb936e886a419ee3d894421790c969cc56040542ad" +checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43" dependencies = [ "async-trait", "hyper", @@ -3205,12 +3243,12 @@ dependencies = [ [[package]] name = "jsonrpsee-proc-macros" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" +checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a" dependencies = [ "heck", - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", "syn 1.0.109", @@ -3218,9 +3256,9 @@ dependencies = [ [[package]] name = "jsonrpsee-server" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" +checksum = "cf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4ba" dependencies = [ "futures-channel", "futures-util", @@ -3240,9 +3278,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" +checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" dependencies = [ "anyhow", "beef", @@ -3254,9 +3292,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" +checksum = "4e1b3975ed5d73f456478681a417128597acd6a2487855fdb7b4a3d4d195bf5e" dependencies = [ "http", "jsonrpsee-client-transport", @@ -3266,22 +3304,22 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", - "ecdsa 0.16.7", - "elliptic-curve 0.13.5", + "ecdsa", + "elliptic-curve", "once_cell", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -3307,9 +3345,9 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7a749456510c45f795e8b04a6a3e0976d0139213ecbf465843830ad55e2217" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ "kvdb", "num_cpus", @@ -3325,7 +3363,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -3336,50 +3374,40 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.144" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", - "winapi", + "windows-sys 0.48.0", ] -[[package]] -name = "libm" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" - -[[package]] -name = "libm" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" - [[package]] name = "libp2p" -version = "0.50.1" +version = "0.51.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" +checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe" dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.9", + "getrandom 0.2.12", "instant", - "libp2p-core 0.38.0", + "libp2p-allow-block-list", + "libp2p-connection-limits", + "libp2p-core", "libp2p-dns", "libp2p-identify", + "libp2p-identity", "libp2p-kad", "libp2p-mdns", "libp2p-metrics", - "libp2p-mplex", "libp2p-noise", "libp2p-ping", "libp2p-quic", @@ -3387,47 +3415,34 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-wasm-ext", - "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr 0.16.0", - "parking_lot 0.12.1", + "multiaddr", "pin-project", - "smallvec", ] [[package]] -name = "libp2p-core" -version = "0.38.0" +name = "libp2p-allow-block-list" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" +checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "log", - "multiaddr 0.16.0", - "multihash 0.16.3", - "multistream-select", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "prost", - "prost-build", - "rand 0.8.5", - "rw-stream-sink", - "sec1 0.3.0", - "sha2 0.10.6", - "smallvec", - "thiserror", - "unsigned-varint", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", "void", - "zeroize", ] [[package]] @@ -3443,8 +3458,8 @@ dependencies = [ "instant", "libp2p-identity", "log", - "multiaddr 0.17.1", - "multihash 0.17.0", + "multiaddr", + "multihash", "multistream-select", "once_cell", "parking_lot 0.12.1", @@ -3460,12 +3475,12 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" +checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" dependencies = [ "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", "parking_lot 0.12.1", "smallvec", @@ -3474,20 +3489,21 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.41.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" +checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" dependencies = [ "asynchronous-codec", + "either", "futures", "futures-timer", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "lru", - "prost", - "prost-build", - "prost-codec", + "quick-protobuf", + "quick-protobuf-codec", "smallvec", "thiserror", "void", @@ -3495,29 +3511,29 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2d584751cecb2aabaa56106be6be91338a60a0f4e420cf2af639204f596fc1" +checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" dependencies = [ - "bs58", + "bs58 0.4.0", "ed25519-dalek", "log", - "multiaddr 0.17.1", - "multihash 0.17.0", + "multiaddr", + "multihash", "quick-protobuf", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "zeroize", ] [[package]] name = "libp2p-kad" -version = "0.42.1" +version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" +checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "asynchronous-codec", "bytes", "either", @@ -3525,13 +3541,13 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "smallvec", "thiserror", "uint", @@ -3541,19 +3557,20 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" +checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" dependencies = [ "data-encoding", "futures", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.4.10", "tokio", "trust-dns-proto", "void", @@ -3561,11 +3578,11 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" +checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" dependencies = [ - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-identify", "libp2p-kad", "libp2p-ping", @@ -3573,40 +3590,22 @@ dependencies = [ "prometheus-client", ] -[[package]] -name = "libp2p-mplex" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core 0.38.0", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - [[package]] name = "libp2p-noise" -version = "0.41.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" +checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "log", "once_cell", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "snow", "static_assertions", "thiserror", @@ -3616,14 +3615,15 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" +checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" dependencies = [ + "either", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm", "log", "rand 0.8.5", @@ -3632,70 +3632,68 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha" +version = "0.7.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-tls", "log", "parking_lot 0.12.1", "quinn-proto", "rand 0.8.5", - "rustls 0.20.8", + "rustls 0.20.9", "thiserror", "tokio", ] [[package]] name = "libp2p-request-response" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" +checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" dependencies = [ "async-trait", - "bytes", "futures", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", - "unsigned-varint", ] [[package]] name = "libp2p-swarm" -version = "0.41.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" +checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" dependencies = [ "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm-derive", "log", - "pin-project", "rand 0.8.5", "smallvec", - "thiserror", "tokio", "void", ] [[package]] name = "libp2p-swarm-derive" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" +checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" dependencies = [ "heck", "quote", @@ -3704,17 +3702,17 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" +checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" dependencies = [ "futures", "futures-timer", "if-watch", "libc", - "libp2p-core 0.38.0", + "libp2p-core", "log", - "socket2", + "socket2 0.4.10", "tokio", ] @@ -3726,100 +3724,79 @@ checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.2", + "libp2p-core", "libp2p-identity", - "rcgen 0.10.0", - "ring", - "rustls 0.20.8", + "rcgen", + "ring 0.16.20", + "rustls 0.20.9", "thiserror", - "webpki 0.22.0", - "x509-parser 0.14.0", + "webpki", + "x509-parser", "yasna", ] [[package]] name = "libp2p-wasm-ext" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" +checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" dependencies = [ "futures", "js-sys", - "libp2p-core 0.38.0", + "libp2p-core", "parity-send-wrapper", "wasm-bindgen", "wasm-bindgen-futures", ] -[[package]] -name = "libp2p-webrtc" -version = "0.4.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" -dependencies = [ - "async-trait", - "asynchronous-codec", - "bytes", - "futures", - "futures-timer", - "hex", - "if-watch", - "libp2p-core 0.38.0", - "libp2p-noise", - "log", - "multihash 0.16.3", - "prost", - "prost-build", - "prost-codec", - "rand 0.8.5", - "rcgen 0.9.3", - "serde", - "stun", - "thiserror", - "tinytemplate", - "tokio", - "tokio-util", - "webrtc", -] - [[package]] name = "libp2p-websocket" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" +checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core 0.38.0", + "libp2p-core", "log", "parking_lot 0.12.1", "quicksink", "rw-stream-sink", "soketto", "url", - "webpki-roots", + "webpki-roots 0.22.6", ] [[package]] name = "libp2p-yamux" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" +checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" dependencies = [ "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", - "parking_lot 0.12.1", "thiserror", "yamux", ] +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "librocksdb-sys" -version = "0.10.0+7.9.2" +version = "0.11.0+8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe4d5874f5ff2bc616e55e8c6086d478fcda13faf9495768a4aa1c22042d30b" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" dependencies = [ "bindgen", "bzip2-sys", @@ -3880,9 +3857,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.9" +version = "1.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" dependencies = [ "cc", "pkg-config", @@ -3891,9 +3868,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" dependencies = [ "cc", ] @@ -3915,9 +3892,9 @@ dependencies = [ [[package]] name = "linregress" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" +checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" dependencies = [ "nalgebra", ] @@ -3930,9 +3907,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "lite-json" @@ -3954,9 +3931,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -3964,17 +3941,17 @@ dependencies = [ [[package]] name = "log" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lru" -version = "0.8.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" dependencies = [ - "hashbrown 0.12.3", + "hashbrown 0.13.2", ] [[package]] @@ -4015,6 +3992,60 @@ dependencies = [ "libc", ] +[[package]] +name = "macro_magic" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aee866bfee30d2d7e83835a4574aad5b45adba4cc807f2a3bbba974e5d4383c9" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "macro_magic_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e766a20fd9c72bab3e1e64ed63f36bd08410e75803813df210d1ce297d7ad00" +dependencies = [ + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d710e1214dffbab3b5dacb21475dde7d6ed84c69ff722b3a47a782668d44fbac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "macro_magic_macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fb85ec1620619edf2984a7693497d4ec88a9665d8b87e942856884c92dbf2a" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + [[package]] name = "match_cfg" version = "0.1.0" @@ -4027,7 +4058,7 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -4038,36 +4069,27 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" dependencies = [ "autocfg", "rawpointer", ] -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memfd" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "rustix 0.37.19", + "rustix 0.38.30", ] [[package]] @@ -4079,15 +4101,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.8.0" @@ -4106,12 +4119,6 @@ dependencies = [ "hash-db", ] -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - [[package]] name = "merlin" version = "2.0.1" @@ -4125,19 +4132,22 @@ dependencies = [ ] [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "merlin" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] [[package]] -name = "miniz_oxide" -version = "0.6.2" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" @@ -4150,9 +4160,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -4186,24 +4196,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "multiaddr" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "multibase", - "multihash 0.16.3", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", -] - [[package]] name = "multiaddr" version = "0.17.1" @@ -4215,7 +4207,7 @@ dependencies = [ "data-encoding", "log", "multibase", - "multihash 0.17.0", + "multihash", "percent-encoding", "serde", "static_assertions", @@ -4236,9 +4228,9 @@ dependencies = [ [[package]] name = "multihash" -version = "0.16.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "blake2b_simd", "blake2s_simd", @@ -4246,29 +4238,18 @@ dependencies = [ "core2", "digest 0.10.7", "multihash-derive", - "sha2 0.10.6", + "sha2 0.10.8", "sha3", "unsigned-varint", ] -[[package]] -name = "multihash" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" -dependencies = [ - "core2", - "multihash-derive", - "unsigned-varint", -] - [[package]] name = "multihash-derive" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro-error", "proc-macro2", "quote", @@ -4298,9 +4279,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.2" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" dependencies = [ "approx", "matrixmultiply", @@ -4314,9 +4295,9 @@ dependencies = [ [[package]] name = "nalgebra-macros" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" dependencies = [ "proc-macro2", "quote", @@ -4351,7 +4332,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags", + "bitflags 1.3.2", "byteorder", "libc", "netlink-packet-core", @@ -4366,7 +4347,7 @@ checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ "anyhow", "byteorder", - "paste 1.0.12", + "paste 1.0.14", "thiserror", ] @@ -4404,10 +4385,9 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.6.5", ] [[package]] @@ -4434,9 +4414,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -4445,9 +4425,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -4458,7 +4438,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "itoa", ] @@ -4479,58 +4459,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", - "num-bigint", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.4", "libc", ] [[package]] -name = "object" -version = "0.29.0" +name = "number_prefix" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "crc32fast", - "hashbrown 0.12.3", - "indexmap", - "memchr", -] +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.30.3" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", "memchr", ] [[package]] -name = "oid-registry" -version = "0.4.0" +name = "object" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ - "asn1-rs 0.3.1", + "memchr", ] [[package]] @@ -4539,14 +4515,14 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs", ] [[package]] name = "once_cell" -version = "1.17.2" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -4566,121 +4542,90 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "p256" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" -dependencies = [ - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2 0.10.6", -] - -[[package]] -name = "p384" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" -dependencies = [ - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2 0.10.6", -] - -[[package]] -name = "packed_simd_2" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" -dependencies = [ - "cfg-if", - "libm 0.1.4", -] - [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support", "frame-system", + "log", "pallet-timestamp", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-application-crypto", "sp-consensus-aura", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-burning" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "pallet-balances", "pallet-timestamp", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-storage", ] [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-dao" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "env_logger", "frame-benchmarking", @@ -4691,20 +4636,20 @@ dependencies = [ "pallet-membership", "pallet-tfgrid", "pallet-timestamp", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "tfchain-support", ] [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4712,7 +4657,7 @@ dependencies = [ "log", "pallet-authorship", "pallet-session", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-application-crypto", "sp-consensus-grandpa", @@ -4721,111 +4666,114 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-kvstore" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-storage", ] [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-runtime-upgrade" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-io", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-weights", ] [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", "log", "pallet-timestamp", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", "sp-session", "sp-staking", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-state-machine", + "sp-std 8.0.0", "sp-trie", ] [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "pallet-session", "pallet-staking", + "parity-scale-codec 3.6.9", "rand 0.8.5", "sp-runtime", "sp-session", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-smart-contract" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "env_logger", "frame-benchmarking", @@ -4840,7 +4788,7 @@ dependencies = [ "pallet-tfgrid", "pallet-tft-price", "pallet-timestamp", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.11.2", "parking_lot 0.12.1", "scale-info", @@ -4848,7 +4796,7 @@ dependencies = [ "sp-io", "sp-keystore", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "substrate-fixed", "substrate-validator-set", "tfchain-support", @@ -4857,7 +4805,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4866,19 +4814,19 @@ dependencies = [ "log", "pallet-authorship", "pallet-session", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-application-crypto", "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-tfgrid" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "env_logger", "frame-benchmarking", @@ -4892,39 +4840,41 @@ dependencies = [ "pallet-collective", "pallet-membership", "pallet-timestamp", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde_json", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-storage", + "sp-weights", "tfchain-support", "valip", ] [[package]] name = "pallet-tft-bridge" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "pallet-balances", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-storage", "substrate-stellar-sdk", ] [[package]] name = "pallet-tft-price" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -4933,7 +4883,7 @@ dependencies = [ "log", "pallet-authorship", "pallet-session", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.11.2", "scale-info", "serde", @@ -4942,7 +4892,7 @@ dependencies = [ "sp-io", "sp-keystore", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "substrate-fixed", "substrate-validator-set", "tfchain-support", @@ -4951,45 +4901,46 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-inherents", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", + "sp-storage", "sp-timestamp", ] [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sp-api", "sp-blockchain", "sp-core", @@ -5001,10 +4952,10 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "pallet-transaction-payment", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sp-api", "sp-runtime", "sp-weights", @@ -5013,22 +4964,22 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "pallet-validator" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5036,20 +4987,20 @@ dependencies = [ "pallet-collective", "pallet-membership", "pallet-session", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-io", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "substrate-validator-set", ] [[package]] name = "parity-db" -version = "0.4.8" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4890dcb9556136a4ec2b0c51fa4a08c8b733b829506af8fff2e853f3a065985b" +checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" dependencies = [ "blake2", "crc32fast", @@ -5063,6 +5014,7 @@ dependencies = [ "rand 0.8.5", "siphasher", "snap", + "winapi", ] [[package]] @@ -5071,7 +5023,7 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "byte-slice-cast", "impl-trait-for-tuples", "parity-scale-codec-derive 2.3.1", @@ -5079,16 +5031,16 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.5.0" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ddb756ca205bd108aee3c62c6d3c994e1df84a59b9d6d4a5ea42ee1fd5a9a28" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "bitvec", "byte-slice-cast", "bytes", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.1.4", + "parity-scale-codec-derive 3.6.9", "serde", ] @@ -5098,7 +5050,7 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", "syn 1.0.109", @@ -5106,11 +5058,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 2.0.1", "proc-macro2", "quote", "syn 1.0.109", @@ -5130,9 +5082,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -5152,7 +5104,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", + "parking_lot_core 0.9.9", ] [[package]] @@ -5171,17 +5123,23 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.4.1", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.48.5", ] +[[package]] +name = "partial_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" + [[package]] name = "paste" version = "0.1.18" @@ -5194,9 +5152,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "paste-impl" @@ -5240,36 +5198,28 @@ dependencies = [ "base64 0.13.1", ] -[[package]] -name = "pem-rfc7468" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.6.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70" +checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.6.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb" +checksum = "bcd6ab1236bbdb3a49027e920e693192ebfe8913f6d60e294de57463a493cfde" dependencies = [ "pest", "pest_generator", @@ -5277,56 +5227,56 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.6.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e" +checksum = "2a31940305ffc96863a735bef7c7994a00b325a7138fdbc5bda0f1a0476d3275" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "pest_meta" -version = "2.6.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411" +checksum = "a7ff62f5259e53b78d1af898941cdcdccfae7385cf7d793a6e55de5d05bb4b7d" dependencies = [ "once_cell", "pest", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.1.0", ] [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] @@ -5337,9 +5287,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -5347,94 +5297,76 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der 0.6.1", - "spki 0.6.0", -] - [[package]] name = "pkcs8" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.6", - "spki 0.7.2", + "der", + "spki", ] [[package]] name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "platforms" -version = "2.0.0" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" [[package]] name = "platforms" -version = "3.0.2" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" [[package]] name = "polling" -version = "2.8.0" +version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41" dependencies = [ - "autocfg", - "bitflags", "cfg-if", "concurrent-queue", - "libc", - "log", - "pin-project-lite 0.2.9", - "windows-sys 0.48.0", + "pin-project-lite 0.2.13", + "rustix 0.38.30", + "tracing", + "windows-sys 0.52.0", ] [[package]] name = "poly1305" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ "cpufeatures", "opaque-debug 0.3.0", - "universal-hash 0.4.1", + "universal-hash", ] [[package]] name = "polyval" -version = "0.5.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash 0.4.1", + "universal-hash", ] [[package]] -name = "polyval" -version = "0.6.0" +name = "portable-atomic" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.5.1", -] +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" @@ -5482,11 +5414,21 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", @@ -5505,6 +5447,16 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -5537,20 +5489,20 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro-warning" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e99670bafb56b9a106419397343bdbc8b8742c3cc449fec6345f86173f47cd4" +checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "proc-macro2" -version = "1.0.59" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" dependencies = [ "unicode-ident", ] @@ -5571,25 +5523,25 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" +checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" dependencies = [ "dtoa", "itoa", "parking_lot 0.12.1", - "prometheus-client-derive-text-encode", + "prometheus-client-derive-encode", ] [[package]] -name = "prometheus-client-derive-text-encode" -version = "0.3.0" +name = "prometheus-client-derive-encode" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] @@ -5615,7 +5567,7 @@ dependencies = [ "log", "multimap", "petgraph", - "prettyplease", + "prettyplease 0.1.25", "prost", "prost-types", "regex", @@ -5624,19 +5576,6 @@ dependencies = [ "which", ] -[[package]] -name = "prost-codec" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" -dependencies = [ - "asynchronous-codec", - "bytes", - "prost", - "thiserror", - "unsigned-varint", -] - [[package]] name = "prost-derive" version = "0.11.9" @@ -5683,6 +5622,19 @@ dependencies = [ "byteorder", ] +[[package]] +name = "quick-protobuf-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b" +dependencies = [ + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror", + "unsigned-varint", +] + [[package]] name = "quicksink" version = "0.1.2" @@ -5696,27 +5648,27 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.3" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" +checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" dependencies = [ "bytes", "rand 0.8.5", - "ring", + "ring 0.16.20", "rustc-hash", - "rustls 0.20.8", + "rustls 0.20.9", "slab", "thiserror", "tinyvec", "tracing", - "webpki 0.22.0", + "webpki", ] [[package]] name = "quote" -version = "1.0.28" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -5786,7 +5738,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.12", ] [[package]] @@ -5815,9 +5767,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -5825,27 +5777,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "rcgen" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" -dependencies = [ - "pem", - "ring", - "time 0.3.21", - "x509-parser 0.13.2", - "yasna", ] [[package]] @@ -5855,8 +5792,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", - "ring", - "time 0.3.21", + "ring 0.16.20", + "time", "yasna", ] @@ -5866,54 +5803,54 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", + "getrandom 0.2.12", + "libredox", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" +checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "regalloc2" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" dependencies = [ "fxhash", "log", @@ -5923,22 +5860,34 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.3" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ - "aho-corasick 1.0.1", + "aho-corasick", "memchr", - "regex-syntax 0.7.2", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] name = "regex-automata" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ - "regex-syntax 0.6.29", + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", ] [[package]] @@ -5949,21 +5898,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" - -[[package]] -name = "region" -version = "3.0.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" -dependencies = [ - "bitflags", - "libc", - "mach", - "winapi", -] +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "resolv-conf" @@ -5977,23 +5914,27 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint 0.4.9", "hmac 0.12.1", - "zeroize", + "subtle", ] [[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +name = "ring" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof?rev=0e948f3#0e948f3c28cbacecdd3020403c4841c0eb339213" dependencies = [ - "hmac 0.12.1", - "subtle", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "common", + "fflonk", + "merlin 3.0.0", ] [[package]] @@ -6005,42 +5946,45 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi", ] [[package]] -name = "rocksdb" -version = "0.20.1" +name = "ring" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "015439787fce1e75d55f279078d33ff14b4af5d93d995e8838ee4631301c8a99" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" dependencies = [ + "cc", + "getrandom 0.2.12", "libc", - "librocksdb-sys", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", ] [[package]] -name = "rpassword" -version = "7.2.0" +name = "rocksdb" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" dependencies = [ "libc", - "rtoolbox", - "winapi", + "librocksdb-sys", ] [[package]] -name = "rtcp" -version = "0.7.2" +name = "rpassword" +version = "7.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" dependencies = [ - "bytes", - "thiserror", - "webrtc-util", + "libc", + "rtoolbox", + "windows-sys 0.48.0", ] [[package]] @@ -6060,26 +6004,12 @@ dependencies = [ [[package]] name = "rtoolbox" -version = "0.0.1" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" dependencies = [ "libc", - "winapi", -] - -[[package]] -name = "rtp" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" -dependencies = [ - "async-trait", - "bytes", - "rand 0.8.5", - "serde", - "thiserror", - "webrtc-util", + "windows-sys 0.48.0", ] [[package]] @@ -6106,7 +6036,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.21", ] [[package]] @@ -6120,11 +6050,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.14" +version = "0.36.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e4d67015953998ad0eb82887a0eb0129e18a7e2f3b7b0f6c422fddcd503d62" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -6134,48 +6064,46 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.19" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags", + "bitflags 2.4.2", "errno", - "io-lifetimes", "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.19.1" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" dependencies = [ - "base64 0.13.1", "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", + "ring 0.16.20", + "sct", + "webpki", ] [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", + "ring 0.17.7", + "rustls-webpki", + "sct", ] [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -6185,18 +6113,28 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "base64 0.21.2", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "rw-stream-sink" @@ -6211,15 +6149,15 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "safe_arch" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" dependencies = [ "bytemuck", ] @@ -6236,7 +6174,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "log", "sp-core", @@ -6247,12 +6185,12 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "futures", "futures-timer", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sc-block-builder", "sc-client-api", "sc-proposer-metrics", @@ -6270,9 +6208,9 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sc-client-api", "sp-api", "sp-block-builder", @@ -6285,7 +6223,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "memmap2", "sc-chain-spec-derive", @@ -6304,28 +6242,28 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", "chrono", "clap", "fdlimit", "futures", - "libp2p", + "libp2p-identity", "log", "names", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "rand 0.8.5", "regex", "rpassword", @@ -6333,7 +6271,6 @@ dependencies = [ "sc-client-db", "sc-keystore", "sc-network", - "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -6355,12 +6292,12 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "fnv", "futures", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "sc-executor", "sc-transaction-pool-api", @@ -6371,9 +6308,9 @@ dependencies = [ "sp-core", "sp-database", "sp-externalities", - "sp-keystore", "sp-runtime", "sp-state-machine", + "sp-statement-store", "sp-storage", "substrate-prometheus-endpoint", ] @@ -6381,7 +6318,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "hash-db", "kvdb", @@ -6390,7 +6327,7 @@ dependencies = [ "linked-hash-map", "log", "parity-db", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "sc-client-api", "sc-state-db", @@ -6407,12 +6344,12 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", "mockall", "parking_lot 0.12.1", @@ -6432,12 +6369,12 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "futures", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sc-block-builder", "sc-client-api", "sc-consensus", @@ -6461,9 +6398,9 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "array-bytes", "async-trait", "dyn-clone", @@ -6472,7 +6409,7 @@ dependencies = [ "futures", "futures-timer", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "rand 0.8.5", "sc-block-builder", @@ -6483,6 +6420,7 @@ dependencies = [ "sc-network-common", "sc-network-gossip", "sc-telemetry", + "sc-transaction-pool-api", "sc-utils", "serde_json", "sp-api", @@ -6501,13 +6439,13 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "futures", "futures-timer", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sc-client-api", "sc-consensus", "sc-telemetry", @@ -6524,14 +6462,13 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "lru", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "sc-executor-common", - "sc-executor-wasmi", "sc-executor-wasmtime", + "schnellru", "sp-api", "sp-core", "sp-externalities", @@ -6542,46 +6479,30 @@ dependencies = [ "sp-version", "sp-wasm-interface", "tracing", - "wasmi", ] [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", "sp-wasm-interface", "thiserror", "wasm-instrument", - "wasmi", -] - -[[package]] -name = "sc-executor-wasmi" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" -dependencies = [ - "log", - "sc-allocator", - "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", - "wasmi", ] [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "anyhow", "cfg-if", "libc", "log", - "once_cell", - "rustix 0.36.14", + "rustix 0.36.17", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -6592,7 +6513,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "ansi_term", "futures", @@ -6608,10 +6529,9 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", - "async-trait", "parking_lot 0.12.1", "serde_json", "sp-application-crypto", @@ -6623,7 +6543,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", "async-channel", @@ -6638,47 +6558,43 @@ dependencies = [ "libp2p", "linked_hash_set", "log", - "lru", "mockall", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", + "partial_sort", "pin-project", "rand 0.8.5", - "sc-block-builder", "sc-client-api", - "sc-consensus", "sc-network-common", - "sc-peerset", "sc-utils", "serde", "serde_json", "smallvec", - "snow", "sp-arithmetic", "sp-blockchain", - "sp-consensus", "sp-core", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", "unsigned-varint", + "wasm-timer", "zeroize", ] [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ + "async-channel", "cid", "futures", - "libp2p", + "libp2p-identity", "log", "prost", "prost-build", "sc-client-api", "sc-network", - "sc-network-common", "sp-blockchain", "sp-runtime", "thiserror", @@ -6688,45 +6604,33 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "array-bytes", "async-trait", - "bitflags", - "bytes", + "bitflags 1.3.2", "futures", - "futures-timer", - "libp2p", - "parity-scale-codec 3.5.0", + "libp2p-identity", + "parity-scale-codec 3.6.9", "prost-build", "sc-consensus", - "sc-peerset", - "sc-utils", - "serde", - "smallvec", - "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", - "zeroize", ] [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "futures", "futures-timer", "libp2p", "log", - "lru", "sc-network", "sc-network-common", - "sc-peerset", + "schnellru", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -6735,19 +6639,18 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", + "async-channel", "futures", - "libp2p", + "libp2p-identity", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "prost", "prost-build", "sc-client-api", "sc-network", - "sc-network-common", - "sc-peerset", "sp-blockchain", "sp-core", "sp-runtime", @@ -6757,26 +6660,26 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", + "async-channel", "async-trait", "fork-tree", "futures", "futures-timer", "libp2p", "log", - "lru", "mockall", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "prost", "prost-build", "sc-client-api", "sc-consensus", "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", + "schnellru", "smallvec", "sp-arithmetic", "sp-blockchain", @@ -6791,17 +6694,15 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", "futures", "libp2p", "log", - "parity-scale-codec 3.5.0", - "pin-project", + "parity-scale-codec 3.6.9", "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", "sp-consensus", "sp-runtime", @@ -6811,7 +6712,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", "bytes", @@ -6821,41 +6722,31 @@ dependencies = [ "hyper", "hyper-rustls", "libp2p", + "log", "num_cpus", "once_cell", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "rand 0.8.5", "sc-client-api", "sc-network", "sc-network-common", - "sc-peerset", + "sc-transaction-pool-api", "sc-utils", "sp-api", "sp-core", + "sp-externalities", + "sp-keystore", "sp-offchain", "sp-runtime", "threadpool", "tracing", ] -[[package]] -name = "sc-peerset" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" -dependencies = [ - "futures", - "libp2p", - "log", - "sc-utils", - "serde_json", - "wasm-timer", -] - [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -6864,12 +6755,12 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "futures", "jsonrpsee", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "sc-block-builder", "sc-chain-spec", @@ -6887,6 +6778,7 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-session", + "sp-statement-store", "sp-version", "tokio", ] @@ -6894,10 +6786,10 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "jsonrpsee", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sc-chain-spec", "sc-transaction-pool-api", "scale-info", @@ -6913,7 +6805,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "http", "jsonrpsee", @@ -6928,7 +6820,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", "futures", @@ -6936,11 +6828,12 @@ dependencies = [ "hex", "jsonrpsee", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "sc-chain-spec", "sc-client-api", "sc-transaction-pool-api", + "sc-utils", "serde", "sp-api", "sp-blockchain", @@ -6948,13 +6841,14 @@ dependencies = [ "sp-runtime", "sp-version", "thiserror", + "tokio", "tokio-stream", ] [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "directories", @@ -6963,7 +6857,7 @@ dependencies = [ "futures-timer", "jsonrpsee", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "pin-project", "rand 0.8.5", @@ -6981,11 +6875,9 @@ dependencies = [ "sc-network-light", "sc-network-sync", "sc-network-transactions", - "sc-offchain", "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", - "sc-storage-monitor", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -7020,34 +6912,18 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "sp-core", ] -[[package]] -name = "sc-storage-monitor" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" -dependencies = [ - "clap", - "fs4", - "futures", - "log", - "sc-client-db", - "sc-utils", - "sp-core", - "thiserror", - "tokio", -] - [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "futures", "libc", @@ -7060,13 +6936,13 @@ dependencies = [ "serde_json", "sp-core", "sp-io", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "chrono", "futures", @@ -7085,7 +6961,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "ansi_term", "atty", @@ -7093,12 +6969,10 @@ dependencies = [ "lazy_static", "libc", "log", - "once_cell", "parking_lot 0.12.1", "regex", "rustc-hash", "sc-client-api", - "sc-rpc-server", "sc-tracing-proc-macro", "serde", "sp-api", @@ -7116,26 +6990,25 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", - "num-traits", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "sc-client-api", "sc-transaction-pool-api", @@ -7154,13 +7027,15 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "futures", "log", + "parity-scale-codec 3.6.9", "serde", "sp-blockchain", + "sp-core", "sp-runtime", "thiserror", ] @@ -7168,7 +7043,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-channel", "futures", @@ -7182,25 +7057,25 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.7.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b569c32c806ec3abdf3b5869fb8bf1e0d275a7c1c9b0b05603d9464632649edf" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ "bitvec", "cfg-if", "derive_more", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info-derive", "serde", ] [[package]] name = "scale-info-derive" -version = "2.6.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53012eae69e5aa5c14671942a5dd47de59d4cdcff8532a6dd0e081faf1119482" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", "syn 1.0.109", @@ -7208,11 +7083,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] @@ -7221,7 +7096,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "cfg-if", "hashbrown 0.13.2", ] @@ -7236,7 +7111,7 @@ dependencies = [ "arrayvec 0.5.2", "curve25519-dalek 2.1.3", "getrandom 0.1.16", - "merlin", + "merlin 2.0.1", "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", @@ -7246,72 +7121,36 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scratch" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" - -[[package]] -name = "sct" -version = "0.6.1" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] +checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" [[package]] name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sdp" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" -dependencies = [ - "rand 0.8.5", - "substring", - "thiserror", - "url", -] - -[[package]] -name = "sec1" -version = "0.3.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "base16ct 0.1.1", - "der 0.6.1", - "generic-array 0.14.7", - "pkcs8 0.9.0", - "subtle", - "zeroize", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] name = "sec1" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "base16ct 0.2.0", - "der 0.7.6", + "base16ct", + "der", "generic-array 0.14.7", - "pkcs8 0.10.2", + "pkcs8", "subtle", "zeroize", ] @@ -7345,11 +7184,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -7358,9 +7197,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -7377,9 +7216,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" dependencies = [ "serde", ] @@ -7392,29 +7231,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.163" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.163" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ "itoa", "ryu", @@ -7423,9 +7262,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.2" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93107647184f6027e3b7dcb2e11034cf95ffa1e3a682c67951963ac69c1c007d" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -7443,17 +7282,6 @@ dependencies = [ "opaque-debug 0.3.0", ] -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.8.2" @@ -7481,9 +7309,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -7502,18 +7330,18 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook-registry" @@ -7526,19 +7354,9 @@ dependencies = [ [[package]] name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -7553,21 +7371,21 @@ dependencies = [ "approx", "num-complex", "num-traits", - "paste 1.0.12", + "paste 1.0.14", "wide", ] [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -7580,43 +7398,53 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3b187f0231d56fe41bfb12034819dd2bf336422a5866de41bc3fec4b2e3883e8" [[package]] name = "snap" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "snow" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" +checksum = "58021967fd0a5eeeb23b08df6cc244a4d4a5b4aec1d27c9e02fad1a58b4cd74e" dependencies = [ - "aes-gcm 0.9.4", + "aes-gcm", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.1", + "curve25519-dalek 4.1.1", "rand_core 0.6.4", - "ring", + "ring 0.17.7", "rustc_version", - "sha2 0.10.6", + "sha2 0.10.8", "subtle", ] [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "sodalite" version = "0.4.0" @@ -7646,18 +7474,19 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "hash-db", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-api-proc-macro", "sp-core", + "sp-externalities", "sp-metadata-ir", "sp-runtime", "sp-state-machine", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-trie", "sp-version", "thiserror", @@ -7666,66 +7495,65 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "Inflector", "blake2", "expander", - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "sp-application-crypto" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-core", "sp-io", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-arithmetic" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "integer-sqrt", "num-traits", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "static_assertions", ] [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", "sp-api", "sp-inherents", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "futures", "log", - "lru", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", + "schnellru", "sp-api", "sp-consensus", "sp-database", @@ -7737,7 +7565,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "futures", @@ -7752,50 +7580,47 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", "sp-inherents", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-timestamp", ] [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", "sp-core", "sp-inherents", - "sp-keystore", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-timestamp", ] [[package]] name = "sp-consensus-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "finality-grandpa", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-api", @@ -7803,31 +7628,33 @@ dependencies = [ "sp-core", "sp-keystore", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-timestamp", ] [[package]] name = "sp-core" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "array-bytes", - "bitflags", + "arrayvec 0.7.4", + "bandersnatch_vrfs", + "bitflags 1.3.2", "blake2", "bounded-collections", - "bs58", + "bs58 0.5.0", "dyn-clonable", "ed25519-zebra", "futures", @@ -7837,10 +7664,10 @@ dependencies = [ "lazy_static", "libsecp256k1", "log", - "merlin", - "parity-scale-codec 3.5.0", + "merlin 2.0.1", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", - "paste 1.0.12", + "paste 1.0.14", "primitive-types", "rand 0.8.5", "regex", @@ -7853,44 +7680,43 @@ dependencies = [ "sp-debug-derive", "sp-externalities", "sp-runtime-interface", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-storage", "ss58-registry", "substrate-bip39", "thiserror", "tiny-bip39", + "tracing", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "9.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "blake2b_simd", "byteorder", "digest 0.10.7", - "sha2 0.10.6", + "sha2 0.10.8", "sha3", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", "twox-hash", ] [[package]] name = "sp-core-hashing-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "9.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "proc-macro2", "quote", "sp-core-hashing", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -7898,52 +7724,60 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "sp-externalities" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "environmental", - "parity-scale-codec 3.5.0", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "parity-scale-codec 3.6.9", + "sp-std 8.0.0", "sp-storage", ] +[[package]] +name = "sp-genesis-builder" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" +dependencies = [ + "serde_json", + "sp-api", + "sp-runtime", + "sp-std 8.0.0", +] + [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "impl-trait-for-tuples", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", - "sp-core", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "thiserror", ] [[package]] name = "sp-io" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "bytes", - "ed25519", "ed25519-dalek", - "futures", "libsecp256k1", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "rustversion", "secp256k1", "sp-core", @@ -7951,7 +7785,7 @@ dependencies = [ "sp-keystore", "sp-runtime-interface", "sp-state-machine", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-tracing", "sp-trie", "tracing", @@ -7960,24 +7794,22 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "lazy_static", "sp-core", "sp-runtime", - "strum", + "strum 0.24.1", ] [[package]] name = "sp-keystore" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "0.27.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "futures", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", - "serde", "sp-core", "sp-externalities", "thiserror", @@ -7986,41 +7818,41 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "thiserror", - "zstd 0.12.3+zstd.1.5.2", + "zstd 0.12.4", ] [[package]] name = "sp-metadata-ir" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-metadata", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-arithmetic", "sp-core", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "sp-api", "sp-core", @@ -8029,8 +7861,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "backtrace", "lazy_static", @@ -8040,7 +7872,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "rustc-hash", "serde", @@ -8049,15 +7881,15 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "either", "hash256-std-hasher", "impl-trait-for-tuples", "log", - "parity-scale-codec 3.5.0", - "paste 1.0.12", + "parity-scale-codec 3.6.9", + "paste 1.0.14", "rand 0.8.5", "scale-info", "serde", @@ -8065,22 +7897,22 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-io", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-weights", ] [[package]] name = "sp-runtime-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "bytes", "impl-trait-for-tuples", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-storage", "sp-tracing", "sp-wasm-interface", @@ -8089,61 +7921,88 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "Inflector", - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-api", "sp-core", + "sp-keystore", "sp-runtime", "sp-staking", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "impl-trait-for-tuples", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-core", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-state-machine" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "0.28.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "hash-db", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "rand 0.8.5", "smallvec", "sp-core", "sp-externalities", "sp-panic-handler", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-trie", "thiserror", "tracing", + "trie-db", +] + +[[package]] +name = "sp-statement-store" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" +dependencies = [ + "aes-gcm", + "curve25519-dalek 4.1.1", + "ed25519-dalek", + "hkdf", + "parity-scale-codec 3.6.9", + "rand 0.8.5", + "scale-info", + "sha2 0.10.8", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-externalities", + "sp-runtime", + "sp-runtime-interface", + "sp-std 8.0.0", + "thiserror", + "x25519-dalek 2.0.1", ] [[package]] @@ -8153,44 +8012,42 @@ source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#6f [[package]] name = "sp-std" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" [[package]] name = "sp-storage" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "impl-serde", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "ref-cast", "serde", "sp-debug-derive", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", - "futures-timer", - "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sp-inherents", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "thiserror", ] [[package]] name = "sp-tracing" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "parity-scale-codec 3.6.9", + "sp-std 8.0.0", "tracing", "tracing-core", "tracing-subscriber", @@ -8199,7 +8056,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "sp-api", "sp-runtime", @@ -8208,36 +8065,35 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", - "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-core", "sp-inherents", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-trie", ] [[package]] name = "sp-trie" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.7", "hash-db", "hashbrown 0.13.2", "lazy_static", "memory-db", "nohash-hasher", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "scale-info", "schnellru", "sp-core", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "thiserror", "tracing", "trie-db", @@ -8246,59 +8102,58 @@ dependencies = [ [[package]] name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "impl-serde", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "parity-wasm", "scale-info", "serde", "sp-core-hashing-proc-macro", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-version-proc-macro", "thiserror", ] [[package]] name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "sp-wasm-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", - "parity-scale-codec 3.5.0", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", - "wasmi", + "parity-scale-codec 3.6.9", + "sp-std 8.0.0", "wasmtime", ] [[package]] name = "sp-weights" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "smallvec", "sp-arithmetic", "sp-core", "sp-debug-derive", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", ] [[package]] @@ -8308,30 +8163,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "spki" -version = "0.6.0" +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spinners" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "a0ef947f358b9c238923f764c72a4a9d42f2d637c46e059dbd319d6e7cfb4f82" dependencies = [ - "base64ct", - "der 0.6.1", + "lazy_static", + "maplit", + "strum 0.24.1", ] [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.6", + "der", ] [[package]] name = "ss58-registry" -version = "1.40.0" +version = "1.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47a8ad42e5fc72d5b1eb104a5546937eaf39843499948bb666d6e93c62423b" +checksum = "3c0c74081753a8ce1c8eb10b9f262ab6f7017e5ad3317c17a54c7ab65fcb3c6e" dependencies = [ "Inflector", "num-format", @@ -8360,7 +8222,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -8394,9 +8256,15 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros", + "strum_macros 0.24.3", ] +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" + [[package]] name = "strum_macros" version = "0.24.3" @@ -8411,29 +8279,23 @@ dependencies = [ ] [[package]] -name = "stun" -version = "0.4.4" +name = "strum_macros" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ - "base64 0.13.1", - "crc", - "lazy_static", - "md-5", - "rand 0.8.5", - "ring", - "subtle", - "thiserror", - "tokio", - "url", - "webrtc-util", + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.48", ] [[package]] name = "substrate-bip39" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" +checksum = "e620c7098893ba667438b47169c00aacdd9e7c10e042250ce2b60b087ec97328" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", @@ -8445,10 +8307,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" -dependencies = [ - "platforms 2.0.0", -] +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" [[package]] name = "substrate-fixed" @@ -8462,13 +8321,13 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "frame-system-rpc-runtime-api", "futures", "jsonrpsee", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sc-rpc-api", "sc-transaction-pool-api", "sp-api", @@ -8481,7 +8340,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "hyper", "log", @@ -8493,7 +8352,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "jsonrpsee", @@ -8506,7 +8365,7 @@ dependencies = [ [[package]] name = "substrate-stellar-sdk" version = "0.2.4" -source = "git+https://github.com/pendulum-chain/substrate-stellar-sdk#e299b3936aad5dd457a8de9ca5aeaf194baf6641" +source = "git+https://github.com/pendulum-chain/substrate-stellar-sdk#740389c7ec47a8725c32d8a68061ffb1bdfd013b" dependencies = [ "base64 0.13.1", "hex", @@ -8514,54 +8373,48 @@ dependencies = [ "num-rational", "sha2 0.9.9", "sodalite", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-std 5.0.0", ] [[package]] name = "substrate-validator-set" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", "pallet-session", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "serde", "sp-core", "sp-io", "sp-runtime", "sp-staking", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-state-machine", + "sp-std 8.0.0", + "sp-weights", ] [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "ansi_term", "build-helper", "cargo_metadata", "filetime", + "parity-wasm", "sp-maybe-compressed-blob", - "strum", + "strum 0.24.1", "tempfile", - "toml 0.7.4", + "toml 0.7.8", "walkdir", "wasm-opt", ] -[[package]] -name = "substring" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" -dependencies = [ - "autocfg", -] - [[package]] name = "subtle" version = "2.4.1" @@ -8581,9 +8434,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -8608,7 +8461,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] @@ -8631,28 +8484,28 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.7" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" +checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" [[package]] name = "tempfile" -version = "3.5.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.3.5", - "rustix 0.37.19", - "windows-sys 0.45.0", + "redox_syscall 0.4.1", + "rustix 0.38.30", + "windows-sys 0.52.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] @@ -8665,7 +8518,7 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "tfchain" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "clap", "frame-benchmarking", @@ -8683,6 +8536,8 @@ dependencies = [ "sc-consensus-grandpa", "sc-executor", "sc-keystore", + "sc-network", + "sc-offchain", "sc-rpc", "sc-rpc-api", "sc-service", @@ -8709,7 +8564,7 @@ dependencies = [ [[package]] name = "tfchain-runtime" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-benchmarking", "frame-executive", @@ -8742,7 +8597,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "pallet-utility", "pallet-validator", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "smallvec", "sp-api", @@ -8753,7 +8608,7 @@ dependencies = [ "sp-offchain", "sp-runtime", "sp-session", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "sp-transaction-pool", "sp-version", "substrate-validator-set", @@ -8763,35 +8618,35 @@ dependencies = [ [[package]] name = "tfchain-support" -version = "2.6.0-rc1" +version = "2.9.0" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "scale-info", "sp-runtime", - "sp-std 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42)", + "sp-std 8.0.0", "valip", ] [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] @@ -8821,9 +8676,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.3+5.3.0-patched" +version = "0.5.4+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" dependencies = [ "cc", "libc", @@ -8831,22 +8686,13 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ + "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -8854,15 +8700,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.9" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] @@ -8879,7 +8725,7 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -8887,13 +8733,12 @@ dependencies = [ ] [[package]] -name = "tinytemplate" -version = "1.2.1" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "serde", - "serde_json", + "crunchy", ] [[package]] @@ -8913,43 +8758,53 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.2" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", "num_cpus", "parking_lot 0.12.1", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", "signal-hook-registry", - "socket2", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", +] + +[[package]] +name = "tokio-retry" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +dependencies = [ + "pin-project", + "rand 0.8.5", + "tokio", ] [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.20.8", + "rustls 0.21.10", "tokio", - "webpki 0.22.0", ] [[package]] @@ -8959,22 +8814,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", "tokio", "tokio-util", ] [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", "tokio", "tracing", ] @@ -8990,32 +8845,57 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.4" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ + "indexmap 2.1.0", "serde", + "serde_spanned", + "toml_datetime", + "winnow", ] [[package]] name = "toml_edit" -version = "0.19.10" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap", + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -9035,18 +8915,18 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.3.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags", + "bitflags 2.4.2", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", "tower-layer", "tower-service", ] @@ -9065,33 +8945,32 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.13", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -9109,12 +8988,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -9191,7 +9070,7 @@ dependencies = [ "lazy_static", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.4.10", "thiserror", "tinyvec", "tokio", @@ -9221,14 +9100,14 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#569aae5341ea0c1d10426fa1ec13a36c0b64393b" +source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7" dependencies = [ "async-trait", "clap", @@ -9236,10 +9115,9 @@ dependencies = [ "frame-try-runtime", "hex", "log", - "parity-scale-codec 3.5.0", + "parity-scale-codec 3.6.9", "sc-cli", "sc-executor", - "sc-service", "serde", "serde_json", "sp-api", @@ -9259,7 +9137,7 @@ dependencies = [ "sp-version", "sp-weights", "substrate-rpc-client", - "zstd 0.12.3+zstd.1.5.2", + "zstd 0.12.4", ] [[package]] @@ -9268,25 +9146,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" -[[package]] -name = "turn" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" -dependencies = [ - "async-trait", - "base64 0.13.1", - "futures", - "log", - "md-5", - "rand 0.8.5", - "ring", - "stun", - "thiserror", - "tokio", - "webrtc-util", -] - [[package]] name = "twox-hash" version = "1.6.3" @@ -9301,15 +9160,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" @@ -9325,15 +9184,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -9346,9 +9205,9 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -9356,16 +9215,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] - [[package]] name = "universal-hash" version = "0.5.1" @@ -9378,9 +9227,9 @@ dependencies = [ [[package]] name = "unsigned-varint" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ "asynchronous-codec", "bytes", @@ -9394,14 +9243,20 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.5.0", "percent-encoding", ] @@ -9411,15 +9266,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" -[[package]] -name = "uuid" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" -dependencies = [ - "getrandom 0.2.9", -] - [[package]] name = "valip" version = "0.4.0" @@ -9450,26 +9296,11 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -[[package]] -name = "waitgroup" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" -dependencies = [ - "atomic-waker", -] - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -9477,11 +9308,10 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -9491,12 +9321,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -9505,9 +9329,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.86" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -9515,24 +9339,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.86" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.36" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" dependencies = [ "cfg-if", "js-sys", @@ -9542,9 +9366,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.86" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9552,22 +9376,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.86" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.86" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "wasm-instrument" @@ -9580,14 +9404,14 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.111.0" +version = "0.114.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" +checksum = "effbef3bd1dde18acb401f73e740a6f3d4a1bc651e9773bddc512fe4d8d68f67" dependencies = [ "anyhow", "libc", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", "tempfile", "thiserror", "wasm-opt-cxx-sys", @@ -9596,9 +9420,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.111.0" +version = "0.114.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" +checksum = "c09e24eb283919ace2ed5733bda4842a59ce4c8de110ef5c6d98859513d17047" dependencies = [ "anyhow", "cxx", @@ -9608,91 +9432,56 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.111.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" -dependencies = [ - "anyhow", - "cc", - "cxx", - "cxx-build", - "regex", -] - -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmi" -version = "0.13.2" +version = "0.114.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" +checksum = "36f2f817bed2e8d65eb779fa37317e74de15585751f903c9118342d1970703a4" dependencies = [ - "parity-wasm", - "wasmi-validation", - "wasmi_core", -] - -[[package]] -name = "wasmi-validation" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" -dependencies = [ - "parity-wasm", + "anyhow", + "cc", + "cxx", + "cxx-build", ] [[package]] -name = "wasmi_core" -version = "0.2.1" +name = "wasm-timer" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ - "downcast-rs", - "libm 0.2.7", - "memory_units", - "num-rational", - "num-traits", - "region", + "futures", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] name = "wasmparser" -version = "0.100.0" +version = "0.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" +checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" dependencies = [ - "indexmap", + "indexmap 1.9.3", "url", ] [[package]] name = "wasmtime" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6" +checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" dependencies = [ "anyhow", "bincode", "cfg-if", - "indexmap", + "indexmap 1.9.3", "libc", "log", - "object 0.29.0", + "object 0.30.4", "once_cell", - "paste 1.0.12", + "paste 1.0.14", "psm", "rayon", "serde", @@ -9703,43 +9492,43 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-asm-macros" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc" +checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c" +checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" dependencies = [ "anyhow", - "base64 0.13.1", + "base64 0.21.7", "bincode", "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.14", + "rustix 0.36.17", "serde", - "sha2 0.10.6", + "sha2 0.10.8", "toml 0.5.11", - "windows-sys 0.42.0", + "windows-sys 0.45.0", "zstd 0.11.2+zstd.1.5.2", ] [[package]] name = "wasmtime-cranelift" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4" +checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" dependencies = [ "anyhow", "cranelift-codegen", @@ -9747,27 +9536,43 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli 0.26.2", + "gimli 0.27.3", "log", - "object 0.29.0", + "object 0.30.4", "target-lexicon", "thiserror", "wasmparser", + "wasmtime-cranelift-shared", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-native", + "gimli 0.27.3", + "object 0.30.4", + "target-lexicon", "wasmtime-environ", ] [[package]] name = "wasmtime-environ" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7" +checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" dependencies = [ "anyhow", "cranelift-entity", - "gimli 0.26.2", - "indexmap", + "gimli 0.27.3", + "indexmap 1.9.3", "log", - "object 0.29.0", + "object 0.30.4", "serde", "target-lexicon", "thiserror", @@ -9777,18 +9582,18 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa" +checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" dependencies = [ - "addr2line 0.17.0", + "addr2line 0.19.0", "anyhow", "bincode", "cfg-if", "cpp_demangle", - "gimli 0.26.2", + "gimli 0.27.3", "log", - "object 0.29.0", + "object 0.30.4", "rustc-demangle", "serde", "target-lexicon", @@ -9796,60 +9601,60 @@ dependencies = [ "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-jit-debug" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" +checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" dependencies = [ - "object 0.29.0", + "object 0.30.4", "once_cell", - "rustix 0.36.14", + "rustix 0.36.17", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c" +checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" dependencies = [ "cfg-if", "libc", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-runtime" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b" +checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" dependencies = [ "anyhow", "cc", "cfg-if", - "indexmap", + "indexmap 1.9.3", "libc", "log", "mach", "memfd", - "memoffset 0.6.5", - "paste 1.0.12", + "memoffset", + "paste 1.0.14", "rand 0.8.5", - "rustix 0.36.14", + "rustix 0.36.17", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-types" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568" +checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ "cranelift-entity", "serde", @@ -9859,9 +9664,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.63" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" dependencies = [ "js-sys", "wasm-bindgen", @@ -9869,22 +9674,12 @@ dependencies = [ [[package]] name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki" -version = "0.22.0" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring", - "untrusted", + "ring 0.17.7", + "untrusted 0.9.0", ] [[package]] @@ -9893,234 +9688,32 @@ version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ - "webpki 0.22.0", -] - -[[package]] -name = "webrtc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "hex", - "interceptor", - "lazy_static", - "log", - "rand 0.8.5", - "rcgen 0.9.3", - "regex", - "ring", - "rtcp", - "rtp", - "rustls 0.19.1", - "sdp", - "serde", - "serde_json", - "sha2 0.10.6", - "stun", - "thiserror", - "time 0.3.21", - "tokio", - "turn", - "url", - "waitgroup", - "webrtc-data", - "webrtc-dtls", - "webrtc-ice", - "webrtc-mdns", - "webrtc-media", - "webrtc-sctp", - "webrtc-srtp", - "webrtc-util", -] - -[[package]] -name = "webrtc-data" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" -dependencies = [ - "bytes", - "derive_builder", - "log", - "thiserror", - "tokio", - "webrtc-sctp", - "webrtc-util", -] - -[[package]] -name = "webrtc-dtls" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" -dependencies = [ - "aes 0.6.0", - "aes-gcm 0.10.2", - "async-trait", - "bincode", - "block-modes", - "byteorder", - "ccm", - "curve25519-dalek 3.2.0", - "der-parser 8.2.0", - "elliptic-curve 0.12.3", - "hkdf", - "hmac 0.12.1", - "log", - "oid-registry 0.6.1", - "p256", - "p384", - "rand 0.8.5", - "rand_core 0.6.4", - "rcgen 0.9.3", - "ring", - "rustls 0.19.1", - "sec1 0.3.0", - "serde", - "sha1", - "sha2 0.10.6", - "signature 1.6.4", - "subtle", - "thiserror", - "tokio", - "webpki 0.21.4", - "webrtc-util", - "x25519-dalek 2.0.0-pre.1", - "x509-parser 0.13.2", -] - -[[package]] -name = "webrtc-ice" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" -dependencies = [ - "arc-swap", - "async-trait", - "crc", - "log", - "rand 0.8.5", - "serde", - "serde_json", - "stun", - "thiserror", - "tokio", - "turn", - "url", - "uuid", - "waitgroup", - "webrtc-mdns", - "webrtc-util", -] - -[[package]] -name = "webrtc-mdns" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" -dependencies = [ - "log", - "socket2", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-media" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991" -dependencies = [ - "byteorder", - "bytes", - "rand 0.8.5", - "rtp", - "thiserror", -] - -[[package]] -name = "webrtc-sctp" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "crc", - "log", - "rand 0.8.5", - "thiserror", - "tokio", - "webrtc-util", -] - -[[package]] -name = "webrtc-srtp" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "aes-gcm 0.9.4", - "async-trait", - "byteorder", - "bytes", - "ctr 0.8.0", - "hmac 0.11.0", - "log", - "rtcp", - "rtp", - "sha-1", - "subtle", - "thiserror", - "tokio", - "webrtc-util", + "webpki", ] [[package]] -name = "webrtc-util" -version = "0.7.0" +name = "webpki-roots" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" -dependencies = [ - "async-trait", - "bitflags", - "bytes", - "cc", - "ipnet", - "lazy_static", - "libc", - "log", - "nix", - "rand 0.8.5", - "thiserror", - "tokio", - "winapi", -] +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix 0.38.30", ] [[package]] name = "wide" -version = "0.7.9" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0496a71f3cc6bc4bf0ed91346426a5099e93d89807e663162dc5a1069ff65" +checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" dependencies = [ "bytemuck", "safe_arch", @@ -10128,9 +9721,9 @@ dependencies = [ [[package]] name = "widestring" -version = "0.5.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" [[package]] name = "winapi" @@ -10150,9 +9743,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -10165,39 +9758,30 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.34.0" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" dependencies = [ - "windows_aarch64_msvc 0.34.0", - "windows_i686_gnu 0.34.0", - "windows_i686_msvc 0.34.0", - "windows_x86_64_gnu 0.34.0", - "windows_x86_64_msvc 0.34.0", + "windows-core 0.51.1", + "windows-targets 0.48.5", ] [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.0", ] [[package]] @@ -10215,7 +9799,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -10235,17 +9828,32 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -10256,15 +9864,15 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] -name = "windows_aarch64_msvc" -version = "0.34.0" +name = "windows_aarch64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" @@ -10274,15 +9882,15 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] -name = "windows_i686_gnu" -version = "0.34.0" +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" @@ -10292,15 +9900,15 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] -name = "windows_i686_msvc" -version = "0.34.0" +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -10310,15 +9918,15 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] -name = "windows_x86_64_gnu" -version = "0.34.0" +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -10328,9 +9936,15 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" @@ -10340,15 +9954,15 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "windows_x86_64_msvc" -version = "0.34.0" +name = "windows_x86_64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" @@ -10358,26 +9972,33 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.4.6" +version = "0.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -10402,50 +10023,32 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "2.0.0-pre.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.1.1", "rand_core 0.6.4", + "serde", "zeroize", ] -[[package]] -name = "x509-parser" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" -dependencies = [ - "asn1-rs 0.3.1", - "base64 0.13.1", - "data-encoding", - "der-parser 7.0.0", - "lazy_static", - "nom", - "oid-registry 0.4.0", - "ring", - "rusticata-macros", - "thiserror", - "time 0.3.21", -] - [[package]] name = "x509-parser" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs", "base64 0.13.1", "data-encoding", - "der-parser 8.2.0", + "der-parser", "lazy_static", "nom", - "oid-registry 0.6.1", + "oid-registry", "rusticata-macros", "thiserror", - "time 0.3.21", + "time", ] [[package]] @@ -10468,14 +10071,34 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ - "time 0.3.21", + "time", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] @@ -10488,7 +10111,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.48", ] [[package]] @@ -10502,11 +10125,11 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.3+zstd.1.5.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ - "zstd-safe 6.0.5+zstd.1.5.4", + "zstd-safe 6.0.6", ] [[package]] @@ -10521,9 +10144,9 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", "zstd-sys", @@ -10531,11 +10154,10 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/substrate-node/Cargo.toml b/substrate-node/Cargo.toml index 9748d60b1..40fbd27b4 100644 --- a/substrate-node/Cargo.toml +++ b/substrate-node/Cargo.toml @@ -6,7 +6,7 @@ homepage = "https://threefold.io/" license-file = "LICENSE" readme = "README.md" repository = "https://github.com/threefoldtech/tfchain3" -version = "2.6.0-rc1" +version = "2.9.0" [workspace] members = [ @@ -135,3 +135,13 @@ sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", tag = "pol substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-v1.2.0" } substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-v1.2.0" } substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-v1.2.0" } + +[profile.production] +inherits = "release" + +# Sacrifice compile speed for execution speed by using optimization flags: + +# https://doc.rust-lang.org/rustc/linker-plugin-lto.html +lto = "fat" +# https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units +codegen-units = 1 \ No newline at end of file diff --git a/substrate-node/Dockerfile b/substrate-node/Dockerfile index f9404b778..fc9abd6e5 100644 --- a/substrate-node/Dockerfile +++ b/substrate-node/Dockerfile @@ -1,38 +1,42 @@ FROM docker.io/paritytech/ci-linux:production as builder WORKDIR /tfchain - ARG FEATURES=default - COPY . . - RUN cargo build --locked --release --features $FEATURES # ===== SECOND STAGE ====== - -FROM docker.io/library/ubuntu:20.04 -LABEL maintainer="dylan@threefold.tech" -LABEL description="This is the 2nd stage: a very small image where we copy the tfchain binary." +FROM docker.io/library/ubuntu:22.04 ARG PROFILE=release +# metadata +ARG DOC_URL="https://github.com/threefoldtech/tfchain" -COPY --from=builder /tfchain/target/$PROFILE/tfchain /usr/local/bin -COPY --from=builder /tfchain/chainspecs /etc/chainspecs/ +LABEL io.threefoldtech.image.authors="https://www.threefold.tech" \ + io.threefoldtech.image.vendor="Threefold Tech" \ + io.threefoldtech.image.title="threefoldtech/tfchain" \ + io.threefoldtech.image.description="A base image for standard binary distribution" \ + io.threefoldtech.image.source="https://github.com/threefoldtech/tfchain/blob/development/substrate-node/Dockerfile" \ + io.threefoldtech.image.documentation="${DOC_URL}" -# checks -RUN ldd /usr/local/bin/tfchain && \ - /usr/local/bin/tfchain --version +# show backtraces +ENV RUST_BACKTRACE 1 -# Install CA certificates not present in base image -RUN apt-get update -RUN apt-get install -y curl -RUN apt-get install -y ca-certificates +COPY --from=builder /tfchain/target/$PROFILE/tfchain /usr/local/bin +COPY --from=builder /tfchain/chainspecs /etc/chainspecs/ -# Shrinking -RUN rm -rf /usr/lib/python* && \ +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + libssl3 ca-certificates && \ + apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* && \ + rm -rf /usr/lib/python* && \ rm -rf /src && \ rm -rf /usr/share/man +# checks +RUN ldd /usr/local/bin/tfchain && \ + /usr/local/bin/tfchain --version + EXPOSE 30333 9933 9944 9615 VOLUME ["/tfchain"] -ENTRYPOINT ["/usr/local/bin/tfchain"] \ No newline at end of file +ENTRYPOINT ["/usr/local/bin/tfchain"] diff --git a/substrate-node/chainspecs/dev/chainSpec.json b/substrate-node/chainspecs/dev/chainSpec.json index c5252758a..ee984e54c 100644 --- a/substrate-node/chainspecs/dev/chainSpec.json +++ b/substrate-node/chainspecs/dev/chainSpec.json @@ -1,12 +1,10 @@ { "name": "TF Chain Devnet", "id": "tfchain_devnet", - "chainType": "Local", + "chainType": "Live", "bootNodes": [ - "/ip4/185.206.122.7/tcp/30333/p2p/12D3KooWLcMLBg9itjQL1EXsAqkJFPhqESHqJKY7CBKmhhhL8fdp", - "/ip4/185.206.122.126/tcp/30333/p2p/12D3KooWAnibsVN4yBcKNKnnRm8pxmHkEf3DUT65dpb3P252RpZK", - "/ip4/185.206.122.127/tcp/30333/p2p/12D3KooWBkwH8LfJsz48Q8LHXSQnuqKJK8YdoQokDeS9wQX1j8mm", - "/ip4/185.206.122.128/tcp/30333/p2p/12D3KooWMPnWPkAi9UhVgGv9QmozXiPDE94rymPCsXLJ5EKynwta" + "/dns/01.bootnode.dev.grid.tf/tcp/30333/ws/p2p/12D3KooWDgsXduuSiPYRo616JwZQjXHmgGjayFxL2e6CXRAKP9K5", + "/dns/02.bootnode.dev.grid.tf/tcp/30333/ws/p2p/12D3KooWJjSHQpzsPDCN83o49q7sNopLviwbMKNijKSeFFnnpsNV" ], "telemetryEndpoints": null, "protocolId": null, diff --git a/substrate-node/chainspecs/dev/chainSpecRaw.json b/substrate-node/chainspecs/dev/chainSpecRaw.json index 78c925968..17778548a 100644 --- a/substrate-node/chainspecs/dev/chainSpecRaw.json +++ b/substrate-node/chainspecs/dev/chainSpecRaw.json @@ -1,12 +1,10 @@ { "name": "TF Chain Devnet", "id": "tfchain_devnet", - "chainType": "Local", + "chainType": "Live", "bootNodes": [ - "/ip4/185.206.122.7/tcp/30333/p2p/12D3KooWLcMLBg9itjQL1EXsAqkJFPhqESHqJKY7CBKmhhhL8fdp", - "/ip4/185.206.122.126/tcp/30333/p2p/12D3KooWAnibsVN4yBcKNKnnRm8pxmHkEf3DUT65dpb3P252RpZK", - "/ip4/185.206.122.127/tcp/30333/p2p/12D3KooWBkwH8LfJsz48Q8LHXSQnuqKJK8YdoQokDeS9wQX1j8mm", - "/ip4/185.206.122.128/tcp/30333/p2p/12D3KooWMPnWPkAi9UhVgGv9QmozXiPDE94rymPCsXLJ5EKynwta" + "/dns/01.bootnode.dev.grid.tf/tcp/30333/ws/p2p/12D3KooWDgsXduuSiPYRo616JwZQjXHmgGjayFxL2e6CXRAKP9K5", + "/dns/02.bootnode.dev.grid.tf/tcp/30333/ws/p2p/12D3KooWJjSHQpzsPDCN83o49q7sNopLviwbMKNijKSeFFnnpsNV" ], "telemetryEndpoints": null, "protocolId": null, diff --git a/substrate-node/chainspecs/main/chainSpec.json b/substrate-node/chainspecs/main/chainSpec.json index 9ae76eadb..282d7f206 100644 --- a/substrate-node/chainspecs/main/chainSpec.json +++ b/substrate-node/chainspecs/main/chainSpec.json @@ -1,8 +1,15 @@ { "name": "Tfchain Mainnet", "id": "tfchain_mainnet", - "chainType": "Local", - "bootNodes": [], + "chainType": "Live", + "bootNodes": [ + "/dns/01.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWPswftbG27wBn9dnz4ccQpdSQ6ynW6wa87BmsHhcsphja", + "/dns/02.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWAfLdFkWsqGzqA51njgm3st7maawbcFwc2ALXsMk8VV1z", + "/dns/03.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWBZqpGHjVbukqctNBmkgwrP4bSHDisojpCxbt71BNQ47y", + "/dns/04.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooW9xtmpd6BWWqbbbG9JMRUwQnfpHiRUteEdkPpc3UsiAw5", + "/dns/05.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWE19pLyW7LHkCDQPttrkDtquNt89LLUZtpXayv2Uc8dd2", + "/dns/06.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWKwZcU3S3Wwu1ppgk5FrFcdUVcT3LUZTMsGdxodMVAtT1" + ], "telemetryEndpoints": null, "protocolId": null, "properties": { diff --git a/substrate-node/chainspecs/main/chainSpecRaw.json b/substrate-node/chainspecs/main/chainSpecRaw.json index f784b2956..91370a628 100644 --- a/substrate-node/chainspecs/main/chainSpecRaw.json +++ b/substrate-node/chainspecs/main/chainSpecRaw.json @@ -1,8 +1,15 @@ { "name": "Tfchain Mainnet", "id": "tfchain_mainnet", - "chainType": "Local", - "bootNodes": [], + "chainType": "Live", + "bootNodes": [ + "/dns/01.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWPswftbG27wBn9dnz4ccQpdSQ6ynW6wa87BmsHhcsphja", + "/dns/02.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWAfLdFkWsqGzqA51njgm3st7maawbcFwc2ALXsMk8VV1z", + "/dns/03.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWBZqpGHjVbukqctNBmkgwrP4bSHDisojpCxbt71BNQ47y", + "/dns/04.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooW9xtmpd6BWWqbbbG9JMRUwQnfpHiRUteEdkPpc3UsiAw5", + "/dns/05.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWE19pLyW7LHkCDQPttrkDtquNt89LLUZtpXayv2Uc8dd2", + "/dns/06.bootnode.main.grid.tf/tcp/30333/ws/p2p/12D3KooWKwZcU3S3Wwu1ppgk5FrFcdUVcT3LUZTMsGdxodMVAtT1" + ], "telemetryEndpoints": null, "protocolId": null, "properties": { diff --git a/substrate-node/chainspecs/qanet/chainSpec.json b/substrate-node/chainspecs/qanet/chainSpec.json index e8358cbf2..e6312477f 100644 --- a/substrate-node/chainspecs/qanet/chainSpec.json +++ b/substrate-node/chainspecs/qanet/chainSpec.json @@ -1,11 +1,10 @@ { "name": "TF Chain QAnet", "id": "tfchain_qa_net", - "chainType": "Local", + "chainType": "Live", "bootNodes": [ - "/ip4/185.206.122.7/tcp/30334/p2p/12D3KooWSCFtAPQRRa5uw2QhwsC77NfCv1mxHJjWQhUrRANkoYyx", - "/ip4/185.206.122.221/tcp/30333/p2p/12D3KooWP77QXcz6DcSn98udtbrirgfefjLRE9w5t5sYUxZTz8WX", - "/ip4/185.206.122.222/tcp/30333/p2p/12D3KooWMq6SvUY8tU26MYjyjLwbJL3p5oSnNCuFV8cDT2C9tr4R" + "/dns/01.bootnode.qa.grid.tf/tcp/30333/ws/p2p/12D3KooWCxk23wdThnKKrr4aDeusSDDh8NCPYM6RkBi1LgkCTVVX", + "/dns/02.bootnode.qa.grid.tf/tcp/30333/ws/p2p/12D3KooWCNQfhDVL13BhDYDuFm1LWXS5SUPzaJ8DkisVaDoSia6H" ], "telemetryEndpoints": null, "protocolId": null, diff --git a/substrate-node/chainspecs/qanet/chainSpecRaw.json b/substrate-node/chainspecs/qanet/chainSpecRaw.json index e8efd73cc..14965056f 100644 --- a/substrate-node/chainspecs/qanet/chainSpecRaw.json +++ b/substrate-node/chainspecs/qanet/chainSpecRaw.json @@ -1,11 +1,10 @@ { "name": "TF Chain QAnet", "id": "tfchain_qa_net", - "chainType": "Local", + "chainType": "Live", "bootNodes": [ - "/ip4/185.206.122.7/tcp/30334/p2p/12D3KooWSCFtAPQRRa5uw2QhwsC77NfCv1mxHJjWQhUrRANkoYyx", - "/ip4/185.206.122.221/tcp/30333/p2p/12D3KooWP77QXcz6DcSn98udtbrirgfefjLRE9w5t5sYUxZTz8WX", - "/ip4/185.206.122.222/tcp/30333/p2p/12D3KooWMq6SvUY8tU26MYjyjLwbJL3p5oSnNCuFV8cDT2C9tr4R" + "/dns/01.bootnode.qa.grid.tf/tcp/30333/ws/p2p/12D3KooWCxk23wdThnKKrr4aDeusSDDh8NCPYM6RkBi1LgkCTVVX", + "/dns/02.bootnode.qa.grid.tf/tcp/30333/ws/p2p/12D3KooWCNQfhDVL13BhDYDuFm1LWXS5SUPzaJ8DkisVaDoSia6H" ], "telemetryEndpoints": null, "protocolId": null, diff --git a/substrate-node/chainspecs/test/chainSpec.json b/substrate-node/chainspecs/test/chainSpec.json index 6b1370503..6c3e06835 100644 --- a/substrate-node/chainspecs/test/chainSpec.json +++ b/substrate-node/chainspecs/test/chainSpec.json @@ -1,8 +1,11 @@ { "name": "Tfchain Testnet", "id": "tfchain_testnet", - "chainType": "Local", - "bootNodes": [], + "chainType": "Live", + "bootNodes": [ + "/dns/01.bootnode.test.grid.tf/tcp/30333/ws/p2p/12D3KooWBPGEVpQcCo7LcYp3PZdTojkub2TQZf4fzisznxtV7XhG", + "/dns/02.bootnode.test.grid.tf/tcp/30333/ws/p2p/12D3KooWLkEMTViyC1fzU8FzT9HGQtroZZVUaeGP4JQo2fVF9B22" + ], "telemetryEndpoints": null, "protocolId": null, "properties": { diff --git a/substrate-node/chainspecs/test/chainSpecRaw.json b/substrate-node/chainspecs/test/chainSpecRaw.json index f5e624708..c6757abdb 100644 --- a/substrate-node/chainspecs/test/chainSpecRaw.json +++ b/substrate-node/chainspecs/test/chainSpecRaw.json @@ -1,8 +1,11 @@ { "name": "Tfchain Testnet", "id": "tfchain_testnet", - "chainType": "Local", - "bootNodes": [], + "chainType": "Live", + "bootNodes": [ + "/dns/01.bootnode.test.grid.tf/tcp/30333/ws/p2p/12D3KooWBPGEVpQcCo7LcYp3PZdTojkub2TQZf4fzisznxtV7XhG", + "/dns/02.bootnode.test.grid.tf/tcp/30333/ws/p2p/12D3KooWLkEMTViyC1fzU8FzT9HGQtroZZVUaeGP4JQo2fVF9B22" + ], "telemetryEndpoints": null, "protocolId": null, "properties": { diff --git a/substrate-node/charts/substrate-node/Chart.yaml b/substrate-node/charts/substrate-node/Chart.yaml index 72610c2bb..7bac135d4 100644 --- a/substrate-node/charts/substrate-node/Chart.yaml +++ b/substrate-node/charts/substrate-node/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: substrate-node description: Tfchain node type: application -version: 2.6.0-rc1 -appVersion: '2.6.0-rc1' +version: 2.9.0 +appVersion: '2.9.0' diff --git a/substrate-node/charts/substrate-node/values.yaml b/substrate-node/charts/substrate-node/values.yaml index 4ef36de3b..e72783cf9 100644 --- a/substrate-node/charts/substrate-node/values.yaml +++ b/substrate-node/charts/substrate-node/values.yaml @@ -49,14 +49,14 @@ is_validator: true chainspec: '/etc/chainspecs/dev/chainSpecRaw.json' -rpc_max_connections: 1048576 +rpc_max_connections: "1048576" #rpc_methods: "Unsafe" rpc_methods: 'safe' # Archive will keep all history, otherwise only the last 256 blocks will be kept -archive: true +#archive: true # Telemetry dashboard url # telemetry_url: "" @@ -76,7 +76,7 @@ global: certresolver: le ingress: - enabled: true + enabled: false annotations: hosts: - host: dev.substrate01.threefold.io diff --git a/substrate-node/node/src/benchmarking.rs b/substrate-node/node/src/benchmarking.rs index 06f55b394..24d086117 100644 --- a/substrate-node/node/src/benchmarking.rs +++ b/substrate-node/node/src/benchmarking.rs @@ -11,7 +11,7 @@ use sp_core::{Encode, Pair}; use sp_inherents::{InherentData, InherentDataProvider}; use sp_keyring::Sr25519Keyring; use sp_runtime::{OpaqueExtrinsic, SaturatedConversion}; -use tfchain_runtime as runtime; +use tfchain_runtime::{self as runtime, pallet_smart_contract}; use std::{sync::Arc, time::Duration}; @@ -132,6 +132,7 @@ pub fn create_benchmark_extrinsic( frame_system::CheckNonce::::from(nonce), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(0), + pallet_smart_contract::types::ContractIdProvides::::new(), ); let raw_payload = runtime::SignedPayload::from_raw( @@ -146,6 +147,7 @@ pub fn create_benchmark_extrinsic( (), (), (), + (), ), ); let signature = raw_payload.using_encoded(|e| sender.sign(e)); diff --git a/substrate-node/pallets/pallet-burning/src/weights.rs b/substrate-node/pallets/pallet-burning/src/weights.rs index 9d39aecf7..021e73116 100644 --- a/substrate-node/pallets/pallet-burning/src/weights.rs +++ b/substrate-node/pallets/pallet-burning/src/weights.rs @@ -2,26 +2,26 @@ //! Autogenerated weights for pallet_burning //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-02, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `ragnar`, CPU: `Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ../target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_burning +// --wasm-execution=compiled +// --pallet=pallet-burning // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output -// ../pallets/pallet-burning/src/weights.rs +// ./pallets/pallet-burning/src/weights.rs // --template -// ./frame-weight-template.hbs +// ./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -39,14 +39,14 @@ pub trait WeightInfo { /// Weights for pallet_burning using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: BurningModule Burns (r:1 w:1) - /// Proof Skipped: BurningModule Burns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `BurningModule::Burns` (r:1 w:1) + /// Proof: `BurningModule::Burns` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn burn_tft() -> Weight { // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1627` - // Minimum execution time: 48_921_000 picoseconds. - Weight::from_parts(49_647_000, 1627) + // Measured: `109` + // Estimated: `1594` + // Minimum execution time: 26_780_000 picoseconds. + Weight::from_parts(27_291_000, 1594) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -54,15 +54,15 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: BurningModule Burns (r:1 w:1) - /// Proof Skipped: BurningModule Burns (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `BurningModule::Burns` (r:1 w:1) + /// Proof: `BurningModule::Burns` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn burn_tft() -> Weight { // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1627` - // Minimum execution time: 48_921_000 picoseconds. - Weight::from_parts(49_647_000, 1627) + // Measured: `109` + // Estimated: `1594` + // Minimum execution time: 26_780_000 picoseconds. + Weight::from_parts(27_291_000, 1594) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } -} \ No newline at end of file +} diff --git a/substrate-node/pallets/pallet-dao/creating_proposal_farmers.md b/substrate-node/pallets/pallet-dao/creating_proposal_farmers.md index 2fe9a0c82..303b385e9 100644 --- a/substrate-node/pallets/pallet-dao/creating_proposal_farmers.md +++ b/substrate-node/pallets/pallet-dao/creating_proposal_farmers.md @@ -21,11 +21,11 @@ Open the Polkadot JS UI in your browser: The proposal must include the following arguments: -* `threshold`: minimal number of farmer votes required to be able to close proposal before its end. +* `threshold`: minimal number of farmer votes required to be able to close proposal before its end and to approve the proposal (should be set to at least 5 votes). * `action`: call/extrinsic to execute on chain. If there is no call to be executed (which is usually the case) then `system` -> `remark()` should be set. * `description`: a small description of what the proposal is about. * `link`: a link to a more elaborate explanation of the proposal. -* `duration`: optional duration of the proposal after beeing created (default is 7 days, max value is 30 days), expressed in number of blocks (1 block = 6 sec). +* `duration`: optional duration of the proposal after beeing created (default is 7 days, min value is 1 day, max value is 30 days), expressed in number of blocks (1 block = 6 sec). ![fill](./img/fill_proposal_farmers.png) @@ -52,7 +52,7 @@ After the proposal ends or, before it, if number of votes reached `threshold`, i ## Approval Once closed the proposal is removed from list and the action, if any, is executed on chain in case of approval. -Since each farmer vote is weighted by the corresponding farm capacity (`weight = 2 * (sum of CU of all nodes) + (sum of SU of all nodes)`), approval is obtained when `Yes` votes quantity is strictly greater than `No` votes quantity. +Since each farmer vote is weighted by the corresponding farm capacity (`weight = 2 * (sum of CU of all nodes) + (sum of SU of all nodes)`), approval is obtained when `Yes` votes quantity is strictly greater than `No` votes quantity **and** total number of votes reached `threshold` value. ## Check proposal diff --git a/substrate-node/pallets/pallet-dao/src/benchmarking.rs b/substrate-node/pallets/pallet-dao/src/benchmarking.rs index 793378882..d3950d3f6 100644 --- a/substrate-node/pallets/pallet-dao/src/benchmarking.rs +++ b/substrate-node/pallets/pallet-dao/src/benchmarking.rs @@ -31,7 +31,7 @@ benchmarks! { propose { let caller: T::AccountId = whitelisted_caller(); assert_ok!(_add_council_member::(caller.clone())); - let threshold = 1; + let threshold = 5; let proposal: T::Proposal = SystemCall::::remark { remark: b"remark".to_vec() }.into(); let description = b"some_description".to_vec(); let link = b"some_link".to_vec(); @@ -58,7 +58,7 @@ benchmarks! { // vote() vote { let farmer: T::AccountId = account("Alice", 0, 0); - _prepare_farm_with_node::(farmer.clone()); + _prepare_farm_with_node::(farmer.clone(), b"testfarm", 1); let farm_id = 1; let caller: T::AccountId = whitelisted_caller(); @@ -85,7 +85,7 @@ benchmarks! { // veto() veto { let farmer: T::AccountId = account("Alice", 0, 0); - _prepare_farm_with_node::(farmer.clone()); + _prepare_farm_with_node::(farmer.clone(), b"testfarm", 1); let farm_id = 1; let caller: T::AccountId = whitelisted_caller(); @@ -103,15 +103,30 @@ benchmarks! { // close() close { let farmer: T::AccountId = account("Alice", 0, 0); - _prepare_farm_with_node::(farmer.clone()); - let farm_id = 1; + let farmer2: T::AccountId = account("Bob", 0, 0); + let farmer3: T::AccountId = account("Charlie", 0, 0); + let farmer4: T::AccountId = account("Dave", 0, 0); + let farmer5: T::AccountId = account("Eve", 0, 0); + + + _prepare_farm_with_node::(farmer.clone(), b"testfarm", 1); + _prepare_farm_with_node::(farmer2.clone(), b"testfarm2", 2); + _prepare_farm_with_node::(farmer3.clone(), b"testfarm3", 3); + _prepare_farm_with_node::(farmer4.clone(), b"testfarm4", 4); + _prepare_farm_with_node::(farmer5.clone(), b"testfarm5", 5); + let caller: T::AccountId = whitelisted_caller(); let proposal_hash = _create_proposal::(caller.clone()); let proposal_index = 0; let approve = false; - DaoModule::::vote(RawOrigin::Signed(farmer.clone()).into(), farm_id, proposal_hash, approve).unwrap(); + DaoModule::::vote(RawOrigin::Signed(farmer.clone()).into(), 1, proposal_hash, approve).unwrap(); + DaoModule::::vote(RawOrigin::Signed(farmer2.clone()).into(), 2, proposal_hash, approve).unwrap(); + DaoModule::::vote(RawOrigin::Signed(farmer3.clone()).into(), 3, proposal_hash, approve).unwrap(); + DaoModule::::vote(RawOrigin::Signed(farmer4.clone()).into(), 4, proposal_hash, approve).unwrap(); + DaoModule::::vote(RawOrigin::Signed(farmer5.clone()).into(), 5, proposal_hash, approve).unwrap(); + }: _(RawOrigin::Signed(caller.clone()), proposal_hash, proposal_index) verify { assert!(DaoModule::::proposal_list(proposal_hash).is_none()); @@ -132,10 +147,10 @@ fn assert_last_event(generic_event: ::RuntimeEvent) { assert_eq!(event, &system_event); } -pub fn _prepare_farm_with_node(source: T::AccountId) { +pub fn _prepare_farm_with_node(source: T::AccountId, farm_name: &[u8], farm_id : u32) { _create_twin::(source.clone()); - _create_farm::(source.clone()); - _create_node::(source.clone()); + _create_farm::(source.clone(), farm_name); + _create_node::(source.clone(), farm_id); } fn _create_twin(source: T::AccountId) { @@ -152,7 +167,7 @@ fn _create_twin(source: T::AccountId) { )); } -fn _create_farm(source: T::AccountId) { +fn _create_farm(source: T::AccountId, farm_name: &[u8]) { let mut pub_ips = Vec::new(); pub_ips.push(IP4 { ip: get_public_ip_ip_input(b"185.206.122.33/24"), @@ -165,12 +180,12 @@ fn _create_farm(source: T::AccountId) { assert_ok!(TfgridModule::::create_farm( RawOrigin::Signed(source).into(), - b"testfarm".to_vec().try_into().unwrap(), + farm_name.to_vec().try_into().unwrap(), pub_ips.clone().try_into().unwrap(), )); } -fn _create_node(source: T::AccountId) { +fn _create_node(source: T::AccountId, farm_id: u32) { let resources = ResourcesInput { hru: 1024 * GIGABYTE, sru: 512 * GIGABYTE, @@ -188,7 +203,7 @@ fn _create_node(source: T::AccountId) { assert_ok!(TfgridModule::::create_node( RawOrigin::Signed(source.clone()).into(), - 1, + farm_id, resources, location, Vec::new().try_into().unwrap(), @@ -201,7 +216,7 @@ fn _create_node(source: T::AccountId) { pub fn _create_proposal(source: T::AccountId) -> T::Hash { assert_ok!(_add_council_member::(source.clone())); - let threshold = 1; + let threshold = 5; let proposal: T::Proposal = SystemCall::::remark { remark: b"remark".to_vec(), } diff --git a/substrate-node/pallets/pallet-dao/src/dao.rs b/substrate-node/pallets/pallet-dao/src/dao.rs index 26119a98a..802ea739c 100644 --- a/substrate-node/pallets/pallet-dao/src/dao.rs +++ b/substrate-node/pallets/pallet-dao/src/dao.rs @@ -45,13 +45,16 @@ impl Pallet { let now = frame_system::Pallet::::block_number(); let mut end = now + T::MotionDuration::get(); + // Check if duration is set and is less than 30 days and more than 1 Day if let Some(motion_duration) = duration { ensure!( - motion_duration < BlockNumberFor::::from(constants::time::DAYS * 30), + motion_duration <= BlockNumberFor::::from(constants::time::DAYS * 30) && motion_duration >= BlockNumberFor::::from(constants::time::DAYS * 1), Error::::InvalidProposalDuration ); end = now + motion_duration; } + // threshold should be at least the configured minimum threshold for a motion in runtime + ensure!(threshold >= T::MotionMinThreshold::get(), Error::::ThresholdTooLow); let index = Self::proposal_count(); >::mutate(|i| *i += 1); @@ -370,4 +373,6 @@ impl ChangeNode, InterfaceOf, SerialNumberOf> for farm_weight = farm_weight.checked_sub(node_weight).unwrap_or(0); FarmWeight::::insert(node.farm_id, farm_weight); } + + fn node_power_state_changed(_node: &TfgridNode) {} } diff --git a/substrate-node/pallets/pallet-dao/src/lib.rs b/substrate-node/pallets/pallet-dao/src/lib.rs index 8f836f08c..ca4f2de20 100644 --- a/substrate-node/pallets/pallet-dao/src/lib.rs +++ b/substrate-node/pallets/pallet-dao/src/lib.rs @@ -20,9 +20,6 @@ pub use pallet::*; #[frame_support::pallet] pub mod pallet { - use pallet_tfgrid::pallet::{InterfaceOf, LocationOf, SerialNumberOf}; - use sp_std::prelude::*; - use crate::proposal; use crate::proposal::ProposalIndex; use crate::weights::WeightInfo; @@ -34,8 +31,8 @@ pub mod pallet { use frame_system::pallet_prelude::*; use pallet_tfgrid::farm::FarmName; use sp_runtime::traits::Dispatchable; - use sp_std::convert::TryInto; - use tfchain_support::traits::{ChangeNode, Tfgrid}; + use sp_std::prelude::*; + use tfchain_support::traits::Tfgrid; #[pallet::config] pub trait Config: @@ -56,11 +53,12 @@ pub mod pallet { /// The time-out for council motions. type MotionDuration: Get>; + type MotionMinThreshold: Get; + /// The minimum amount of vetos to dissaprove a proposal type MinVetos: Get; type Tfgrid: Tfgrid>; - type NodeChanged: ChangeNode, InterfaceOf, SerialNumberOf>; /// Weight information for extrinsics in this pallet. type WeightInfo: WeightInfo; @@ -174,6 +172,7 @@ pub mod pallet { OngoingVoteAndTresholdStillNotMet, FarmHasNoNodes, InvalidProposalDuration, + ThresholdTooLow, } #[pallet::call] diff --git a/substrate-node/pallets/pallet-dao/src/mock.rs b/substrate-node/pallets/pallet-dao/src/mock.rs index 3044ba6be..c59aedd98 100644 --- a/substrate-node/pallets/pallet-dao/src/mock.rs +++ b/substrate-node/pallets/pallet-dao/src/mock.rs @@ -17,7 +17,7 @@ use sp_runtime::{ BuildStorage, }; use sp_std::convert::{TryFrom, TryInto}; -use tfchain_support::traits::{ChangeNode, PublicIpModifier}; +use tfchain_support::traits::{ChangeNode, NodeActiveContracts, PublicIpModifier}; use tfchain_support::types::PublicIP; type Block = frame_system::mocking::MockBlock; @@ -69,6 +69,7 @@ pub type BlockNumber = u32; parameter_types! { pub const DaoMotionDuration: BlockNumber = 4; pub const MinVetos: u32 = 2; + pub const MinThreshold: u32 = 2; } pub(crate) type Serial = pallet_tfgrid::pallet::SerialNumberOf; @@ -85,6 +86,8 @@ impl ChangeNode for NodeChanged { fn node_deleted(node: &TfgridNode) { DaoModule::node_deleted(node); } + + fn node_power_state_changed(_node: &TfgridNode) {} } pub struct PublicIpModifierType; @@ -92,15 +95,22 @@ impl PublicIpModifier for PublicIpModifierType { fn ip_removed(_ip: &PublicIP) {} } +pub struct NodeActiveContractsType; +impl NodeActiveContracts for NodeActiveContractsType { + fn node_has_no_active_contracts(_node_id: u32) -> bool { + true + } +} + use crate::weights; impl pallet_dao::pallet::Config for TestRuntime { type RuntimeEvent = RuntimeEvent; type CouncilOrigin = EnsureRoot; type Proposal = RuntimeCall; type MotionDuration = DaoMotionDuration; + type MotionMinThreshold = MinThreshold; type MinVetos = MinVetos; type Tfgrid = TfgridModule; - type NodeChanged = NodeChanged; type WeightInfo = weights::SubstrateWeight; } @@ -131,6 +141,7 @@ impl pallet_tfgrid::Config for TestRuntime { type WeightInfo = pallet_tfgrid::weights::SubstrateWeight; type NodeChanged = NodeChanged; type PublicIpModifier = PublicIpModifierType; + type NodeActiveContracts = NodeActiveContractsType; type TermsAndConditions = TestTermsAndConditions; type FarmName = TestFarmName; type MaxFarmNameLength = MaxFarmNameLength; diff --git a/substrate-node/pallets/pallet-dao/src/tests.rs b/substrate-node/pallets/pallet-dao/src/tests.rs index 484956cda..7b42c47e5 100644 --- a/substrate-node/pallets/pallet-dao/src/tests.rs +++ b/substrate-node/pallets/pallet-dao/src/tests.rs @@ -18,7 +18,7 @@ fn farmers_vote_no_farm_fails() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 3, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -44,7 +44,7 @@ fn farmers_vote_proposal_works() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 3, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -81,7 +81,7 @@ fn farmers_vote_proposal_if_no_nodes_fails() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 1, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -140,10 +140,9 @@ fn close_works() { let proposal = make_proposal(b"some_remark".to_vec()); let hash = BlakeTwo256::hash_of(&proposal); - let threshold = 2; assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - threshold, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -250,7 +249,7 @@ fn close_after_proposal_duration_works() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -269,11 +268,10 @@ fn close_after_proposal_duration_threshold_not_met_works() { let proposal = make_proposal(b"some_remark".to_vec()); let hash = BlakeTwo256::hash_of(&proposal); - let threshold = 2; assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - threshold, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -316,7 +314,7 @@ fn close_if_not_council_member_fails() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -346,7 +344,7 @@ fn motion_approval_works() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -461,7 +459,7 @@ fn motion_veto_works() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -563,7 +561,7 @@ fn motion_veto_duplicate_fails() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -594,7 +592,7 @@ fn weighted_voting_works() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -700,7 +698,7 @@ fn voting_tfgridmodule_call_works() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -817,11 +815,11 @@ fn customize_proposal_duration_works() { assert_ok!(DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), - Some(10) + Some(14400) )); // Farmer 1 votes yes @@ -833,13 +831,13 @@ fn customize_proposal_duration_works() { true )); - System::set_block_number(9); + System::set_block_number(14400); assert_noop!( DaoModule::close(RuntimeOrigin::signed(2), hash.clone(), 0,), Error::::OngoingVoteAndTresholdStillNotMet ); - System::set_block_number(11); + System::set_block_number(14401); assert_ok!(DaoModule::close(RuntimeOrigin::signed(2), hash.clone(), 0,)); }); } @@ -865,7 +863,7 @@ fn customize_proposal_duration_out_of_bounds_fails() { assert_noop!( DaoModule::propose( RuntimeOrigin::signed(1), - 2, + MinThreshold::get(), Box::new(proposal.clone()), b"some_description".to_vec(), b"some_link".to_vec(), @@ -873,6 +871,37 @@ fn customize_proposal_duration_out_of_bounds_fails() { ), Error::::InvalidProposalDuration ); + + assert_noop!( + DaoModule::propose( + RuntimeOrigin::signed(1), + MinThreshold::get(), + Box::new(proposal.clone()), + b"some_description".to_vec(), + b"some_link".to_vec(), + Some(14399) + ), + Error::::InvalidProposalDuration + ); + }); +} + +#[test] +fn motion_proposal_threshold_fails() { + new_test_ext().execute_with(|| { + let proposal = make_proposal(b"some_remark".to_vec()); + + assert_noop!( + DaoModule::propose( + RuntimeOrigin::signed(1), + MinThreshold::get() - 1, + Box::new(proposal.clone()), + b"some_description".to_vec(), + b"some_link".to_vec(), + None + ), + Error::::ThresholdTooLow + ); }); } diff --git a/substrate-node/pallets/pallet-dao/src/weights.rs b/substrate-node/pallets/pallet-dao/src/weights.rs index f97d29ba3..3445de116 100644 --- a/substrate-node/pallets/pallet-dao/src/weights.rs +++ b/substrate-node/pallets/pallet-dao/src/weights.rs @@ -2,26 +2,26 @@ //! Autogenerated weights for pallet_dao //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-02, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `ragnar`, CPU: `Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ../target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_dao +// --wasm-execution=compiled +// --pallet=pallet-dao // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output -// ../pallets/pallet-dao/src/weights.rs +// ./pallets/pallet-dao/src/weights.rs // --template -// ./frame-weight-template.hbs +// ./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -42,77 +42,77 @@ pub trait WeightInfo { /// Weights for pallet_dao using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: CouncilMembership Members (r:1 w:0) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Dao ProposalOf (r:1 w:1) - /// Proof Skipped: Dao ProposalOf (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao ProposalCount (r:1 w:1) - /// Proof Skipped: Dao ProposalCount (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Dao ProposalList (r:1 w:1) - /// Proof Skipped: Dao ProposalList (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Dao Voting (r:0 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Proposals (r:0 w:1) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:0) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Dao::ProposalOf` (r:1 w:1) + /// Proof: `Dao::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalCount` (r:1 w:1) + /// Proof: `Dao::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalList` (r:1 w:1) + /// Proof: `Dao::ProposalList` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Voting` (r:0 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Proposals` (r:0 w:1) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) fn propose() -> Weight { // Proof Size summary in bytes: - // Measured: `240` + // Measured: `208` // Estimated: `4687` - // Minimum execution time: 36_618_000 picoseconds. - Weight::from_parts(37_170_000, 4687) + // Minimum execution time: 19_277_000 picoseconds. + Weight::from_parts(20_188_000, 4687) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Proposals (r:1 w:0) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Voting (r:1 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:0) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Proposals` (r:1 w:0) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Voting` (r:1 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:0) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) fn vote() -> Weight { // Proof Size summary in bytes: // Measured: `979` // Estimated: `4444` - // Minimum execution time: 43_016_000 picoseconds. - Weight::from_parts(43_672_000, 4444) + // Minimum execution time: 26_390_000 picoseconds. + Weight::from_parts(26_840_000, 4444) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: CouncilMembership Members (r:1 w:0) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Dao Proposals (r:1 w:0) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Voting (r:1 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:0) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Dao::Proposals` (r:1 w:0) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Voting` (r:1 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) fn veto() -> Weight { // Proof Size summary in bytes: - // Measured: `519` + // Measured: `487` // Estimated: `4687` - // Minimum execution time: 31_000_000 picoseconds. - Weight::from_parts(31_599_000, 4687) + // Minimum execution time: 18_616_000 picoseconds. + Weight::from_parts(18_985_000, 4687) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: CouncilMembership Members (r:1 w:0) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Dao Voting (r:1 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao ProposalList (r:1 w:1) - /// Proof Skipped: Dao ProposalList (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Dao Proposals (r:0 w:1) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao ProposalOf (r:0 w:1) - /// Proof Skipped: Dao ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:0) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Dao::Voting` (r:1 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalList` (r:1 w:1) + /// Proof: `Dao::ProposalList` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Proposals` (r:0 w:1) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalOf` (r:0 w:1) + /// Proof: `Dao::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) fn close() -> Weight { // Proof Size summary in bytes: - // Measured: `501` + // Measured: `521` // Estimated: `4687` - // Minimum execution time: 40_325_000 picoseconds. - Weight::from_parts(43_227_000, 4687) + // Minimum execution time: 25_117_000 picoseconds. + Weight::from_parts(25_498_000, 4687) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -120,78 +120,78 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: CouncilMembership Members (r:1 w:0) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Dao ProposalOf (r:1 w:1) - /// Proof Skipped: Dao ProposalOf (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao ProposalCount (r:1 w:1) - /// Proof Skipped: Dao ProposalCount (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Dao ProposalList (r:1 w:1) - /// Proof Skipped: Dao ProposalList (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Dao Voting (r:0 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Proposals (r:0 w:1) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:0) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Dao::ProposalOf` (r:1 w:1) + /// Proof: `Dao::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalCount` (r:1 w:1) + /// Proof: `Dao::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalList` (r:1 w:1) + /// Proof: `Dao::ProposalList` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Voting` (r:0 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Proposals` (r:0 w:1) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) fn propose() -> Weight { // Proof Size summary in bytes: - // Measured: `240` + // Measured: `208` // Estimated: `4687` - // Minimum execution time: 36_618_000 picoseconds. - Weight::from_parts(37_170_000, 4687) + // Minimum execution time: 19_277_000 picoseconds. + Weight::from_parts(20_188_000, 4687) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Proposals (r:1 w:0) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Voting (r:1 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:0) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Proposals` (r:1 w:0) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Voting` (r:1 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:0) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) fn vote() -> Weight { // Proof Size summary in bytes: // Measured: `979` // Estimated: `4444` - // Minimum execution time: 43_016_000 picoseconds. - Weight::from_parts(43_672_000, 4444) + // Minimum execution time: 26_390_000 picoseconds. + Weight::from_parts(26_840_000, 4444) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: CouncilMembership Members (r:1 w:0) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Dao Proposals (r:1 w:0) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao Voting (r:1 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:0) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Dao::Proposals` (r:1 w:0) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Voting` (r:1 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) fn veto() -> Weight { // Proof Size summary in bytes: - // Measured: `519` + // Measured: `487` // Estimated: `4687` - // Minimum execution time: 31_000_000 picoseconds. - Weight::from_parts(31_599_000, 4687) + // Minimum execution time: 18_616_000 picoseconds. + Weight::from_parts(18_985_000, 4687) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: CouncilMembership Members (r:1 w:0) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Dao Voting (r:1 w:1) - /// Proof Skipped: Dao Voting (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao ProposalList (r:1 w:1) - /// Proof Skipped: Dao ProposalList (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Dao Proposals (r:0 w:1) - /// Proof Skipped: Dao Proposals (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao ProposalOf (r:0 w:1) - /// Proof Skipped: Dao ProposalOf (max_values: None, max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:0) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Dao::Voting` (r:1 w:1) + /// Proof: `Dao::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalList` (r:1 w:1) + /// Proof: `Dao::ProposalList` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Dao::Proposals` (r:0 w:1) + /// Proof: `Dao::Proposals` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::ProposalOf` (r:0 w:1) + /// Proof: `Dao::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) fn close() -> Weight { // Proof Size summary in bytes: - // Measured: `501` + // Measured: `521` // Estimated: `4687` - // Minimum execution time: 40_325_000 picoseconds. - Weight::from_parts(43_227_000, 4687) + // Minimum execution time: 25_117_000 picoseconds. + Weight::from_parts(25_498_000, 4687) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } -} \ No newline at end of file +} diff --git a/substrate-node/pallets/pallet-kvstore/src/weights.rs b/substrate-node/pallets/pallet-kvstore/src/weights.rs index 664d718a7..05947e5e8 100644 --- a/substrate-node/pallets/pallet-kvstore/src/weights.rs +++ b/substrate-node/pallets/pallet-kvstore/src/weights.rs @@ -2,26 +2,26 @@ //! Autogenerated weights for pallet_kvstore //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-02, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `ragnar`, CPU: `Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ../target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_kvstore +// --wasm-execution=compiled +// --pallet=pallet-kvstore // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output -// ../pallets/pallet-kvstore/src/weights.rs +// ./pallets/pallet-kvstore/src/weights.rs // --template -// ./frame-weight-template.hbs +// ./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -40,24 +40,24 @@ pub trait WeightInfo { /// Weights for pallet_kvstore using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: TFKVStore TFKVStore (r:0 w:1) - /// Proof Skipped: TFKVStore TFKVStore (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFKVStore::TFKVStore` (r:0 w:1) + /// Proof: `TFKVStore::TFKVStore` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 15_031_000 picoseconds. - Weight::from_parts(15_410_000, 0) + // Minimum execution time: 11_372_000 picoseconds. + Weight::from_parts(12_032_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFKVStore TFKVStore (r:1 w:1) - /// Proof Skipped: TFKVStore TFKVStore (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFKVStore::TFKVStore` (r:1 w:1) + /// Proof: `TFKVStore::TFKVStore` (`max_values`: None, `max_size`: None, mode: `Measured`) fn delete() -> Weight { // Proof Size summary in bytes: // Measured: `146` // Estimated: `3611` - // Minimum execution time: 23_038_000 picoseconds. - Weight::from_parts(23_587_000, 3611) + // Minimum execution time: 12_414_000 picoseconds. + Weight::from_parts(12_854_000, 3611) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -65,25 +65,25 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: TFKVStore TFKVStore (r:0 w:1) - /// Proof Skipped: TFKVStore TFKVStore (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFKVStore::TFKVStore` (r:0 w:1) + /// Proof: `TFKVStore::TFKVStore` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 15_031_000 picoseconds. - Weight::from_parts(15_410_000, 0) + // Minimum execution time: 11_372_000 picoseconds. + Weight::from_parts(12_032_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFKVStore TFKVStore (r:1 w:1) - /// Proof Skipped: TFKVStore TFKVStore (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFKVStore::TFKVStore` (r:1 w:1) + /// Proof: `TFKVStore::TFKVStore` (`max_values`: None, `max_size`: None, mode: `Measured`) fn delete() -> Weight { // Proof Size summary in bytes: // Measured: `146` // Estimated: `3611` - // Minimum execution time: 23_038_000 picoseconds. - Weight::from_parts(23_587_000, 3611) + // Minimum execution time: 12_414_000 picoseconds. + Weight::from_parts(12_854_000, 3611) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } -} \ No newline at end of file +} diff --git a/substrate-node/pallets/pallet-runtime-upgrade/src/lib.rs b/substrate-node/pallets/pallet-runtime-upgrade/src/lib.rs index f18903ec6..7d29ea90b 100644 --- a/substrate-node/pallets/pallet-runtime-upgrade/src/lib.rs +++ b/substrate-node/pallets/pallet-runtime-upgrade/src/lib.rs @@ -6,6 +6,7 @@ pub use pallet::*; pub mod pallet { use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; + use frame_system::weights::WeightInfo; use sp_std::vec::Vec; #[pallet::pallet] @@ -16,13 +17,14 @@ pub mod pallet { pub trait Config: frame_system::Config { /// Origin for runtime upgrades type SetCodeOrigin: EnsureOrigin; + type WeightInfo: WeightInfo; } #[pallet::call] impl Pallet { #[pallet::call_index(0)] // Give same weight as set_code() wrapped extrinsic from frame_system - #[pallet::weight((T::BlockWeights::get().base_block, DispatchClass::Operational))] + #[pallet::weight((::WeightInfo::set_code(), DispatchClass::Operational))] pub fn set_code(origin: OriginFor, code: Vec) -> DispatchResultWithPostInfo { T::SetCodeOrigin::ensure_origin(origin)?; frame_system::Pallet::::set_code(frame_system::RawOrigin::Root.into(), code)?; diff --git a/substrate-node/pallets/pallet-smart-contract/src/benchmarking.rs b/substrate-node/pallets/pallet-smart-contract/src/benchmarking.rs index a66fb40f2..60b67866c 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/benchmarking.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/benchmarking.rs @@ -305,15 +305,15 @@ benchmarks! { let contract = SmartContractModule::::contracts(contract_id).unwrap(); // Get contract cost before billing to take into account nu - let (cost, _) = contract.calculate_contract_cost_tft(balance_init_amount, elapsed_seconds).unwrap(); + let (cost, discount_level) = contract.calculate_contract_cost_tft(balance_init_amount, elapsed_seconds, None).unwrap(); }: _(RawOrigin::Signed(farmer), contract_id) verify { - let lock = SmartContractModule::::contract_number_of_cylces_billed(contract_id); - assert_eq!(lock.amount_locked, cost); + let contract_payment_state = SmartContractModule::::contract_payment_state(contract_id).unwrap(); + assert_eq!(contract_payment_state.standard_reserve, cost); let contract_bill = types::ContractBill { contract_id, timestamp: SmartContractModule::::get_current_timestamp_in_secs(), - discount_level: types::DiscountLevel::Gold, + discount_level, amount_billed: cost.saturated_into::(), }; assert_last_event::(Event::ContractBilled(contract_bill).into()); diff --git a/substrate-node/pallets/pallet-smart-contract/src/billing.rs b/substrate-node/pallets/pallet-smart-contract/src/billing.rs index 8f5b8ff22..1ad253516 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/billing.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/billing.rs @@ -1,27 +1,28 @@ use crate::*; use frame_support::{ - dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo}, + dispatch::{DispatchErrorWithPostInfo, DispatchResult, DispatchResultWithPostInfo}, ensure, - traits::{Currency, ExistenceRequirement, LockableCurrency, OnUnbalanced, WithdrawReasons}, + traits::{BalanceStatus, Currency, DefensiveSaturating, ReservableCurrency, StoredMap}, }; + use frame_system::{ - offchain::{SendSignedTransaction, SignMessage, Signer}, + offchain::{SendSignedTransaction, Signer}, pallet_prelude::BlockNumberFor, }; use sp_core::Get; use sp_runtime::{ - traits::{CheckedAdd, CheckedSub, Convert, Zero}, - DispatchResult, Perbill, SaturatedConversion, + traits::{Convert, Saturating, Zero}, + Perbill, SaturatedConversion, }; -use sp_std::vec::Vec; +use sp_std::{cmp::max, vec::Vec}; impl Pallet { - pub fn bill_conttracts_for_block(block_number: BlockNumberFor) { - // Let offchain worker check if there are contracts on - // billing loop at current index and try to bill them + // Let offchain worker check if there are contracts on + // billing loop at current index and try to bill them + pub fn bill_contracts_for_block(block_number: BlockNumberFor) { let index = Self::get_billing_loop_index_from_block_number(block_number); - let contract_ids = ContractsToBillAt::::get(index); + if contract_ids.is_empty() { log::info!( "No contracts to bill at block {:?}, index: {:?}", @@ -32,162 +33,308 @@ impl Pallet { } log::info!( - "{:?} contracts to bill at block {:?}", + "Contracts to bill at block {:?}: {:?}", + block_number, contract_ids, - block_number ); + let mut succeeded_contracts = Vec::new(); + let mut failed_contracts = Vec::new(); + let mut skipped_contracts = Vec::new(); + let mut missing_contracts = Vec::new(); + let mut already_sent_contracts = Vec::new(); + for contract_id in contract_ids { - if let Some(c) = Contracts::::get(contract_id) { - if let types::ContractData::NodeContract(node_contract) = c.contract_type { - // Is there IP consumption to bill? - let bill_ip = node_contract.public_ips > 0; - - // Is there CU/SU consumption to bill? - // No need for preliminary call to contains_key() because default resource value is empty - let bill_cu_su = !NodeContractResources::::get(contract_id).used.is_empty(); - - // Is there NU consumption to bill? - // No need for preliminary call to contains_key() because default amount_unbilled is 0 - let bill_nu = - ContractBillingInformationByID::::get(contract_id).amount_unbilled > 0; - - // Don't bill if no IP/CU/SU/NU to be billed - if !bill_ip && !bill_cu_su && !bill_nu { - continue; + if let Some(contract) = Contracts::::get(contract_id) { + if Self::should_bill_contract(&contract) { + match Self::submit_signed_transaction_for_contract_billing(contract_id) { + Ok(()) => succeeded_contracts.push(contract_id), + Err(Error::::OffchainSignedTxCannotSign) => { + failed_contracts.push(contract_id); + } + Err(Error::::OffchainSignedTxAlreadySent) => { + already_sent_contracts.push(contract_id); + } + Err(_) => { + failed_contracts.push(contract_id); + } } + } else { + skipped_contracts.push(contract_id); } + } else { + missing_contracts.push(contract_id); } - let _res = Self::bill_contract_using_signed_transaction(contract_id); } - } - pub fn bill_contract_using_signed_transaction(contract_id: u64) -> Result<(), Error> { - let signer = Signer::::AuthorityId>::any_account(); + // Log the results at the end of the function + if !succeeded_contracts.is_empty() { + log::info!( + "Successfully submitted signed transactions for contracts: {:?}", + succeeded_contracts + ); + } - // Only allow the author of the next block to trigger the billing - Self::is_next_block_author(&signer)?; + if !already_sent_contracts.is_empty() { + log::info!( + "Signed transactions for contracts were already sent: {:?}", + already_sent_contracts + ); + } - if !signer.can_sign() { + if !skipped_contracts.is_empty() { + log::info!( + "Skipped billing node contracts (no IP/CU/SU/NU to bill): {:?}", + skipped_contracts + ); + } + + if !failed_contracts.is_empty() { log::error!( - "failed billing contract {:?} account cannot be used to sign transaction", - contract_id, + "Failed to submit signed transactions for contracts: {:?}", + failed_contracts ); + } + + if !missing_contracts.is_empty() { + log::error!("Contracts not found in storage: {:?}", missing_contracts); + } + } + + fn should_bill_contract(contract: &types::Contract) -> bool { + match &contract.contract_type { + types::ContractData::NodeContract(node_contract) => { + let bill_ip = node_contract.public_ips > 0; + let bill_cu_su = !NodeContractResources::::get(contract.contract_id) + .used + .is_empty(); + let bill_nu = ContractBillingInformationByID::::get(contract.contract_id) + .amount_unbilled + > 0; + + return bill_ip || bill_cu_su || bill_nu; + } + _ => true, + } + } + + pub fn submit_signed_transaction_for_contract_billing( + contract_id: u64, + ) -> Result<(), Error> { + let signer = Signer::::AuthorityId>::all_accounts(); + + if !signer.can_sign() { return Err(>::OffchainSignedTxCannotSign); } let result = signer.send_signed_transaction(|_acct| Call::bill_contract_for_block { contract_id }); - if let Some((acc, res)) = result { - // if res is an error this means sending the transaction failed - // this means the transaction was already send before (probably by another node) - // unfortunately the error is always empty (substrate just logs the error and - // returns Err()) - if res.is_err() { - log::error!( - "signed transaction failed for billing contract {:?} using account {:?}", - contract_id, - acc.id - ); - return Err(>::OffchainSignedTxAlreadySent); - } + if result.iter().any(|(_, res)| res.is_ok()) { return Ok(()); } - log::error!("No local account available"); - return Err(>::OffchainSignedTxNoLocalAccountAvailable); + + Err(>::OffchainSignedTxAlreadySent) } // Bills a contract (NodeContract, NameContract or RentContract) // Calculates how much TFT is due by the user and distributes the rewards pub fn bill_contract(contract_id: u64) -> DispatchResultWithPostInfo { - let mut contract = Contracts::::get(contract_id).ok_or(Error::::ContractNotExists)?; - - let twin = - pallet_tfgrid::Twins::::get(contract.twin_id).ok_or(Error::::TwinNotExists)?; - let usable_balance = Self::get_usable_balance(&twin.account_id); - let stash_balance = Self::get_stash_balance(twin.id); - let total_balance = usable_balance - .checked_add(&stash_balance) - .unwrap_or(BalanceOf::::zero()); - - let now = Self::get_current_timestamp_in_secs(); - - // Calculate amount of seconds elapsed based on the contract lock struct - let mut contract_lock = ContractLock::::get(contract.contract_id); - let seconds_elapsed = now.checked_sub(contract_lock.lock_updated).unwrap_or(0); - - // Calculate total amount due - let (regular_amount_due, discount_received) = - contract.calculate_contract_cost_tft(total_balance, seconds_elapsed)?; - let extra_amount_due = match &contract.contract_type { + let mut contract = Contracts::::get(contract_id).ok_or_else(|| { + log::error!("Contract not exists: {:?}", contract_id); + Error::::ContractNotExists + })?; + let src_twin = pallet_tfgrid::Twins::::get(contract.twin_id).ok_or_else(|| { + log::error!("Twin not exists: {:?}", contract.twin_id); + Error::::TwinNotExists + })?; + let pricing_policy = pallet_tfgrid::PricingPolicies::::get(1).ok_or_else(|| { + log::error!("Pricing policy not exists"); + Error::::PricingPolicyNotExists + })?; + + // In case contract is not a name contract ensure the node, farm and farmer twin exists + let (farmer_twin, node_certification) = + if !matches!(contract.contract_type, types::ContractData::NameContract(_)) { + let node = + pallet_tfgrid::Nodes::::get(contract.get_node_id()).ok_or_else(|| { + log::error!("Node not exists for contract_id: {:?}", contract_id); + Error::::NodeNotExists + })?; + let farm = pallet_tfgrid::Farms::::get(node.farm_id).ok_or_else(|| { + log::error!("Farm not exists for node_id: {:?}", node.farm_id); + Error::::FarmNotExists + })?; + let farmer_twin = + pallet_tfgrid::Twins::::get(farm.twin_id).ok_or_else(|| { + log::error!("Twin not exists for farm_id: {:?}", farm.twin_id); + Error::::TwinNotExists + })?; + (Some(farmer_twin), Some(node.certification)) + } else { + (None, None) + }; + + let mut contract_payment_state = ContractPaymentState::::get(contract.contract_id).ok_or_else(|| { + log::error!("Contract payment state not exists for contract_id {}", contract_id); + Error::::ContractPaymentStateNotExists + })?; + + log::trace!( + "Contract payment state [before billing]: {:?}", + contract_payment_state + ); + + // Calculate user total usable balance + let twin_usable_balance = Self::get_usable_balance(&src_twin.account_id); + let stash_usable_balance = Self::get_stash_balance(src_twin.id); + let total_usable_balance = + twin_usable_balance.defensive_saturating_add(stash_usable_balance); + let now: u64 = Self::get_current_timestamp_in_secs(); + + // Calculate amount of seconds elapsed based on the contract payment state + let seconds_elapsed = + now.defensive_saturating_sub(contract_payment_state.last_updated_seconds); + + let should_waive_payment = match &contract.contract_type { types::ContractData::RentContract(rc) => { - contract.calculate_extra_fee_cost_tft(rc.node_id, seconds_elapsed)? + let node_power = pallet_tfgrid::NodePower::::get(rc.node_id); + node_power.is_standby() } - _ => BalanceOf::::zero(), - }; - let amount_due = regular_amount_due - .checked_add(&extra_amount_due) - .unwrap_or(BalanceOf::::zero()); - - // If there is nothing to be paid and the contract is not in state delete, return - // Can be that the users cancels the contract in the same block that it's getting billed - // where elapsed seconds would be 0, but we still have to distribute rewards - if amount_due == BalanceOf::::zero() && !contract.is_state_delete() { - log::debug!("amount to be billed is 0, nothing to do"); - return Ok(().into()); + _ => false, }; - // Calculate total amount locked - let regular_lock_amount = contract_lock - .amount_locked - .checked_add(®ular_amount_due) - .unwrap_or(BalanceOf::::zero()); - let extra_lock_amount = contract_lock - .extra_amount_locked - .checked_add(&extra_amount_due) - .unwrap_or(BalanceOf::::zero()); - let lock_amount = regular_lock_amount - .checked_add(&extra_lock_amount) - .unwrap_or(BalanceOf::::zero()); - - // Handle grace - let contract = Self::handle_grace(&mut contract, usable_balance, lock_amount)?; - - // Only update contract lock in state (Created, GracePeriod) - if !matches!(contract.state, types::ContractState::Deleted(_)) { - // increment cycles billed and update the internal lock struct - contract_lock.lock_updated = now; - contract_lock.cycles += 1; - contract_lock.amount_locked = regular_lock_amount; - contract_lock.extra_amount_locked = extra_lock_amount; + if should_waive_payment { + log::info!("Waiving rent for contract_id: {:?}", contract.contract_id); + Self::deposit_event(Event::RentWaived { + contract_id: contract.contract_id, + }); + // Although no billing required here, in deleted state, we should continue the billing process for contracts to distribute rewards if any and clean up storage + if matches!(contract.state, types::ContractState::Created) { + // So for created rent contracts, if the node is in standby, don't expect the billing cycle to advance + return Ok(().into()); + } } - // If still in grace period, no need to continue doing locking and other stuff - if matches!(contract.state, types::ContractState::GracePeriod(_)) { - log::info!("contract {} is still in grace", contract.contract_id); - ContractLock::::insert(contract.contract_id, &contract_lock); + // Calculate the due amount + let (standard_amount_due, discount_received) = if should_waive_payment { + (BalanceOf::::zero(), types::DiscountLevel::None) + } else { + contract + .calculate_contract_cost_tft( + total_usable_balance, + seconds_elapsed, + node_certification, + ) + .map_err(|e| { + log::error!("Error while calculating contract cost: {:?}", e); + e + })? + }; + + let additional_amount_due = + if let types::ContractData::RentContract(rc) = &contract.contract_type { + if should_waive_payment { + BalanceOf::::zero() + } else { + contract.calculate_extra_fee_cost_tft(rc.node_id, seconds_elapsed) + } + } else { + BalanceOf::::zero() + }; + + let total_amount_due = standard_amount_due.defensive_saturating_add(additional_amount_due); + log::debug!( + "Seconds elapsed since last bill {:?}, standard amount due: {:?}, additional amount due: {:?}, total amount due: {:?}, Discount received: {:?}", + seconds_elapsed, + standard_amount_due, + additional_amount_due, + total_amount_due, + discount_received + ); + + // If the amount due is zero and the contract is not in deleted state, don't bill the contract (mostly node contract on a rented node) + if total_amount_due.is_zero() && !matches!(contract.state, types::ContractState::Deleted(_)) + { + log::info!( + "Amount to be billed is 0 and contract state is {:?}, nothing to do with contract_id: {:?}", + contract.state, + contract.contract_id + ); return Ok(().into()); } - // Handle contract lock operations - Self::handle_lock(contract, &mut contract_lock, amount_due)?; + // Calculate the amount needed to be reserved from the user's balance + // Should be the total amount due for current cycle + any overdraft from previous cycles + let standard_amount_to_reserve = + standard_amount_due.defensive_saturating_add(contract_payment_state.standard_overdraft); + let additional_amount_to_reserve = additional_amount_due + .defensive_saturating_add(contract_payment_state.additional_overdraft); + let total_amount_to_reserve = + standard_amount_to_reserve.defensive_saturating_add(additional_amount_to_reserve); + + let has_sufficient_fund = + ::Currency::can_reserve(&src_twin.account_id, total_amount_to_reserve); + let current_block = >::block_number().saturated_into::(); - // Always emit a contract billed event - let contract_bill = types::ContractBill { - contract_id: contract.contract_id, - timestamp: Self::get_current_timestamp_in_secs(), - discount_level: discount_received.clone(), - amount_billed: amount_due.saturated_into::(), - }; - Self::deposit_event(Event::ContractBilled(contract_bill)); + _ = Self::manage_contract_state(&mut contract, has_sufficient_fund, current_block); - // If the contract is in delete state, remove all associated storage + if has_sufficient_fund { + log::info!("Billing contract_id: {:?}, Contract state: {:?}, This cycle amount due: {:?}, Total (include previous overdraft) {:?}", + contract.contract_id, + contract.state, + total_amount_due, + total_amount_to_reserve + ); + Self::reserve_funds( + &mut contract_payment_state, + standard_amount_due, + additional_amount_due, + &src_twin, + &contract, + now, + total_amount_to_reserve, + discount_received, + )?; + } else { + log::info!( + "Contract payment overdrawn for contract_id: {:?}, Contract state: {:?}, This cycle overdue: {:?}, Twin have: {:?}, Previous overdraft: {:?}", + contract.contract_id, + contract.state, + total_amount_due, + twin_usable_balance, + contract_payment_state.get_overdraft() + ); + Self::overdraft_funds( + &mut contract_payment_state, + standard_amount_due, + additional_amount_due, + &src_twin, + &contract, + now, + twin_usable_balance, + )?; + } + + // Distribute rewards + Self::remit_funds( + &contract, + &mut contract_payment_state, + &src_twin, + &farmer_twin, + &pricing_policy, + )?; + + // Housekeeping for contracts in deleted state if matches!(contract.state, types::ContractState::Deleted(_)) { + log::info!( + "contract id {:?} in deleted state. clean up storage.", + contract.contract_id + ); return Self::remove_contract(contract.contract_id); } - // If contract is node contract, set the amount unbilled back to 0 + // Reset NU amount if the contract is a node contract if matches!(contract.contract_type, types::ContractData::NodeContract(_)) { let mut contract_billing_info = ContractBillingInformationByID::::get(contract.contract_id); @@ -198,418 +345,419 @@ impl Pallet { ); } - // Finally update the lock - ContractLock::::insert(contract.contract_id, &contract_lock); - - log::info!("successfully billed contract with id {:?}", contract_id,); + contract_payment_state.last_updated_seconds = now; + log::trace!( + "Contract payment state [after billing]: {:?}", + contract_payment_state + ); + ContractPaymentState::::insert(contract.contract_id, &contract_payment_state); Ok(().into()) } - fn handle_grace( + // Handles the transition between different contract states based on the fund availability + // May emits one of ContractGracePeriodStarted, ContractGracePeriodEnded, ContractGracePeriodElapsed events + fn manage_contract_state( contract: &mut types::Contract, - usable_balance: BalanceOf, - amount_due: BalanceOf, - ) -> Result<&mut types::Contract, DispatchErrorWithPostInfo> { - let current_block = >::block_number().saturated_into::(); - let node_id = contract.get_node_id(); - + has_sufficient_fund: bool, + current_block: u64, + ) -> DispatchResultWithPostInfo { match contract.state { + types::ContractState::GracePeriod(_) if has_sufficient_fund => { + // Manage transition from GracePeriod to Created + log::info!("Contract {:?} is in grace period, but balance is recharged, moving to created state at block {:?}", contract.contract_id, current_block); + Self::update_contract_state(contract, &types::ContractState::Created)?; + Self::deposit_event(Event::ContractGracePeriodEnded { + contract_id: contract.contract_id, + node_id: contract.get_node_id(), + twin_id: contract.twin_id, + }); + Self::synchronize_associated_node_contract_states( + contract, + types::ContractState::Created, + )?; + } types::ContractState::GracePeriod(grace_start) => { - // if the usable balance is recharged, we can move the contract to created state again - if usable_balance > amount_due { - Self::update_contract_state(contract, &types::ContractState::Created)?; - Self::deposit_event(Event::ContractGracePeriodEnded { + // Manage transition from GracePeriod to Deleted + let diff = current_block.defensive_saturating_sub(grace_start); + log::debug!( + "Contract {:?} in grace period, elapsed blocks: {:?}", + contract.contract_id, + diff + ); + if diff >= T::GracePeriod::get() { + log::info!("Contract {:?} state changed to deleted at block {:?} due to an expired grace period.", contract.contract_id, current_block); + Self::deposit_event(Event::ContractGracePeriodElapsed { contract_id: contract.contract_id, - node_id, - twin_id: contract.twin_id, + grace_period: diff, }); - // If the contract is a rent contract, also move state on associated node contracts - Self::handle_grace_rent_contract(contract, types::ContractState::Created)?; - } else { - let diff = current_block.checked_sub(grace_start).unwrap_or(0); - // If the contract grace period ran out, we can decomission the contract - if diff >= T::GracePeriod::get() { - Self::update_contract_state( - contract, - &types::ContractState::Deleted(types::Cause::OutOfFunds), - )?; - } - } - } - types::ContractState::Created => { - // if the user ran out of funds, move the contract to be in a grace period - // dont lock the tokens because there is nothing to lock - // we can still update the internal contract lock object to figure out later how much was due - // whilst in grace period - if amount_due >= usable_balance { - log::info!( - "Grace period started at block {:?} due to lack of funds", - current_block - ); Self::update_contract_state( contract, - &types::ContractState::GracePeriod(current_block), - )?; - // We can't lock the amount due on the contract's lock because the user ran out of funds - Self::deposit_event(Event::ContractGracePeriodStarted { - contract_id: contract.contract_id, - node_id, - twin_id: contract.twin_id, - block_number: current_block.saturated_into(), - }); - // If the contract is a rent contract, also move associated node contract to grace period - Self::handle_grace_rent_contract( - contract, - types::ContractState::GracePeriod(current_block), + &types::ContractState::Deleted(types::Cause::OutOfFunds), )?; } } + types::ContractState::Created if !has_sufficient_fund => { + // Manage transition from Created to GracePeriod + log::info!( + "Grace period started at block {:?} due to lack of funds", + current_block + ); + Self::update_contract_state( + contract, + &types::ContractState::GracePeriod(current_block.saturated_into()), + )?; + Self::deposit_event(Event::ContractGracePeriodStarted { + contract_id: contract.contract_id, + node_id: contract.get_node_id(), + twin_id: contract.twin_id, + block_number: current_block.saturated_into(), + }); + Self::synchronize_associated_node_contract_states( + contract, + types::ContractState::GracePeriod(current_block), + )?; + } _ => (), } - - Ok(contract) + Ok(().into()) } - fn handle_grace_rent_contract( - contract: &mut types::Contract, - state: types::ContractState, + // Holding funds from a user's account to guarantee that they are available later. + // Emits ContractBilled event + fn reserve_funds( + contract_payment_state: &mut types::ContractPaymentState>, + standard_amount_due: BalanceOf, + additional_amount_due: BalanceOf, + src_twin: &pallet_tfgrid::types::Twin, + contract: &types::Contract, + now: u64, + total_amount_to_reserve: BalanceOf, + discount_received: types::DiscountLevel, ) -> DispatchResultWithPostInfo { - match &contract.contract_type { - types::ContractData::RentContract(rc) => { - let active_node_contracts = ActiveNodeContracts::::get(rc.node_id); - for ctr_id in active_node_contracts { - let mut ctr = - Contracts::::get(ctr_id).ok_or(Error::::ContractNotExists)?; - Self::update_contract_state(&mut ctr, &state)?; - - match state { - types::ContractState::Created => { - Self::deposit_event(Event::ContractGracePeriodEnded { - contract_id: ctr_id, - node_id: rc.node_id, - twin_id: ctr.twin_id, - }); - } - types::ContractState::GracePeriod(block_number) => { - Self::deposit_event(Event::ContractGracePeriodStarted { - contract_id: ctr_id, - node_id: rc.node_id, - twin_id: ctr.twin_id, - block_number, - }); - } - _ => (), - }; - } - } - _ => (), + ::Currency::reserve(&src_twin.account_id, total_amount_to_reserve).map_err( + |e| { + // should never happen as we called can_reserve first to check if the funds are available + log::error!("Error while reserving amount due: {:?}", e); + e + }, + )?; + contract_payment_state.settle_overdraft(); + contract_payment_state.reserve_standard_amount(standard_amount_due); + contract_payment_state.reserve_additional_amount(additional_amount_due); + let contract_bill = types::ContractBill { + contract_id: contract.contract_id, + timestamp: now, + discount_level: discount_received.clone(), + amount_billed: total_amount_to_reserve.saturated_into::(), }; - + log::info!("Contract billed: {:?}", contract_bill); + Self::deposit_event(Event::ContractBilled(contract_bill)); Ok(().into()) } - fn handle_lock( - contract: &mut types::Contract, - contract_lock: &mut types::ContractLock>, - amount_due: BalanceOf, + // Increasing the overdraft in the user's account + // Emits ContractPaymentOverdrawn event + fn overdraft_funds( + contract_payment_state: &mut types::ContractPaymentState>, + standard_amount_due: BalanceOf, + additional_amount_due: BalanceOf, + src_twin: &pallet_tfgrid::types::Twin, + contract: &types::Contract, + now: u64, + reservable: BalanceOf, ) -> DispatchResultWithPostInfo { - let now = Self::get_current_timestamp_in_secs(); - - // Only lock an amount from the user's balance if the contract is in create state - // The lock is specified on the user's account, since a user can have multiple contracts - // Just extend the lock with the amount due for this contract billing period (lock will be created if not exists) - let twin = - pallet_tfgrid::Twins::::get(contract.twin_id).ok_or(Error::::TwinNotExists)?; - if matches!(contract.state, types::ContractState::Created) { - let mut locked_balance = Self::get_locked_balance(&twin.account_id); - locked_balance = locked_balance - .checked_add(&amount_due) - .unwrap_or(BalanceOf::::zero()); - ::Currency::extend_lock( - GRID_LOCK_ID, - &twin.account_id, - locked_balance, - WithdrawReasons::all(), - ); - } - - let canceled_and_not_zero = - contract.is_state_delete() && contract_lock.has_some_amount_locked(); - // When the cultivation rewards are ready to be distributed or it's in delete state - // Unlock all reserved balance and distribute - if contract_lock.cycles >= T::DistributionFrequency::get() || canceled_and_not_zero { - // First remove the lock, calculate how much locked balance needs to be unlocked and re-lock the remaining locked balance - let locked_balance = Self::get_locked_balance(&twin.account_id); - let new_locked_balance = - match locked_balance.checked_sub(&contract_lock.total_amount_locked()) { - Some(b) => b, - None => BalanceOf::::zero(), - }; - ::Currency::remove_lock(GRID_LOCK_ID, &twin.account_id); - - // Fetch twin balance, if the amount locked in the contract lock exceeds the current unlocked - // balance we can only transfer out the remaining balance - // https://github.com/threefoldtech/tfchain/issues/479 - let min_balance = ::Currency::minimum_balance(); - let mut twin_balance = match new_locked_balance { - bal if bal > min_balance => { - ::Currency::set_lock( - GRID_LOCK_ID, - &twin.account_id, - new_locked_balance, - WithdrawReasons::all(), - ); - Self::get_usable_balance(&twin.account_id) - } - _ => Self::get_usable_balance(&twin.account_id) - .checked_sub(&min_balance) - .unwrap_or(BalanceOf::::zero()), - }; + contract_payment_state.overdraft_standard_amount(standard_amount_due); + contract_payment_state.overdraft_additional_amount(additional_amount_due); + // Reserve as much as possible from the user's account to cover part of the amount overdue + let overdue = standard_amount_due.saturating_add(additional_amount_due); + let overdrawn = overdue.saturating_sub(reservable); + ::Currency::reserve(&src_twin.account_id, reservable).map_err(|e| { + log::error!("Error while reserving partial amount due: {:?}", e); + e + })?; + contract_payment_state.settle_partial_overdraft(reservable); + log::info!("Partial amount reserved: {:?}", reservable); + log::info!("Overdrawn: {:?}", overdrawn); + Self::deposit_event(Event::ContractPaymentOverdrawn { + contract_id: contract.contract_id, + timestamp: now, + // This is the partial amount successfully reserved from the user's account in this billing cycle + partially_billed_amount: reservable, + // This is the overdraft caused by insufficient funds for the contract payment in this billing cycle + overdraft: overdrawn, + }); + Ok(().into()) + } - // First, distribute extra cultivation rewards if any - if contract_lock.has_extra_amount_locked() { + // Orchestrate the distribution of rewards + // Emits RewardDistributed event + // No-Op if contract neither in deleted state nor the distribution frequency is reached + fn remit_funds( + contract: &types::Contract, + contract_payment_state: &mut types::ContractPaymentState>, + src_twin: &pallet_tfgrid::types::Twin, + farmer_twin: &Option>, + pricing_policy: &pallet_tfgrid::types::PricingPolicy, + ) -> DispatchResult { + contract_payment_state.cycles.defensive_saturating_inc(); + let is_deleted = matches!(contract.state, types::ContractState::Deleted(_)); + let should_distribute_rewards = + contract_payment_state.cycles >= T::DistributionFrequency::get() || is_deleted; + if should_distribute_rewards && contract_payment_state.has_reserve() { + // At this point we don't expect any distribution failure since every fund to transfer should have been accumulated in account reserve along previous billing cycles + let standard_rewards = contract_payment_state.standard_reserve; + let additional_rewards = contract_payment_state.additional_reserve; + // distribute additional rewards to the farm twin + + if let types::ContractData::RentContract(_) = &contract.contract_type { log::info!( - "twin balance {:?} contract lock extra amount {:?}", - twin_balance, - contract_lock.extra_amount_locked + "Distributing additional rewards from twin {:?} with amount {:?}", + src_twin.id, + additional_rewards, ); - - match Self::distribute_extra_cultivation_rewards( - &contract, - twin_balance.min(contract_lock.extra_amount_locked), - ) { - Ok(_) => {} - Err(err) => { - log::error!( - "error while distributing extra cultivation rewards {:?}", - err - ); - return Err(err); + match Self::distribute_additional_rewards(src_twin, farmer_twin, additional_rewards) + { + Ok(_) => (), + Err(e) => { + log::error!("Error while distributing additional rewards: {:?}", e); + if !is_deleted { + return Err(e); + } } - }; - - // Update twin balance after distribution - twin_balance = Self::get_usable_balance(&twin.account_id); + } + contract_payment_state.reset_additional_reserve(); } log::info!( - "twin balance {:?} contract lock amount {:?}", - twin_balance, - contract_lock.amount_locked + "Distributing standard rewards from twin {:?} with amount {:?}", + src_twin.id, + standard_rewards, ); - - // Fetch the default pricing policy - let pricing_policy = pallet_tfgrid::PricingPolicies::::get(1) - .ok_or(Error::::PricingPolicyNotExists)?; - - // Then, distribute cultivation rewards - match Self::distribute_cultivation_rewards( - &contract, - &pricing_policy, - twin_balance.min(contract_lock.amount_locked), + // Distribute standard rewards + match Self::distribute_standard_rewards( + src_twin, + farmer_twin, + standard_rewards, + pricing_policy, ) { - Ok(_) => {} - Err(err) => { - log::error!("error while distributing cultivation rewards {:?}", err); - return Err(err); + Ok(_) => (), + Err(e) => { + log::error!("Error while distributing standard rewards: {:?}", e); + if !is_deleted { + return Err(e); + } } }; - // Reset contract lock values - contract_lock.lock_updated = now; - contract_lock.amount_locked = BalanceOf::::zero(); - contract_lock.extra_amount_locked = BalanceOf::::zero(); - contract_lock.cycles = 0; - } + contract_payment_state.reset_standard_reserve(); + contract_payment_state.reset_cycles(); + log::info!( + "Rewards distributed for contract_id: {:?}", + contract.contract_id + ); + Self::deposit_event(Event::RewardDistributed { + contract_id: contract.contract_id, + standard_rewards, + additional_rewards, + }); + } else { + log::debug!( + "Not distributing rewards for contract_id: {:?}, cycles: {:?}, reserved amount: {:?}", + contract.contract_id, + contract_payment_state.cycles, + contract_payment_state.get_reserve() + ); + } Ok(().into()) } - fn distribute_extra_cultivation_rewards( - contract: &types::Contract, - amount: BalanceOf, - ) -> DispatchResultWithPostInfo { - log::info!( - "Distributing extra cultivation rewards for contract {:?} with amount {:?}", - contract.contract_id, - amount, - ); - - // If the amount is zero, return - if amount == BalanceOf::::zero() { + fn distribute_additional_rewards( + src_twin: &pallet_tfgrid::types::Twin, + farmer_twin: &Option>, + additional_rewards: BalanceOf, + ) -> DispatchResult { + if additional_rewards.is_zero() { return Ok(().into()); } - // Fetch source twin = dedicated node user - let src_twin = - pallet_tfgrid::Twins::::get(contract.twin_id).ok_or(Error::::TwinNotExists)?; - - // Fetch destination twin = farmer - let dst_twin = match &contract.contract_type { - types::ContractData::RentContract(rc) => { - let node = - pallet_tfgrid::Nodes::::get(rc.node_id).ok_or(Error::::NodeNotExists)?; - let farm = pallet_tfgrid::Farms::::get(node.farm_id) - .ok_or(Error::::FarmNotExists)?; - pallet_tfgrid::Twins::::get(farm.twin_id).ok_or(Error::::TwinNotExists)? - } - _ => { - return Err(DispatchErrorWithPostInfo::from( - Error::::InvalidContractType, - )); - } - }; - - // Send 100% to the node's owner (farmer) - log::debug!( - "Transfering: {:?} from contract twin {:?} to farmer account {:?}", - &amount, - &src_twin.account_id, - &dst_twin.account_id, - ); - ::Currency::transfer( - &src_twin.account_id, - &dst_twin.account_id, - amount, - ExistenceRequirement::KeepAlive, - )?; + if let Some(dst_twin) = farmer_twin { + log::debug!( + "Transferring: {:?} (100%) from twin {:?} to farmer twin {:?}", + additional_rewards, + src_twin.id, + dst_twin.id + ); + Self::transfer_reserved( + &src_twin.account_id, + &dst_twin.account_id, + additional_rewards, + )?; + } Ok(().into()) } - // Following: https://library.threefold.me/info/threefold#/tfgrid/farming/threefold__proof_of_utilization - fn distribute_cultivation_rewards( - contract: &types::Contract, + // Transferring the held or reserved funds from the user's account to the beneficiaries (foundation, staking pool, and farmer) + fn distribute_standard_rewards( + src_twin: &pallet_tfgrid::types::Twin, + farmer_twin: &Option>, + standard_rewards: BalanceOf, pricing_policy: &pallet_tfgrid::types::PricingPolicy, - amount: BalanceOf, - ) -> DispatchResultWithPostInfo { - log::info!( - "Distributing cultivation rewards for contract {:?} with amount {:?}", - contract.contract_id, - amount, - ); - - // If the amount is zero, return - if amount == BalanceOf::::zero() { + ) -> DispatchResult { + if standard_rewards.is_zero() { return Ok(().into()); } - // fetch source twin - let twin = - pallet_tfgrid::Twins::::get(contract.twin_id).ok_or(Error::::TwinNotExists)?; - - // Send 10% to the foundation - let foundation_share = Perbill::from_percent(10) * amount; - log::debug!( - "Transfering: {:?} from contract twin {:?} to foundation account {:?}", - &foundation_share, - &twin.account_id, - &pricing_policy.foundation_account - ); - ::Currency::transfer( - &twin.account_id, - &pricing_policy.foundation_account, - foundation_share, - ExistenceRequirement::KeepAlive, - )?; - - // TODO: send 5% to the staking pool account - let staking_pool_share = Perbill::from_percent(5) * amount; + // Calculate and transfer staking pool share (10%) + let staking_pool_share = Perbill::from_percent(10) * standard_rewards; let staking_pool_account = T::StakingPoolAccount::get(); log::debug!( - "Transfering: {:?} from contract twin {:?} to staking pool account {:?}", - &staking_pool_share, - &twin.account_id, - &staking_pool_account, + "Transferring: {:?} (10%) from twin {:?} to staking pool account {:?}", + staking_pool_share, + src_twin.id, + staking_pool_account, ); - ::Currency::transfer( - &twin.account_id, + Self::transfer_reserved( + &src_twin.account_id, &staking_pool_account, staking_pool_share, - ExistenceRequirement::KeepAlive, )?; - let mut sales_share = 50; - - if let Some(provider_id) = contract.solution_provider_id { - if let Some(solution_provider) = SolutionProviders::::get(provider_id) { - let total_take: u8 = solution_provider - .providers - .iter() - .map(|provider| provider.take) - .sum(); - sales_share -= total_take; - - if !solution_provider - .providers - .iter() - .map(|provider| { - let share = Perbill::from_percent(provider.take as u32) * amount; - log::debug!( - "Transfering: {:?} from contract twin {:?} to provider account {:?}", - &share, - &twin.account_id, - &provider.who - ); - ::Currency::transfer( - &twin.account_id, - &provider.who, - share, - ExistenceRequirement::KeepAlive, - ) - }) - .filter(|result| result.is_err()) - .collect::>() - .is_empty() - { - return Err(DispatchErrorWithPostInfo::from( - Error::::InvalidProviderConfiguration, - )); - } - } - }; - - if sales_share > 0 { - let share = Perbill::from_percent(sales_share.into()) * amount; - // Transfer the remaining share to the sales account - // By default it is 50%, if a contract has solution providers it can be less + let (foundation_percent, foundation_share) = if let Some(dst_twin) = farmer_twin { + // Where 3node utilized (Node and Rent contracts) + // Calculate foundation share (40%) + let foundation_percent = 40; + let foundation_share = Perbill::from_percent(foundation_percent) * standard_rewards; + // Calculate and transfer farmer share (50%) + // We calculate it by subtract all previously send amounts with the initial to avoid accumulating rounding errors. + let total_distributed = foundation_share + staking_pool_share; + let farmer_share = standard_rewards.defensive_saturating_sub(total_distributed); log::debug!( - "Transfering: {:?} from contract twin {:?} to sales account {:?}", - &share, - &twin.account_id, - &pricing_policy.certified_sales_account + "Transferring: {:?} (50%) from twin {:?} to farmer twin {:?}", + farmer_share, + src_twin.id, + dst_twin.id ); - ::Currency::transfer( - &twin.account_id, - &pricing_policy.certified_sales_account, - share, - ExistenceRequirement::KeepAlive, - )?; - } - - // Burn 35%, to not have any imbalance in the system, subtract all previously send amounts with the initial - let amount_to_burn = - (Perbill::from_percent(50) * amount) - foundation_share - staking_pool_share; + Self::transfer_reserved(&src_twin.account_id, &dst_twin.account_id, farmer_share)?; - let to_burn = T::Currency::withdraw( - &twin.account_id, - amount_to_burn, - WithdrawReasons::FEE, - ExistenceRequirement::KeepAlive, - )?; + (foundation_percent, foundation_share) + } else { + // Where no 3node utilized (Name contracts) + // Calculate foundation share (90%) + let foundation_percent = 90; + // We calculate it by subtract all previously send amounts with the initial to avoid accumulating rounding errors. + let foundation_share = standard_rewards.defensive_saturating_sub(staking_pool_share); + (foundation_percent, foundation_share) + }; + // Transfer foundation share log::debug!( - "Burning: {:?} from contract twin {:?}", - amount_to_burn, - &twin.account_id + "Transferring: {:?} ({:}%) from twin {:?} to foundation account {:?}", + foundation_share, + foundation_percent, + src_twin.id, + pricing_policy.foundation_account, ); - T::Burn::on_unbalanced(to_burn); + Self::transfer_reserved( + &src_twin.account_id, + &pricing_policy.foundation_account, + foundation_share, + )?; - Self::deposit_event(Event::TokensBurned { - contract_id: contract.contract_id, - amount: amount_to_burn, - }); + Ok(().into()) + } + + // Transfer reserved funds to a beneficiary + fn transfer_reserved( + src_account: &T::AccountId, + dst_account: &T::AccountId, + amount: BalanceOf, + ) -> DispatchResult { + if amount.is_zero() { + return Ok(().into()); + } + + let result = if Self::account_exists(&dst_account) { + // Default case: repatriate_reserved is efficient but requires the beneficiary account to exist + ::Currency::repatriate_reserved( + &src_account, + &dst_account, + amount, + BalanceStatus::Free, + ) + } else { + // Defensive measure: less efficient than repatriate_reserved, but works for non-existent accounts + log::info!("Beneficiary account does not exist. The account will be created"); + let (slashed, remainder) = + ::Currency::slash_reserved(&src_account, amount); + if remainder.is_zero() { + // This may fail to create the account if the amount is too low (less than EXISTENTIAL_DEPOSIT) but nothing we can do about it + ::Currency::resolve_creating(dst_account, slashed); + } + Ok(remainder) + }; + + match result { + // No remainder: the full amount was successfully deducted from the reserve and transferred to the beneficiary + Ok(remainder) if remainder.is_zero() => Ok(().into()), + // Partial remainder: A portion of the amount wasn't successfully deducted from the reserve. + // This should only occur if on-chain logic has introduced a liquid restriction on the source account, or if there's a bug + Ok(remainder) => { + log::error!( + "Failed to transfer the whole amount: wanted {:?}, remainder {:?}", + amount, + remainder + ); + Err(Error::::RewardDistributionError.into()) + } + // This should only occur if the destination account is unable to receive the funds + Err(e) => { + log::error!( + "Failed to transfer reserved balance: error: {:?}. source: {:?}, destination: {:?}", + e, src_account, dst_account + ); + Err(e) + } + } + } + + // Managing the states of node contracts associated with a rent contract to transition them to the appropriate state (either Created or GracePeriod). + fn synchronize_associated_node_contract_states( + contract: &mut types::Contract, + state: types::ContractState, + ) -> DispatchResultWithPostInfo { + match &contract.contract_type { + types::ContractData::RentContract(rc) => { + let active_node_contracts = ActiveNodeContracts::::get(rc.node_id); + for ctr_id in active_node_contracts { + let mut ctr = + Contracts::::get(ctr_id).ok_or(Error::::ContractNotExists)?; + Self::update_contract_state(&mut ctr, &state)?; + + match state { + types::ContractState::Created => { + Self::deposit_event(Event::ContractGracePeriodEnded { + contract_id: ctr_id, + node_id: rc.node_id, + twin_id: ctr.twin_id, + }); + } + types::ContractState::GracePeriod(block_number) => { + Self::deposit_event(Event::ContractGracePeriodStarted { + contract_id: ctr_id, + node_id: rc.node_id, + twin_id: ctr.twin_id, + block_number, + }); + } + _ => (), + }; + } + } + _ => (), + }; Ok(().into()) } @@ -627,7 +775,7 @@ impl Pallet { } // Inserts a contract in a billing loop where the index is the contract id % billing frequency - // This way, we don't need to reinsert the contract everytime it gets billed + // This way, we don't need to re-insert the contract every time it gets billed pub fn insert_contract_in_billing_loop(contract_id: u64) { let index = Self::get_billing_loop_index_from_contract_id(contract_id); let mut contract_ids = ContractsToBillAt::::get(index); @@ -679,25 +827,6 @@ impl Pallet { Ok(().into()) } - // Get the usable balance of an account - // This is the balance minus the minimum balance - pub fn get_usable_balance(account_id: &T::AccountId) -> BalanceOf { - let balance = pallet_balances::pallet::Pallet::::usable_balance(account_id); - let b = balance.saturated_into::(); - BalanceOf::::saturated_from(b) - } - - fn get_locked_balance(account_id: &T::AccountId) -> BalanceOf { - let usable_balance = Self::get_usable_balance(account_id); - let free_balance = ::Currency::free_balance(account_id); - - let locked_balance = free_balance.checked_sub(&usable_balance); - match locked_balance { - Some(balance) => balance, - None => BalanceOf::::zero(), - } - } - fn get_stash_balance(twin_id: u32) -> BalanceOf { let account_id = pallet_tfgrid::TwinBoundedAccountID::::get(twin_id); match account_id { @@ -706,44 +835,39 @@ impl Pallet { } } - // Validates if the given signer is the next block author based on the validators in session - // This can be used if an extrinsic should be refunded by the author in the same block - // It also requires that the keytype inserted for the offchain workers is the validator key - fn is_next_block_author( - signer: &Signer::AuthorityId>, - ) -> Result<(), Error> { - let author = >::author(); - let validators = >::validators(); - - // Sign some arbitrary data in order to get the AccountId, maybe there is another way to do this? - let signed_message = signer.sign_message(&[0]); - if let Some(signed_message_data) = signed_message { - if let Some(block_author) = author { - let validator = - ::ValidatorIdOf::convert(block_author.clone()) - .ok_or(Error::::IsNotAnAuthority)?; - - let validator_count = validators.len(); - let author_index = (validators.iter().position(|a| a == &validator).unwrap_or(0) - + 1) - % validator_count; - - let signer_validator_account = - ::ValidatorIdOf::convert( - signed_message_data.0.id.clone(), - ) - .ok_or(Error::::IsNotAnAuthority)?; - - if signer_validator_account != validators[author_index] { - return Err(Error::::WrongAuthority); - } - } - } - - Ok(().into()) + // Retrieve the liquid balance (amount that is neither reserved nor frozen). + // The check can_reserve(get_reservable_balance(acc)) should always return true. + // Returns free - max (ED, Frozen) + pub fn get_usable_balance(account_id: &T::AccountId) -> BalanceOf { + let account = T::AccountStore::get(account_id); + let free = account.free; + let frozen = account.frozen; + let reserved = account.reserved; + let minimum_balance = + <::Currency as Currency>::minimum_balance() + .saturated_into::(); + // Get the reservable balance + let reservable = free.saturating_sub(max( + ::Balance::saturated_from(minimum_balance), + frozen, + )); + log::debug!("Free balance: {:?} Reserved balance: {:?} Locked balance: {:?} Reservable balance: {:?}", free, reserved, frozen, reservable); + let b = reservable.saturated_into::(); + BalanceOf::::saturated_from(b) } pub fn get_current_timestamp_in_secs() -> u64 { >::get().saturated_into::() / 1000 } + + pub fn is_validator(account_id: T::AccountId) -> bool { + let validators = pallet_session::Pallet::::validators(); + + ::ValidatorIdOf::convert(account_id.clone()) + .map_or(false, |validator_id| validators.contains(&validator_id)) + } + + fn account_exists(account_id: &T::AccountId) -> bool { + >::account_exists(&account_id.clone().into()) + } } diff --git a/substrate-node/pallets/pallet-smart-contract/src/cost.rs b/substrate-node/pallets/pallet-smart-contract/src/cost.rs index c228ad16c..69a4b7e39 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/cost.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/cost.rs @@ -9,6 +9,8 @@ use tfchain_support::{ types::NodeCertification, }; +pub const CERTIFIED_INCREASE_FACTOR: f64 = 1.25; + impl types::Contract { pub fn get_billing_info(&self) -> types::ContractBillingInformation { pallet::ContractBillingInformationByID::::get(self.contract_id) @@ -18,10 +20,10 @@ impl types::Contract { &self, balance: BalanceOf, seconds_elapsed: u64, + certification_type: Option, ) -> Result<(BalanceOf, types::DiscountLevel), DispatchErrorWithPostInfo> { // Fetch the default pricing policy and certification type let pricing_policy = pallet_tfgrid::PricingPolicies::::get(1).unwrap(); - let certification_type = NodeCertification::Diy; // Calculate the cost for a contract, can be any of: // - NodeContract @@ -30,12 +32,11 @@ impl types::Contract { let total_cost = self.calculate_contract_cost_units_usd(&pricing_policy, seconds_elapsed)?; - // If cost is 0, reinsert to be billed at next interval if total_cost == 0 { return Ok((BalanceOf::::zero(), types::DiscountLevel::None)); } - let total_cost_tft_64 = calculate_cost_in_tft_from_units_usd::(total_cost)?; + let total_cost_tft_64 = calculate_cost_in_tft_from_units_usd::(total_cost); // Calculate the amount due and discount received based on the total_cost amount due let (amount_due, discount_received) = calculate_discount_tft::( @@ -114,18 +115,14 @@ impl types::Contract { } // Calculates the cost of extra fee for a dedicated node in TFT. - pub fn calculate_extra_fee_cost_tft( - &self, - node_id: u32, - seconds_elapsed: u64, - ) -> Result, DispatchErrorWithPostInfo> { + pub fn calculate_extra_fee_cost_tft(&self, node_id: u32, seconds_elapsed: u64) -> BalanceOf { let cost = calculate_extra_fee_cost_units_usd::(node_id, seconds_elapsed); if cost == 0 { - return Ok(BalanceOf::::zero()); + return BalanceOf::::zero(); } - let cost_tft = calculate_cost_in_tft_from_units_usd::(cost)?; + let cost_tft = calculate_cost_in_tft_from_units_usd::(cost); - Ok(BalanceOf::::saturated_from(cost_tft)) + BalanceOf::::saturated_from(cost_tft) } } @@ -178,7 +175,7 @@ impl types::ServiceContract { } // Calculate the cost in TFT for service contract - let total_cost_tft_64 = calculate_cost_in_tft_from_units_usd::(total_cost)?; + let total_cost_tft_64 = calculate_cost_in_tft_from_units_usd::(total_cost); // convert to balance object let amount_due: BalanceOf = BalanceOf::::saturated_from(total_cost_tft_64); @@ -297,7 +294,7 @@ pub fn calculate_discount_tft( amount_due: u64, seconds_elapsed: u64, balance: BalanceOf, - certification_type: NodeCertification, + certification_type: Option, ) -> (BalanceOf, types::DiscountLevel) { if amount_due == 0 { return (BalanceOf::::zero(), types::DiscountLevel::None); @@ -305,8 +302,9 @@ pub fn calculate_discount_tft( // calculate amount due on a monthly basis // first get the normalized amount per hour - let amount_due_hourly = U64F64::from_num(amount_due) * U64F64::from_num(seconds_elapsed) - / U64F64::from_num(SECS_PER_HOUR); + // amount_due / seconds_elapsed = amount_due_hourly / 3600 + let amount_due_hourly = U64F64::from_num(amount_due) * U64F64::from_num(SECS_PER_HOUR) + / U64F64::from_num(seconds_elapsed); // then we can infer the amount due monthly (30 days ish) let amount_due_monthly = (amount_due_hourly * 24 * 30).round().to_num::(); @@ -328,8 +326,9 @@ pub fn calculate_discount_tft( let mut amount_due = U64F64::from_num(amount_due) * discount_received.price_multiplier(); // Certified capacity costs 25% more - if certification_type == NodeCertification::Certified { - amount_due = amount_due * U64F64::from_num(1.25); + if let Some(NodeCertification::Certified) = certification_type { + log::debug!("Certified node detected, increasing amount due by 25%"); + amount_due *= U64F64::from_num(CERTIFIED_INCREASE_FACTOR); } // convert to balance object @@ -339,9 +338,7 @@ pub fn calculate_discount_tft( (amount_due, discount_received) } -pub fn calculate_cost_in_tft_from_units_usd( - cost_units_usd: u64, -) -> Result { +pub fn calculate_cost_in_tft_from_units_usd(cost_units_usd: u64) -> u64 { let avg_tft_price = pallet_tft_price::AverageTftPrice::::get(); // Guarantee tft price will never be lower than min tft price @@ -359,7 +356,7 @@ pub fn calculate_cost_in_tft_from_units_usd( let cost_tft = U64F64::from_num(cost_units_usd) / U64F64::from_num(tft_price_units_usd); // Multiply by the chain precision (7 decimals) - Ok((cost_tft * U64F64::from_num(10u64.pow(7))) + (cost_tft * U64F64::from_num(10u64.pow(7))) .round() - .to_num::()) + .to_num::() } diff --git a/substrate-node/pallets/pallet-smart-contract/src/grid_contract.rs b/substrate-node/pallets/pallet-smart-contract/src/grid_contract.rs index cd3faf7e7..bada34e30 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/grid_contract.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/grid_contract.rs @@ -9,7 +9,7 @@ use pallet_tfgrid::pallet::{InterfaceOf, LocationOf, SerialNumberOf, TfgridNode} use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use sp_std::{marker::PhantomData, vec, vec::Vec}; use tfchain_support::{ - traits::{ChangeNode, PublicIpModifier}, + traits::{ChangeNode, NodeActiveContracts, PublicIpModifier}, types::PublicIP, }; @@ -27,8 +27,12 @@ impl Pallet { let node = pallet_tfgrid::Nodes::::get(node_id).ok_or(Error::::NodeNotExists)?; + // Don't deploy if node is (or is switched to) standby let node_power = pallet_tfgrid::NodePower::::get(node_id); - ensure!(!node_power.is_down(), Error::::NodeNotAvailableToDeploy); + ensure!( + !node_power.is_standby_phase(), + Error::::NodeNotAvailableToDeploy + ); let farm = pallet_tfgrid::Farms::::get(node.farm_id).ok_or(Error::::FarmNotExists)?; @@ -123,9 +127,6 @@ impl Pallet { Error::::FarmNotExists ); - let node_power = pallet_tfgrid::NodePower::::get(node_id); - ensure!(!node_power.is_down(), Error::::NodeNotAvailableToDeploy); - let active_node_contracts = ActiveNodeContracts::::get(node_id); let farm = pallet_tfgrid::Farms::::get(node.farm_id).ok_or(Error::::FarmNotExists)?; ensure!( @@ -222,9 +223,9 @@ impl Pallet { ContractID::::put(id); let now = Self::get_current_timestamp_in_secs(); - let mut contract_lock = types::ContractLock::default(); - contract_lock.lock_updated = now; - ContractLock::::insert(id, contract_lock); + let mut contract_payment_state = types::ContractPaymentState::default(); + contract_payment_state.last_updated_seconds = now; + ContractPaymentState::::insert(id, contract_payment_state); Ok(contract) } @@ -314,12 +315,16 @@ impl Pallet { let rent_contract = Self::get_rent_contract(&contract)?; let active_node_contracts = ActiveNodeContracts::::get(rent_contract.node_id); ensure!( - active_node_contracts.len() == 0, + active_node_contracts.is_empty(), Error::::NodeHasActiveContracts ); } Self::update_contract_state(contract, &types::ContractState::Deleted(cause))?; + log::debug!( + "Billing for contract {} kicked in due to cancel request", + contract.contract_id + ); Self::bill_contract(contract.contract_id)?; Ok(().into()) @@ -328,6 +333,7 @@ impl Pallet { pub fn remove_contract(contract_id: u64) -> DispatchResultWithPostInfo { let contract = Contracts::::get(contract_id).ok_or(Error::::ContractNotExists)?; + log::debug!("removing contract {}", contract_id); match contract.contract_type.clone() { types::ContractData::NodeContract(mut node_contract) => { if node_contract.public_ips > 0 { @@ -369,13 +375,14 @@ impl Pallet { } }; - log::debug!("removing contract"); Contracts::::remove(contract_id); - ContractLock::::remove(contract_id); - + ContractPaymentState::::remove(contract_id); // Clean up contract from billing loop // This is the only place it should be done - log::debug!("cleaning up deleted contract from billing loop"); + log::debug!( + "cleaning up deleted contract {} from billing loop", + contract_id + ); Self::remove_contract_from_billing_loop(contract_id)?; Ok(().into()) @@ -403,7 +410,7 @@ impl Pallet { contract.state = state.clone(); Contracts::::insert(&contract.contract_id, contract.clone()); - // if the contract is a name contract, nothing to do left here + // if the contract is a name or rent contract, nothing to do left here match contract.contract_type { types::ContractData::NameContract(_) => return Ok(().into()), types::ContractData::RentContract(_) => return Ok(().into()), @@ -656,8 +663,7 @@ impl Pallet { // Make sure there is no active node or rent contract on this node ensure!( - ActiveRentContractForNode::::get(node_id).is_none() - && ActiveNodeContracts::::get(&node_id).is_empty(), + Self::node_has_no_active_contracts(node_id), Error::::NodeHasActiveContracts ); @@ -702,7 +708,14 @@ impl ChangeNode, InterfaceOf, SerialNumberOf> for &mut contract, &types::ContractState::Deleted(types::Cause::CanceledByUser), ); - let _ = Self::bill_contract(node_contract_id); + log::debug!( + "Billing for node contract {} kicked in due to node deletion", + contract.contract_id + ); + let res = Self::bill_contract(node_contract_id); + if let Err(e) = res { + log::error!("error in node_deleted hook while billing contract {:?}: {:?}. Contract could be in dirty state", node_contract_id, e); + } } } @@ -714,12 +727,44 @@ impl ChangeNode, InterfaceOf, SerialNumberOf> for &mut contract, &types::ContractState::Deleted(types::Cause::CanceledByUser), ); - let _ = Self::bill_contract(contract.contract_id); + log::debug!( + "Billing for rent contract {} kicked in due to node deletion", + contract.contract_id + ); + let res = Self::bill_contract(contract.contract_id); + if let Err(e) = res { + log::error!("error in node_deleted hook while billing contract id {:?}: {:?}. Contract could be in dirty state", rc_id, e); + } + } + } + } + + fn node_power_state_changed(node: &TfgridNode) { + // Avoid billing rent contract for standby period + // So update contract lock timestamp when node power state comes back to Up + let node_power = pallet_tfgrid::NodePower::::get(node.id); + if !node_power.is_standby() { + if let Some(rc_id) = ActiveRentContractForNode::::get(node.id) { + let Some(mut contract_payment_state) = ContractPaymentState::::get(rc_id) else { + log::warn!("Contract payment state not exists for contract_id {}", rc_id); + return; + }; + let now = Self::get_current_timestamp_in_secs(); + contract_payment_state.last_updated_seconds = now; + ContractPaymentState::::insert(rc_id, &contract_payment_state); + log::debug!("Rented node {} is back up, updated contract contract_payment_state for contract {}", node.id, rc_id); } } } } +impl NodeActiveContracts for Pallet { + fn node_has_no_active_contracts(node_id: u32) -> bool { + ActiveNodeContracts::::get(node_id).is_empty() + && ActiveRentContractForNode::::get(node_id).is_none() + } +} + /// A Name Contract Name. #[derive(Encode, Decode, RuntimeDebugNoBound, TypeInfo, MaxEncodedLen)] #[scale_info(skip_type_params(T))] diff --git a/substrate-node/pallets/pallet-smart-contract/src/lib.rs b/substrate-node/pallets/pallet-smart-contract/src/lib.rs index 09726b04b..e140c900e 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/lib.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/lib.rs @@ -63,14 +63,16 @@ pub mod pallet { use super::*; use frame_support::{ pallet_prelude::*, - traits::{Currency, Get, Hooks, LockIdentifier, LockableCurrency, OnUnbalanced}, + traits::{ + Currency, Get, Hooks, LockIdentifier, LockableCurrency, + OnUnbalanced, ReservableCurrency, + }, }; use frame_system::{ self as system, ensure_signed, offchain::{AppCrypto, CreateSignedTransaction}, pallet_prelude::*, }; - use pallet_tfgrid::pallet::{InterfaceOf, LocationOf, SerialNumberOf}; use parity_scale_codec::FullCodec; use sp_core::H256; use sp_std::{ @@ -78,14 +80,14 @@ pub mod pallet { fmt::Debug, vec::Vec, }; - use tfchain_support::traits::{ChangeNode, PublicIpModifier}; + use tfchain_support::traits::PublicIpModifier; pub type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; pub type NegativeImbalanceOf = <::Currency as Currency<::AccountId>>::NegativeImbalance; - pub const GRID_LOCK_ID: LockIdentifier = *b"gridlock"; + use tfchain_support::types::PublicIP; #[pallet::pallet] @@ -196,6 +198,11 @@ pub mod pallet { #[pallet::getter(fn dedicated_nodes_extra_fee)] pub type DedicatedNodesExtraFee = StorageMap<_, Blake2_128Concat, u32, u64, ValueQuery>; + #[pallet::storage] + #[pallet::getter(fn contract_payment_state)] + pub type ContractPaymentState = + StorageMap<_, Blake2_128Concat, u64, types::ContractPaymentState>, OptionQuery>; + #[pallet::config] pub trait Config: CreateSignedTransaction> @@ -208,7 +215,9 @@ pub mod pallet { + pallet_session::Config { type RuntimeEvent: From> + IsType<::RuntimeEvent>; - type Currency: LockableCurrency; + type Currency: LockableCurrency + + ReservableCurrency + + Currency; /// Handler for the unbalanced decrement when slashing (burning collateral) type Burn: OnUnbalanced>; type StakingPoolAccount: Get; @@ -217,7 +226,6 @@ pub mod pallet { type DistributionFrequency: Get; type GracePeriod: Get; type WeightInfo: weights::WeightInfo; - type NodeChanged: ChangeNode, InterfaceOf, SerialNumberOf>; type PublicIpModifier: PublicIpModifier; type AuthorityId: AppCrypto; type Call: From>; @@ -291,14 +299,14 @@ pub mod pallet { RentContractCanceled { contract_id: u64, }, - /// A Contract grace period is triggered + /// A Contract grace period is triggered due to overdarfted ContractGracePeriodStarted { contract_id: u64, node_id: u32, twin_id: u32, block_number: u64, }, - /// A Contract grace period was ended + /// A Contract grace period was ended due to overdarfted being settled ContractGracePeriodEnded { contract_id: u64, node_id: u32, @@ -330,6 +338,28 @@ pub mod pallet { node_id: u32, extra_fee: u64, }, + // A rent contract is waived due to node being in standby + RentWaived { + contract_id: u64, + }, + // A Contract grace Period is elapsed + ContractGracePeriodElapsed { + contract_id: u64, + grace_period: u64, + }, + // Overdafted incurred + ContractPaymentOverdrawn { + contract_id: u64, + timestamp: u64, + partially_billed_amount: BalanceOf, + overdraft: BalanceOf, + }, + // RewardDistributed + RewardDistributed { + contract_id: u64, + standard_rewards: BalanceOf, + additional_rewards: BalanceOf, + }, } #[pallet::error] @@ -386,6 +416,8 @@ pub mod pallet { WrongAuthority, UnauthorizedToChangeSolutionProviderId, UnauthorizedToSetExtraFee, + RewardDistributionError, + ContractPaymentStateNotExists, } #[pallet::genesis_config] @@ -517,8 +549,31 @@ pub mod pallet { origin: OriginFor, contract_id: u64, ) -> DispatchResultWithPostInfo { - let _account_id = ensure_signed(origin)?; - Self::bill_contract(contract_id) + let account_id = ensure_signed(origin)?; + log::debug!("Starting billing for contract_id: {:?}", contract_id); + + let res = Self::bill_contract(contract_id); + + let pays: Pays = if Self::is_validator(account_id) { + log::debug!("validator is exempt from fees"); + // Exempt fees for validators + Pays::No.into() + } else { + Pays::Yes.into() + }; + + match res { + Ok(mut info) => { + log::info!("successfully billed contract with id {:?}", contract_id,); + info.pays_fee = pays; + Ok(info) + } + Err(mut info) => { + log::warn!("failed to bill contract with id {:?}", contract_id); + info.post_info.pays_fee = pays; + Err(info) + } + } } #[pallet::call_index(11)] @@ -663,7 +718,7 @@ pub mod pallet { } fn offchain_worker(block_number: BlockNumberFor) { - Self::bill_conttracts_for_block(block_number); + Self::bill_contracts_for_block(block_number); } } } diff --git a/substrate-node/pallets/pallet-smart-contract/src/migrations/mod.rs b/substrate-node/pallets/pallet-smart-contract/src/migrations/mod.rs index 0c2c7bfa7..62cb15abc 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/migrations/mod.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/migrations/mod.rs @@ -5,3 +5,4 @@ pub mod v10; pub mod v11; pub mod v8; pub mod v9; +pub mod v12; diff --git a/substrate-node/pallets/pallet-smart-contract/src/migrations/types.rs b/substrate-node/pallets/pallet-smart-contract/src/migrations/types.rs index 89125d03e..ece8c6689 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/migrations/types.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/migrations/types.rs @@ -46,3 +46,20 @@ pub mod v11 { pub cycles: u16, } } + +pub mod v12 { + use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; + use scale_info::TypeInfo; + + #[derive( + PartialEq, Eq, PartialOrd, Ord, Clone, Encode, Decode, Default, Debug, TypeInfo, MaxEncodedLen, + )] + pub struct ContractPaymentState { + pub standard_reserve: BalanceOf, + pub additional_reserve: BalanceOf, + pub standard_overdraft: BalanceOf, + pub additional_overdraft: BalanceOf, + pub last_updated_seconds: u64, + pub cycles: u16, + } +} diff --git a/substrate-node/pallets/pallet-smart-contract/src/migrations/v12.rs b/substrate-node/pallets/pallet-smart-contract/src/migrations/v12.rs new file mode 100644 index 000000000..da7e5bf72 --- /dev/null +++ b/substrate-node/pallets/pallet-smart-contract/src/migrations/v12.rs @@ -0,0 +1,207 @@ +use crate::*; +use frame_support::{ + pallet_prelude::ValueQuery, + storage_alias, + traits::{LockableCurrency, OnRuntimeUpgrade}, + weights::Weight, + Blake2_128Concat, +}; +use log::{debug, info}; +use sp_core::Get; +use sp_runtime::traits::{Saturating, Zero}; +use sp_std::marker::PhantomData; + +#[cfg(feature = "try-runtime")] +use frame_support::ensure; +#[cfg(feature = "try-runtime")] +use sp_std::vec::Vec; +#[cfg(feature = "try-runtime")] +use sp_runtime::DispatchError; + +// Storage alias from ContractPaymentState v12 +#[storage_alias] +pub type ContractPaymentState = StorageMap< + Pallet, + Blake2_128Concat, + u64, + super::types::v12::ContractPaymentState>, + ValueQuery, +>; + +pub struct MigrateContractLockToContractPaymentState(pub PhantomData); + +impl OnRuntimeUpgrade for MigrateContractLockToContractPaymentState { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { + validate_pallet_version::(types::StorageVersion::V11)?; + + let count = ContractLock::::iter().count(); + debug!( + "🏁 Smart Contract pallet {:?} ContractLock length before migration {:?}", + PalletVersion::::get(), + count + ); + + Ok(count.to_le_bytes().to_vec()) + } + + fn on_runtime_upgrade() -> Weight { + if PalletVersion::::get() == types::StorageVersion::V11 { + migrate_to_version_12::() + } else { + info!(" >>> Unused Smart Contract pallet V12 migration"); + Weight::zero() + } + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(count: Vec) -> Result<(), sp_runtime::TryRuntimeError> { + validate_pallet_version::(types::StorageVersion::V12)?; + + let new_count = ContractPaymentState::::iter().count(); + let old_count = + usize::from_le_bytes(count.try_into().expect("slice with incorrect length")); + + if old_count != 0 { + debug!( + "🏁 Smart Contract pallet {:?} ContractPaymentState length after migration {:?}", + PalletVersion::::get(), + new_count + ); + ensure!( + new_count == old_count, + DispatchError::Other( + "Number of ContractPaymentState migrated does not match: {:?}" + ) + ); + } + + // Ensure that the ContractLock storage map is empty + let count = ContractLock::::iter().count(); + ensure!( + count == 0, + DispatchError::Other("ContractLock not empty after migration") + ); + + // Ensure that the balances Locks storage map is empty + let count = pallet_balances::Locks::::iter().count(); + ensure!( + count == 0, + DispatchError::Other("Locks not empty after migration") + ); + + check_contract_payment_state_v12::() + } +} + +#[cfg(feature = "try-runtime")] +fn validate_pallet_version( + expected_version: types::StorageVersion, +) -> Result<(), sp_runtime::TryRuntimeError> { + let current_version = PalletVersion::::get(); + debug!("current pallet version: {:?}", current_version); + ensure!( + current_version >= expected_version, + DispatchError::Other("Unexpected pallet version") + ); + Ok(()) +} + +pub fn migrate_to_version_12() -> frame_support::weights::Weight { + debug!( + " >>> Starting contract pallet migration, pallet version: {:?}", + PalletVersion::::get() + ); + + let mut total_reads = 0; + let mut total_writes = 0; + + let (r, w) = migrate_contract_lock_to_contract_payment_state::(); + total_reads.saturating_accrue(r); + total_writes.saturating_accrue(w); + + let (r, w) = remove_all_balances_locks::(); + total_reads.saturating_accrue(r); + total_writes.saturating_accrue(w); + + // Set the new storage version + PalletVersion::::put(types::StorageVersion::V12); + total_writes.saturating_inc(); + + T::DbWeight::get().reads_writes(total_reads, total_writes) +} + +fn migrate_contract_lock_to_contract_payment_state() -> (u64, u64) { + let mut reads = 0; + let mut writes = 0; + + for (contract_id, old_contract_lock) in ContractLock::::drain() { + reads.saturating_inc(); + writes.saturating_inc(); + + ContractPaymentState::::insert( + contract_id, + super::types::v12::ContractPaymentState { + standard_reserve: BalanceOf::::zero(), + additional_reserve: BalanceOf::::zero(), + standard_overdraft: old_contract_lock.amount_locked, + additional_overdraft: old_contract_lock.extra_amount_locked, + last_updated_seconds: old_contract_lock.lock_updated, + cycles: old_contract_lock.cycles, + }, + ); + writes.saturating_inc(); + }; + + (reads, writes) +} + +fn remove_all_balances_locks() -> (u64, u64) { + let mut reads = 0; + let mut writes = 0; + // Get only the accounts with locks + for (account_id, _) in pallet_balances::Locks::::iter() { + reads.saturating_inc(); + // Fetch all locks for the account + let locks = pallet_balances::Pallet::::locks(&account_id); + reads.saturating_inc(); + + // Remove each lock + for lock in locks { + pallet_balances::Pallet::::remove_lock(lock.id, &account_id); + reads.saturating_inc(); + writes.saturating_inc(); + } + } + + (reads, writes) +} + +#[cfg(feature = "try-runtime")] +pub fn check_contract_payment_state_v12() -> Result<(), sp_runtime::TryRuntimeError> { + debug!( + "🔎 Smart Contract pallet {:?} checking ContractPaymentState storage map START", + PalletVersion::::get() + ); + + for (contract_id, _) in Contracts::::iter() { + if !ContractPaymentState::::contains_key(contract_id) { + debug!( + " ⚠️ Contract (id: {}): no contract payment state found", + contract_id + ); + } + } + + debug!( + "🏁 Smart Contract pallet {:?} checking ContractPaymentState storage map END", + PalletVersion::::get() + ); + + debug!( + "👥 Smart Contract pallet to {:?} passes POST migrate checks ✅", + PalletVersion::::get() + ); + + Ok(()) +} diff --git a/substrate-node/pallets/pallet-smart-contract/src/migrations/v9.rs b/substrate-node/pallets/pallet-smart-contract/src/migrations/v9.rs index fc4c7661f..3a477bd5e 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/migrations/v9.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/migrations/v9.rs @@ -1,9 +1,9 @@ use crate::*; use frame_support::{traits::OnRuntimeUpgrade, weights::Weight}; -use log::{info, debug}; -use sp_runtime::Saturating; +use log::{debug, info}; use scale_info::prelude::string::String; use sp_core::Get; +use sp_runtime::Saturating; use sp_std::{marker::PhantomData, vec, vec::Vec}; #[cfg(feature = "try-runtime")] @@ -15,8 +15,9 @@ pub struct CleanStorageState(PhantomData); impl OnRuntimeUpgrade for CleanStorageState { fn on_runtime_upgrade() -> Weight { - if PalletVersion::::get() == types::StorageVersion::V8 || - PalletVersion::::get() == types::StorageVersion::V9 { + if PalletVersion::::get() == types::StorageVersion::V8 + || PalletVersion::::get() == types::StorageVersion::V9 + { info!("🔔 Starting Smart Contract pallet storage cleaning"); // Start a migration (this happens before on_initialize so it'll happen later in this // block, which should be good enough)... @@ -25,14 +26,15 @@ impl OnRuntimeUpgrade for CleanStorageState { } else { info!("⛔ Unused Smart Contract pallet V9 storage cleaning"); Weight::zero() - } + } } #[cfg(feature = "try-runtime")] fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { info!("current pallet version: {:?}", PalletVersion::::get()); ensure!( - PalletVersion::::get() == types::StorageVersion::V8 || PalletVersion::::get() == types::StorageVersion::V9, + PalletVersion::::get() == types::StorageVersion::V8 + || PalletVersion::::get() == types::StorageVersion::V9, DispatchError::Other("Unexpected pallet version") ); @@ -56,20 +58,36 @@ pub fn check_pallet_smart_contract() { check_node_contract_resources::(); } -pub fn clean_pallet_smart_contract(current_stage: MigrationStage +pub fn clean_pallet_smart_contract( + current_stage: MigrationStage, ) -> (frame_support::weights::Weight, Option) { - info!("🧼 Cleaning Smart Contract pallet storage [{}/10]", current_stage); + info!( + "🧼 Cleaning Smart Contract pallet storage [{}/10]", + current_stage + ); match current_stage { 0 => (Weight::zero(), Some(current_stage + 1)), 1 => (clean_contracts::(), Some(current_stage + 1)), 2 => (clean_contracts_to_bill_at::(), Some(current_stage + 1)), 3 => (clean_active_node_contracts::(), Some(current_stage + 1)), - 4 => (clean_active_rent_contract_for_node::(), Some(current_stage + 1)), - 5 => (clean_contract_id_by_node_id_and_hash::(), Some(current_stage + 1)), - 6 => (clean_contract_id_by_name_registration::(), Some(current_stage + 1)), + 4 => ( + clean_active_rent_contract_for_node::(), + Some(current_stage + 1), + ), + 5 => ( + clean_contract_id_by_node_id_and_hash::(), + Some(current_stage + 1), + ), + 6 => ( + clean_contract_id_by_name_registration::(), + Some(current_stage + 1), + ), 7 => (clean_contract_lock::(), Some(current_stage + 1)), 8 => (clean_solution_providers::(), Some(current_stage + 1)), - 9 => (clean_contract_billing_information_by_id::(), Some(current_stage + 1)), + 9 => ( + clean_contract_billing_information_by_id::(), + Some(current_stage + 1), + ), // Last cleaning operation, set stage to none to stop migration 10 => { let weight = clean_node_contract_resources::(); @@ -178,7 +196,7 @@ fn check_node_contract(node_id: u32, contract_id: u64, deployment_has } // NodeContractResources - // Nothing to check here + // Nothing to check here // A node contract needs a call to report_contract_resources() to // have associated ressources in NodeContractResources storage map } else { @@ -191,7 +209,9 @@ fn check_node_contract(node_id: u32, contract_id: u64, deployment_has if deployment_hash == types::HexHash::default() { debug!( " ⚠️ Node Contract (id: {}) on node {}: deployment hash is default ({:?})", - contract_id, node_id, String::from_utf8_lossy(&deployment_hash) + contract_id, + node_id, + String::from_utf8_lossy(&deployment_hash) ); } } @@ -204,8 +224,7 @@ fn check_name_contract(contract_id: u64, name: &T::NameContractName) " ⚠️ Name Contract (id: {}): key (name: {:?}) not exists", contract_id, name ); - } - else if ctr_id != contract_id { + } else if ctr_id != contract_id { debug!( " ⚠️ Name Contract (id: {}): wrong contract (id: {}) in name registration map", contract_id, ctr_id @@ -382,7 +401,8 @@ pub fn check_contract_id_by_node_id_and_hash() { if pallet_tfgrid::Nodes::::get(node_id).is_none() { debug!( " ⚠️ ContractIDByNodeIDAndHash[node: {}, hash: {:?}]: node not exists", - node_id, String::from_utf8_lossy(&hash) + node_id, + String::from_utf8_lossy(&hash) ); } @@ -392,7 +412,7 @@ pub fn check_contract_id_by_node_id_and_hash() { if node_contract.deployment_hash != hash { debug!( " ⚠️ ContractIDByNodeIDAndHash[node: {}, hash: {:?}]: deployment hash ({:?}) on contract {} is not matching", - node_id, String::from_utf8_lossy(&hash), String::from_utf8_lossy(&node_contract.deployment_hash), contract_id, + node_id, String::from_utf8_lossy(&hash), String::from_utf8_lossy(&node_contract.deployment_hash), contract_id, ); } } @@ -406,7 +426,9 @@ pub fn check_contract_id_by_node_id_and_hash() { } else { debug!( " ⚠️ ContractIDByNodeIDAndHash[node: {}, hash: {:?}]: contract {} not exists", - node_id, String::from_utf8_lossy(&hash), contract_id + node_id, + String::from_utf8_lossy(&hash), + contract_id ); } } @@ -431,7 +453,7 @@ pub fn check_contract_id_by_name_registration() { if name_contract.name != name { debug!( " ⚠️ ContractIDByNameRegistration[name: {:?}]: name ({:?}) on contract {} is not matching", - String::from_utf8_lossy(&name.into()), String::from_utf8_lossy(&name_contract.name.into()), contract_id, + String::from_utf8_lossy(&name.into()), String::from_utf8_lossy(&name_contract.name.into()), contract_id, ); } } @@ -445,7 +467,8 @@ pub fn check_contract_id_by_name_registration() { } else { debug!( " ⚠️ ContractIDByNameRegistration[name: {:?}]: contract {} not exists", - String::from_utf8_lossy(&name.into()), contract_id + String::from_utf8_lossy(&name.into()), + contract_id ); } } @@ -464,7 +487,7 @@ pub fn check_contract_lock() { ); for (contract_id, _contract_lock) in ContractLock::::iter() { - if Contracts::::get(contract_id).is_none() { + if Contracts::::get(contract_id).is_none() { debug!( " ⚠️ ContractLock[contract: {}]: contract not exists", contract_id @@ -509,7 +532,8 @@ pub fn check_contract_billing_information_by_id() { PalletVersion::::get() ); - for (contract_id, _contract_billing_information) in ContractBillingInformationByID::::iter() { + for (contract_id, _contract_billing_information) in ContractBillingInformationByID::::iter() + { if let Some(c) = Contracts::::get(contract_id) { match c.contract_type { types::ContractData::NodeContract(_) => (), @@ -545,7 +569,7 @@ pub fn check_node_contract_resources() { if contract_resource.contract_id != contract_id { debug!( " ⚠️ NodeContractResources[contract: {}]: wrong contract id on resource ({})", - contract_id, contract_resource.contract_id + contract_id, contract_resource.contract_id ); } @@ -618,7 +642,13 @@ pub fn clean_contracts() -> frame_support::weights::Weight { T::DbWeight::get().reads_writes(r.saturating_add(2), w) } -fn clean_node_contract(node_id: u32, contract_id: u64, deployment_hash: types::HexHash, r: &mut u64, w: &mut u64) { +fn clean_node_contract( + node_id: u32, + contract_id: u64, + deployment_hash: types::HexHash, + r: &mut u64, + w: &mut u64, +) { if deployment_hash == types::HexHash::default() { Contracts::::remove(contract_id); (*w).saturating_inc(); @@ -693,9 +723,9 @@ pub fn clean_active_node_contracts() -> frame_support::weights::Weigh ActiveNodeContracts::::remove(node_id); w.saturating_inc(); } else { - contract_ids.retain(|contract_id| { + contract_ids.retain(|contract_id| { r.saturating_inc(); - Contracts::::get(contract_id).is_some() + Contracts::::get(contract_id).is_some() }); ActiveNodeContracts::::insert(node_id, contract_ids); w.saturating_inc(); @@ -921,4 +951,4 @@ pub fn clean_node_contract_resources() -> frame_support::weights::Wei ); T::DbWeight::get().reads_writes(r.saturating_add(2), w) -} \ No newline at end of file +} diff --git a/substrate-node/pallets/pallet-smart-contract/src/mock.rs b/substrate-node/pallets/pallet-smart-contract/src/mock.rs index dbc7e5a8e..4f4a07c5e 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/mock.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/mock.rs @@ -46,7 +46,7 @@ use sp_std::{ use std::{cell::RefCell, panic, thread}; use tfchain_support::{ constants::time::{MINUTES, SECS_PER_HOUR}, - traits::{ChangeNode, PublicIpModifier}, + traits::{ChangeNode, NodeActiveContracts, PublicIpModifier}, types::PublicIP, }; @@ -103,7 +103,7 @@ construct_runtime!( { System: frame_system::{Pallet, Call, Config, Storage, Event}, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - TfgridModule: pallet_tfgrid::{Pallet, Call, Storage, Event}, + TfgridModule: pallet_tfgrid::{Pallet, Call, Storage, Event, Error}, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, SmartContractModule: pallet_smart_contract::{Pallet, Call, Storage, Event}, TFTPriceModule: pallet_tft_price::{Pallet, Call, Storage, Event}, @@ -183,6 +183,9 @@ impl ChangeNode for NodeChanged { fn node_deleted(node: &TfgridNode) { SmartContractModule::node_deleted(node); } + fn node_power_state_changed(node: &TfgridNode) { + SmartContractModule::node_power_state_changed(node); + } } pub struct PublicIpModifierType; @@ -192,6 +195,13 @@ impl PublicIpModifier for PublicIpModifierType { } } +pub struct NodeActiveContractsType; +impl NodeActiveContracts for NodeActiveContractsType { + fn node_has_no_active_contracts(node_id: u32) -> bool { + SmartContractModule::node_has_no_active_contracts(node_id) + } +} + parameter_types! { pub const MaxFarmNameLength: u32 = 40; pub const MaxInterfaceIpsLength: u32 = 5; @@ -219,6 +229,7 @@ impl pallet_tfgrid::Config for TestRuntime { type WeightInfo = pallet_tfgrid::weights::SubstrateWeight; type NodeChanged = NodeChanged; type PublicIpModifier = PublicIpModifierType; + type NodeActiveContracts = NodeActiveContractsType; type TermsAndConditions = TestTermsAndConditions; type FarmName = TestFarmName; type MaxFarmNameLength = MaxFarmNameLength; @@ -279,7 +290,6 @@ impl pallet_smart_contract::Config for TestRuntime { type DistributionFrequency = DistributionFrequency; type GracePeriod = GracePeriod; type WeightInfo = weights::SubstrateWeight; - type NodeChanged = NodeChanged; type MaxNameContractNameLength = MaxNameContractNameLength; type NameContractName = TestNameContractName; type RestrictedOrigin = EnsureRootOrCouncilApproval; diff --git a/substrate-node/pallets/pallet-smart-contract/src/tests.rs b/substrate-node/pallets/pallet-smart-contract/src/tests.rs index ccbc5159c..8fe7572e9 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/tests.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/tests.rs @@ -5,7 +5,7 @@ use crate::{ use frame_support::{ assert_noop, assert_ok, dispatch::Pays, - traits::{LockableCurrency, WithdrawReasons}, + traits::{BalanceStatus, Currency, LockableCurrency, ReservableCurrency, WithdrawReasons}, BoundedVec, }; use frame_system::{EventRecord, Phase, RawOrigin}; @@ -16,7 +16,10 @@ use pallet_tfgrid::{ }; use sp_core::{bounded_vec, H256}; use sp_runtime::{assert_eq_error_rate, traits::SaturatedConversion, Perbill, Percent}; -use sp_std::convert::{TryFrom, TryInto}; +use sp_std::{ + cmp::max, + convert::{TryFrom, TryInto}, +}; use substrate_fixed::types::U64F64; use tfchain_support::{ constants::time::{SECS_PER_BLOCK, SECS_PER_HOUR}, @@ -49,7 +52,7 @@ fn test_create_node_contract_works() { } #[test] -fn test_create_node_contract_on_offline_node_fails() { +fn test_create_node_contract_on_standby_node_fails() { new_test_ext().execute_with(|| { run_to_block(1, None); prepare_farm_and_node(); @@ -74,6 +77,33 @@ fn test_create_node_contract_on_offline_node_fails() { }); } +#[test] +fn test_create_node_contract_and_switch_node_to_standby_fails() { + new_test_ext().execute_with(|| { + run_to_block(1, None); + prepare_farm_and_node(); + let node_id = 1; + + assert_ok!(SmartContractModule::create_node_contract( + RuntimeOrigin::signed(bob()), + node_id, + generate_deployment_hash(), + get_deployment_data(), + 0, + None + )); + + assert_noop!( + TfgridModule::change_power_target( + RuntimeOrigin::signed(alice()), + node_id, + tfchain_support::types::Power::Down + ), + pallet_tfgrid::Error::::NodeHasActiveContracts + ); + }); +} + #[test] fn test_create_node_contract_with_public_ips_works() { new_test_ext().execute_with(|| { @@ -669,7 +699,7 @@ fn test_create_rent_contract_works() { } #[test] -fn test_create_rent_contract_on_offline_node_fails() { +fn test_create_rent_contract_on_standby_node_works() { new_test_ext().execute_with(|| { run_to_block(1, None); prepare_dedicated_farm_and_node(); @@ -680,13 +710,65 @@ fn test_create_rent_contract_on_offline_node_fails() { tfchain_support::types::Power::Down )); + assert_ok!(SmartContractModule::create_rent_contract( + RuntimeOrigin::signed(bob()), + node_id, + None + )); + }); +} + +#[test] +fn test_create_rent_contract_and_switch_node_to_standby_fails() { + new_test_ext().execute_with(|| { + run_to_block(1, None); + prepare_dedicated_farm_and_node(); + let node_id = 1; + + assert_ok!(SmartContractModule::create_rent_contract( + RuntimeOrigin::signed(bob()), + node_id, + None + )); + assert_noop!( - SmartContractModule::create_rent_contract(RuntimeOrigin::signed(bob()), node_id, None), - Error::::NodeNotAvailableToDeploy + TfgridModule::change_power_target( + RuntimeOrigin::signed(alice()), + node_id, + tfchain_support::types::Power::Down + ), + pallet_tfgrid::Error::::NodeHasActiveContracts ); }); } +#[test] +fn test_create_rent_contract_on_standby_node_and_wake_it_up_works() { + new_test_ext().execute_with(|| { + run_to_block(1, None); + prepare_dedicated_farm_and_node(); + let node_id = 1; + + assert_ok!(TfgridModule::change_power_target( + RuntimeOrigin::signed(alice()), + node_id, + tfchain_support::types::Power::Down, + )); + + assert_ok!(SmartContractModule::create_rent_contract( + RuntimeOrigin::signed(bob()), + node_id, + None + )); + + assert_ok!(TfgridModule::change_power_target( + RuntimeOrigin::signed(alice()), + node_id, + tfchain_support::types::Power::Up, + )); + }); +} + #[test] fn test_cancel_rent_contract_works() { new_test_ext().execute_with(|| { @@ -893,12 +975,14 @@ fn test_node_contract_billing_details() { ext.execute_with(|| { run_to_block(1, None); prepare_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); let twin = TfgridModule::twins(2).unwrap(); - let initial_twin_balance = Balances::free_balance(&twin.account_id); + let initial_twin_balance = Balances::total_balance(&twin.account_id); assert_ok!(SmartContractModule::create_node_contract( RuntimeOrigin::signed(bob()), @@ -920,10 +1004,10 @@ fn test_node_contract_billing_details() { vec![contract_id] ); - let initial_total_issuance = Balances::total_issuance(); - // advance 25 cycles - for i in 0..25 { - let block_number = 11 + i * 10; + let initial_farmer_balance = Balances::free_balance(alice()); + // advance 24 cycles to reach reward distribution block + for i in 1..=DistributionFrequency::get() as u64 { + let block_number = 1 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), @@ -932,47 +1016,71 @@ fn test_node_contract_billing_details() { run_to_block(block_number, Some(&mut pool_state)); } - let free_balance = Balances::free_balance(&twin.account_id); - let total_amount_billed = initial_twin_balance - free_balance; - info!("locked balance {:?}", total_amount_billed); + let twin_balance = Balances::total_balance(&twin.account_id); + let total_amount_billed = initial_twin_balance - twin_balance; + info!("current balance {:?}", twin_balance); + info!("total amount billed {:?}", total_amount_billed); - info!("total locked balance {:?}", total_amount_billed); + validate_distribution_rewards(initial_farmer_balance, total_amount_billed, 0, true, false); - let staking_pool_account_balance = Balances::free_balance(&get_staking_pool_account()); - info!( - "staking pool account balance, {:?}", - staking_pool_account_balance - ); + // amount unbilled should have been reset after a transfer between contract owner and farmer + let contract_billing_info = + SmartContractModule::contract_billing_information_by_id(contract_id); + assert_eq!(contract_billing_info.amount_unbilled, 0); + }); +} - // 5% is sent to the staking pool account - assert_eq!( - staking_pool_account_balance, - Perbill::from_percent(5) * total_amount_billed - ); +#[test] +fn test_node_contract_billing_works_for_non_existing_accounts() { + let (mut ext, mut pool_state) = new_test_ext_with_pool_state(0); + ext.execute_with(|| { + run_to_block(1, None); + prepare_farm_and_node(); + let node_id = 1; - // 10% is sent to the foundation account - let pricing_policy = TfgridModule::pricing_policies(1).unwrap(); - let foundation_account_balance = Balances::free_balance(&pricing_policy.foundation_account); - assert_eq!( - foundation_account_balance, - Perbill::from_percent(10) * total_amount_billed - ); + TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); - // 50% is sent to the sales account - let sales_account_balance = Balances::free_balance(&pricing_policy.certified_sales_account); + let twin = TfgridModule::twins(2).unwrap(); + let initial_twin_balance = Balances::total_balance(&twin.account_id); + + assert_ok!(SmartContractModule::create_node_contract( + RuntimeOrigin::signed(bob()), + node_id, + generate_deployment_hash(), + get_deployment_data(), + 1, + None + )); + let contract_id = 1; + + push_contract_resources_used(contract_id); + push_nru_report_for_contract(contract_id, 10); + + // Ensure contract_id is stored at right billing loop index + let index = SmartContractModule::get_billing_loop_index_from_contract_id(contract_id); assert_eq!( - sales_account_balance, - Perbill::from_percent(50) * total_amount_billed + SmartContractModule::contract_to_bill_at_block(index), + vec![contract_id] ); - let total_issuance = Balances::total_issuance(); - // total issueance is now previous total - amount burned from contract billed (35%) - let burned_amount = Perbill::from_percent(35) * total_amount_billed; - assert_eq_error_rate!( - total_issuance, - initial_total_issuance - burned_amount as u64, - 1 - ); + let initial_farmer_balance = Balances::free_balance(alice()); + // advance 24 cycles to reach reward distribution block + for i in 1..=DistributionFrequency::get() as u64 { + let block_number = 1 + i * BillingFrequency::get(); + pool_state.write().should_call_bill_contract( + contract_id, + Ok(Pays::Yes.into()), + block_number, + ); + run_to_block(block_number, Some(&mut pool_state)); + } + + let twin_balance = Balances::total_balance(&twin.account_id); + let total_amount_billed = initial_twin_balance - twin_balance; + info!("current balance {:?}", twin_balance); + info!("total amount billed {:?}", total_amount_billed); + + validate_distribution_rewards(initial_farmer_balance, total_amount_billed, 0, false, false); // amount unbilled should have been reset after a transfer between contract owner and farmer let contract_billing_info = @@ -981,21 +1089,68 @@ fn test_node_contract_billing_details() { }); } +#[test] +fn test_billing_node_contract_in_graceperiod_should_reset_unbilled_network_consumption_after_added_to_overdraft( +) { + let (mut ext, mut pool_state) = new_test_ext_with_pool_state(0); + ext.execute_with(|| { + run_to_block(1, None); + prepare_farm_and_node(); + let node_id = 1; + + TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); + + assert_ok!(SmartContractModule::create_node_contract( + RuntimeOrigin::signed(charlie()), + node_id, + generate_deployment_hash(), + get_deployment_data(), + 0, + None + )); + let contract_id = 1; + + push_contract_resources_used(contract_id); + push_nru_report_for_contract(contract_id, 10); + + // cycle 1 + // user does not have enough funds to pay + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 11); + run_to_block(11, Some(&mut pool_state)); + + let c1 = SmartContractModule::contracts(1).unwrap(); + assert_eq!(c1.state, types::ContractState::GracePeriod(11)); + + // contract payment should be overdrawn + let contract_payment_state = SmartContractModule::contract_payment_state(contract_id).unwrap(); + assert_ne!(contract_payment_state.get_overdraft(), 0); + + // amount unbilled should have been reset after adding the amount to the contract overdraft + let contract_billing_info = + SmartContractModule::contract_billing_information_by_id(contract_id); + assert_eq!(contract_billing_info.amount_unbilled, 0); + }); +} + #[test] fn test_node_contract_billing_details_with_solution_provider() { let (mut ext, mut pool_state) = new_test_ext_with_pool_state(0); ext.execute_with(|| { run_to_block(1, None); prepare_farm_and_node(); + let node_id = 1; prepare_solution_provider(dave()); + activate_billing_accounts(); TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); let twin = TfgridModule::twins(2).unwrap(); let initial_twin_balance = Balances::free_balance(&twin.account_id); - let initial_total_issuance = Balances::total_issuance(); + let initial_farmer_balance = Balances::free_balance(alice()); assert_ok!(SmartContractModule::create_node_contract( RuntimeOrigin::signed(bob()), @@ -1017,9 +1172,9 @@ fn test_node_contract_billing_details_with_solution_provider() { vec![contract_id] ); - // advance 25 cycles - for i in 0..25 { - let block_number = 11 + i * 10; + // advance 24 cycles to reach reward distribution block + for i in 1..=DistributionFrequency::get() as u64 { + let block_number = 1 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), @@ -1028,10 +1183,10 @@ fn test_node_contract_billing_details_with_solution_provider() { run_to_block(block_number, Some(&mut pool_state)); } - let free_balance = Balances::free_balance(&twin.account_id); - let total_amount_billed = initial_twin_balance - free_balance; + let total_balance = Balances::total_balance(&twin.account_id); + let total_amount_billed = initial_twin_balance - total_balance; - validate_distribution_rewards(initial_total_issuance, total_amount_billed, true); + validate_distribution_rewards(initial_farmer_balance, total_amount_billed, 0, true, false); // amount unbilled should have been reset after a transfer between contract owner and farmer let contract_billing_info = @@ -1134,12 +1289,10 @@ fn test_node_contract_billing_cycles() { check_report_cost(1, amount_due_1, 11, discount_received); let twin = TfgridModule::twins(twin_id).unwrap(); - let usable_balance = Balances::usable_balance(&twin.account_id); - let free_balance = Balances::free_balance(&twin.account_id); + let reserved_balance = Balances::reserved_balance(&twin.account_id); - let locked_balance = free_balance - usable_balance; assert_eq!( - locked_balance.saturated_into::(), + reserved_balance.saturated_into::(), amount_due_1 as u128 ); @@ -1158,12 +1311,11 @@ fn test_node_contract_billing_cycles() { check_report_cost(1, amount_due_3, 31, discount_received); let twin = TfgridModule::twins(twin_id).unwrap(); - let usable_balance = Balances::usable_balance(&twin.account_id); - let free_balance = Balances::free_balance(&twin.account_id); - let locked_balance = free_balance - usable_balance; + let reserved_balance = Balances::reserved_balance(&twin.account_id); + assert_eq!( - locked_balance.saturated_into::(), + reserved_balance.saturated_into::(), amount_due_1 as u128 + amount_due_2 as u128 + amount_due_3 as u128 ); }); @@ -1237,12 +1389,9 @@ fn test_node_multiple_contract_billing_cycles() { ); let twin = TfgridModule::twins(twin_id).unwrap(); - let usable_balance = Balances::usable_balance(&twin.account_id); - let free_balance = Balances::free_balance(&twin.account_id); - - let locked_balance = free_balance - usable_balance; + let reserved_balance = Balances::reserved_balance(&twin.account_id); assert_eq!( - locked_balance.saturated_into::(), + reserved_balance.saturated_into::(), amount_due_contract_1 as u128 + amount_due_contract_2 as u128 ); }); @@ -1254,6 +1403,8 @@ fn test_node_contract_billing_cycles_delete_node_cancels_contract() { ext.execute_with(|| { run_to_block(1, None); prepare_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); @@ -1269,8 +1420,8 @@ fn test_node_contract_billing_cycles_delete_node_cancels_contract() { let contract_id = 1; let twin_id = 2; - for i in 0..5 { - let block_number = 11 + i * 10; + for i in 1..=5 { + let block_number = 1 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), @@ -1324,6 +1475,7 @@ fn test_node_contract_billing_cycles_delete_node_cancels_contract() { vec![].try_into().unwrap(); ips.try_push(public_ip).unwrap(); + log::debug!("events : {:?}", our_events); assert_eq!( our_events.contains(&record(MockEvent::SmartContractModule( SmartContractEvent::::IPsFreed { @@ -1367,8 +1519,8 @@ fn test_node_contract_only_public_ip_billing_cycles() { let contract_id = 1; let twin_id = 2; - for i in 0..5 { - let block_number = 11 + i * 10; + for i in 1..=5 { + let block_number = 1 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), @@ -1405,6 +1557,8 @@ fn test_node_contract_billing_cycles_cancel_contract_during_cycle_works() { ext.execute_with(|| { run_to_block(1, None); prepare_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); @@ -1421,8 +1575,8 @@ fn test_node_contract_billing_cycles_cancel_contract_during_cycle_works() { let twin_id = 2; // 2 cycles for billing - for i in 0..2 { - let block_number = 11 + i * 10; + for i in 1..=2 { + let block_number = 1 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), @@ -1463,6 +1617,8 @@ fn test_node_contract_billing_cycles_cancel_contract_during_cycle_without_balanc ext.execute_with(|| { run_to_block(1, None); prepare_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); @@ -1470,7 +1626,7 @@ fn test_node_contract_billing_cycles_cancel_contract_during_cycle_without_balanc let twin = TfgridModule::twins(2).unwrap(); let initial_twin_balance = Balances::free_balance(&twin.account_id); info!("initial twin balance: {:?}", initial_twin_balance); - let initial_total_issuance = Balances::total_issuance(); + let initial_farmer_balance = Balances::free_balance(alice()); assert_ok!(SmartContractModule::create_node_contract( RuntimeOrigin::signed(bob()), @@ -1501,18 +1657,24 @@ fn test_node_contract_billing_cycles_cancel_contract_during_cycle_without_balanc // Run halfway ish next cycle and cancel run_to_block(25, Some(&mut pool_state)); - let usable_balance = Balances::usable_balance(&twin.account_id); - let total_amount_billed = initial_twin_balance - usable_balance; + let free_balance = Balances::free_balance(&twin.account_id); + info!("free balance: {:?}", free_balance); + let total_amount_billed = initial_twin_balance - free_balance; + info!("total amount billed: {:?}", total_amount_billed); - let extrinsic_fee = 10000; - Balances::transfer_keep_alive( + let leave = 1000; + Balances::transfer( RuntimeOrigin::signed(bob()), - alice(), - initial_twin_balance - total_amount_billed - extrinsic_fee, + charlie(), + initial_twin_balance - total_amount_billed - leave, ) .unwrap(); - let usable_balance_before_canceling = Balances::usable_balance(&twin.account_id); + let usable_balance_before_canceling = Balances::free_balance(&twin.account_id); + info!( + "usable balance before canceling: {:?}", + usable_balance_before_canceling + ); assert_ne!(usable_balance_before_canceling, 0); assert_ok!(SmartContractModule::cancel_contract( @@ -1521,14 +1683,27 @@ fn test_node_contract_billing_cycles_cancel_contract_during_cycle_without_balanc )); // After canceling contract, and not being able to pay for the remainder of the cycle - // where the cancel was excecuted, the remaining balance should still be the same - let usable_balance_after_canceling = Balances::usable_balance(&twin.account_id); - assert_eq!( - usable_balance_after_canceling, - usable_balance_before_canceling + // where the cancel was excecuted, should deduct as much as possible from the user + let usable_balance_after_canceling = Balances::free_balance(&twin.account_id); + info!( + "usable balance after canceling: {:?}", + usable_balance_after_canceling + ); + info!( + "total amount billed: {:?}", + total_amount_billed + + (usable_balance_before_canceling - usable_balance_after_canceling) ); + assert_eq!(usable_balance_after_canceling, EXISTENTIAL_DEPOSIT); - validate_distribution_rewards(initial_total_issuance, total_amount_billed, false); + validate_distribution_rewards( + initial_farmer_balance, + total_amount_billed + + (usable_balance_before_canceling - usable_balance_after_canceling), + 0, + true, + false, + ); }); } @@ -1605,8 +1780,8 @@ fn test_restore_node_contract_in_grace_works() { )); let contract_id = 1; - for i in 0..6 { - let block_number = 11 + i * 10; + for i in 1..=6 { + let block_number = 1 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), @@ -1641,7 +1816,7 @@ fn test_restore_node_contract_in_grace_works() { run_to_block(31, Some(&mut pool_state)); run_to_block(41, Some(&mut pool_state)); // Transfer some balance to the owner of the contract to trigger the grace period to stop - Balances::transfer_keep_alive(RuntimeOrigin::signed(bob()), charlie(), 100000000).unwrap(); + Balances::transfer(RuntimeOrigin::signed(bob()), charlie(), 100000000).unwrap(); run_to_block(52, Some(&mut pool_state)); run_to_block(62, Some(&mut pool_state)); @@ -1656,12 +1831,14 @@ fn test_node_contract_grace_period_cancels_contract_when_grace_period_ends_works ext.execute_with(|| { run_to_block(1, None); prepare_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); let twin = TfgridModule::twins(3).unwrap(); - let initial_total_issuance = Balances::total_issuance(); + let initial_farmer_balance = Balances::free_balance(alice()); let initial_twin_balance = Balances::free_balance(&twin.account_id); assert_ok!(SmartContractModule::create_node_contract( @@ -1706,24 +1883,33 @@ fn test_node_contract_grace_period_cancels_contract_when_grace_period_ends_works ); // grace period stops after 100 blocknumbers, so after 121 - for i in 1..11 { - let block_number = 21 + i * 10; + for i in 1..=10 { + let block_number = 21 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), block_number, ); + run_to_block(block_number, Some(&mut pool_state)); } - for i in 1..11 { - run_to_block(21 + i * 10, Some(&mut pool_state)); - } + // expect ContractGracePeriodElapsed event + let our_events = System::events(); + assert_eq!( + our_events.contains(&record(MockEvent::SmartContractModule( + SmartContractEvent::::ContractGracePeriodElapsed { + contract_id, + grace_period: GracePeriod::get(), + } + ))), + true + ); // The user's total free balance should be distributed let free_balance = Balances::free_balance(&twin.account_id); let total_amount_billed = initial_twin_balance - free_balance; - validate_distribution_rewards(initial_total_issuance, total_amount_billed, false); + validate_distribution_rewards(initial_farmer_balance, total_amount_billed, 0, true, false); let c1 = SmartContractModule::contracts(contract_id); assert_eq!(c1, None); @@ -1765,15 +1951,15 @@ fn test_name_contract_billing() { let twin = TfgridModule::twins(twin_id).unwrap(); let balance = Balances::free_balance(&twin.account_id); let second_elapsed = BillingFrequency::get() * SECS_PER_BLOCK; - let (contract_cost, _) = contract - .calculate_contract_cost_tft(balance, second_elapsed) + let (contract_cost, discount_level) = contract + .calculate_contract_cost_tft(balance, second_elapsed, None) .unwrap(); // the contractbill event should look like: let contract_bill_event = types::ContractBill { contract_id, timestamp: 1628082066, - discount_level: types::DiscountLevel::Gold, + discount_level, amount_billed: contract_cost as u128, }; @@ -1787,6 +1973,18 @@ fn test_name_contract_billing() { contract_bill_event ))) ); + // advance 23 more cycles to reach reward distribution block + for i in 1..=23 { + let block_number = 11 + i * BillingFrequency::get(); + pool_state.write().should_call_bill_contract( + contract_id, + Ok(Pays::Yes.into()), + block_number, + ); + run_to_block(block_number, Some(&mut pool_state)); + } + let total_contract_cost = contract_cost * 24; + validate_distribution_rewards(0, total_contract_cost, 0, false, true) }); } @@ -1798,6 +1996,12 @@ fn test_rent_contract_billing() { prepare_dedicated_farm_and_node(); let node_id = 1; + // switch node to standby at block 1 + assert_ok!(TfgridModule::change_power_state( + RuntimeOrigin::signed(alice()), + tfchain_support::types::Power::Down + )); + TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); assert_ok!(SmartContractModule::create_rent_contract( @@ -1814,14 +2018,127 @@ fn test_rent_contract_billing() { types::ContractData::RentContract(rent_contract) ); + // go to end of cycle 1 [1-11] and expect a call to bill_contract() pool_state .write() .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 11); run_to_block(11, Some(&mut pool_state)); - let (amount_due_as_u128, discount_received) = calculate_tft_cost(1, 2, 10); + // wake up node at block 15, in the middle of cycle 2 [11-21] + run_to_block(15, Some(&mut pool_state)); + assert_ok!(TfgridModule::change_power_state( + RuntimeOrigin::signed(alice()), + tfchain_support::types::Power::Up + )); + + // go to end of cycle 2 [11-21] and expect a call to bill_contract() + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 21); + run_to_block(21, Some(&mut pool_state)); + + // should bill partial cycle 2 [15-21], 6 blocks + let (amount_due_as_u128, discount_received) = calculate_tft_cost(contract_id, 2, 6); assert_ne!(amount_due_as_u128, 0); - check_report_cost(1, amount_due_as_u128, 11, discount_received); + check_report_cost(contract_id, amount_due_as_u128, 21, discount_received); + + // switch node to standby at block 25, in the middle of cycle 3 [21-31] + run_to_block(25, Some(&mut pool_state)); + assert_ok!(TfgridModule::change_power_state( + RuntimeOrigin::signed(alice()), + tfchain_support::types::Power::Down + )); + + // go to end of cycle 3 [21-31] and expect a call to bill_contract() + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 31); + run_to_block(31, Some(&mut pool_state)); + + // go to end of cycle 4 [31-41] and expect a call to bill_contract() + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 41); + run_to_block(41, Some(&mut pool_state)); + + // wake up node at block 45, in the middle of cycle 5 [41-51] + run_to_block(45, Some(&mut pool_state)); + assert_ok!(TfgridModule::change_power_state( + RuntimeOrigin::signed(alice()), + tfchain_support::types::Power::Up + )); + + // go to end of cycle 5 [41-51] and expect a call to bill_contract() + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 51); + run_to_block(51, Some(&mut pool_state)); + + // should bill partial cycle 5 [45-51], 6 blocks + let (amount_due_as_u128, discount_received) = calculate_tft_cost(contract_id, 2, 6); + assert_ne!(amount_due_as_u128, 0); + check_report_cost(contract_id, amount_due_as_u128, 51, discount_received); + }); +} + +#[test] +fn test_rent_contract_on_standby_node_rent_waived_and_cancel_works() { + let (mut ext, mut pool_state) = new_test_ext_with_pool_state(0); + ext.execute_with(|| { + run_to_block(1, None); + prepare_dedicated_farm_and_node(); + let node_id = 1; + + // switch node to standby at block 1 + assert_ok!(TfgridModule::change_power_state( + RuntimeOrigin::signed(alice()), + tfchain_support::types::Power::Down + )); + + TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); + + assert_ok!(SmartContractModule::create_rent_contract( + RuntimeOrigin::signed(bob()), + node_id, + None + )); + let contract_id = 1; + + let contract = SmartContractModule::contracts(contract_id).unwrap(); + let rent_contract = types::RentContract { node_id }; + assert_eq!( + contract.contract_type, + types::ContractData::RentContract(rent_contract) + ); + + // go to end of cycle 1 [1-11] and expect a call to bill_contract() + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 11); + run_to_block(11, Some(&mut pool_state)); + + // expect RentWaived event + let our_events = System::events(); + assert_eq!( + our_events.contains(&record(MockEvent::SmartContractModule( + SmartContractEvent::::RentWaived { contract_id } + ))), + true + ); + // cancel contract + assert_ok!(SmartContractModule::cancel_contract( + RuntimeOrigin::signed(bob()), + contract_id + )); + let our_events = System::events(); + + // expect ContractCanceled event + assert_eq!( + our_events.contains(&record(MockEvent::SmartContractModule( + SmartContractEvent::::RentContractCanceled { contract_id } + ))), + true + ); }); } @@ -1831,6 +2148,8 @@ fn test_rent_contract_billing_cancel_should_bill_reserved_balance() { ext.execute_with(|| { run_to_block(1, None); prepare_dedicated_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); @@ -1854,44 +2173,162 @@ fn test_rent_contract_billing_cancel_should_bill_reserved_balance() { .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 11); run_to_block(11, Some(&mut pool_state)); - let bob_twin_id = 2; - let (amount_due_as_u128, discount_received) = - calculate_tft_cost(contract_id, bob_twin_id, 10); - assert_ne!(amount_due_as_u128, 0); + let (amount_due_1_as_u128, discount_received) = calculate_tft_cost(contract_id, 2, 10); + assert_ne!(amount_due_1_as_u128, 0); check_report_cost( contract_id, - amount_due_as_u128, + amount_due_1_as_u128, 11, discount_received.clone(), ); - let bob_twin = TfgridModule::twins(bob_twin_id).unwrap(); - let usable_balance = Balances::usable_balance(&bob_twin.account_id); - let free_balance = Balances::free_balance(&bob_twin.account_id); - assert_ne!(usable_balance, free_balance); // there is some locked balance - let locked_balance = free_balance - usable_balance; + let twin = TfgridModule::twins(2).unwrap(); + let total_balance = Balances::total_balance(&twin.account_id); + let free_balance = Balances::free_balance(&twin.account_id); + assert_ne!(total_balance, free_balance); run_to_block(13, Some(&mut pool_state)); // cancel contract // it will bill before removing the contract and it should bill all // reserved balance - let (amount_due_as_u128, discount_received) = - calculate_tft_cost(contract_id, bob_twin_id, 2); - + let (amount_due_2_as_u128, discount_received) = calculate_tft_cost(contract_id, 2, 2); assert_ok!(SmartContractModule::cancel_contract( RuntimeOrigin::signed(bob()), contract_id )); - // Last amount due is the same as the first one - assert_ne!(amount_due_as_u128, 0); - check_report_cost(contract_id, amount_due_as_u128, 13, discount_received); + let twin = TfgridModule::twins(2).unwrap(); + let usable_balance = Balances::usable_balance(&twin.account_id); + assert_ne!(usable_balance, 0); + Balances::transfer(RuntimeOrigin::signed(bob()), alice(), usable_balance).unwrap(); + + // Last amount due is not the same as the first one + assert_ne!(amount_due_1_as_u128, amount_due_2_as_u128); + check_report_cost(contract_id, amount_due_2_as_u128, 13, discount_received); - let usable_balance = Balances::usable_balance(&bob_twin.account_id); - let past_free_balance = free_balance; - let free_balance = Balances::free_balance(&bob_twin.account_id); - assert_eq!(usable_balance, free_balance); // there is no more locked balance - assert_eq!(past_free_balance - free_balance, locked_balance); // locked balance was transfered to alice + let total_balance = Balances::total_balance(&twin.account_id); + let free_balance = Balances::free_balance(&twin.account_id); + assert_eq!(total_balance, free_balance); + }); +} + +#[test] +fn test_rent_contract_overdrawn_and_partial_bill() { + let (mut ext, mut pool_state) = new_test_ext_with_pool_state(0); + ext.execute_with(|| { + run_to_block(1, None); + prepare_dedicated_farm_and_node(); + activate_billing_accounts(); + + let node_id = 1; + + TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); + + assert_ok!(SmartContractModule::create_rent_contract( + RuntimeOrigin::signed(charlie()), + node_id, + None + )); + let contract_id = 1; + + let twin = TfgridModule::twins(3).unwrap(); + let initial_reservable_balance = + Balances::usable_balance(&twin.account_id) - EXISTENTIAL_DEPOSIT; + + let contract = SmartContractModule::contracts(contract_id).unwrap(); + let rent_contract = types::RentContract { node_id }; + assert_eq!( + contract.contract_type, + types::ContractData::RentContract(rent_contract) + ); + + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 11); + run_to_block(11, Some(&mut pool_state)); + + let (amount_due_per_cycle, _) = calculate_tft_cost(contract_id, 2, 10); + assert_ne!(amount_due_per_cycle, 0); + + // expect contractPaymentOverdarwn event with partially billed amount + let our_events = System::events(); + assert_eq!( + our_events.contains(&record(MockEvent::SmartContractModule( + SmartContractEvent::::ContractPaymentOverdrawn { + contract_id: contract_id, + timestamp: get_timestamp_in_seconds_for_block(11), + partially_billed_amount: initial_reservable_balance, + overdraft: amount_due_per_cycle - initial_reservable_balance + } + ))), + true + ); + + let contract_payment_state = SmartContractModule::contract_payment_state(contract_id).unwrap(); + assert_eq!( + contract_payment_state.get_reserve(), + initial_reservable_balance + ); + assert_eq!( + contract_payment_state.get_overdraft(), + amount_due_per_cycle - initial_reservable_balance + ); + + let free_balance = Balances::free_balance(&twin.account_id); + assert_eq!(free_balance, EXISTENTIAL_DEPOSIT); + + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 21); + run_to_block(21, Some(&mut pool_state)); + + // expect contractPaymentOverdarwn event with no partially billed amount + let our_events = System::events(); + assert_eq!( + our_events.contains(&record(MockEvent::SmartContractModule( + SmartContractEvent::::ContractPaymentOverdrawn { + contract_id: contract_id, + timestamp: get_timestamp_in_seconds_for_block(21), + partially_billed_amount: 0, + overdraft: amount_due_per_cycle + } + ))), + true + ); + let contract_payment_state = SmartContractModule::contract_payment_state(contract_id).unwrap(); + assert_eq!( + contract_payment_state.get_reserve(), + initial_reservable_balance + ); + assert_eq!( + contract_payment_state.get_overdraft(), + amount_due_per_cycle * 2 - initial_reservable_balance + ); + let should_have_next_cycle = amount_due_per_cycle * 3 - initial_reservable_balance; + + // transfer some balance to the owner of the contract to trigger the grace period to stop + Balances::transfer( + RuntimeOrigin::signed(bob()), + charlie(), + should_have_next_cycle, + ) + .unwrap(); + + pool_state + .write() + .should_call_bill_contract(contract_id, Ok(Pays::Yes.into()), 31); + run_to_block(31, Some(&mut pool_state)); + + let contract_payment_state = SmartContractModule::contract_payment_state(contract_id).unwrap(); + assert_eq!( + contract_payment_state.get_reserve(), + amount_due_per_cycle * 3 + ); + assert_eq!(contract_payment_state.get_overdraft(), 0); + + // contract state should be Created + let c1 = SmartContractModule::contracts(contract_id).unwrap(); + assert_eq!(c1.state, types::ContractState::Created); }); } @@ -1901,6 +2338,8 @@ fn test_rent_contract_canceled_mid_cycle_should_bill_for_remainder() { ext.execute_with(|| { run_to_block(1, None); prepare_dedicated_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); @@ -1920,11 +2359,9 @@ fn test_rent_contract_canceled_mid_cycle_should_bill_for_remainder() { ); let twin = TfgridModule::twins(2).unwrap(); - let usable_balance = Balances::usable_balance(&twin.account_id); - let free_balance = Balances::free_balance(&twin.account_id); - let locked_balance = free_balance - usable_balance; - info!("locked balance: {:?}", locked_balance); + let reserved_balance = Balances::reserved_balance(&twin.account_id); + info!("reserved balance: {:?}", reserved_balance); run_to_block(8, Some(&mut pool_state)); // Calculate the cost for 7 blocks of runtime (created a block 1, canceled at block 8) @@ -1942,11 +2379,10 @@ fn test_rent_contract_canceled_mid_cycle_should_bill_for_remainder() { discount_received.clone(), ); - // Twin should have no more locked balance + // Twin should have no more reserved balance let twin = TfgridModule::twins(2).unwrap(); - let usable_balance = Balances::usable_balance(&twin.account_id); - let free_balance = Balances::free_balance(&twin.account_id); - assert_eq!(usable_balance, free_balance); + let reserved_balance = Balances::reserved_balance(&twin.account_id); + assert_eq!(reserved_balance, 0); }); } @@ -1999,9 +2435,11 @@ fn test_create_rent_contract_and_node_contract_excludes_node_contract_from_billi // Event 3: Rent contract created // Event 4: Node Contract created // Event 5: Updated resources contract - // Event 6: Balances locked + // Event 6: Balances Reserved // Event 7: Contract Billed // => no Node Contract billed event + log::debug!("our_events: {:?}", our_events); + assert_eq!(our_events.len(), 7); }); } @@ -2011,6 +2449,8 @@ fn test_rent_contract_canceled_due_to_out_of_funds_should_cancel_node_contracts_ let (mut ext, mut pool_state) = new_test_ext_with_pool_state(0); ext.execute_with(|| { prepare_dedicated_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; run_to_block(1, None); @@ -2023,7 +2463,7 @@ fn test_rent_contract_canceled_due_to_out_of_funds_should_cancel_node_contracts_ )); let rent_contract_id = 1; - run_to_block(2, None); + run_to_block(2, Some(&mut pool_state)); assert_ok!(SmartContractModule::create_node_contract( RuntimeOrigin::signed(charlie()), @@ -2037,8 +2477,8 @@ fn test_rent_contract_canceled_due_to_out_of_funds_should_cancel_node_contracts_ push_contract_resources_used(node_contract_id); // run 10 cycles - for i in 0..10 { - let block_number = 11 + i * 10; + for i in 1..=10 { + let block_number = 1 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( rent_contract_id, Ok(Pays::Yes.into()), @@ -2063,7 +2503,7 @@ fn test_rent_contract_canceled_due_to_out_of_funds_should_cancel_node_contracts_ run_to_block(end_grace_block_number, Some(&mut pool_state)); let our_events = System::events(); - assert_eq!(our_events.len(), 21); + assert_eq!(our_events.len(), 26); for e in our_events.clone() { log::info!("event: {:?}", e); @@ -2093,7 +2533,7 @@ fn test_rent_contract_canceled_due_to_out_of_funds_should_cancel_node_contracts_ ); assert_eq!( - our_events[19], + our_events[24], record(MockEvent::SmartContractModule(SmartContractEvent::< TestRuntime, >::NodeContractCanceled { @@ -2103,7 +2543,7 @@ fn test_rent_contract_canceled_due_to_out_of_funds_should_cancel_node_contracts_ })) ); assert_eq!( - our_events[20], + our_events[25], record(MockEvent::SmartContractModule(SmartContractEvent::< TestRuntime, >::RentContractCanceled { @@ -2129,7 +2569,7 @@ fn test_create_rent_contract_and_node_contract_with_ip_billing_works() { )); let rent_contract_id = 1; - run_to_block(2, None); + run_to_block(2, Some(&mut pool_state)); assert_ok!(SmartContractModule::create_node_contract( RuntimeOrigin::signed(bob()), @@ -2260,7 +2700,7 @@ fn test_restore_rent_contract_in_grace_works() { run_to_block(31, Some(&mut pool_state)); // Transfer some balance to the owner of the contract to trigger the grace period to stop - Balances::transfer_keep_alive(RuntimeOrigin::signed(bob()), charlie(), 100000000).unwrap(); + Balances::transfer(RuntimeOrigin::signed(bob()), charlie(), 100000000).unwrap(); pool_state .write() @@ -2321,6 +2761,8 @@ fn test_restore_rent_contract_and_node_contracts_in_grace_works() { assert_eq!(c1.state, types::ContractState::GracePeriod(11)); let our_events = System::events(); + log::debug!("Events: {:?}", our_events); + assert_eq!( our_events[5], record(MockEvent::SmartContractModule(SmartContractEvent::< @@ -2363,7 +2805,7 @@ fn test_restore_rent_contract_and_node_contracts_in_grace_works() { run_to_block(32, Some(&mut pool_state)); // Transfer some balance to the owner of the contract to trigger the grace period to stop - Balances::transfer_keep_alive(RuntimeOrigin::signed(bob()), charlie(), 100000000).unwrap(); + Balances::transfer(RuntimeOrigin::signed(bob()), charlie(), 100000000).unwrap(); pool_state .write() @@ -2387,9 +2829,10 @@ fn test_restore_rent_contract_and_node_contracts_in_grace_works() { assert_eq!(c1.state, types::ContractState::Created); let our_events = System::events(); + log::debug!("Events: {:?}", our_events); assert_eq!( - our_events[8], + our_events[12], record(MockEvent::SmartContractModule(SmartContractEvent::< TestRuntime, >::ContractGracePeriodEnded { @@ -2399,7 +2842,7 @@ fn test_restore_rent_contract_and_node_contracts_in_grace_works() { })) ); assert_eq!( - our_events[9], + our_events[13], record(MockEvent::SmartContractModule(SmartContractEvent::< TestRuntime, >::ContractGracePeriodEnded { @@ -2417,6 +2860,8 @@ fn test_rent_contract_grace_period_cancels_contract_when_grace_period_ends_works ext.execute_with(|| { run_to_block(1, None); prepare_dedicated_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); @@ -2450,9 +2895,9 @@ fn test_rent_contract_grace_period_cancels_contract_when_grace_period_ends_works true ); - // run 9 more cycles - for i in 0..10 { - let block_number = 21 + i * 10; + // advance 10 more cycles since the GracePeriod is 100 blocks and the BillingFrequency(cycle) is 10 blocks + for i in 1..=10 { + let block_number = 11 + i * BillingFrequency::get(); pool_state.write().should_call_bill_contract( contract_id, Ok(Pays::Yes.into()), @@ -2481,6 +2926,8 @@ fn test_rent_contract_and_node_contract_canceled_when_node_is_deleted_works() { ext.execute_with(|| { run_to_block(1, None); prepare_dedicated_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); @@ -3319,11 +3766,11 @@ fn test_service_contract_bill_out_of_funds_fails() { approve_service_consumer_contract(service_contract_id); // Drain consumer account - let consumer_twin_id = 2; - let consumer_twin = TfgridModule::twins(consumer_twin_id).unwrap(); - Balances::transfer_all(RuntimeOrigin::signed(bob()), alice(), true).unwrap(); - let consumer_free_balance = Balances::free_balance(&consumer_twin.account_id); - assert_eq!(consumer_free_balance, EXISTENTIAL_DEPOSIT); + let consumer_twin = TfgridModule::twins(2).unwrap(); + let consumer_balance = Balances::free_balance(&consumer_twin.account_id); + Balances::transfer(RuntimeOrigin::signed(bob()), alice(), consumer_balance).unwrap(); + let consumer_balance = Balances::free_balance(&consumer_twin.account_id); + assert_eq!(consumer_balance, 0); // Bill 1h after contract approval run_to_block(601, Some(&mut pool_state)); @@ -3373,53 +3820,163 @@ fn test_cu_calculation() { } #[test] -fn test_lock() { +fn test_reserve_and_unreserve() { new_test_ext().execute_with(|| { - let usable_balance = Balances::usable_balance(&bob()); - let free_balance = Balances::free_balance(&bob()); + let total_balance = Balances::total_balance(&bob()); + let initial_free_balance = Balances::free_balance(&bob()); + let initial_reserved_balance = Balances::reserved_balance(&bob()); + log::debug!("Total balance: {}", total_balance); + log::debug!("Initial free balance: {}", initial_free_balance); + log::debug!("Initial reserved balance: {}", initial_reserved_balance); - // should be equal since no activity and no locks - assert_eq!(usable_balance, free_balance); + // should be equal since no activity and no reserves + assert_eq!(initial_reserved_balance, 0); - let id: u64 = 1; - // Try to lock less than EXISTENTIAL_DEPOSIT should fail - Balances::set_lock(id.to_be_bytes(), &bob(), 1, WithdrawReasons::all()); + // Try to reserve some amount should succeed + let res = Balances::reserve(&bob(), 100); - // usable balance should now return free balance - EXISTENTIAL_DEPOSIT cause there was some activity - let usable_balance = Balances::usable_balance(&bob()); + assert_eq!(res.is_ok(), true); + + // free balance should be decreased by 100 let free_balance = Balances::free_balance(&bob()); - assert_eq!(usable_balance, free_balance - EXISTENTIAL_DEPOSIT); + let expected_free_balance = initial_free_balance - 100; + assert_eq!(free_balance, expected_free_balance); + + // reserving all free balance shouldn't succeed + let to_reserve = free_balance; + assert_eq!(Balances::can_reserve(&bob(), to_reserve), false); + // Try to reserve all free balance + let res = Balances::reserve(&bob(), to_reserve); + assert_eq!(res.is_err(), true); + // balance still the same + assert_eq!(free_balance, expected_free_balance); - // ----- INITIAL ------ // - // Try to lock more than EXISTENTIAL_DEPOSIT should succeed - let to_lock = 1 + EXISTENTIAL_DEPOSIT; + // Try to reserve all reservable balance should succeed + let to_reserve = crate::pallet::Pallet::::get_usable_balance(&bob()); - Balances::set_lock(id.to_be_bytes(), &bob(), to_lock, WithdrawReasons::all()); + let res = Balances::reserve(&bob(), to_reserve); + assert_eq!(res.is_ok(), true); - // usable balance should now be free_balance - to_lock cause there was some activity - let usable_balance = Balances::usable_balance(&bob()); let free_balance = Balances::free_balance(&bob()); - assert_eq!(usable_balance, free_balance - to_lock); + let expected_reserved_balance = initial_free_balance - (100 + to_reserve); + assert_eq!(free_balance, expected_reserved_balance); - // ----- UPDATE ------ // - // updating a lock should succeed - let to_lock = 10 + EXISTENTIAL_DEPOSIT; + let reserved_balance = Balances::reserved_balance(&bob()); + assert_eq!(reserved_balance, initial_free_balance - EXISTENTIAL_DEPOSIT); - Balances::set_lock(id.to_be_bytes(), &bob(), to_lock, WithdrawReasons::all()); + // reservable balance should be 0 + assert_eq!( + crate::pallet::Pallet::::get_usable_balance(&bob()), + 0 + ); - // usable balance should now be free_balance - to_lock cause there was some activity - let usable_balance = Balances::usable_balance(&bob()); - let free_balance = Balances::free_balance(&bob()); - assert_eq!(usable_balance, free_balance - to_lock); + // unreserve should succeed without a remainder + let remainder = Balances::unreserve(&bob(), reserved_balance); + assert_eq!(remainder, 0); + // user balance now should be the same as initial + assert_eq!(Balances::free_balance(&bob()), initial_free_balance) + }) +} - // ----- UNLOCK ------ // - // Unlock should work - Balances::remove_lock(id.to_be_bytes(), &bob()); +#[test] +fn test_reserve_while_lock_exists() { + new_test_ext().execute_with(|| { + let total_balance = Balances::total_balance(&bob()); + let initial_free_balance = Balances::free_balance(&bob()); + let initial_reserved_balance = Balances::reserved_balance(&bob()); + log::debug!("Total balance: {}", total_balance); + log::debug!("Initial free balance: {}", initial_free_balance); + log::debug!("Initial reserved balance: {}", initial_reserved_balance); + + // should be equal since no activity and no reserves + assert_eq!(initial_reserved_balance, 0); + // Try to lock and reserve some amount should succeed + let id: [u8; 8] = *b"my_lock1"; + let locked_amount = initial_free_balance - 200100; + let reserved_amount = 200000; + let reservable_before = crate::pallet::Pallet::::get_usable_balance(&bob()); + log::info!("Reservable before: {}", reservable_before); + Balances::set_lock(id, &bob(), locked_amount, WithdrawReasons::all()); + let _ = Balances::reserve(&bob(), reserved_amount); + let reservable_after = crate::pallet::Pallet::::get_usable_balance(&bob()); + log::info!("Reservable after: {}", reservable_after); + + if locked_amount <= EXISTENTIAL_DEPOSIT { + assert_eq!(reservable_after + reserved_amount, reservable_before); + } else { + assert_ne!(reservable_after, reservable_before); + assert_eq!(Balances::can_reserve(&bob(), reservable_before), false); + } - // usable balance should now be free_balance cause there are no locks - let usable_balance = Balances::usable_balance(&bob()); - let free_balance = Balances::free_balance(&bob()); - assert_eq!(usable_balance, free_balance); + assert_eq!(Balances::can_reserve(&bob(), reservable_after), true); + + assert_eq!( + reservable_after, + initial_free_balance + .saturating_sub(max(locked_amount, EXISTENTIAL_DEPOSIT) + reserved_amount) + ); + + // reserve all reservable balance should succeed + let res = Balances::reserve(&bob(), reservable_after); + assert_eq!(res.is_ok(), true); + + // transfer all reserved balance should succeed + let res = Balances::repatriate_reserved( + &bob(), + &alice(), + reservable_after + reserved_amount, + BalanceStatus::Free, + ); + assert_eq!(res.is_ok(), true); + match res { + Ok(remainder) => assert_eq!(remainder, 0), + Err(_) => assert!(false), + } + + // reserved balance should be 0 + assert_eq!(Balances::reserved_balance(&bob()), 0); + + // reservable balance should be 0 + assert_eq!( + crate::pallet::Pallet::::get_usable_balance(&bob()), + 0 + ); + // user balance now should be only the max of locked_amount and EXISTENTIAL_DEPOSIT + assert_eq!( + Balances::free_balance(&bob()), + max(locked_amount, EXISTENTIAL_DEPOSIT) + ); + }) +} + +#[test] +fn test_reserve_and_transfer_reserved() { + new_test_ext().execute_with(|| { + let total_balance = Balances::total_balance(&bob()); + let initial_free_balance = Balances::free_balance(&bob()); + let initial_reserved_balance = Balances::reserved_balance(&bob()); + log::debug!("Total balance: {}", total_balance); + log::debug!("Initial free balance: {}", initial_free_balance); + log::debug!("Initial reserved balance: {}", initial_reserved_balance); + + // Try to reserve all reservable balance should succeed + let to_reserve = crate::pallet::Pallet::::get_usable_balance(&bob()); + + let res = Balances::reserve(&bob(), to_reserve); + assert_eq!(res.is_ok(), true); + + let res = Balances::repatriate_reserved(&bob(), &alice(), to_reserve, BalanceStatus::Free); + assert_eq!(res.is_ok(), true); + match res { + Ok(remainder) => assert_eq!(remainder, 0), + Err(_) => assert!(false), + } + + // reserved balance should be 0 + assert_eq!(Balances::reserved_balance(&bob()), 0); + + // user balance now should be only the existential deposit + assert_eq!(Balances::free_balance(&bob()), EXISTENTIAL_DEPOSIT) }) } @@ -3756,6 +4313,8 @@ fn test_set_dedicated_node_extra_fee_and_create_rent_contract_billing_works() { let (mut ext, mut pool_state) = new_test_ext_with_pool_state(0); ext.execute_with(|| { prepare_farm_and_node(); + activate_billing_accounts(); + let node_id = 1; let start_block = 1; @@ -3763,7 +4322,7 @@ fn test_set_dedicated_node_extra_fee_and_create_rent_contract_billing_works() { TFTPriceModule::set_prices(RuntimeOrigin::signed(alice()), 50, 101).unwrap(); - let initial_total_issuance = Balances::total_issuance(); + let initial_farmer_balance = Balances::free_balance(alice()); // Get daves's twin let twin = TfgridModule::twins(4).unwrap(); let initial_twin_balance = Balances::free_balance(&twin.account_id); @@ -3813,7 +4372,10 @@ fn test_set_dedicated_node_extra_fee_and_create_rent_contract_billing_works() { Ok(Pays::Yes.into()), block_number, ); + log::debug!("i {} after pool block_number: {}", i, block_number); + run_to_block(block_number, Some(&mut pool_state)); + log::debug!("i {} after run block_number: {}", i, block_number); // check why aggregating seconds elapsed is giving different results let elapsed_time_in_secs = BillingFrequency::get() * SECS_PER_BLOCK; @@ -3821,14 +4383,13 @@ fn test_set_dedicated_node_extra_fee_and_create_rent_contract_billing_works() { // aggregate rent contract cost let free_balance = Balances::free_balance(&twin.account_id); let (contract_cost_tft, _) = rent_contract - .calculate_contract_cost_tft(free_balance, elapsed_time_in_secs) + .calculate_contract_cost_tft(free_balance, elapsed_time_in_secs, None) .unwrap(); rent_contract_cost_tft += contract_cost_tft; // aggregate extra fee cost - extra_fee_cost_tft += rent_contract - .calculate_extra_fee_cost_tft(node_id, elapsed_time_in_secs) - .unwrap(); + extra_fee_cost_tft += + rent_contract.calculate_extra_fee_cost_tft(node_id, elapsed_time_in_secs); } let then = SmartContractModule::get_current_timestamp_in_secs(); @@ -3856,7 +4417,13 @@ fn test_set_dedicated_node_extra_fee_and_create_rent_contract_billing_works() { rent_contract_cost_tft + extra_fee_cost_tft ); - validate_distribution_rewards(initial_total_issuance, rent_contract_cost_tft, false); + validate_distribution_rewards( + initial_farmer_balance, + rent_contract_cost_tft, + extra_fee_cost_tft, + true, + false, + ); }) } @@ -3891,7 +4458,7 @@ macro_rules! test_calculate_discount { amount_due, seconds_elapsed, balance.round().to_num::(), - NodeCertification::Diy, + None, ); assert_eq!( @@ -3922,11 +4489,13 @@ test_calculate_discount! { // ---------------------------- // fn validate_distribution_rewards( - initial_total_issuance: u64, - total_amount_billed: u64, - had_solution_provider: bool, + initial_farmer_balance: u64, + standard_fees_billed: u64, + extra_fees_billed: u64, + had_existential_deposit: bool, + is_name_contract: bool, ) { - info!("total amount billed {:?}", total_amount_billed); + info!("total amount billed {:?}", standard_fees_billed); let staking_pool_account_balance = Balances::free_balance(&get_staking_pool_account()); info!( @@ -3934,52 +4503,39 @@ fn validate_distribution_rewards( staking_pool_account_balance ); - // 5% is sent to the staking pool account - assert_eq_error_rate!( + // 10% is sent to the staking pool account + assert_eq!( staking_pool_account_balance, - Perbill::from_percent(5) * total_amount_billed, - 6 + (Perbill::from_percent(10) * standard_fees_billed) + + if had_existential_deposit { + EXISTENTIAL_DEPOSIT + } else { + 0 + } ); - - // 10% is sent to the foundation account + let foundation_percent = if is_name_contract { 90 } else { 40 }; + // 40% is sent to the foundation account let pricing_policy = TfgridModule::pricing_policies(1).unwrap(); let foundation_account_balance = Balances::free_balance(&pricing_policy.foundation_account); assert_eq!( foundation_account_balance, - Perbill::from_percent(10) * total_amount_billed + (Perbill::from_percent(foundation_percent) * standard_fees_billed) + + if had_existential_deposit { + EXISTENTIAL_DEPOSIT + } else { + 0 + } ); - - if had_solution_provider { - // 40% is sent to the sales account - let sales_account_balance = Balances::free_balance(&pricing_policy.certified_sales_account); - assert_eq!( - sales_account_balance, - Perbill::from_percent(40) * total_amount_billed - ); - - // 10% is sent to the solution provider - let solution_provider = SmartContractModule::solution_providers(1).unwrap(); - let solution_provider_1_balance = - Balances::free_balance(solution_provider.providers[0].who.clone()); - info!("solution provider b: {:?}", solution_provider_1_balance); - assert_ne!(solution_provider_1_balance, 0); - } else { - // 50% is sent to the sales account - let sales_account_balance = Balances::free_balance(&pricing_policy.certified_sales_account); - assert_eq!( - sales_account_balance, - Perbill::from_percent(50) * total_amount_billed + if !is_name_contract { + // get alice balance + let farmer_balance = Balances::free_balance(&alice()); + let farmer_amount = Perbill::from_percent(50) * standard_fees_billed; + assert_eq_error_rate!( + farmer_balance, + initial_farmer_balance + farmer_amount + extra_fees_billed, + 5 ); } - - let total_issuance = Balances::total_issuance(); - // total issueance is now previous total - amount burned from contract billed (35%) - let burned_amount = Perbill::from_percent(35) * total_amount_billed; - assert_eq_error_rate!( - total_issuance, - initial_total_issuance - burned_amount as u64, - 1 - ); } fn push_nru_report_for_contract(contract_id: u64, block_number: u64) { @@ -4056,8 +4612,9 @@ fn calculate_tft_cost(contract_id: u64, twin_id: u32, blocks: u64) -> (u64, type let twin = TfgridModule::twins(twin_id).unwrap(); let b = Balances::free_balance(&twin.account_id); let contract = SmartContractModule::contracts(contract_id).unwrap(); - let (amount_due, discount_received) = - contract.calculate_contract_cost_tft(b, blocks * 6).unwrap(); + let (amount_due, discount_received) = contract + .calculate_contract_cost_tft(b, blocks * 6, None) + .unwrap(); (amount_due, discount_received) } @@ -4402,3 +4959,15 @@ fn get_service_contract() -> types::ServiceContract { fn get_timestamp_in_seconds_for_block(block_number: u64) -> u64 { 1628082000 + (6 * block_number) } + +fn activate_billing_accounts() { + let pricing_policy = TfgridModule::pricing_policies(1).unwrap(); + let foundation_account = pricing_policy.foundation_account; + let staking_pool_account = get_staking_pool_account(); + let billing_accounts = vec![foundation_account, staking_pool_account]; + for account in billing_accounts { + if !>::account_exists(&account.clone().into()) { + let _ = Balances::deposit_creating(&account, EXISTENTIAL_DEPOSIT); + } + } +} diff --git a/substrate-node/pallets/pallet-smart-contract/src/types.rs b/substrate-node/pallets/pallet-smart-contract/src/types.rs index 797ea010c..ccd5f070c 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/types.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/types.rs @@ -1,16 +1,23 @@ use crate::{ pallet::{MaxDeploymentDataLength, MaxNodeContractPublicIPs}, - Config, + Call, Config, }; use core::{convert::TryInto, ops::Add}; -use frame_support::{pallet_prelude::ConstU32, BoundedVec, RuntimeDebugNoBound}; +use frame_support::{ + pallet_prelude::ConstU32, + traits::{DefensiveSaturating, IsSubType}, + BoundedVec, RuntimeDebugNoBound, +}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -use sp_runtime::SaturatedConversion; -use sp_std::prelude::*; +use sp_runtime::{ + traits::{DispatchInfoOf, SignedExtension, Zero}, + transaction_validity::{TransactionValidity, TransactionValidityError, ValidTransaction}, + SaturatedConversion, +}; +use sp_std::{fmt::Debug, marker::PhantomData, prelude::*}; use substrate_fixed::types::U64F64; use tfchain_support::{resources::Resources, types::PublicIP}; - pub type BlockNumber = u64; /// Utility type for managing upgrades/migrations. @@ -27,6 +34,7 @@ pub enum StorageVersion { V9, V10, V11, + V12, } impl Default for StorageVersion { @@ -134,9 +142,9 @@ pub enum ContractState { #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)] pub enum Cause { - CanceledByCollective, CanceledByUser, OutOfFunds, + CanceledByCollective, } impl Default for ContractState { @@ -222,6 +230,17 @@ pub struct ContractLock { pub lock_updated: u64, pub cycles: u16, } +#[derive( + PartialEq, Eq, PartialOrd, Ord, Clone, Encode, Decode, Default, Debug, TypeInfo, MaxEncodedLen, +)] +pub struct ContractPaymentState { + pub standard_reserve: BalanceOf, + pub additional_reserve: BalanceOf, + pub standard_overdraft: BalanceOf, + pub additional_overdraft: BalanceOf, + pub last_updated_seconds: u64, + pub cycles: u16, +} impl + Copy + TryInto> ContractLock { pub fn total_amount_locked(&self) -> BalanceOf { @@ -235,6 +254,123 @@ impl + Copy + TryInto> ContractLock bool { self.extra_amount_locked.saturated_into::() > 0 } + + pub fn is_migrated(&self) -> bool { + self.lock_updated == 0 + } +} + +impl ContractPaymentState +where + BalanceOf: DefensiveSaturating + Copy + Zero + PartialOrd, +{ + // accumulate the standard reserve + pub fn reserve_standard_amount(&mut self, amount: BalanceOf) { + self.standard_reserve.defensive_saturating_accrue(amount); + } + // accumulate the additional reserve + pub fn reserve_additional_amount(&mut self, amount: BalanceOf) { + self.additional_reserve.defensive_saturating_accrue(amount); + } + // accumulate the standard overdraft + pub fn overdraft_standard_amount(&mut self, amount: BalanceOf) { + self.standard_overdraft.defensive_saturating_accrue(amount); + } + // accumulate the additional overdraft + pub fn overdraft_additional_amount(&mut self, amount: BalanceOf) { + self.additional_overdraft + .defensive_saturating_accrue(amount); + } + + // Method to settle the standard overdraft + pub fn settle_overdraft_standard_amount(&mut self) { + self.standard_reserve + .defensive_saturating_accrue(self.standard_overdraft); + self.standard_overdraft = BalanceOf::zero(); + } + + // Method to settle the additional overdraft + pub fn settle_overdraft_additional_amount(&mut self) { + self.additional_reserve + .defensive_saturating_accrue(self.additional_overdraft); + self.additional_overdraft = BalanceOf::zero(); + } + + // Method to settle both standard and additional overdraft + pub fn settle_overdraft(&mut self) { + self.settle_overdraft_standard_amount(); + self.settle_overdraft_additional_amount(); + } + + // Method to return the sum of standard_overdraft and additional_overdraft + pub fn get_overdraft(&self) -> BalanceOf { + self.standard_overdraft + .defensive_saturating_add(self.additional_overdraft) + } + + // Method to return the sum of standard_reserve_amount and additional_reserve_amount + pub fn get_reserve(&self) -> BalanceOf { + self.standard_reserve + .defensive_saturating_add(self.additional_reserve) + } + + // Method to return weather the contract has any reserved balance at all. + pub fn has_reserve(&self) -> bool { + !self.standard_reserve.is_zero() || !self.additional_reserve.is_zero() + } + + // Method to return weather the contract has overdraft or not + pub fn has_overdraft(&self) -> bool { + !self.standard_overdraft.is_zero() || !self.additional_overdraft.is_zero() + } + + // Method to settle partial overdraft + pub fn settle_partial_overdraft(&mut self, amount: BalanceOf) { + let mut remaining_amount = amount; + + // Settle additional overdraft first + if remaining_amount > BalanceOf::zero() { + if remaining_amount >= self.additional_overdraft { + remaining_amount.defensive_saturating_reduce(self.additional_overdraft); + self.additional_reserve + .defensive_saturating_accrue(self.additional_overdraft); + self.additional_overdraft = BalanceOf::zero(); + } else { + self.additional_overdraft + .defensive_saturating_reduce(remaining_amount); + self.additional_reserve + .defensive_saturating_accrue(remaining_amount); + remaining_amount = BalanceOf::zero(); + } + } + + // Settle standard overdraft with any remaining amount + if remaining_amount > BalanceOf::zero() { + if remaining_amount >= self.standard_overdraft { + remaining_amount.defensive_saturating_reduce(self.standard_overdraft); + self.standard_reserve + .defensive_saturating_accrue(self.standard_overdraft); + self.standard_overdraft = BalanceOf::zero(); + } else { + self.standard_overdraft + .defensive_saturating_reduce(remaining_amount); + self.standard_reserve + .defensive_saturating_accrue(remaining_amount); + } + } + } + + pub fn reset_standard_reserve(&mut self) { + self.standard_reserve = BalanceOf::zero(); + } + + pub fn reset_additional_reserve(&mut self) { + self.additional_reserve = BalanceOf::zero(); + } + + pub fn reset_cycles(&mut self) { + self.cycles = 0; + } } #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Encode, Decode, Default, Debug, TypeInfo)] @@ -286,3 +422,241 @@ pub enum ServiceContractState { AgreementReady, ApprovedByBoth, } + +// This code defines a custom SignedExtension `ContractIdProvides` +// SignedExtension is a trait that allows developers to add custom logic to the transaction validation process. +// It ensures that transactions of type bill_contract_for_block are unique per block based on the provided contract ID. +#[derive(Encode, Decode, Clone, Eq, PartialEq, scale_info::TypeInfo)] +pub struct ContractIdProvides(PhantomData) +where + ::RuntimeCall: IsSubType>; + +impl SignedExtension for ContractIdProvides +where + ::RuntimeCall: IsSubType>, +{ + const IDENTIFIER: &'static str = "ContractIdProvides"; + type AccountId = T::AccountId; + type Call = T::RuntimeCall; + type AdditionalSigned = (); + type Pre = (); + + fn additional_signed(&self) -> Result<(), TransactionValidityError> { + Ok(()) + } + + // Provides the contract ID in a way that prevents duplicate transactions with the same contract ID. + fn validate( + &self, + _who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + if let Some(local_call) = call.is_sub_type() { + if let Call::bill_contract_for_block { contract_id } = local_call { + return ValidTransaction::with_tag_prefix(Self::IDENTIFIER) + .and_provides(contract_id.to_le_bytes().to_vec()) + .build() + .into(); + } + } + Ok(ValidTransaction::default()) + } + + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + self.validate(who, call, info, len).map(|_| ()) + } +} + +impl Debug for ContractIdProvides +where + ::RuntimeCall: IsSubType>, +{ + #[cfg(feature = "std")] + fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + write!(f, "ContractIdProvides") + } + + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + Ok(()) + } +} + +impl Default for ContractIdProvides +where + ::RuntimeCall: IsSubType>, +{ + fn default() -> Self { + Self(PhantomData) + } +} + +impl ContractIdProvides +where + ::RuntimeCall: IsSubType>, +{ + pub fn new() -> Self { + Self(PhantomData) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + // Helper function to create a default ContractPaymentState + fn default_contract_payment_state() -> ContractPaymentState { + ContractPaymentState { + last_updated_seconds: 0, + standard_reserve: 0, + additional_reserve: 0, + standard_overdraft: 0, + additional_overdraft: 0, + cycles: 0, + } + } + + #[test] + fn test_settle_overdraft() { + let mut payment_state = default_contract_payment_state(); + payment_state.standard_overdraft = 50; + payment_state.additional_overdraft = 30; + + payment_state.settle_overdraft(); + + assert_eq!(payment_state.standard_overdraft, 0); + assert_eq!(payment_state.additional_overdraft, 0); + } + + #[test] + fn test_reserve_standard_amount() { + let mut payment_state = default_contract_payment_state(); + payment_state.reserve_standard_amount(100); + assert_eq!(payment_state.standard_reserve, 100); + + payment_state.reserve_standard_amount(50); + assert_eq!(payment_state.standard_reserve, 150); + } + + #[test] + fn test_reserve_additional_amount() { + let mut payment_state = default_contract_payment_state(); + payment_state.reserve_additional_amount(200); + assert_eq!(payment_state.additional_reserve, 200); + + payment_state.reserve_additional_amount(100); + assert_eq!(payment_state.additional_reserve, 300); + } + + #[test] + fn test_overdraft_standard_amount() { + let mut payment_state = default_contract_payment_state(); + payment_state.overdraft_standard_amount(150); + assert_eq!(payment_state.standard_overdraft, 150); + + payment_state.overdraft_standard_amount(50); + assert_eq!(payment_state.standard_overdraft, 200); + } + + #[test] + fn test_overdraft_additional_amount() { + let mut payment_state = default_contract_payment_state(); + payment_state.overdraft_additional_amount(75); + assert_eq!(payment_state.additional_overdraft, 75); + + payment_state.overdraft_additional_amount(75); + assert_eq!(payment_state.additional_overdraft, 150); + } + + #[test] + fn test_settle_partial_overdraft() { + let mut payment_state = default_contract_payment_state(); + payment_state.standard_overdraft = 100; + payment_state.additional_overdraft = 50; + + payment_state.settle_partial_overdraft(30); + + // The remaining overdraft should be reduced by 30 + // Assuming 30 is preferably deducted from additional first + assert_eq!(payment_state.standard_overdraft, 100); + assert_eq!(payment_state.additional_overdraft, 20); + + payment_state.settle_partial_overdraft(30); + assert_eq!(payment_state.standard_overdraft, 90); + assert_eq!(payment_state.additional_overdraft, 0); + + payment_state.settle_partial_overdraft(100); + assert_eq!(payment_state.standard_overdraft, 0); + assert_eq!(payment_state.additional_overdraft, 0); + + payment_state.additional_overdraft = 50; + payment_state.settle_partial_overdraft(40); + assert_eq!(payment_state.additional_overdraft, 10); + } + + #[test] + fn test_get_overdraft() { + let mut payment_state = default_contract_payment_state(); + payment_state.standard_overdraft = 200; + payment_state.additional_overdraft = 100; + + let total_overdraft = payment_state.get_overdraft(); + + assert_eq!(total_overdraft, 300); + } + + #[test] + fn test_get_reserve() { + let mut payment_state = default_contract_payment_state(); + payment_state.standard_reserve = 120; + payment_state.additional_reserve = 80; + + let total_reserved = payment_state.get_reserve(); + + assert_eq!(total_reserved, 200); + } + + #[test] + fn test_has_reserve() { + let mut payment_state = default_contract_payment_state(); + assert_eq!(payment_state.has_reserve(), false); + + payment_state.standard_reserve = 120; + payment_state.additional_reserve = 80; + assert_eq!(payment_state.has_reserve(), true); + + let mut payment_state = default_contract_payment_state(); + payment_state.standard_reserve = 120; + assert_eq!(payment_state.has_reserve(), true); + + let mut payment_state = default_contract_payment_state(); + payment_state.additional_reserve = 80; + assert_eq!(payment_state.has_reserve(), true); + } + + #[test] + fn test_has_overdarft() { + let mut payment_state = default_contract_payment_state(); + assert_eq!(payment_state.has_overdraft(), false); + + payment_state.standard_overdraft = 120; + payment_state.additional_overdraft = 80; + assert_eq!(payment_state.has_overdraft(), true); + + let mut payment_state = default_contract_payment_state(); + payment_state.standard_overdraft = 120; + assert_eq!(payment_state.has_overdraft(), true); + + let mut payment_state = default_contract_payment_state(); + payment_state.additional_overdraft = 80; + assert_eq!(payment_state.has_overdraft(), true); + } +} diff --git a/substrate-node/pallets/pallet-smart-contract/src/weights.rs b/substrate-node/pallets/pallet-smart-contract/src/weights.rs index cb4119f02..7e44e4f31 100644 --- a/substrate-node/pallets/pallet-smart-contract/src/weights.rs +++ b/substrate-node/pallets/pallet-smart-contract/src/weights.rs @@ -2,21 +2,21 @@ //! Autogenerated weights for pallet_smart_contract //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `R1-HP-ProBook-630-G8`, CPU: `11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ./target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_smart_contract +// --wasm-execution=compiled +// --pallet=pallet-smart-contract // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output // ./pallets/pallet-smart-contract/src/weights.rs @@ -61,948 +61,1010 @@ pub trait WeightInfo { /// Weights for pallet_smart_contract using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:0) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule DedicatedNodesExtraFee (r:1 w:0) - /// Proof Skipped: SmartContractModule DedicatedNodesExtraFee (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:0 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractLock (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodePower` (r:1 w:0) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::DedicatedNodesExtraFee` (r:1 w:0) + /// Proof: `SmartContractModule::DedicatedNodesExtraFee` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:1 w:1) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:0 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:0 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:0 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_node_contract() -> Weight { // Proof Size summary in bytes: // Measured: `868` // Estimated: `4333` - // Minimum execution time: 119_629_000 picoseconds. - Weight::from_parts(124_124_000, 4333) + // Minimum execution time: 48_532_000 picoseconds. + Weight::from_parts(49_293_000, 4333) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:0 w:2) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:0 w:2) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_node_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `892` - // Estimated: `4357` - // Minimum execution time: 64_128_000 picoseconds. - Weight::from_parts(67_016_000, 4357) + // Measured: `923` + // Estimated: `4388` + // Minimum execution time: 27_632_000 picoseconds. + Weight::from_parts(28_023_000, 4388) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule NodeContractResources (r:0 w:1) - /// Proof Skipped: SmartContractModule NodeContractResources (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:0 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:0 w:1) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:0 w:1) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `1203` - // Estimated: `4668` - // Minimum execution time: 134_164_000 picoseconds. - Weight::from_parts(138_183_000, 4668) - .saturating_add(T::DbWeight::get().reads(9_u64)) + // Measured: `1650` + // Estimated: `7590` + // Minimum execution time: 75_803_000 picoseconds. + Weight::from_parts(78_449_000, 7590) + .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNameRegistration (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNameRegistration (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule Contracts (r:0 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractLock (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNameRegistration` (r:1 w:1) + /// Proof: `SmartContractModule::ContractIDByNameRegistration` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::Contracts` (r:0 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:0 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_name_contract() -> Weight { // Proof Size summary in bytes: // Measured: `340` // Estimated: `3805` - // Minimum execution time: 54_724_000 picoseconds. - Weight::from_parts(57_496_000, 3805) + // Minimum execution time: 24_757_000 picoseconds. + Weight::from_parts(25_237_000, 3805) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNameRegistration (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNameRegistration (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNameRegistration` (r:0 w:1) + /// Proof: `SmartContractModule::ContractIDByNameRegistration` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_name_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `919` - // Estimated: `4384` - // Minimum execution time: 101_753_000 picoseconds. - Weight::from_parts(105_128_000, 4384) + // Measured: `949` + // Estimated: `4414` + // Minimum execution time: 51_417_000 picoseconds. + Weight::from_parts(52_810_000, 4414) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:1 w:0) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:1 w:0) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_nru_reports() -> Weight { // Proof Size summary in bytes: - // Measured: `1292` - // Estimated: `4757` - // Minimum execution time: 77_126_000 picoseconds. - Weight::from_parts(79_222_000, 4757) + // Measured: `1286` + // Estimated: `4751` + // Minimum execution time: 37_891_000 picoseconds. + Weight::from_parts(38_723_000, 4751) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:1 w:0) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule NodeContractResources (r:0 w:1) - /// Proof Skipped: SmartContractModule NodeContractResources (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:1 w:0) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:0 w:1) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) fn report_contract_resources() -> Weight { // Proof Size summary in bytes: - // Measured: `771` - // Estimated: `4236` - // Minimum execution time: 47_460_000 picoseconds. - Weight::from_parts(48_914_000, 4236) + // Measured: `765` + // Estimated: `4230` + // Minimum execution time: 22_993_000 picoseconds. + Weight::from_parts(23_644_000, 4230) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:0) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule Contracts (r:0 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractLock (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::Contracts` (r:0 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:0 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_rent_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `868` - // Estimated: `4333` - // Minimum execution time: 78_140_000 picoseconds. - Weight::from_parts(81_100_000, 4333) - .saturating_add(T::DbWeight::get().reads(10_u64)) + // Measured: `776` + // Estimated: `4241` + // Minimum execution time: 34_595_000 picoseconds. + Weight::from_parts(35_197_000, 4241) + .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule DedicatedNodesExtraFee (r:1 w:0) - /// Proof Skipped: SmartContractModule DedicatedNodesExtraFee (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:0 w:1) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::NodePower` (r:1 w:0) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::DedicatedNodesExtraFee` (r:1 w:0) + /// Proof: `SmartContractModule::DedicatedNodesExtraFee` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:0 w:1) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_rent_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `1071` - // Estimated: `4536` - // Minimum execution time: 114_334_000 picoseconds. - Weight::from_parts(118_126_000, 4536) - .saturating_add(T::DbWeight::get().reads(10_u64)) + // Measured: `1607` + // Estimated: `7547` + // Minimum execution time: 72_758_000 picoseconds. + Weight::from_parts(73_970_000, 7547) + .saturating_add(T::DbWeight::get().reads(14_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } - /// Storage: SmartContractModule SolutionProviderID (r:1 w:1) - /// Proof Skipped: SmartContractModule SolutionProviderID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule SolutionProviders (r:0 w:1) - /// Proof Skipped: SmartContractModule SolutionProviders (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::SolutionProviderID` (r:1 w:1) + /// Proof: `SmartContractModule::SolutionProviderID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::SolutionProviders` (r:0 w:1) + /// Proof: `SmartContractModule::SolutionProviders` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_solution_provider() -> Weight { // Proof Size summary in bytes: // Measured: `37` // Estimated: `1522` - // Minimum execution time: 24_361_000 picoseconds. - Weight::from_parts(25_532_000, 1522) + // Minimum execution time: 9_668_000 picoseconds. + Weight::from_parts(9_969_000, 1522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } - /// Storage: SmartContractModule SolutionProviders (r:1 w:1) - /// Proof Skipped: SmartContractModule SolutionProviders (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::SolutionProviders` (r:1 w:1) + /// Proof: `SmartContractModule::SolutionProviders` (`max_values`: None, `max_size`: None, mode: `Measured`) fn approve_solution_provider() -> Weight { // Proof Size summary in bytes: // Measured: `215` // Estimated: `3680` - // Minimum execution time: 28_651_000 picoseconds. - Weight::from_parts(29_486_000, 3680) + // Minimum execution time: 12_674_000 picoseconds. + Weight::from_parts(12_944_000, 3680) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:0) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:0) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:0) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:0) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:1 w:0) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::AverageTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::AverageTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MinTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Session::Validators` (r:1 w:0) + /// Proof: `Session::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn bill_contract_for_block() -> Weight { // Proof Size summary in bytes: - // Measured: `1216` - // Estimated: `4681` - // Minimum execution time: 56_839_000 picoseconds. - Weight::from_parts(58_569_000, 4681) - .saturating_add(T::DbWeight::get().reads(7_u64)) + // Measured: `2077` + // Estimated: `8017` + // Minimum execution time: 86_263_000 picoseconds. + Weight::from_parts(87_505_000, 8017) + .saturating_add(T::DbWeight::get().reads(17_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:2 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:0 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:2 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:0 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_create() -> Weight { // Proof Size summary in bytes: // Measured: `395` // Estimated: `6335` - // Minimum execution time: 40_172_000 picoseconds. - Weight::from_parts(41_719_000, 6335) + // Minimum execution time: 18_384_000 picoseconds. + Weight::from_parts(18_725_000, 6335) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_set_metadata() -> Weight { // Proof Size summary in bytes: // Measured: `489` // Estimated: `3954` - // Minimum execution time: 35_442_000 picoseconds. - Weight::from_parts(36_518_000, 3954) + // Minimum execution time: 16_732_000 picoseconds. + Weight::from_parts(17_162_000, 3954) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_set_fees() -> Weight { // Proof Size summary in bytes: // Measured: `489` // Estimated: `3954` - // Minimum execution time: 34_663_000 picoseconds. - Weight::from_parts(35_371_000, 3954) + // Minimum execution time: 16_351_000 picoseconds. + Weight::from_parts(16_632_000, 3954) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_approve() -> Weight { // Proof Size summary in bytes: // Measured: `502` // Estimated: `3967` - // Minimum execution time: 34_967_000 picoseconds. - Weight::from_parts(36_503_000, 3967) + // Minimum execution time: 16_271_000 picoseconds. + Weight::from_parts(16_781_000, 3967) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_reject() -> Weight { // Proof Size summary in bytes: // Measured: `502` // Estimated: `3967` - // Minimum execution time: 36_210_000 picoseconds. - Weight::from_parts(37_826_000, 3967) + // Minimum execution time: 17_022_000 picoseconds. + Weight::from_parts(17_413_000, 3967) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_cancel() -> Weight { // Proof Size summary in bytes: // Measured: `502` // Estimated: `3967` - // Minimum execution time: 33_426_000 picoseconds. - Weight::from_parts(34_600_000, 3967) + // Minimum execution time: 15_990_000 picoseconds. + Weight::from_parts(16_321_000, 3967) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule Twins (r:2 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:0) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn service_contract_bill() -> Weight { // Proof Size summary in bytes: // Measured: `841` // Estimated: `6781` - // Minimum execution time: 61_064_000 picoseconds. - Weight::from_parts(64_267_000, 6781) + // Minimum execution time: 28_924_000 picoseconds. + Weight::from_parts(29_586_000, 6781) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule BillingFrequency (r:1 w:1) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:1) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn change_billing_frequency() -> Weight { // Proof Size summary in bytes: // Measured: `37` // Estimated: `1522` - // Minimum execution time: 17_066_000 picoseconds. - Weight::from_parts(17_649_000, 1522) + // Minimum execution time: 7_474_000 picoseconds. + Weight::from_parts(7_725_000, 1522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule SolutionProviders (r:1 w:0) - /// Proof Skipped: SmartContractModule SolutionProviders (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::SolutionProviders` (r:1 w:0) + /// Proof: `SmartContractModule::SolutionProviders` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn attach_solution_provider_id() -> Weight { // Proof Size summary in bytes: - // Measured: `971` - // Estimated: `4436` - // Minimum execution time: 44_207_000 picoseconds. - Weight::from_parts(46_180_000, 4436) + // Measured: `965` + // Estimated: `4430` + // Minimum execution time: 21_971_000 picoseconds. + Weight::from_parts(22_552_000, 4430) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule DedicatedNodesExtraFee (r:0 w:1) - /// Proof Skipped: SmartContractModule DedicatedNodesExtraFee (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::DedicatedNodesExtraFee` (r:0 w:1) + /// Proof: `SmartContractModule::DedicatedNodesExtraFee` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_dedicated_node_extra_fee() -> Weight { // Proof Size summary in bytes: // Measured: `733` // Estimated: `4198` - // Minimum execution time: 46_778_000 picoseconds. - Weight::from_parts(48_978_000, 4198) + // Minimum execution time: 23_114_000 picoseconds. + Weight::from_parts(23_544_000, 4198) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule NodeContractResources (r:0 w:1) - /// Proof Skipped: SmartContractModule NodeContractResources (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:0 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:0 w:1) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:0 w:1) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_contract_collective() -> Weight { // Proof Size summary in bytes: - // Measured: `1203` - // Estimated: `4668` - // Minimum execution time: 90_735_000 picoseconds. - Weight::from_parts(92_827_000, 4668) - .saturating_add(T::DbWeight::get().reads(9_u64)) + // Measured: `1650` + // Estimated: `7590` + // Minimum execution time: 74_791_000 picoseconds. + Weight::from_parts(76_285_000, 7590) + .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:0) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule DedicatedNodesExtraFee (r:1 w:0) - /// Proof Skipped: SmartContractModule DedicatedNodesExtraFee (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:0 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractLock (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodePower` (r:1 w:0) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::DedicatedNodesExtraFee` (r:1 w:0) + /// Proof: `SmartContractModule::DedicatedNodesExtraFee` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:1 w:1) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:0 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:0 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:0 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_node_contract() -> Weight { // Proof Size summary in bytes: // Measured: `868` // Estimated: `4333` - // Minimum execution time: 119_629_000 picoseconds. - Weight::from_parts(124_124_000, 4333) + // Minimum execution time: 48_532_000 picoseconds. + Weight::from_parts(49_293_000, 4333) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(8_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:0 w:2) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:0 w:2) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_node_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `892` - // Estimated: `4357` - // Minimum execution time: 64_128_000 picoseconds. - Weight::from_parts(67_016_000, 4357) + // Measured: `923` + // Estimated: `4388` + // Minimum execution time: 27_632_000 picoseconds. + Weight::from_parts(28_023_000, 4388) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule NodeContractResources (r:0 w:1) - /// Proof Skipped: SmartContractModule NodeContractResources (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:0 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:0 w:1) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:0 w:1) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `1203` - // Estimated: `4668` - // Minimum execution time: 134_164_000 picoseconds. - Weight::from_parts(138_183_000, 4668) - .saturating_add(RocksDbWeight::get().reads(9_u64)) + // Measured: `1650` + // Estimated: `7590` + // Minimum execution time: 75_803_000 picoseconds. + Weight::from_parts(78_449_000, 7590) + .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNameRegistration (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNameRegistration (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule Contracts (r:0 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractLock (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNameRegistration` (r:1 w:1) + /// Proof: `SmartContractModule::ContractIDByNameRegistration` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::Contracts` (r:0 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:0 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_name_contract() -> Weight { // Proof Size summary in bytes: // Measured: `340` // Estimated: `3805` - // Minimum execution time: 54_724_000 picoseconds. - Weight::from_parts(57_496_000, 3805) + // Minimum execution time: 24_757_000 picoseconds. + Weight::from_parts(25_237_000, 3805) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNameRegistration (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNameRegistration (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNameRegistration` (r:0 w:1) + /// Proof: `SmartContractModule::ContractIDByNameRegistration` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_name_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `919` - // Estimated: `4384` - // Minimum execution time: 101_753_000 picoseconds. - Weight::from_parts(105_128_000, 4384) + // Measured: `949` + // Estimated: `4414` + // Minimum execution time: 51_417_000 picoseconds. + Weight::from_parts(52_810_000, 4414) .saturating_add(RocksDbWeight::get().reads(8_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:1 w:0) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:1 w:0) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_nru_reports() -> Weight { // Proof Size summary in bytes: - // Measured: `1292` - // Estimated: `4757` - // Minimum execution time: 77_126_000 picoseconds. - Weight::from_parts(79_222_000, 4757) + // Measured: `1286` + // Estimated: `4751` + // Minimum execution time: 37_891_000 picoseconds. + Weight::from_parts(38_723_000, 4751) .saturating_add(RocksDbWeight::get().reads(7_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:1 w:0) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule NodeContractResources (r:0 w:1) - /// Proof Skipped: SmartContractModule NodeContractResources (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:1 w:0) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:0 w:1) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) fn report_contract_resources() -> Weight { // Proof Size summary in bytes: - // Measured: `771` - // Estimated: `4236` - // Minimum execution time: 47_460_000 picoseconds. - Weight::from_parts(48_914_000, 4236) + // Measured: `765` + // Estimated: `4230` + // Minimum execution time: 22_993_000 picoseconds. + Weight::from_parts(23_644_000, 4230) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:0) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule Contracts (r:0 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractLock (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::Contracts` (r:0 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:0 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_rent_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `868` - // Estimated: `4333` - // Minimum execution time: 78_140_000 picoseconds. - Weight::from_parts(81_100_000, 4333) - .saturating_add(RocksDbWeight::get().reads(10_u64)) + // Measured: `776` + // Estimated: `4241` + // Minimum execution time: 34_595_000 picoseconds. + Weight::from_parts(35_197_000, 4241) + .saturating_add(RocksDbWeight::get().reads(9_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule DedicatedNodesExtraFee (r:1 w:0) - /// Proof Skipped: SmartContractModule DedicatedNodesExtraFee (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:0 w:1) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::NodePower` (r:1 w:0) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::DedicatedNodesExtraFee` (r:1 w:0) + /// Proof: `SmartContractModule::DedicatedNodesExtraFee` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:0 w:1) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_rent_contract() -> Weight { // Proof Size summary in bytes: - // Measured: `1071` - // Estimated: `4536` - // Minimum execution time: 114_334_000 picoseconds. - Weight::from_parts(118_126_000, 4536) - .saturating_add(RocksDbWeight::get().reads(10_u64)) + // Measured: `1607` + // Estimated: `7547` + // Minimum execution time: 72_758_000 picoseconds. + Weight::from_parts(73_970_000, 7547) + .saturating_add(RocksDbWeight::get().reads(14_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } - /// Storage: SmartContractModule SolutionProviderID (r:1 w:1) - /// Proof Skipped: SmartContractModule SolutionProviderID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule SolutionProviders (r:0 w:1) - /// Proof Skipped: SmartContractModule SolutionProviders (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::SolutionProviderID` (r:1 w:1) + /// Proof: `SmartContractModule::SolutionProviderID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::SolutionProviders` (r:0 w:1) + /// Proof: `SmartContractModule::SolutionProviders` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_solution_provider() -> Weight { // Proof Size summary in bytes: // Measured: `37` // Estimated: `1522` - // Minimum execution time: 24_361_000 picoseconds. - Weight::from_parts(25_532_000, 1522) + // Minimum execution time: 9_668_000 picoseconds. + Weight::from_parts(9_969_000, 1522) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: SmartContractModule SolutionProviders (r:1 w:1) - /// Proof Skipped: SmartContractModule SolutionProviders (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::SolutionProviders` (r:1 w:1) + /// Proof: `SmartContractModule::SolutionProviders` (`max_values`: None, `max_size`: None, mode: `Measured`) fn approve_solution_provider() -> Weight { // Proof Size summary in bytes: // Measured: `215` // Estimated: `3680` - // Minimum execution time: 28_651_000 picoseconds. - Weight::from_parts(29_486_000, 3680) + // Minimum execution time: 12_674_000 picoseconds. + Weight::from_parts(12_944_000, 3680) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:0) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:0) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:0) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:0) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:1 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:1 w:0) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::AverageTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::AverageTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MinTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Session::Validators` (r:1 w:0) + /// Proof: `Session::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn bill_contract_for_block() -> Weight { // Proof Size summary in bytes: - // Measured: `1216` - // Estimated: `4681` - // Minimum execution time: 56_839_000 picoseconds. - Weight::from_parts(58_569_000, 4681) - .saturating_add(RocksDbWeight::get().reads(7_u64)) + // Measured: `2077` + // Estimated: `8017` + // Minimum execution time: 86_263_000 picoseconds. + Weight::from_parts(87_505_000, 8017) + .saturating_add(RocksDbWeight::get().reads(17_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:2 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContractID (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContractID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:0 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:2 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContractID` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContractID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:0 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_create() -> Weight { // Proof Size summary in bytes: // Measured: `395` // Estimated: `6335` - // Minimum execution time: 40_172_000 picoseconds. - Weight::from_parts(41_719_000, 6335) + // Minimum execution time: 18_384_000 picoseconds. + Weight::from_parts(18_725_000, 6335) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_set_metadata() -> Weight { // Proof Size summary in bytes: // Measured: `489` // Estimated: `3954` - // Minimum execution time: 35_442_000 picoseconds. - Weight::from_parts(36_518_000, 3954) + // Minimum execution time: 16_732_000 picoseconds. + Weight::from_parts(17_162_000, 3954) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_set_fees() -> Weight { // Proof Size summary in bytes: // Measured: `489` // Estimated: `3954` - // Minimum execution time: 34_663_000 picoseconds. - Weight::from_parts(35_371_000, 3954) + // Minimum execution time: 16_351_000 picoseconds. + Weight::from_parts(16_632_000, 3954) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_approve() -> Weight { // Proof Size summary in bytes: // Measured: `502` // Estimated: `3967` - // Minimum execution time: 34_967_000 picoseconds. - Weight::from_parts(36_503_000, 3967) + // Minimum execution time: 16_271_000 picoseconds. + Weight::from_parts(16_781_000, 3967) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_reject() -> Weight { // Proof Size summary in bytes: // Measured: `502` // Estimated: `3967` - // Minimum execution time: 36_210_000 picoseconds. - Weight::from_parts(37_826_000, 3967) + // Minimum execution time: 17_022_000 picoseconds. + Weight::from_parts(17_413_000, 3967) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) fn service_contract_cancel() -> Weight { // Proof Size summary in bytes: // Measured: `502` // Estimated: `3967` - // Minimum execution time: 33_426_000 picoseconds. - Weight::from_parts(34_600_000, 3967) + // Minimum execution time: 15_990_000 picoseconds. + Weight::from_parts(16_321_000, 3967) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ServiceContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ServiceContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule Twins (r:2 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:0) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ServiceContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ServiceContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn service_contract_bill() -> Weight { // Proof Size summary in bytes: // Measured: `841` // Estimated: `6781` - // Minimum execution time: 61_064_000 picoseconds. - Weight::from_parts(64_267_000, 6781) + // Minimum execution time: 28_924_000 picoseconds. + Weight::from_parts(29_586_000, 6781) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule BillingFrequency (r:1 w:1) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:1) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn change_billing_frequency() -> Weight { // Proof Size summary in bytes: // Measured: `37` // Estimated: `1522` - // Minimum execution time: 17_066_000 picoseconds. - Weight::from_parts(17_649_000, 1522) + // Minimum execution time: 7_474_000 picoseconds. + Weight::from_parts(7_725_000, 1522) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule SolutionProviders (r:1 w:0) - /// Proof Skipped: SmartContractModule SolutionProviders (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::SolutionProviders` (r:1 w:0) + /// Proof: `SmartContractModule::SolutionProviders` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn attach_solution_provider_id() -> Weight { // Proof Size summary in bytes: - // Measured: `971` - // Estimated: `4436` - // Minimum execution time: 44_207_000 picoseconds. - Weight::from_parts(46_180_000, 4436) + // Measured: `965` + // Estimated: `4430` + // Minimum execution time: 21_971_000 picoseconds. + Weight::from_parts(22_552_000, 4430) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule DedicatedNodesExtraFee (r:0 w:1) - /// Proof Skipped: SmartContractModule DedicatedNodesExtraFee (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::DedicatedNodesExtraFee` (r:0 w:1) + /// Proof: `SmartContractModule::DedicatedNodesExtraFee` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_dedicated_node_extra_fee() -> Weight { // Proof Size summary in bytes: // Measured: `733` // Estimated: `4198` - // Minimum execution time: 46_778_000 picoseconds. - Weight::from_parts(48_978_000, 4198) + // Minimum execution time: 23_114_000 picoseconds. + Weight::from_parts(23_544_000, 4198) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: SmartContractModule Contracts (r:1 w:1) - /// Proof Skipped: SmartContractModule Contracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:1) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: SmartContractModule ContractLock (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractLock (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:1 w:0) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule BillingFrequency (r:1 w:0) - /// Proof Skipped: SmartContractModule BillingFrequency (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractsToBillAt (r:1 w:1) - /// Proof Skipped: SmartContractModule ContractsToBillAt (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractBillingInformationByID (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractBillingInformationByID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule NodeContractResources (r:0 w:1) - /// Proof Skipped: SmartContractModule NodeContractResources (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ContractIDByNodeIDAndHash (r:0 w:1) - /// Proof Skipped: SmartContractModule ContractIDByNodeIDAndHash (max_values: None, max_size: None, mode: Measured) + /// Storage: `SmartContractModule::Contracts` (r:1 w:1) + /// Proof: `SmartContractModule::Contracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:1) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:2 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:0) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractPaymentState` (r:1 w:1) + /// Proof: `SmartContractModule::ContractPaymentState` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `SmartContractModule::BillingFrequency` (r:1 w:0) + /// Proof: `SmartContractModule::BillingFrequency` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractsToBillAt` (r:1 w:1) + /// Proof: `SmartContractModule::ContractsToBillAt` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractBillingInformationByID` (r:0 w:1) + /// Proof: `SmartContractModule::ContractBillingInformationByID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::NodeContractResources` (r:0 w:1) + /// Proof: `SmartContractModule::NodeContractResources` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ContractIDByNodeIDAndHash` (r:0 w:1) + /// Proof: `SmartContractModule::ContractIDByNodeIDAndHash` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_contract_collective() -> Weight { // Proof Size summary in bytes: - // Measured: `1203` - // Estimated: `4668` - // Minimum execution time: 90_735_000 picoseconds. - Weight::from_parts(92_827_000, 4668) - .saturating_add(RocksDbWeight::get().reads(9_u64)) + // Measured: `1650` + // Estimated: `7590` + // Minimum execution time: 74_791_000 picoseconds. + Weight::from_parts(76_285_000, 7590) + .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } -} \ No newline at end of file +} diff --git a/substrate-node/pallets/pallet-tfgrid/src/lib.rs b/substrate-node/pallets/pallet-tfgrid/src/lib.rs index 2888d5e14..55c032ef9 100644 --- a/substrate-node/pallets/pallet-tfgrid/src/lib.rs +++ b/substrate-node/pallets/pallet-tfgrid/src/lib.rs @@ -41,7 +41,7 @@ pub mod pallet { use sp_std::{convert::TryInto, fmt::Debug, vec, vec::Vec}; use tfchain_support::{ resources::Resources, - traits::{ChangeNode, PublicIpModifier}, + traits::{ChangeNode, NodeActiveContracts, PublicIpModifier}, types::*, }; @@ -281,6 +281,8 @@ pub mod pallet { type PublicIpModifier: PublicIpModifier; + type NodeActiveContracts: NodeActiveContracts; + /// The type of terms and conditions. type TermsAndConditions: FullCodec + Debug @@ -567,8 +569,11 @@ pub mod pallet { InvalidPublicConfig, UnauthorizedToChangePowerTarget, + NodeHasActiveContracts, InvalidRelayAddress, InvalidTimestampHint, + + InvalidStorageInput, } #[pallet::genesis_config] diff --git a/substrate-node/pallets/pallet-tfgrid/src/mock.rs b/substrate-node/pallets/pallet-tfgrid/src/mock.rs index 5b636a10d..39eaa9534 100644 --- a/substrate-node/pallets/pallet-tfgrid/src/mock.rs +++ b/substrate-node/pallets/pallet-tfgrid/src/mock.rs @@ -20,7 +20,10 @@ use sp_runtime::{ use sp_std::prelude::*; use hex; -use tfchain_support::types::PublicIP; +use tfchain_support::{ + traits::{ChangeNode, NodeActiveContracts, PublicIpModifier}, + types::PublicIP, +}; pub type Signature = MultiSignature; @@ -79,16 +82,24 @@ pub(crate) type Interface = crate::InterfaceOf; pub(crate) type TfgridNode = crate::TfgridNode; pub struct NodeChanged; -impl tfchain_support::traits::ChangeNode for NodeChanged { +impl ChangeNode for NodeChanged { fn node_changed(_old_node: Option<&TfgridNode>, _new_node: &TfgridNode) {} fn node_deleted(_node: &TfgridNode) {} + fn node_power_state_changed(_node: &TfgridNode) {} } -pub struct PublicIpModifier; -impl tfchain_support::traits::PublicIpModifier for PublicIpModifier { +pub struct PublicIpModifierType; +impl PublicIpModifier for PublicIpModifierType { fn ip_removed(_ip: &PublicIP) {} } +pub struct NodeActiveContractsType; +impl NodeActiveContracts for NodeActiveContractsType { + fn node_has_no_active_contracts(_node_id: u32) -> bool { + true + } +} + parameter_types! { pub const MaxFarmNameLength: u32 = 40; pub const MaxInterfaceIpsLength: u32 = 5; @@ -115,7 +126,8 @@ impl Config for TestRuntime { type RestrictedOrigin = EnsureRoot; type WeightInfo = weights::SubstrateWeight; type NodeChanged = NodeChanged; - type PublicIpModifier = PublicIpModifier; + type PublicIpModifier = PublicIpModifierType; + type NodeActiveContracts = NodeActiveContractsType; type TermsAndConditions = TestTermsAndConditions; type FarmName = TestFarmName; type MaxFarmNameLength = MaxFarmNameLength; diff --git a/substrate-node/pallets/pallet-tfgrid/src/node.rs b/substrate-node/pallets/pallet-tfgrid/src/node.rs index 4b4534770..c440c97fb 100644 --- a/substrate-node/pallets/pallet-tfgrid/src/node.rs +++ b/substrate-node/pallets/pallet-tfgrid/src/node.rs @@ -14,7 +14,7 @@ use sp_std::marker::PhantomData; use sp_std::{vec, vec::Vec}; use tfchain_support::{ resources::Resources, - traits::ChangeNode, + traits::{ChangeNode, NodeActiveContracts}, types::{Interface, Node, NodeCertification, Power, PowerState, PublicConfig}, }; @@ -336,11 +336,14 @@ impl Pallet { let mut node_power = NodePower::::get(node_id); - // if the power state is not correct => change it and emit event + // If the power state is different from what is set, change it and emit event if node_power.state != power_state { node_power.state = power_state.clone(); - NodePower::::insert(node_id, node_power); + + // Call node power state changed + T::NodeChanged::node_power_state_changed(&node); + Self::deposit_event(Event::PowerStateChanged { farm_id: node.farm_id, node_id, @@ -359,38 +362,38 @@ impl Pallet { let twin_id = TwinIdByAccountID::::get(account_id).ok_or(Error::::TwinNotExists)?; let node = Nodes::::get(node_id).ok_or(Error::::NodeNotExists)?; let farm = Farms::::get(node.farm_id).ok_or(Error::::FarmNotExists)?; - ensure!( - twin_id == farm.twin_id, - Error::::UnauthorizedToChangePowerTarget - ); + // Make sure only the farmer that owns this node can change the power target ensure!( - node.farm_id == farm.id, + twin_id == farm.twin_id, Error::::UnauthorizedToChangePowerTarget ); - Self::_change_power_target_on_node(node.id, node.farm_id, power_target); - - Ok(().into()) - } + // If power target is switched to Down, make sure there are no active contracts on node + if power_target == Power::Down { + ensure!( + T::NodeActiveContracts::node_has_no_active_contracts(node_id), + Error::::NodeHasActiveContracts + ); + } - fn _change_power_target_on_node(node_id: u32, farm_id: u32, power_target: Power) { let mut node_power = NodePower::::get(node_id); node_power.target = power_target.clone(); NodePower::::insert(node_id, &node_power); Self::deposit_event(Event::PowerTargetChanged { - farm_id, + farm_id: node.farm_id, node_id, power_target, }); + + Ok(().into()) } fn get_resources( resources: pallet::ResourcesInput, ) -> Result { - ensure!(resources.validate_hru(), Error::::InvalidHRUInput); - ensure!(resources.validate_sru(), Error::::InvalidSRUInput); + ensure!(resources.validate_storage(), Error::::InvalidStorageInput); ensure!(resources.validate_cru(), Error::::InvalidCRUInput); ensure!(resources.validate_mru(), Error::::InvalidMRUInput); diff --git a/substrate-node/pallets/pallet-tfgrid/src/weights.rs b/substrate-node/pallets/pallet-tfgrid/src/weights.rs index f01cfff92..18ce069d6 100644 --- a/substrate-node/pallets/pallet-tfgrid/src/weights.rs +++ b/substrate-node/pallets/pallet-tfgrid/src/weights.rs @@ -2,21 +2,21 @@ //! Autogenerated weights for pallet_tfgrid //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-22, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `R1-HP-ProBook-630-G8`, CPU: `11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ./target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_tfgrid +// --wasm-execution=compiled +// --pallet=pallet-tfgrid // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output // ./pallets/pallet-tfgrid/src/weights.rs @@ -70,960 +70,964 @@ pub trait WeightInfo { /// Weights for pallet_tfgrid using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: TfgridModule PalletVersion (r:0 w:1) - /// Proof Skipped: TfgridModule PalletVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::PalletVersion` (r:0 w:1) + /// Proof: `TfgridModule::PalletVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_storage_version() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_385_000 picoseconds. - Weight::from_parts(5_643_000, 0) + // Minimum execution time: 2_515_000 picoseconds. + Weight::from_parts(2_655_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule FarmID (r:1 w:1) - /// Proof Skipped: TfgridModule FarmID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule FarmIdByName (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:0 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmIdByName` (r:1 w:1) + /// Proof: `TfgridModule::FarmIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmID` (r:1 w:1) + /// Proof: `TfgridModule::FarmID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:0 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_farm() -> Weight { // Proof Size summary in bytes: // Measured: `496` // Estimated: `3961` - // Minimum execution time: 31_394_000 picoseconds. - Weight::from_parts(32_172_000, 3961) + // Minimum execution time: 20_518_000 picoseconds. + Weight::from_parts(20_980_000, 3961) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule FarmIdByName (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmIdByName` (r:1 w:2) + /// Proof: `TfgridModule::FarmIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_farm() -> Weight { // Proof Size summary in bytes: // Measured: `507` // Estimated: `3972` - // Minimum execution time: 33_504_000 picoseconds. - Weight::from_parts(34_515_000, 3972) + // Minimum execution time: 22_262_000 picoseconds. + Weight::from_parts(22_653_000, 3972) .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmPayoutV2AddressByFarmID (r:0 w:1) - /// Proof Skipped: TfgridModule FarmPayoutV2AddressByFarmID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmPayoutV2AddressByFarmID` (r:0 w:1) + /// Proof: `TfgridModule::FarmPayoutV2AddressByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_stellar_payout_v2address() -> Weight { // Proof Size summary in bytes: // Measured: `453` // Estimated: `3918` - // Minimum execution time: 24_636_000 picoseconds. - Weight::from_parts(25_319_000, 3918) + // Minimum execution time: 16_531_000 picoseconds. + Weight::from_parts(17_012_000, 3918) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_farm_certification() -> Weight { // Proof Size summary in bytes: // Measured: `412` // Estimated: `3877` - // Minimum execution time: 20_870_000 picoseconds. - Weight::from_parts(21_177_000, 3877) + // Minimum execution time: 13_476_000 picoseconds. + Weight::from_parts(13_826_000, 3877) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_farm_ip() -> Weight { // Proof Size summary in bytes: // Measured: `569` // Estimated: `4034` - // Minimum execution time: 27_994_000 picoseconds. - Weight::from_parts(31_496_000, 4034) + // Minimum execution time: 18_355_000 picoseconds. + Weight::from_parts(18_695_000, 4034) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn remove_farm_ip() -> Weight { // Proof Size summary in bytes: // Measured: `569` // Estimated: `4034` - // Minimum execution time: 26_365_000 picoseconds. - Weight::from_parts(27_079_000, 4034) + // Minimum execution time: 17_534_000 picoseconds. + Weight::from_parts(17_904_000, 4034) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:1) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeID (r:1 w:1) - /// Proof Skipped: TfgridModule NodeID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule ConnectionPrice (r:1 w:0) - /// Proof Skipped: TfgridModule ConnectionPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule FarmingPoliciesMap (r:4 w:0) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:1) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:0 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:1) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeID` (r:1 w:1) + /// Proof: `TfgridModule::NodeID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::ConnectionPrice` (r:1 w:0) + /// Proof: `TfgridModule::ConnectionPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:4 w:0) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:1) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:0 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_node() -> Weight { // Proof Size summary in bytes: // Measured: `905` // Estimated: `11795` - // Minimum execution time: 71_884_000 picoseconds. - Weight::from_parts(74_159_000, 11795) + // Minimum execution time: 48_913_000 picoseconds. + Weight::from_parts(49_483_000, 11795) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_node() -> Weight { // Proof Size summary in bytes: // Measured: `661` // Estimated: `4126` - // Minimum execution time: 41_641_000 picoseconds. - Weight::from_parts(42_797_000, 4126) + // Minimum execution time: 27_392_000 picoseconds. + Weight::from_parts(28_073_000, 4126) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmingPoliciesMap (r:4 w:0) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:4 w:0) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_node_certification() -> Weight { // Proof Size summary in bytes: // Measured: `956` // Estimated: `11846` - // Minimum execution time: 53_080_000 picoseconds. - Weight::from_parts(54_350_000, 11846) + // Minimum execution time: 35_166_000 picoseconds. + Weight::from_parts(35_728_000, 11846) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) fn report_uptime() -> Weight { // Proof Size summary in bytes: // Measured: `454` // Estimated: `3919` - // Minimum execution time: 28_159_000 picoseconds. - Weight::from_parts(28_543_000, 3919) + // Minimum execution time: 18_906_000 picoseconds. + Weight::from_parts(19_326_000, 3919) .saturating_add(T::DbWeight::get().reads(4_u64)) } - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_node_public_config() -> Weight { // Proof Size summary in bytes: // Measured: `779` // Estimated: `4244` - // Minimum execution time: 37_090_000 picoseconds. - Weight::from_parts(38_269_000, 4244) + // Minimum execution time: 25_027_000 picoseconds. + Weight::from_parts(25_488_000, 4244) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:1) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:1) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) fn delete_node() -> Weight { // Proof Size summary in bytes: // Measured: `682` // Estimated: `4147` - // Minimum execution time: 40_802_000 picoseconds. - Weight::from_parts(41_890_000, 4147) + // Minimum execution time: 28_053_000 picoseconds. + Weight::from_parts(28_715_000, 4147) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule UsersTermsAndConditions (r:1 w:0) - /// Proof Skipped: TfgridModule UsersTermsAndConditions (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:1) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinID (r:1 w:1) - /// Proof Skipped: TfgridModule TwinID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:0 w:1) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::UsersTermsAndConditions` (r:1 w:0) + /// Proof: `TfgridModule::UsersTermsAndConditions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:1) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinID` (r:1 w:1) + /// Proof: `TfgridModule::TwinID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:0 w:1) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_twin() -> Weight { // Proof Size summary in bytes: // Measured: `235` // Estimated: `3700` - // Minimum execution time: 23_943_000 picoseconds. - Weight::from_parts(24_477_000, 3700) + // Minimum execution time: 14_828_000 picoseconds. + Weight::from_parts(15_129_000, 3700) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:1) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:1) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_twin() -> Weight { // Proof Size summary in bytes: // Measured: `428` // Estimated: `3893` - // Minimum execution time: 23_757_000 picoseconds. - Weight::from_parts(24_337_000, 3893) + // Minimum execution time: 15_199_000 picoseconds. + Weight::from_parts(15_610_000, 3893) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule PricingPolicyIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicyIdByName (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicyID (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicyID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:0 w:1) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::PricingPolicyIdByName` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicyIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicyID` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicyID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:0 w:1) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_pricing_policy() -> Weight { // Proof Size summary in bytes: // Measured: `134` // Estimated: `3599` - // Minimum execution time: 20_931_000 picoseconds. - Weight::from_parts(21_633_000, 3599) + // Minimum execution time: 12_534_000 picoseconds. + Weight::from_parts(12_795_000, 3599) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule PricingPolicies (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicyIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicyIdByName (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicyID (r:0 w:1) - /// Proof Skipped: TfgridModule PricingPolicyID (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicyIdByName` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicyIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicyID` (r:0 w:1) + /// Proof: `TfgridModule::PricingPolicyID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn update_pricing_policy() -> Weight { // Proof Size summary in bytes: // Measured: `382` // Estimated: `3847` - // Minimum execution time: 26_466_000 picoseconds. - Weight::from_parts(27_478_000, 3847) + // Minimum execution time: 16_962_000 picoseconds. + Weight::from_parts(17_433_000, 3847) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule FarmingPolicyID (r:1 w:1) - /// Proof Skipped: TfgridModule FarmingPolicyID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule FarmingPoliciesMap (r:0 w:1) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::FarmingPolicyID` (r:1 w:1) + /// Proof: `TfgridModule::FarmingPolicyID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:0 w:1) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_farming_policy() -> Weight { // Proof Size summary in bytes: // Measured: `134` // Estimated: `1619` - // Minimum execution time: 17_653_000 picoseconds. - Weight::from_parts(18_085_000, 1619) + // Minimum execution time: 10_480_000 picoseconds. + Weight::from_parts(10_730_000, 1619) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule UsersTermsAndConditions (r:1 w:1) - /// Proof Skipped: TfgridModule UsersTermsAndConditions (max_values: None, max_size: None, mode: Measured) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::UsersTermsAndConditions` (r:1 w:1) + /// Proof: `TfgridModule::UsersTermsAndConditions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn user_accept_tc() -> Weight { // Proof Size summary in bytes: // Measured: `140` // Estimated: `3605` - // Minimum execution time: 12_183_000 picoseconds. - Weight::from_parts(12_508_000, 3605) + // Minimum execution time: 7_444_000 picoseconds. + Weight::from_parts(7_664_000, 3605) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:1) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:0 w:1) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:1) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:0 w:1) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn delete_node_farm() -> Weight { // Proof Size summary in bytes: - // Measured: `985` - // Estimated: `4450` - // Minimum execution time: 55_311_000 picoseconds. - Weight::from_parts(56_386_000, 4450) - .saturating_add(T::DbWeight::get().reads(8_u64)) + // Measured: `828` + // Estimated: `4293` + // Minimum execution time: 33_273_000 picoseconds. + Weight::from_parts(33_854_000, 4293) + .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_farm_dedicated() -> Weight { // Proof Size summary in bytes: // Measured: `412` // Estimated: `3877` - // Minimum execution time: 21_411_000 picoseconds. - Weight::from_parts(21_921_000, 3877) + // Minimum execution time: 13_676_000 picoseconds. + Weight::from_parts(14_137_000, 3877) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn force_reset_farm_ip() -> Weight { // Proof Size summary in bytes: // Measured: `412` // Estimated: `3877` - // Minimum execution time: 23_493_000 picoseconds. - Weight::from_parts(24_448_000, 3877) + // Minimum execution time: 14_136_000 picoseconds. + Weight::from_parts(14_387_000, 3877) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule ConnectionPrice (r:0 w:1) - /// Proof Skipped: TfgridModule ConnectionPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::ConnectionPrice` (r:0 w:1) + /// Proof: `TfgridModule::ConnectionPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_connection_price() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_801_000 picoseconds. - Weight::from_parts(10_091_000, 0) + // Minimum execution time: 5_651_000 picoseconds. + Weight::from_parts(5_821_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule AllowedNodeCertifiers (r:1 w:1) - /// Proof Skipped: TfgridModule AllowedNodeCertifiers (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::AllowedNodeCertifiers` (r:1 w:1) + /// Proof: `TfgridModule::AllowedNodeCertifiers` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_node_certifier() -> Weight { // Proof Size summary in bytes: // Measured: `355` // Estimated: `1840` - // Minimum execution time: 15_518_000 picoseconds. - Weight::from_parts(16_227_000, 1840) + // Minimum execution time: 9_799_000 picoseconds. + Weight::from_parts(10_109_000, 1840) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule AllowedNodeCertifiers (r:1 w:1) - /// Proof Skipped: TfgridModule AllowedNodeCertifiers (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::AllowedNodeCertifiers` (r:1 w:1) + /// Proof: `TfgridModule::AllowedNodeCertifiers` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_node_certifier() -> Weight { // Proof Size summary in bytes: // Measured: `413` // Estimated: `1898` - // Minimum execution time: 18_573_000 picoseconds. - Weight::from_parts(19_049_000, 1898) + // Minimum execution time: 12_233_000 picoseconds. + Weight::from_parts(12_504_000, 1898) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule FarmingPoliciesMap (r:1 w:1) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:1 w:1) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_farming_policy() -> Weight { // Proof Size summary in bytes: // Measured: `294` // Estimated: `3759` - // Minimum execution time: 21_450_000 picoseconds. - Weight::from_parts(22_654_000, 3759) + // Minimum execution time: 13_325_000 picoseconds. + Weight::from_parts(13_706_000, 3759) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule FarmingPoliciesMap (r:1 w:0) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:0) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:1 w:0) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:0) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn attach_policy_to_farm() -> Weight { // Proof Size summary in bytes: // Measured: `572` // Estimated: `4037` - // Minimum execution time: 35_866_000 picoseconds. - Weight::from_parts(36_635_000, 4037) + // Minimum execution time: 22_302_000 picoseconds. + Weight::from_parts(22_943_000, 4037) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule ZosVersion (r:1 w:1) - /// Proof Skipped: TfgridModule ZosVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::ZosVersion` (r:1 w:1) + /// Proof: `TfgridModule::ZosVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_zos_version() -> Weight { // Proof Size summary in bytes: // Measured: `134` // Estimated: `1619` - // Minimum execution time: 13_431_000 picoseconds. - Weight::from_parts(14_115_000, 1619) + // Minimum execution time: 8_096_000 picoseconds. + Weight::from_parts(8_275_000, 1619) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:1) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodePower` (r:1 w:1) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) fn change_power_state() -> Weight { // Proof Size summary in bytes: // Measured: `621` // Estimated: `4086` - // Minimum execution time: 33_189_000 picoseconds. - Weight::from_parts(34_120_000, 4086) + // Minimum execution time: 35_657_000 picoseconds. + Weight::from_parts(38_282_000, 4086) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:1) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodePower` (r:1 w:1) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) fn change_power_target() -> Weight { // Proof Size summary in bytes: - // Measured: `755` - // Estimated: `4220` - // Minimum execution time: 32_593_000 picoseconds. - Weight::from_parts(33_063_000, 4220) - .saturating_add(T::DbWeight::get().reads(4_u64)) + // Measured: `792` + // Estimated: `4257` + // Minimum execution time: 26_661_000 picoseconds. + Weight::from_parts(27_592_000, 4257) + .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:0 w:1) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:0 w:1) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn bond_twin_account() -> Weight { // Proof Size summary in bytes: // Measured: `387` // Estimated: `3852` - // Minimum execution time: 19_181_000 picoseconds. - Weight::from_parts(19_630_000, 3852) + // Minimum execution time: 11_993_000 picoseconds. + Weight::from_parts(12_353_000, 3852) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) fn report_uptime_v2() -> Weight { // Proof Size summary in bytes: // Measured: `454` // Estimated: `3919` - // Minimum execution time: 26_974_000 picoseconds. - Weight::from_parts(28_212_000, 3919) + // Minimum execution time: 18_374_000 picoseconds. + Weight::from_parts(18_755_000, 3919) .saturating_add(T::DbWeight::get().reads(4_u64)) } } // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: TfgridModule PalletVersion (r:0 w:1) - /// Proof Skipped: TfgridModule PalletVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::PalletVersion` (r:0 w:1) + /// Proof: `TfgridModule::PalletVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_storage_version() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_385_000 picoseconds. - Weight::from_parts(5_643_000, 0) + // Minimum execution time: 2_515_000 picoseconds. + Weight::from_parts(2_655_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule FarmID (r:1 w:1) - /// Proof Skipped: TfgridModule FarmID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule FarmIdByName (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:0 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmIdByName` (r:1 w:1) + /// Proof: `TfgridModule::FarmIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmID` (r:1 w:1) + /// Proof: `TfgridModule::FarmID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:0 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_farm() -> Weight { // Proof Size summary in bytes: // Measured: `496` // Estimated: `3961` - // Minimum execution time: 31_394_000 picoseconds. - Weight::from_parts(32_172_000, 3961) + // Minimum execution time: 20_518_000 picoseconds. + Weight::from_parts(20_980_000, 3961) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule FarmIdByName (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmIdByName` (r:1 w:2) + /// Proof: `TfgridModule::FarmIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_farm() -> Weight { // Proof Size summary in bytes: // Measured: `507` // Estimated: `3972` - // Minimum execution time: 33_504_000 picoseconds. - Weight::from_parts(34_515_000, 3972) + // Minimum execution time: 22_262_000 picoseconds. + Weight::from_parts(22_653_000, 3972) .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmPayoutV2AddressByFarmID (r:0 w:1) - /// Proof Skipped: TfgridModule FarmPayoutV2AddressByFarmID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmPayoutV2AddressByFarmID` (r:0 w:1) + /// Proof: `TfgridModule::FarmPayoutV2AddressByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_stellar_payout_v2address() -> Weight { // Proof Size summary in bytes: // Measured: `453` // Estimated: `3918` - // Minimum execution time: 24_636_000 picoseconds. - Weight::from_parts(25_319_000, 3918) + // Minimum execution time: 16_531_000 picoseconds. + Weight::from_parts(17_012_000, 3918) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_farm_certification() -> Weight { // Proof Size summary in bytes: // Measured: `412` // Estimated: `3877` - // Minimum execution time: 20_870_000 picoseconds. - Weight::from_parts(21_177_000, 3877) + // Minimum execution time: 13_476_000 picoseconds. + Weight::from_parts(13_826_000, 3877) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_farm_ip() -> Weight { // Proof Size summary in bytes: // Measured: `569` // Estimated: `4034` - // Minimum execution time: 27_994_000 picoseconds. - Weight::from_parts(31_496_000, 4034) + // Minimum execution time: 18_355_000 picoseconds. + Weight::from_parts(18_695_000, 4034) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn remove_farm_ip() -> Weight { // Proof Size summary in bytes: // Measured: `569` // Estimated: `4034` - // Minimum execution time: 26_365_000 picoseconds. - Weight::from_parts(27_079_000, 4034) + // Minimum execution time: 17_534_000 picoseconds. + Weight::from_parts(17_904_000, 4034) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:1) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeID (r:1 w:1) - /// Proof Skipped: TfgridModule NodeID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule ConnectionPrice (r:1 w:0) - /// Proof Skipped: TfgridModule ConnectionPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule FarmingPoliciesMap (r:4 w:0) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:1) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:0 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:1) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeID` (r:1 w:1) + /// Proof: `TfgridModule::NodeID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::ConnectionPrice` (r:1 w:0) + /// Proof: `TfgridModule::ConnectionPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:4 w:0) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:1) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:0 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_node() -> Weight { // Proof Size summary in bytes: // Measured: `905` // Estimated: `11795` - // Minimum execution time: 71_884_000 picoseconds. - Weight::from_parts(74_159_000, 11795) + // Minimum execution time: 48_913_000 picoseconds. + Weight::from_parts(49_483_000, 11795) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_node() -> Weight { // Proof Size summary in bytes: // Measured: `661` // Estimated: `4126` - // Minimum execution time: 41_641_000 picoseconds. - Weight::from_parts(42_797_000, 4126) + // Minimum execution time: 27_392_000 picoseconds. + Weight::from_parts(28_073_000, 4126) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule FarmingPoliciesMap (r:4 w:0) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:4 w:0) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_node_certification() -> Weight { // Proof Size summary in bytes: // Measured: `956` // Estimated: `11846` - // Minimum execution time: 53_080_000 picoseconds. - Weight::from_parts(54_350_000, 11846) + // Minimum execution time: 35_166_000 picoseconds. + Weight::from_parts(35_728_000, 11846) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) fn report_uptime() -> Weight { // Proof Size summary in bytes: // Measured: `454` // Estimated: `3919` - // Minimum execution time: 28_159_000 picoseconds. - Weight::from_parts(28_543_000, 3919) + // Minimum execution time: 18_906_000 picoseconds. + Weight::from_parts(19_326_000, 3919) .saturating_add(RocksDbWeight::get().reads(4_u64)) } - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) fn add_node_public_config() -> Weight { // Proof Size summary in bytes: // Measured: `779` // Estimated: `4244` - // Minimum execution time: 37_090_000 picoseconds. - Weight::from_parts(38_269_000, 4244) + // Minimum execution time: 25_027_000 picoseconds. + Weight::from_parts(25_488_000, 4244) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:1) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:1) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) fn delete_node() -> Weight { // Proof Size summary in bytes: // Measured: `682` // Estimated: `4147` - // Minimum execution time: 40_802_000 picoseconds. - Weight::from_parts(41_890_000, 4147) + // Minimum execution time: 28_053_000 picoseconds. + Weight::from_parts(28_715_000, 4147) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule UsersTermsAndConditions (r:1 w:0) - /// Proof Skipped: TfgridModule UsersTermsAndConditions (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:1) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinID (r:1 w:1) - /// Proof Skipped: TfgridModule TwinID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:0 w:1) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::UsersTermsAndConditions` (r:1 w:0) + /// Proof: `TfgridModule::UsersTermsAndConditions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:1) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinID` (r:1 w:1) + /// Proof: `TfgridModule::TwinID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:0 w:1) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_twin() -> Weight { // Proof Size summary in bytes: // Measured: `235` // Estimated: `3700` - // Minimum execution time: 23_943_000 picoseconds. - Weight::from_parts(24_477_000, 3700) + // Minimum execution time: 14_828_000 picoseconds. + Weight::from_parts(15_129_000, 3700) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:1) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Twins` (r:1 w:1) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_twin() -> Weight { // Proof Size summary in bytes: // Measured: `428` // Estimated: `3893` - // Minimum execution time: 23_757_000 picoseconds. - Weight::from_parts(24_337_000, 3893) + // Minimum execution time: 15_199_000 picoseconds. + Weight::from_parts(15_610_000, 3893) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule PricingPolicyIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicyIdByName (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicyID (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicyID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicies (r:0 w:1) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::PricingPolicyIdByName` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicyIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicyID` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicyID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicies` (r:0 w:1) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_pricing_policy() -> Weight { // Proof Size summary in bytes: // Measured: `134` // Estimated: `3599` - // Minimum execution time: 20_931_000 picoseconds. - Weight::from_parts(21_633_000, 3599) + // Minimum execution time: 12_534_000 picoseconds. + Weight::from_parts(12_795_000, 3599) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule PricingPolicies (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicies (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicyIdByName (r:1 w:1) - /// Proof Skipped: TfgridModule PricingPolicyIdByName (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule PricingPolicyID (r:0 w:1) - /// Proof Skipped: TfgridModule PricingPolicyID (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::PricingPolicies` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicies` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicyIdByName` (r:1 w:1) + /// Proof: `TfgridModule::PricingPolicyIdByName` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::PricingPolicyID` (r:0 w:1) + /// Proof: `TfgridModule::PricingPolicyID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn update_pricing_policy() -> Weight { // Proof Size summary in bytes: // Measured: `382` // Estimated: `3847` - // Minimum execution time: 26_466_000 picoseconds. - Weight::from_parts(27_478_000, 3847) + // Minimum execution time: 16_962_000 picoseconds. + Weight::from_parts(17_433_000, 3847) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TfgridModule FarmingPolicyID (r:1 w:1) - /// Proof Skipped: TfgridModule FarmingPolicyID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TfgridModule FarmingPoliciesMap (r:0 w:1) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::FarmingPolicyID` (r:1 w:1) + /// Proof: `TfgridModule::FarmingPolicyID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:0 w:1) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_farming_policy() -> Weight { // Proof Size summary in bytes: // Measured: `134` // Estimated: `1619` - // Minimum execution time: 17_653_000 picoseconds. - Weight::from_parts(18_085_000, 1619) + // Minimum execution time: 10_480_000 picoseconds. + Weight::from_parts(10_730_000, 1619) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - /// Storage: TfgridModule UsersTermsAndConditions (r:1 w:1) - /// Proof Skipped: TfgridModule UsersTermsAndConditions (max_values: None, max_size: None, mode: Measured) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `TfgridModule::UsersTermsAndConditions` (r:1 w:1) + /// Proof: `TfgridModule::UsersTermsAndConditions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn user_accept_tc() -> Weight { // Proof Size summary in bytes: // Measured: `140` // Estimated: `3605` - // Minimum execution time: 12_183_000 picoseconds. - Weight::from_parts(12_508_000, 3605) + // Minimum execution time: 7_444_000 picoseconds. + Weight::from_parts(7_664_000, 3605) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:1) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:1) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveNodeContracts (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveNodeContracts (max_values: None, max_size: None, mode: Measured) - /// Storage: SmartContractModule ActiveRentContractForNode (r:1 w:0) - /// Proof Skipped: SmartContractModule ActiveRentContractForNode (max_values: None, max_size: None, mode: Measured) - /// Storage: Dao FarmWeight (r:1 w:1) - /// Proof Skipped: Dao FarmWeight (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:0 w:1) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:1) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:1) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Dao::FarmWeight` (r:1 w:1) + /// Proof: `Dao::FarmWeight` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:0 w:1) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn delete_node_farm() -> Weight { // Proof Size summary in bytes: - // Measured: `985` - // Estimated: `4450` - // Minimum execution time: 55_311_000 picoseconds. - Weight::from_parts(56_386_000, 4450) - .saturating_add(RocksDbWeight::get().reads(8_u64)) + // Measured: `828` + // Estimated: `4293` + // Minimum execution time: 33_273_000 picoseconds. + Weight::from_parts(33_854_000, 4293) + .saturating_add(RocksDbWeight::get().reads(7_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_farm_dedicated() -> Weight { // Proof Size summary in bytes: // Measured: `412` // Estimated: `3877` - // Minimum execution time: 21_411_000 picoseconds. - Weight::from_parts(21_921_000, 3877) + // Minimum execution time: 13_676_000 picoseconds. + Weight::from_parts(14_137_000, 3877) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) fn force_reset_farm_ip() -> Weight { // Proof Size summary in bytes: // Measured: `412` // Estimated: `3877` - // Minimum execution time: 23_493_000 picoseconds. - Weight::from_parts(24_448_000, 3877) + // Minimum execution time: 14_136_000 picoseconds. + Weight::from_parts(14_387_000, 3877) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule ConnectionPrice (r:0 w:1) - /// Proof Skipped: TfgridModule ConnectionPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::ConnectionPrice` (r:0 w:1) + /// Proof: `TfgridModule::ConnectionPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_connection_price() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_801_000 picoseconds. - Weight::from_parts(10_091_000, 0) + // Minimum execution time: 5_651_000 picoseconds. + Weight::from_parts(5_821_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule AllowedNodeCertifiers (r:1 w:1) - /// Proof Skipped: TfgridModule AllowedNodeCertifiers (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::AllowedNodeCertifiers` (r:1 w:1) + /// Proof: `TfgridModule::AllowedNodeCertifiers` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_node_certifier() -> Weight { // Proof Size summary in bytes: // Measured: `355` // Estimated: `1840` - // Minimum execution time: 15_518_000 picoseconds. - Weight::from_parts(16_227_000, 1840) + // Minimum execution time: 9_799_000 picoseconds. + Weight::from_parts(10_109_000, 1840) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule AllowedNodeCertifiers (r:1 w:1) - /// Proof Skipped: TfgridModule AllowedNodeCertifiers (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::AllowedNodeCertifiers` (r:1 w:1) + /// Proof: `TfgridModule::AllowedNodeCertifiers` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_node_certifier() -> Weight { // Proof Size summary in bytes: // Measured: `413` // Estimated: `1898` - // Minimum execution time: 18_573_000 picoseconds. - Weight::from_parts(19_049_000, 1898) + // Minimum execution time: 12_233_000 picoseconds. + Weight::from_parts(12_504_000, 1898) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule FarmingPoliciesMap (r:1 w:1) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:1 w:1) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) fn update_farming_policy() -> Weight { // Proof Size summary in bytes: // Measured: `294` // Estimated: `3759` - // Minimum execution time: 21_450_000 picoseconds. - Weight::from_parts(22_654_000, 3759) + // Minimum execution time: 13_325_000 picoseconds. + Weight::from_parts(13_706_000, 3759) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule FarmingPoliciesMap (r:1 w:0) - /// Proof Skipped: TfgridModule FarmingPoliciesMap (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:1) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodesByFarmID (r:1 w:0) - /// Proof Skipped: TfgridModule NodesByFarmID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::FarmingPoliciesMap` (r:1 w:0) + /// Proof: `TfgridModule::FarmingPoliciesMap` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:1) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodesByFarmID` (r:1 w:0) + /// Proof: `TfgridModule::NodesByFarmID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn attach_policy_to_farm() -> Weight { // Proof Size summary in bytes: // Measured: `572` // Estimated: `4037` - // Minimum execution time: 35_866_000 picoseconds. - Weight::from_parts(36_635_000, 4037) + // Minimum execution time: 22_302_000 picoseconds. + Weight::from_parts(22_943_000, 4037) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule ZosVersion (r:1 w:1) - /// Proof Skipped: TfgridModule ZosVersion (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TfgridModule::ZosVersion` (r:1 w:1) + /// Proof: `TfgridModule::ZosVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_zos_version() -> Weight { // Proof Size summary in bytes: // Measured: `134` // Estimated: `1619` - // Minimum execution time: 13_431_000 picoseconds. - Weight::from_parts(14_115_000, 1619) + // Minimum execution time: 8_096_000 picoseconds. + Weight::from_parts(8_275_000, 1619) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:1) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodePower` (r:1 w:1) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) fn change_power_state() -> Weight { // Proof Size summary in bytes: // Measured: `621` // Estimated: `4086` - // Minimum execution time: 33_189_000 picoseconds. - Weight::from_parts(34_120_000, 4086) + // Minimum execution time: 35_657_000 picoseconds. + Weight::from_parts(38_282_000, 4086) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Farms (r:1 w:0) - /// Proof Skipped: TfgridModule Farms (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodePower (r:1 w:1) - /// Proof Skipped: TfgridModule NodePower (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Farms` (r:1 w:0) + /// Proof: `TfgridModule::Farms` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveNodeContracts` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveNodeContracts` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SmartContractModule::ActiveRentContractForNode` (r:1 w:0) + /// Proof: `SmartContractModule::ActiveRentContractForNode` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodePower` (r:1 w:1) + /// Proof: `TfgridModule::NodePower` (`max_values`: None, `max_size`: None, mode: `Measured`) fn change_power_target() -> Weight { // Proof Size summary in bytes: - // Measured: `755` - // Estimated: `4220` - // Minimum execution time: 32_593_000 picoseconds. - Weight::from_parts(33_063_000, 4220) - .saturating_add(RocksDbWeight::get().reads(4_u64)) + // Measured: `792` + // Estimated: `4257` + // Minimum execution time: 26_661_000 picoseconds. + Weight::from_parts(27_592_000, 4257) + .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule Twins (r:1 w:0) - /// Proof Skipped: TfgridModule Twins (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule TwinBoundedAccountID (r:0 w:1) - /// Proof Skipped: TfgridModule TwinBoundedAccountID (max_values: None, max_size: None, mode: Measured) + /// Storage: `TfgridModule::Twins` (r:1 w:0) + /// Proof: `TfgridModule::Twins` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::TwinBoundedAccountID` (r:0 w:1) + /// Proof: `TfgridModule::TwinBoundedAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) fn bond_twin_account() -> Weight { // Proof Size summary in bytes: // Measured: `387` // Estimated: `3852` - // Minimum execution time: 19_181_000 picoseconds. - Weight::from_parts(19_630_000, 3852) + // Minimum execution time: 11_993_000 picoseconds. + Weight::from_parts(12_353_000, 3852) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TfgridModule TwinIdByAccountID (r:1 w:0) - /// Proof Skipped: TfgridModule TwinIdByAccountID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule NodeIdByTwinID (r:1 w:0) - /// Proof Skipped: TfgridModule NodeIdByTwinID (max_values: None, max_size: None, mode: Measured) - /// Storage: TfgridModule Nodes (r:1 w:0) - /// Proof Skipped: TfgridModule Nodes (max_values: None, max_size: None, mode: Measured) - /// Storage: Timestamp Now (r:1 w:0) - /// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: `TfgridModule::TwinIdByAccountID` (r:1 w:0) + /// Proof: `TfgridModule::TwinIdByAccountID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::NodeIdByTwinID` (r:1 w:0) + /// Proof: `TfgridModule::NodeIdByTwinID` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TfgridModule::Nodes` (r:1 w:0) + /// Proof: `TfgridModule::Nodes` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) fn report_uptime_v2() -> Weight { // Proof Size summary in bytes: // Measured: `454` // Estimated: `3919` - // Minimum execution time: 26_974_000 picoseconds. - Weight::from_parts(28_212_000, 3919) + // Minimum execution time: 18_374_000 picoseconds. + Weight::from_parts(18_755_000, 3919) .saturating_add(RocksDbWeight::get().reads(4_u64)) } } diff --git a/substrate-node/pallets/pallet-tft-bridge/src/migrations/v2.rs b/substrate-node/pallets/pallet-tft-bridge/src/migrations/v2.rs index 855bcdd97..28dc6dc8b 100644 --- a/substrate-node/pallets/pallet-tft-bridge/src/migrations/v2.rs +++ b/substrate-node/pallets/pallet-tft-bridge/src/migrations/v2.rs @@ -37,7 +37,7 @@ impl OnRuntimeUpgrade for MigrateBurnTransactionsV2 { ); info!("👥 TFT-BRIDGE pallet to V1 passes PRE migrate checks ✅",); - return Ok(Vec::::new()); + Ok(Vec::::new()) } fn on_runtime_upgrade() -> Weight { diff --git a/substrate-node/pallets/pallet-tft-bridge/src/weights.rs b/substrate-node/pallets/pallet-tft-bridge/src/weights.rs index a0e511b88..8763e9d61 100644 --- a/substrate-node/pallets/pallet-tft-bridge/src/weights.rs +++ b/substrate-node/pallets/pallet-tft-bridge/src/weights.rs @@ -2,21 +2,21 @@ //! Autogenerated weights for pallet_tft_bridge //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `R1-HP-ProBook-630-G8`, CPU: `11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ./target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_tft_bridge +// --wasm-execution=compiled +// --pallet=pallet-tft-bridge // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output // ./pallets/pallet-tft-bridge/src/weights.rs @@ -49,153 +49,153 @@ pub trait WeightInfo { /// Weights for pallet_tft_bridge using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: TFTBridgeModule Validators (r:1 w:1) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:1) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_bridge_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `289` - // Estimated: `1774` - // Minimum execution time: 18_778_000 picoseconds. - Weight::from_parts(20_233_000, 1774) + // Measured: `256` + // Estimated: `1741` + // Minimum execution time: 7_174_000 picoseconds. + Weight::from_parts(7_444_000, 1741) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:1) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:1) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_bridge_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `322` - // Estimated: `1807` - // Minimum execution time: 12_346_000 picoseconds. - Weight::from_parts(17_998_000, 1807) + // Measured: `289` + // Estimated: `1774` + // Minimum execution time: 7_053_000 picoseconds. + Weight::from_parts(7_314_000, 1774) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule FeeAccount (r:0 w:1) - /// Proof Skipped: TFTBridgeModule FeeAccount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::FeeAccount` (r:0 w:1) + /// Proof: `TFTBridgeModule::FeeAccount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_fee_account() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_548_000 picoseconds. - Weight::from_parts(5_051_000, 0) + // Minimum execution time: 2_234_000 picoseconds. + Weight::from_parts(2_374_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule WithdrawFee (r:0 w:1) - /// Proof Skipped: TFTBridgeModule WithdrawFee (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::WithdrawFee` (r:0 w:1) + /// Proof: `TFTBridgeModule::WithdrawFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_withdraw_fee() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_279_000 picoseconds. - Weight::from_parts(4_493_000, 0) + // Minimum execution time: 2_224_000 picoseconds. + Weight::from_parts(2_335_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule DepositFee (r:0 w:1) - /// Proof Skipped: TFTBridgeModule DepositFee (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::DepositFee` (r:0 w:1) + /// Proof: `TFTBridgeModule::DepositFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_deposit_fee() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_584_000 picoseconds. - Weight::from_parts(4_876_000, 0) + // Minimum execution time: 2_184_000 picoseconds. + Weight::from_parts(2_305_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule WithdrawFee (r:1 w:0) - /// Proof Skipped: TFTBridgeModule WithdrawFee (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule FeeAccount (r:1 w:0) - /// Proof Skipped: TFTBridgeModule FeeAccount (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: TFTBridgeModule BurnTransactionID (r:1 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactionID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule BurnTransactions (r:0 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::WithdrawFee` (r:1 w:0) + /// Proof: `TFTBridgeModule::WithdrawFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::FeeAccount` (r:1 w:0) + /// Proof: `TFTBridgeModule::FeeAccount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `TFTBridgeModule::BurnTransactionID` (r:1 w:1) + /// Proof: `TFTBridgeModule::BurnTransactionID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::BurnTransactions` (r:0 w:1) + /// Proof: `TFTBridgeModule::BurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn swap_to_stellar() -> Weight { // Proof Size summary in bytes: - // Measured: `286` + // Measured: `253` // Estimated: `3593` - // Minimum execution time: 74_554_000 picoseconds. - Weight::from_parts(76_009_000, 3593) + // Minimum execution time: 43_151_000 picoseconds. + Weight::from_parts(43_813_000, 3593) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedMintTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule ExecutedMintTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule MintTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule MintTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule DepositFee (r:1 w:0) - /// Proof Skipped: TFTBridgeModule DepositFee (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule FeeAccount (r:1 w:0) - /// Proof Skipped: TFTBridgeModule FeeAccount (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedMintTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::ExecutedMintTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::MintTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::MintTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::DepositFee` (r:1 w:0) + /// Proof: `TFTBridgeModule::DepositFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::FeeAccount` (r:1 w:0) + /// Proof: `TFTBridgeModule::FeeAccount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn propose_or_vote_mint_transaction() -> Weight { // Proof Size summary in bytes: - // Measured: `532` - // Estimated: `3997` - // Minimum execution time: 102_293_000 picoseconds. - Weight::from_parts(113_671_000, 3997) + // Measured: `499` + // Estimated: `3964` + // Minimum execution time: 59_853_000 picoseconds. + Weight::from_parts(60_825_000, 3964) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedBurnTransactions (r:1 w:0) - /// Proof Skipped: TFTBridgeModule ExecutedBurnTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule BurnTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedBurnTransactions` (r:1 w:0) + /// Proof: `TFTBridgeModule::ExecutedBurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::BurnTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::BurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn propose_burn_transaction_or_add_sig() -> Weight { // Proof Size summary in bytes: // Measured: `631` // Estimated: `4096` - // Minimum execution time: 41_613_000 picoseconds. - Weight::from_parts(42_948_000, 4096) + // Minimum execution time: 25_599_000 picoseconds. + Weight::from_parts(26_581_000, 4096) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedBurnTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule ExecutedBurnTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule BurnTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedBurnTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::ExecutedBurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::BurnTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::BurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_burn_transaction_executed() -> Weight { // Proof Size summary in bytes: // Measured: `571` // Estimated: `4036` - // Minimum execution time: 28_712_000 picoseconds. - Weight::from_parts(29_777_000, 4036) + // Minimum execution time: 18_165_000 picoseconds. + Weight::from_parts(18_625_000, 4036) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule RefundTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule RefundTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::RefundTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::RefundTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_refund_transaction_or_add_sig() -> Weight { // Proof Size summary in bytes: - // Measured: `418` - // Estimated: `3883` - // Minimum execution time: 36_551_000 picoseconds. - Weight::from_parts(37_525_000, 3883) + // Measured: `385` + // Estimated: `3850` + // Minimum execution time: 21_491_000 picoseconds. + Weight::from_parts(22_082_000, 3850) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedRefundTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule ExecutedRefundTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule RefundTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule RefundTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedRefundTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::ExecutedRefundTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::RefundTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::RefundTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_refund_transaction_executed() -> Weight { // Proof Size summary in bytes: - // Measured: `593` - // Estimated: `4058` - // Minimum execution time: 34_047_000 picoseconds. - Weight::from_parts(35_316_000, 4058) + // Measured: `560` + // Estimated: `4025` + // Minimum execution time: 18_675_000 picoseconds. + Weight::from_parts(19_096_000, 4025) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -203,153 +203,153 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: TFTBridgeModule Validators (r:1 w:1) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:1) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_bridge_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `289` - // Estimated: `1774` - // Minimum execution time: 18_778_000 picoseconds. - Weight::from_parts(20_233_000, 1774) + // Measured: `256` + // Estimated: `1741` + // Minimum execution time: 7_174_000 picoseconds. + Weight::from_parts(7_444_000, 1741) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:1) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:1) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_bridge_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `322` - // Estimated: `1807` - // Minimum execution time: 12_346_000 picoseconds. - Weight::from_parts(17_998_000, 1807) + // Measured: `289` + // Estimated: `1774` + // Minimum execution time: 7_053_000 picoseconds. + Weight::from_parts(7_314_000, 1774) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule FeeAccount (r:0 w:1) - /// Proof Skipped: TFTBridgeModule FeeAccount (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::FeeAccount` (r:0 w:1) + /// Proof: `TFTBridgeModule::FeeAccount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_fee_account() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_548_000 picoseconds. - Weight::from_parts(5_051_000, 0) + // Minimum execution time: 2_234_000 picoseconds. + Weight::from_parts(2_374_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule WithdrawFee (r:0 w:1) - /// Proof Skipped: TFTBridgeModule WithdrawFee (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::WithdrawFee` (r:0 w:1) + /// Proof: `TFTBridgeModule::WithdrawFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_withdraw_fee() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_279_000 picoseconds. - Weight::from_parts(4_493_000, 0) + // Minimum execution time: 2_224_000 picoseconds. + Weight::from_parts(2_335_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule DepositFee (r:0 w:1) - /// Proof Skipped: TFTBridgeModule DepositFee (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::DepositFee` (r:0 w:1) + /// Proof: `TFTBridgeModule::DepositFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_deposit_fee() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_584_000 picoseconds. - Weight::from_parts(4_876_000, 0) + // Minimum execution time: 2_184_000 picoseconds. + Weight::from_parts(2_305_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule WithdrawFee (r:1 w:0) - /// Proof Skipped: TFTBridgeModule WithdrawFee (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule FeeAccount (r:1 w:0) - /// Proof Skipped: TFTBridgeModule FeeAccount (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: TFTBridgeModule BurnTransactionID (r:1 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactionID (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule BurnTransactions (r:0 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::WithdrawFee` (r:1 w:0) + /// Proof: `TFTBridgeModule::WithdrawFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::FeeAccount` (r:1 w:0) + /// Proof: `TFTBridgeModule::FeeAccount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `TFTBridgeModule::BurnTransactionID` (r:1 w:1) + /// Proof: `TFTBridgeModule::BurnTransactionID` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::BurnTransactions` (r:0 w:1) + /// Proof: `TFTBridgeModule::BurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn swap_to_stellar() -> Weight { // Proof Size summary in bytes: - // Measured: `286` + // Measured: `253` // Estimated: `3593` - // Minimum execution time: 74_554_000 picoseconds. - Weight::from_parts(76_009_000, 3593) + // Minimum execution time: 43_151_000 picoseconds. + Weight::from_parts(43_813_000, 3593) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedMintTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule ExecutedMintTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule MintTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule MintTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule DepositFee (r:1 w:0) - /// Proof Skipped: TFTBridgeModule DepositFee (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule FeeAccount (r:1 w:0) - /// Proof Skipped: TFTBridgeModule FeeAccount (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedMintTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::ExecutedMintTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::MintTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::MintTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::DepositFee` (r:1 w:0) + /// Proof: `TFTBridgeModule::DepositFee` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::FeeAccount` (r:1 w:0) + /// Proof: `TFTBridgeModule::FeeAccount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn propose_or_vote_mint_transaction() -> Weight { // Proof Size summary in bytes: - // Measured: `532` - // Estimated: `3997` - // Minimum execution time: 102_293_000 picoseconds. - Weight::from_parts(113_671_000, 3997) + // Measured: `499` + // Estimated: `3964` + // Minimum execution time: 59_853_000 picoseconds. + Weight::from_parts(60_825_000, 3964) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedBurnTransactions (r:1 w:0) - /// Proof Skipped: TFTBridgeModule ExecutedBurnTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule BurnTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedBurnTransactions` (r:1 w:0) + /// Proof: `TFTBridgeModule::ExecutedBurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::BurnTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::BurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn propose_burn_transaction_or_add_sig() -> Weight { // Proof Size summary in bytes: // Measured: `631` // Estimated: `4096` - // Minimum execution time: 41_613_000 picoseconds. - Weight::from_parts(42_948_000, 4096) + // Minimum execution time: 25_599_000 picoseconds. + Weight::from_parts(26_581_000, 4096) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedBurnTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule ExecutedBurnTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule BurnTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule BurnTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedBurnTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::ExecutedBurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::BurnTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::BurnTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_burn_transaction_executed() -> Weight { // Proof Size summary in bytes: // Measured: `571` // Estimated: `4036` - // Minimum execution time: 28_712_000 picoseconds. - Weight::from_parts(29_777_000, 4036) + // Minimum execution time: 18_165_000 picoseconds. + Weight::from_parts(18_625_000, 4036) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule RefundTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule RefundTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::RefundTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::RefundTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_refund_transaction_or_add_sig() -> Weight { // Proof Size summary in bytes: - // Measured: `418` - // Estimated: `3883` - // Minimum execution time: 36_551_000 picoseconds. - Weight::from_parts(37_525_000, 3883) + // Measured: `385` + // Estimated: `3850` + // Minimum execution time: 21_491_000 picoseconds. + Weight::from_parts(22_082_000, 3850) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTBridgeModule Validators (r:1 w:0) - /// Proof Skipped: TFTBridgeModule Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTBridgeModule ExecutedRefundTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule ExecutedRefundTransactions (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTBridgeModule RefundTransactions (r:1 w:1) - /// Proof Skipped: TFTBridgeModule RefundTransactions (max_values: None, max_size: None, mode: Measured) + /// Storage: `TFTBridgeModule::Validators` (r:1 w:0) + /// Proof: `TFTBridgeModule::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::ExecutedRefundTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::ExecutedRefundTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTBridgeModule::RefundTransactions` (r:1 w:1) + /// Proof: `TFTBridgeModule::RefundTransactions` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_refund_transaction_executed() -> Weight { // Proof Size summary in bytes: - // Measured: `593` - // Estimated: `4058` - // Minimum execution time: 34_047_000 picoseconds. - Weight::from_parts(35_316_000, 4058) + // Measured: `560` + // Estimated: `4025` + // Minimum execution time: 18_675_000 picoseconds. + Weight::from_parts(19_096_000, 4025) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } diff --git a/substrate-node/pallets/pallet-tft-price/src/weights.rs b/substrate-node/pallets/pallet-tft-price/src/weights.rs index 60d9de22e..b641c602a 100644 --- a/substrate-node/pallets/pallet-tft-price/src/weights.rs +++ b/substrate-node/pallets/pallet-tft-price/src/weights.rs @@ -2,26 +2,26 @@ //! Autogenerated weights for pallet_tft_price //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-02, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `ragnar`, CPU: `Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ../target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_tft_price +// --wasm-execution=compiled +// --pallet=pallet-tft-price // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output -// ../pallets/pallet-tft-price/src/weights.rs +// ./pallets/pallet-tft-price/src/weights.rs // --template -// ./frame-weight-template.hbs +// ./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -41,54 +41,54 @@ pub trait WeightInfo { /// Weights for pallet_tft_price using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: Session Validators (r:1 w:0) - /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule BufferRange (r:1 w:1) - /// Proof Skipped: TFTPriceModule BufferRange (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule TftPriceHistory (r:2 w:1) - /// Proof Skipped: TFTPriceModule TftPriceHistory (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTPriceModule MinTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MinTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule MaxTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MaxTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule TftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule TftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule LastBlockSet (r:0 w:1) - /// Proof Skipped: TFTPriceModule LastBlockSet (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule AverageTftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule AverageTftPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `Session::Validators` (r:1 w:0) + /// Proof: `Session::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::BufferRange` (r:1 w:1) + /// Proof: `TFTPriceModule::BufferRange` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::TftPriceHistory` (r:2 w:1) + /// Proof: `TFTPriceModule::TftPriceHistory` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MinTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::TftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::TftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::LastBlockSet` (r:0 w:1) + /// Proof: `TFTPriceModule::LastBlockSet` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::AverageTftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::AverageTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_prices() -> Weight { // Proof Size summary in bytes: // Measured: `235` // Estimated: `6175` - // Minimum execution time: 56_848_000 picoseconds. - Weight::from_parts(57_630_000, 6175) + // Minimum execution time: 29_145_000 picoseconds. + Weight::from_parts(29_967_000, 6175) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } - /// Storage: TFTPriceModule MaxTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MaxTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule MinTftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule MinTftPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MinTftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_min_tft_price() -> Weight { // Proof Size summary in bytes: // Measured: `93` // Estimated: `1578` - // Minimum execution time: 8_993_000 picoseconds. - Weight::from_parts(9_197_000, 1578) + // Minimum execution time: 5_059_000 picoseconds. + Weight::from_parts(5_230_000, 1578) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: TFTPriceModule MinTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MinTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule MaxTftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule MaxTftPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTPriceModule::MinTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_max_tft_price() -> Weight { // Proof Size summary in bytes: // Measured: `93` // Estimated: `1578` - // Minimum execution time: 8_902_000 picoseconds. - Weight::from_parts(9_147_000, 1578) + // Minimum execution time: 5_130_000 picoseconds. + Weight::from_parts(5_250_000, 1578) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -96,55 +96,55 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: Session Validators (r:1 w:0) - /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule BufferRange (r:1 w:1) - /// Proof Skipped: TFTPriceModule BufferRange (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule TftPriceHistory (r:2 w:1) - /// Proof Skipped: TFTPriceModule TftPriceHistory (max_values: None, max_size: None, mode: Measured) - /// Storage: TFTPriceModule MinTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MinTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule MaxTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MaxTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule TftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule TftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule LastBlockSet (r:0 w:1) - /// Proof Skipped: TFTPriceModule LastBlockSet (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule AverageTftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule AverageTftPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `Session::Validators` (r:1 w:0) + /// Proof: `Session::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::BufferRange` (r:1 w:1) + /// Proof: `TFTPriceModule::BufferRange` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::TftPriceHistory` (r:2 w:1) + /// Proof: `TFTPriceModule::TftPriceHistory` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MinTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::TftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::TftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::LastBlockSet` (r:0 w:1) + /// Proof: `TFTPriceModule::LastBlockSet` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::AverageTftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::AverageTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_prices() -> Weight { // Proof Size summary in bytes: // Measured: `235` // Estimated: `6175` - // Minimum execution time: 56_848_000 picoseconds. - Weight::from_parts(57_630_000, 6175) + // Minimum execution time: 29_145_000 picoseconds. + Weight::from_parts(29_967_000, 6175) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } - /// Storage: TFTPriceModule MaxTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MaxTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule MinTftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule MinTftPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MinTftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_min_tft_price() -> Weight { // Proof Size summary in bytes: // Measured: `93` // Estimated: `1578` - // Minimum execution time: 8_993_000 picoseconds. - Weight::from_parts(9_197_000, 1578) + // Minimum execution time: 5_059_000 picoseconds. + Weight::from_parts(5_230_000, 1578) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: TFTPriceModule MinTftPrice (r:1 w:0) - /// Proof Skipped: TFTPriceModule MinTftPrice (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: TFTPriceModule MaxTftPrice (r:0 w:1) - /// Proof Skipped: TFTPriceModule MaxTftPrice (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `TFTPriceModule::MinTftPrice` (r:1 w:0) + /// Proof: `TFTPriceModule::MinTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TFTPriceModule::MaxTftPrice` (r:0 w:1) + /// Proof: `TFTPriceModule::MaxTftPrice` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_max_tft_price() -> Weight { // Proof Size summary in bytes: // Measured: `93` // Estimated: `1578` - // Minimum execution time: 8_902_000 picoseconds. - Weight::from_parts(9_147_000, 1578) + // Minimum execution time: 5_130_000 picoseconds. + Weight::from_parts(5_250_000, 1578) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } -} \ No newline at end of file +} diff --git a/substrate-node/pallets/pallet-validator/src/weights.rs b/substrate-node/pallets/pallet-validator/src/weights.rs index b38d6fb12..64a6b5ae5 100644 --- a/substrate-node/pallets/pallet-validator/src/weights.rs +++ b/substrate-node/pallets/pallet-validator/src/weights.rs @@ -2,26 +2,26 @@ //! Autogenerated weights for pallet_validator //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-02, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `ragnar`, CPU: `Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ../target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=pallet_validator +// --wasm-execution=compiled +// --pallet=pallet-validator // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output -// ../pallets/pallet-validator/src/weights.rs +// ./pallets/pallet-validator/src/weights.rs // --template -// ./frame-weight-template.hbs +// ./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -44,95 +44,95 @@ pub trait WeightInfo { /// Weights for pallet_validator using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_validator_request() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `3507` - // Minimum execution time: 20_271_000 picoseconds. - Weight::from_parts(20_728_000, 3507) + // Minimum execution time: 9_799_000 picoseconds. + Weight::from_parts(10_259_000, 3507) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:1) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:1) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn activate_validator_node() -> Weight { // Proof Size summary in bytes: // Measured: `365` // Estimated: `3830` - // Minimum execution time: 45_601_000 picoseconds. - Weight::from_parts(46_151_000, 3830) + // Minimum execution time: 25_248_000 picoseconds. + Weight::from_parts(25_889_000, 3830) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:1) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:1) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn change_validator_node_account() -> Weight { // Proof Size summary in bytes: // Measured: `431` // Estimated: `3896` - // Minimum execution time: 61_641_000 picoseconds. - Weight::from_parts(62_171_000, 3896) + // Minimum execution time: 34_565_000 picoseconds. + Weight::from_parts(35_016_000, 3896) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } - /// Storage: Validator Bonded (r:1 w:1) - /// Proof Skipped: Validator Bonded (max_values: None, max_size: None, mode: Measured) + /// Storage: `Validator::Bonded` (r:1 w:1) + /// Proof: `Validator::Bonded` (`max_values`: None, `max_size`: None, mode: `Measured`) fn bond() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `3507` - // Minimum execution time: 17_991_000 picoseconds. - Weight::from_parts(18_269_000, 3507) + // Minimum execution time: 8_596_000 picoseconds. + Weight::from_parts(9_047_000, 3507) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: CouncilMembership Members (r:1 w:1) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: Council Proposals (r:1 w:0) - /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Council Members (r:0 w:1) - /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Council Prime (r:0 w:1) - /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:1) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:0) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Members` (r:0 w:1) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Prime` (r:0 w:1) + /// Proof: `Council::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn approve_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `558` + // Measured: `494` // Estimated: `4687` - // Minimum execution time: 46_008_000 picoseconds. - Weight::from_parts(46_565_000, 4687) + // Minimum execution time: 25_458_000 picoseconds. + Weight::from_parts(26_180_000, 4687) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } - /// Storage: CouncilMembership Members (r:1 w:1) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: Council Proposals (r:1 w:0) - /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: CouncilMembership Prime (r:1 w:0) - /// Proof: CouncilMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) - /// Storage: Council Members (r:0 w:1) - /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Council Prime (r:0 w:1) - /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:1) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:0) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `CouncilMembership::Prime` (r:1 w:0) + /// Proof: `CouncilMembership::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `Council::Members` (r:0 w:1) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Prime` (r:0 w:1) + /// Proof: `Council::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `622` + // Measured: `558` // Estimated: `4687` - // Minimum execution time: 39_718_000 picoseconds. - Weight::from_parts(40_453_000, 4687) + // Minimum execution time: 22_794_000 picoseconds. + Weight::from_parts(23_364_000, 4687) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -140,96 +140,96 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_validator_request() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `3507` - // Minimum execution time: 20_271_000 picoseconds. - Weight::from_parts(20_728_000, 3507) + // Minimum execution time: 9_799_000 picoseconds. + Weight::from_parts(10_259_000, 3507) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:1) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:1) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn activate_validator_node() -> Weight { // Proof Size summary in bytes: // Measured: `365` // Estimated: `3830` - // Minimum execution time: 45_601_000 picoseconds. - Weight::from_parts(46_151_000, 3830) + // Minimum execution time: 25_248_000 picoseconds. + Weight::from_parts(25_889_000, 3830) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:1) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:1) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn change_validator_node_account() -> Weight { // Proof Size summary in bytes: // Measured: `431` // Estimated: `3896` - // Minimum execution time: 61_641_000 picoseconds. - Weight::from_parts(62_171_000, 3896) + // Minimum execution time: 34_565_000 picoseconds. + Weight::from_parts(35_016_000, 3896) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } - /// Storage: Validator Bonded (r:1 w:1) - /// Proof Skipped: Validator Bonded (max_values: None, max_size: None, mode: Measured) + /// Storage: `Validator::Bonded` (r:1 w:1) + /// Proof: `Validator::Bonded` (`max_values`: None, `max_size`: None, mode: `Measured`) fn bond() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `3507` - // Minimum execution time: 17_991_000 picoseconds. - Weight::from_parts(18_269_000, 3507) + // Minimum execution time: 8_596_000 picoseconds. + Weight::from_parts(9_047_000, 3507) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: CouncilMembership Members (r:1 w:1) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: Council Proposals (r:1 w:0) - /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Council Members (r:0 w:1) - /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Council Prime (r:0 w:1) - /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:1) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:0) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Members` (r:0 w:1) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Prime` (r:0 w:1) + /// Proof: `Council::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn approve_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `558` + // Measured: `494` // Estimated: `4687` - // Minimum execution time: 46_008_000 picoseconds. - Weight::from_parts(46_565_000, 4687) + // Minimum execution time: 25_458_000 picoseconds. + Weight::from_parts(26_180_000, 4687) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } - /// Storage: CouncilMembership Members (r:1 w:1) - /// Proof: CouncilMembership Members (max_values: Some(1), max_size: Some(3202), added: 3697, mode: MaxEncodedLen) - /// Storage: Validator Validator (r:1 w:1) - /// Proof Skipped: Validator Validator (max_values: None, max_size: None, mode: Measured) - /// Storage: Council Proposals (r:1 w:0) - /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: CouncilMembership Prime (r:1 w:0) - /// Proof: CouncilMembership Prime (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) - /// Storage: Council Members (r:0 w:1) - /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Council Prime (r:0 w:1) - /// Proof Skipped: Council Prime (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `CouncilMembership::Members` (r:1 w:1) + /// Proof: `CouncilMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `Validator::Validator` (r:1 w:1) + /// Proof: `Validator::Validator` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:0) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `CouncilMembership::Prime` (r:1 w:0) + /// Proof: `CouncilMembership::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: `Council::Members` (r:0 w:1) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Prime` (r:0 w:1) + /// Proof: `Council::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_validator() -> Weight { // Proof Size summary in bytes: - // Measured: `622` + // Measured: `558` // Estimated: `4687` - // Minimum execution time: 39_718_000 picoseconds. - Weight::from_parts(40_453_000, 4687) + // Minimum execution time: 22_794_000 picoseconds. + Weight::from_parts(23_364_000, 4687) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } -} \ No newline at end of file +} diff --git a/substrate-node/pallets/substrate-validator-set/src/weights.rs b/substrate-node/pallets/substrate-validator-set/src/weights.rs index 86375fd8a..5a6a896af 100644 --- a/substrate-node/pallets/substrate-validator-set/src/weights.rs +++ b/substrate-node/pallets/substrate-validator-set/src/weights.rs @@ -1,27 +1,27 @@ -//! Autogenerated weights for validatorset +//! Autogenerated weights for substrate_validator_set //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-02, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-08-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `ragnar`, CPU: `Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `66e77d0da08f`, CPU: `AMD Ryzen 7 5800X 8-Core Processor` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ../target/release/tfchain +// ./target/production/tfchain // benchmark // pallet // --chain=dev -// --pallet=validatorset +// --wasm-execution=compiled +// --pallet=substrate-validator-set // --extrinsic=* // --steps=50 // --repeat=20 -// --execution=wasm // --heap-pages=409 // --output -// ../pallets/substrate-validator-set/src/weights.rs +// ./pallets/substrate-validator-set/src/weights.rs // --template -// ./frame-weight-template.hbs +// ./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -31,52 +31,52 @@ use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; use core::marker::PhantomData; -/// Weight functions needed for validatorset. +/// Weight functions needed for substrate_validator_set. pub trait WeightInfo { fn add_validator() -> Weight; fn remove_validator() -> Weight; fn add_validator_again() -> Weight; } -/// Weights for validatorset using the Substrate node and recommended hardware. +/// Weights for substrate_validator_set using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:1) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:1) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_validator() -> Weight { // Proof Size summary in bytes: // Measured: `139` // Estimated: `1624` - // Minimum execution time: 24_614_000 picoseconds. - Weight::from_parts(25_225_000, 1624) + // Minimum execution time: 14_217_000 picoseconds. + Weight::from_parts(14_588_000, 1624) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:0) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:0) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_validator() -> Weight { // Proof Size summary in bytes: // Measured: `205` // Estimated: `1690` - // Minimum execution time: 20_152_000 picoseconds. - Weight::from_parts(20_484_000, 1690) + // Minimum execution time: 11_501_000 picoseconds. + Weight::from_parts(11_812_000, 1690) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } - /// Storage: ValidatorSet ApprovedValidators (r:1 w:0) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:0) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_validator_again() -> Weight { // Proof Size summary in bytes: // Measured: `172` // Estimated: `1657` - // Minimum execution time: 21_948_000 picoseconds. - Weight::from_parts(22_780_000, 1657) + // Minimum execution time: 12_654_000 picoseconds. + Weight::from_parts(13_095_000, 1657) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -84,43 +84,43 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:1) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:1) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_validator() -> Weight { // Proof Size summary in bytes: // Measured: `139` // Estimated: `1624` - // Minimum execution time: 24_614_000 picoseconds. - Weight::from_parts(25_225_000, 1624) + // Minimum execution time: 14_217_000 picoseconds. + Weight::from_parts(14_588_000, 1624) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet ApprovedValidators (r:1 w:0) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:0) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn remove_validator() -> Weight { // Proof Size summary in bytes: // Measured: `205` // Estimated: `1690` - // Minimum execution time: 20_152_000 picoseconds. - Weight::from_parts(20_484_000, 1690) + // Minimum execution time: 11_501_000 picoseconds. + Weight::from_parts(11_812_000, 1690) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } - /// Storage: ValidatorSet ApprovedValidators (r:1 w:0) - /// Proof Skipped: ValidatorSet ApprovedValidators (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ValidatorSet Validators (r:1 w:1) - /// Proof Skipped: ValidatorSet Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: `ValidatorSet::ApprovedValidators` (r:1 w:0) + /// Proof: `ValidatorSet::ApprovedValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ValidatorSet::Validators` (r:1 w:1) + /// Proof: `ValidatorSet::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn add_validator_again() -> Weight { // Proof Size summary in bytes: // Measured: `172` // Estimated: `1657` - // Minimum execution time: 21_948_000 picoseconds. - Weight::from_parts(22_780_000, 1657) + // Minimum execution time: 12_654_000 picoseconds. + Weight::from_parts(13_095_000, 1657) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } -} \ No newline at end of file +} diff --git a/substrate-node/runtime/src/lib.rs b/substrate-node/runtime/src/lib.rs index 8a2f7f85b..f61b74ab6 100644 --- a/substrate-node/runtime/src/lib.rs +++ b/substrate-node/runtime/src/lib.rs @@ -31,7 +31,7 @@ use sp_version::NativeVersion; use sp_version::RuntimeVersion; use tfchain_support::{ constants::time::*, - traits::{ChangeNode, PublicIpModifier}, + traits::{ChangeNode, NodeActiveContracts, PublicIpModifier}, types::PublicIP, }; @@ -155,7 +155,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("substrate-threefold"), impl_name: create_runtime_str!("substrate-threefold"), authoring_version: 1, - spec_version: 146, + spec_version: 152, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 2, @@ -335,6 +335,10 @@ impl ChangeNode for NodeChanged { SmartContractModule::node_deleted(node); Dao::node_deleted(node); } + + fn node_power_state_changed(node: &TfgridNode) { + SmartContractModule::node_power_state_changed(node); + } } pub struct PublicIpModifierType; @@ -344,6 +348,13 @@ impl PublicIpModifier for PublicIpModifierType { } } +pub struct NodeActiveContractsType; +impl NodeActiveContracts for NodeActiveContractsType { + fn node_has_no_active_contracts(node_id: u32) -> bool { + SmartContractModule::node_has_no_active_contracts(node_id) + } +} + parameter_types! { pub const MaxFarmNameLength: u32 = 40; pub const MaxInterfaceIpsLength: u32 = 10; @@ -358,6 +369,7 @@ impl pallet_tfgrid::Config for Runtime { type WeightInfo = pallet_tfgrid::weights::SubstrateWeight; type NodeChanged = NodeChanged; type PublicIpModifier = SmartContractModule; + type NodeActiveContracts = NodeActiveContractsType; type TermsAndConditions = pallet_tfgrid::terms_cond::TermsAndConditions; type MaxFarmNameLength = MaxFarmNameLength; type MaxFarmPublicIps = MaxFarmPublicIps; @@ -402,7 +414,6 @@ impl pallet_smart_contract::Config for Runtime { type DistributionFrequency = DistributionFrequency; type GracePeriod = GracePeriod; type WeightInfo = pallet_smart_contract::weights::SubstrateWeight; - type NodeChanged = NodeChanged; type PublicIpModifier = PublicIpModifierType; type AuthorityId = pallet_smart_contract::crypto::AuthId; type Call = RuntimeCall; @@ -464,6 +475,7 @@ impl substrate_validator_set::Config for Runtime { parameter_types! { pub const DaoMotionDuration: BlockNumber = 7 * DAYS; pub const MinVetos: u32 = 3; + pub const DaoMotionMinThreshold: u32 = 5; } impl pallet_dao::Config for Runtime { @@ -471,8 +483,8 @@ impl pallet_dao::Config for Runtime { type CouncilOrigin = EnsureRootOrCouncilApproval; type Proposal = RuntimeCall; type MotionDuration = DaoMotionDuration; + type MotionMinThreshold = DaoMotionMinThreshold; type Tfgrid = TfgridModule; - type NodeChanged = NodeChanged; type WeightInfo = pallet_dao::weights::SubstrateWeight; type MinVetos = MinVetos; } @@ -544,6 +556,7 @@ where frame_system::CheckNonce::::from(index), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(tip), + pallet_smart_contract::types::ContractIdProvides::::new(), ); #[cfg_attr(not(feature = "std"), allow(unused_variables))] @@ -668,6 +681,7 @@ type EnsureRootOrCouncilApproval = EitherOfDiverse< impl pallet_runtime_upgrade::Config for Runtime { type SetCodeOrigin = EnsureRootOrCouncilApproval; + type WeightInfo = (); } pub struct AuraAccountAdapter; @@ -760,6 +774,7 @@ pub type SignedExtra = ( frame_system::CheckNonce, frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, + pallet_smart_contract::types::ContractIdProvides::, ); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = @@ -779,8 +794,7 @@ pub type Executive = frame_executive::Executive< // All migrations executed on runtime upgrade as a nested tuple of types implementing // `OnRuntimeUpgrade`. type Migrations = ( - pallet_tfgrid::migrations::v17::FixFarmPublicIps, - pallet_tft_bridge::migrations::v2::MigrateBurnTransactionsV2, + pallet_smart_contract::migrations::v12::MigrateContractLockToContractPaymentState, ); // follows Substrate's non destructive way of eliminating otherwise required @@ -798,7 +812,7 @@ mod benches { [pallet_burning, BurningModule] [pallet_dao, Dao] [pallet_kvstore, TFKVStore] - [validatorset, ValidatorSet] + [substrate_validator_set, ValidatorSet] [pallet_validator, Validator] [pallet_tft_bridge, TFTBridgeModule] // Substrate diff --git a/substrate-node/runtime/src/migrations/mod.rs b/substrate-node/runtime/src/migrations/mod.rs index 5344a1c6c..1aadb54b3 100644 --- a/substrate-node/runtime/src/migrations/mod.rs +++ b/substrate-node/runtime/src/migrations/mod.rs @@ -1,2 +1,3 @@ +pub mod remove_sudo; pub mod tfgrid_v15_smart_contract_v8; -pub mod remove_sudo; \ No newline at end of file +pub mod update_storage_version; diff --git a/substrate-node/runtime/src/migrations/update_storage_version.rs b/substrate-node/runtime/src/migrations/update_storage_version.rs new file mode 100644 index 000000000..b994689ac --- /dev/null +++ b/substrate-node/runtime/src/migrations/update_storage_version.rs @@ -0,0 +1,36 @@ +use frame_support::pallet_prelude::{PalletInfoAccess, PhantomData}; + +use frame_support::{ + pallet_prelude::StorageVersion, + traits::{GetStorageVersion, OnRuntimeUpgrade}, + weights::Weight, +}; + +pub struct PalletBalancesToV1(PhantomData); +impl OnRuntimeUpgrade for PalletBalancesToV1 { + fn on_runtime_upgrade() -> Weight { + // Remove the old `StorageVersion` type. + frame_support::storage::unhashed::kill(&frame_support::storage::storage_prefix( + pallet_balances::Pallet::::name().as_bytes(), + "StorageVersion".as_bytes(), + )); + + StorageVersion::new(1).put::(); + + Weight::from_all(1) + } +} + +pub struct PalletSessionToV1(PhantomData); +impl OnRuntimeUpgrade for PalletSessionToV1 { + fn on_runtime_upgrade() -> Weight { + let on_chain_storage_version = + ::on_chain_storage_version(); + + if on_chain_storage_version < 1 { + return pallet_session::migrations::v1::migrate::(); + } + + Weight::zero() + } +} diff --git a/substrate-node/support/src/resources.rs b/substrate-node/support/src/resources.rs index 2dd9d8545..fb4081f2f 100644 --- a/substrate-node/support/src/resources.rs +++ b/substrate-node/support/src/resources.rs @@ -15,6 +15,7 @@ pub struct Resources { pub const ONE_THOUSAND: u128 = 1_000; pub const GIGABYTE: u128 = 1024 * 1024 * 1024; +pub const MINIMUM_STORAGE_CAPACITY: u128 = 100 * GIGABYTE; impl Resources { pub fn empty() -> Resources { @@ -35,13 +36,18 @@ impl Resources { } pub fn validate_hru(&self) -> bool { - // No HRU minimun requirement - true + // HRU minimum of 100 GB + self.hru as u128 >= MINIMUM_STORAGE_CAPACITY } pub fn validate_sru(&self) -> bool { // SRU minimum of 100 GB - self.sru as u128 >= 100 * GIGABYTE + self.sru as u128 >= MINIMUM_STORAGE_CAPACITY + } + + pub fn validate_storage(&self) -> bool { + // At least one type of storage (HDD or SSD) must have minimum capacity size + self.validate_hru() || self.validate_sru() } pub fn validate_cru(&self) -> bool { diff --git a/substrate-node/support/src/tests.rs b/substrate-node/support/src/tests.rs index 7b9147f43..f7bb08c94 100644 --- a/substrate-node/support/src/tests.rs +++ b/substrate-node/support/src/tests.rs @@ -1,4 +1,4 @@ -use crate::resources::{Resources, GIGABYTE}; +use crate::resources::{Resources, GIGABYTE, MINIMUM_STORAGE_CAPACITY}; use crate::types::{PublicIpError, IP4, IP6}; use frame_support::{assert_err, assert_ok, storage::bounded_vec::BoundedVec}; @@ -93,6 +93,36 @@ fn test_calc_su_4() { assert_eq!(su, 3); } +#[test] +fn test_validate_storage() { + // SSD only node + let resources = Resources { + hru: 0, + cru: 0, + mru: 0, + sru: MINIMUM_STORAGE_CAPACITY as u64, + }; + assert_eq!(resources.validate_storage(), true); + + // HDD only node + let resources = Resources { + hru: MINIMUM_STORAGE_CAPACITY as u64, + cru: 0, + mru: 0, + sru: 0, + }; + assert_eq!(resources.validate_storage(), true); + + // Storage capacities are both under minimum requirement + let resources = Resources { + hru: MINIMUM_STORAGE_CAPACITY as u64 - 1, + cru: 0, + mru: 0, + sru: MINIMUM_STORAGE_CAPACITY as u64 - 1, + }; + assert_eq!(resources.validate_storage(), false); +} + #[test] fn test_resources_diff() { let resources = Resources { diff --git a/substrate-node/support/src/traits.rs b/substrate-node/support/src/traits.rs index c5907fdca..0050c4bb2 100644 --- a/substrate-node/support/src/traits.rs +++ b/substrate-node/support/src/traits.rs @@ -9,8 +9,13 @@ pub trait ChangeNode { new_node: &super::types::Node, ); fn node_deleted(node: &super::types::Node); + fn node_power_state_changed(node: &super::types::Node); } pub trait PublicIpModifier { fn ip_removed(ip: &PublicIP); } + +pub trait NodeActiveContracts { + fn node_has_no_active_contracts(node_id: u32) -> bool; +} diff --git a/substrate-node/support/src/types.rs b/substrate-node/support/src/types.rs index 85404b465..e8837589f 100644 --- a/substrate-node/support/src/types.rs +++ b/substrate-node/support/src/types.rs @@ -238,8 +238,16 @@ pub struct NodePower { } impl NodePower { - pub fn is_down(&self) -> bool { - matches!(self.state, PowerState::Down(_)) || matches!(self.target, Power::Down) + pub fn is_standby(&self) -> bool { + matches!(self.state, PowerState::Down(_)) + } + + pub fn is_switched_to_standby(&self) -> bool { + matches!(self.target, Power::Down) + } + + pub fn is_standby_phase(&self) -> bool { + self.is_standby() || self.is_switched_to_standby() } } diff --git a/substrate-node/tests/integration_tests.robot b/substrate-node/tests/integration_tests.robot index d138d64a9..5ceb4c7ca 100644 --- a/substrate-node/tests/integration_tests.robot +++ b/substrate-node/tests/integration_tests.robot @@ -446,6 +446,8 @@ Test Solution Provider # Setup Setup Predefined Account who=Alice Setup Predefined Account who=Bob + Setup Predefined Account who=Charlie + Setup Predefined Account who=Dave Create Farm name=alice_farm Create Node farm_id=${1} hru=${1024} sru=${512} cru=${8} mru=${16} longitude=2.17403 latitude=41.40338 country=Belgium city=Ghent @@ -464,23 +466,6 @@ Test Solution Provider Should Not Be Equal ${solution_provider} ${None} Should Be Equal ${solution_provider}[approved] ${True} - ${balance_charlie_before} = Balance Data who=Charlie - ${balance_dave_before} = Balance Data who=Dave - # Bob will be using the node: let's create a node contract in his name - Create Node Contract node_id=${1} port=${9945} who=Bob solution_provider_id=${1} - Report Contract Resources contract_id=${1} hru=${20} sru=${20} cru=${2} mru=${4} - Add Nru Reports contract_id=${1} nru=${3} - # Wait 6 blocks: after 5 blocks Bob should be billed - Wait X Blocks ${6} - # Cancel the contract so that the bill is distributed and so that the providers get their part - Cancel Node Contract contract_id=${1} who=Bob - - # Verification: both providers should have received their part - ${balance_charlie_after} = Balance Data who=Charlie - ${balance_dave_after} = Balance Data who=Dave - Ensure Account Balance Increased ${balance_charlie_before} ${balance_charlie_after} - Ensure Account Balance Increased ${balance_dave_before} ${balance_dave_after} - Tear Down Multi Node Network Test Client Go integration tests diff --git a/tools/fork-off-substrate/README.md b/tools/fork-off-substrate/README.md index 6c3ebaef3..340a06ee4 100644 --- a/tools/fork-off-substrate/README.md +++ b/tools/fork-off-substrate/README.md @@ -62,10 +62,10 @@ The script can be tweaked and configured using various environment variables - | QUICK_MODE | If set, it parallelizes the data download from the RPC endpoint | `NULL` | ## Network list -- Devnet: 10.10.0.151 -- QAnet: 10.10.0.152 -- Testnet: 10.10.0.22 -- Mainnet: 10.10.0.19 +- Devnet: 10.10.0.40 +- QAnet: 10.10.0.42 +- Testnet: 10.10.0.55 +- Mainnet: 10.10.0.56 ## Read more diff --git a/tools/fork-off-substrate/package.json b/tools/fork-off-substrate/package.json index 4b8a8e171..98a0e7e7d 100644 --- a/tools/fork-off-substrate/package.json +++ b/tools/fork-off-substrate/package.json @@ -1,6 +1,6 @@ { "name": "fork-off-substrate", - "version": "2.6.0-rc1", + "version": "2.9.0", "description": "This script allows bootstrapping a new substrate chain with the current state of a live chain", "main": "index.js", "scripts": { @@ -29,4 +29,4 @@ "cli-progress": "^3.9.1", "dotenv": "^10.0.0" } -} \ No newline at end of file +}