Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Statemint-v6.0.1 Release Checklist #820

Closed
19 tasks done
github-actions bot opened this issue Dec 1, 2021 · 5 comments
Closed
19 tasks done

Statemint-v6.0.1 Release Checklist #820

github-actions bot opened this issue Dec 1, 2021 · 5 comments
Labels
T7-system_parachains This PR/Issue is related to System Parachains.

Comments

@github-actions
Copy link

github-actions bot commented Dec 1, 2021

Release Checklist

Release checklist for the initial Statemint release based on the Statemine 6.0.1 release.

Runtime Releases

These checks should be performed on the codebase.

  • Verify spec_version has been incremented since the
    last release for any native runtimes from any existing use on public
    (non-private/test) networks.
  • Verify previously completed migrations are
    removed for any public (non-private/test) networks.
  • Verify pallet and extrinsic ordering as well as SignedExtensions have stayed
    the same. Bump transaction_version if not.
  • Verify new extrinsics have been correctly whitelisted/blacklisted for
    proxy filters.
  • Verify benchmarks have been updated for any modified
    runtime logic.
    • Verify the weights are up-to-date.
  • Verify that the various pieces of XCM config are sane.

The following checks can be performed after we have forked off to the release-
candidate branch or started an additional release candidate branch (rc-2, rc-3, etc)

  • Verify new migrations complete successfully, and the
    runtime state is correctly updated for any public (non-private/test)
    networks.
  • Do integration tests.
  • Push runtime upgrade to Westmint and verify network stability.

All Releases

Initial Statemint Release

On top of the regular runtime release process, this release will also need to cover the following points:

  • genesis configuration for Statemint @apopiak
  • determine setStorage call for governance to set the initial state Statemint should have after the upgrade (replacing the usual genesis process, but making use of the genesis config) @apopiak
  • create adusted chain spec that will be used for syncing Statemint @apopiak
  • test the upgrade process (including setStorage calls) @apopiak

Notes

Burn In

Ensure that Parity DevOps has run the new release on Westmint and Statemine collators for 12h prior to publishing the release.

Build Artifacts

Add any necessary assets to the release. They should include:

  • Linux binary
  • GPG signature of the Linux binary
  • SHA256 of binary
  • Source code
  • Wasm binaries of any runtimes

Release notes

The release notes should list:

  • The priority of the release (i.e., how quickly users should upgrade) - this is
    based on the max priority of any client changes.
  • Which native runtimes and their versions are included
  • The proposal hashes of the runtimes as built with
    srtool
  • Any changes in this release that are still awaiting audit

The release notes may also list:

  • Free text at the beginning of the notes mentioning anything important
    regarding this release
  • Notable changes separated into sections.

Spec Version

A runtime upgrade must bump the spec number. This may follow a pattern with the
client release (e.g. runtime v12 corresponds to v0.8.12, even if the current
runtime is not v11).

Runtime version bump between RCs

The clients need to be aware of runtime changes. However, we do not want to bump the
spec_version for every single release candidate. Instead, we can bump the impl field of the version
to signal the change to the client.

Old Migrations Removed

Previous on_runtime_upgrade functions from old upgrades should be removed.

New Migrations

Ensure that any migrations that are required due to storage or logic changes
are included in the on_runtime_upgrade function of the appropriate pallets.

Extrinsic Ordering & Storage

Offline signing libraries depend on a consistent ordering of call indices and
functions. Compare the metadata of the current and new runtimes and ensure that
the module index, call index tuples map to the same set of functions. It also checks if there have been any changes in storage. In case of a breaking change, increase transaction_version.

To verify the order has not changed, manually start the following Github Action. It takes around a minute to run and will produce the report as artifact you need to manually check.

To run it, in the Run Workflow dropdown:

  1. Use workflow from: to ignore, leave master as default
  2. The WebSocket url of the reference node:
    • Statemine: wss://kusama-statemine-rpc.paritytech.net
    • Westmint: wss://westmint-rpc.polkadot.io
  3. A url to a Linux binary for the node containing the runtime to test: Paste the URL of the latest release-candidate binary from the draft-release on Github. The binary has to previously be uploaded to S3 (Github url link to the binary is constantly changing)
  4. The name of the chain under test. Usually, you would pass a local chain:
    • Statemine: statemine-local
    • Westmint: westmint-local
  5. Click Run workflow

When the workflow is done, click on it and download the zip artifact, inside you'll find an output.txt file. The things to look for in the output are lines like:

  • [Identity] idx 28 -> 25 (calls 15) - indicates the index for Identity has changed
  • [+] Society, Recovery - indicates the new version includes 2 additional modules/pallets.
  • If no indices have changed, every modules line should look something like [Identity] idx 25 (calls 15)

Note: Adding new functions to the runtime does not constitute a breaking change
as long as the indexes did not change.

Note: Extrinsic function signatures changes (adding/removing & ordering arguments) are not caught by the job, so those changes should be reviewed "manually"

Proxy Filtering

The runtime contains proxy filters that map proxy types to allowable calls. If
the new runtime contains any new calls, verify that the proxy filters are up to
date to include them.

Benchmarks

Until paritytech/polkadot#631 is done, running the benchmarks is a manual process:

  1. Connect to the bechmarking machine
  2. Make sure no one else is using the machine with htop check
  3. Pull in the branch of Cumulus that has the version of Statemine you want to release
  4. Recompile cargo build --release --features runtime-benchmarks
  5. From the root directory run nohup ./scripts/benchmarks.sh & (it will take quite a few hours)
  6. Checkout in your local machine to the branch of cumulus that has the version of Statemine you want to release
  7. scp from the host to your local machine the weights for Statemine, Westmint and Statemint you'll find in:
    • /polkadot-parachains/statemine/src/weights
    • /polkadot-parachains/westmint/src/weights
    • /polkadot-parachains/statemint/src/weights
  8. Commit the changes in your local and create a PR
@apopiak apopiak changed the title Cumulus statemint-v6.0.1 Release checklist Statemint-v6.0.1 Release checklist Dec 1, 2021
@apopiak apopiak changed the title Statemint-v6.0.1 Release checklist Statemint-v6.0.1 Release Checklist Dec 2, 2021
@apopiak
Copy link
Contributor

apopiak commented Dec 2, 2021

Marking some things as done already and adding a note for context:

  • Verify spec_version has been incremented since the
    last release for any native runtimes from any existing use on public
    (non-private/test) networks.

    • Initial release and based on 601 Statemine release --> already bumped.
  • Verify previously completed migrations are
    removed for any public (non-private/test) networks.

    • Initial release --> no migrations to remove.
  • Verify pallet and extrinsic ordering as well as SignedExtensions have stayed
    the same. Bump transaction_version if not.

    • Takes on the same transaction_version as Statemine.
  • Verify new extrinsics have been correctly whitelisted/blacklisted for
    proxy filters.

  • Check that a draft release has been created at
    https://github.com/paritytech/cumulus/releases with relevant release
    notes
    .

    • Run as part of automation.
  • Genesis Config

    • genesis configuration for Statemint @apopiak
    • determine setStorage call for governance to set the initial state Statemint should have after the upgrade (replacing the usual genesis process, but making use of the genesis config) @apopiak
    • create adusted chain spec that will be used for syncing Statemint @apopiak
    • done in CLI refactoring, fixes polkadot#817

@apopiak
Copy link
Contributor

apopiak commented Dec 2, 2021

@apopiak
Copy link
Contributor

apopiak commented Dec 3, 2021

Test Report RC1

Post Upgrade Checks

  • ✔️ polkadotXCM -> safeXcmVersion : Expected 2
  • ✔️ parachainInfo -> parachainId : Expected 1000

Integration Testing Report

  • ✔️ system.remarkWithEvent succeeds
  • ✔️ balances.transferKeepAlive (after teleport from Polkadot relay)

Assets

  • ✔️ Permissionless asset creation fails
  • ✔️ Polkadot -> xcmPallet -> send ( assets.forceCreate )
  • ✔️ assets.mint
  • ✔️ assets.setMetadata

Uniques

  • ✔️ Permissionless asset creation fails
  • ✔️ Polkadot -> xcmPallet -> send ( uniques.forceCreate )
  • ✔️ uniques.mint

Teleports

Asset Tx Payment

@apopiak
Copy link
Contributor

apopiak commented Dec 10, 2021

Test Report RC4

For tag statemint-v6.0.1-rc4 at commit 4292ce5b87d708d9d664bc157816f808ea7c9d2c.

Setup

polkadot-collator build-spec --chain statemint-dev --raw > polkadot-parachains/res/statemint_dev.json
./scripts/generate_genesis_value.sh statemint_dev

Tests

Genesis

  • ✔️ Genesis values are still the same (compared to previous RC)
    • ran the following in the cumulus repo:
polkadot-collator  build-spec --chain statemint-genesis --raw > polkadot-parachains/res/statemint_genesis.json
./scripts/generate_genesis_value.sh statemint_genesis

Post Upgrade Checks

  • ✔️ producing blocks
  • ✔️ polkadotXCM -> safeXcmVersion : Expected 2
  • ✔️ parachainInfo -> parachainId : Expected 1000

Integration Testing Report

Teleports

  • ✔️ Teleport Polkadot -> Statemint succeeds
    • Note, though, that Polkadot 0.9.14 will not allow teleports, this is just to allow for other tests on Statemint.
  • ✔️ Teleport Statemint -> Polkadot should fail (polkadotXcm.Filtered)

General Chain

  • ✔️ system.remarkWithEvent succeeds (after teleport of funds for fees from Polkadot relay)
  • ✔️ balances.transferKeepAlive (after teleport from Polkadot relay)

Assets

  • ✔️ Permissionless asset creation should fail (BadOrigin)

Uniques

  • ✔️ Permissionless asset creation should fail (BadOrigin)

Other Remarks

It does not make sense to test the functionality in-depth as it will be disabled/inaccessible (and has been tested in the previous RC1 test).

@apopiak apopiak added this to To do in Common Good Parachains via automation Dec 10, 2021
@apopiak apopiak added the T7-system_parachains This PR/Issue is related to System Parachains. label Dec 10, 2021
@apopiak
Copy link
Contributor

apopiak commented Dec 14, 2021

@apopiak apopiak closed this as completed Dec 14, 2021
Common Good Parachains automation moved this from To do to Done Dec 14, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
T7-system_parachains This PR/Issue is related to System Parachains.
Development

No branches or pull requests

1 participant