Files
pezkuwi-subxt/examples/parachain-example
Tadeo Hepperle 388ebac993 Macro error messages validating metadata and making suggestions (#1339)
* integrate scale-typegen, remove types mod

* reintroduce default substitutes and derives

* support runtime_types only again

* generating polkadot.rs ok

* update scale-typegen to discrete error types

* scale-typegen-api-changes

* add note about UncheckedExtrinsic in default substitutes

* add resursive attributes and derives

* adjust example where Clone bound recursive

* move scale-typegen dependency to workspace

* expose default typegen settings

* lightclient: Fix wasm socket closure called after being dropped (#1289)

* lightclient: Close wasm socket while dropping from connecting state

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* lightclient: Construct one time only closures

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* testing: Enable console logs for lightclient WASM testing

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* lightclient: Separate wakes and check connectivity on poll_read

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* lightclient: Close the socket depending on internal state

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* Revert "lightclient: Separate wakes and check connectivity on poll_read"

This reverts commit 866094001d4c0b119a80ed681a74b323f74eae1b.

* lightclient: Return pending if socket is opening from poll_read

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* lightclient: Close the socket on `poll_close`

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* lightclient: Reset closures on Drop to avoid recursive invokation

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* lightclient: Close the socket if not already closing

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

---------

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* workflows: Install rustup component for building substrate (#1295)

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Command to fetch chainSpec and optimise its size (#1278)

* cli: Add chainSpec command

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli/chainSpec: Move to dedicated module

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Compute the state root hash

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Remove code substitutes

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* artifacts: Update polkadot.json

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* scripts: Generate the chain spec

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Remove testing artifacts

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Fix clippy

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Apply rustfmt

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Introduce feature flag for smoldot dependency

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* cli: Rename chain-spec to chain-spec-pruning

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* scripts: Update chain-spec command

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

---------

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>

* remove comments and unused args

* Update substrate- and signer-related dependencies (#1297)

* update crypto dependencies, adjust keypair

* add scale_info::TypeInfo derive in some places

* add multi signature derive

* fix lock file

* fix lock file again :|

* adjust to new interface in scale-typegen

* use released scale typegen

* reintroduce type aliases

* introduce type aliases again using scale-typegen

* cargo fmt and clippy

* reconcile changes with master branch

* update polkadot.rs

* bump scale-typgen to fix substitution

* subxt macro, helpful error messages

* adjust ui tests

* fix lock file

* format

* Update macro/src/lib.rs

Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com>

* incorperate nits

* update Cargo.lock to avoid compatibility issues

---------

Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com>
Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com>
2024-01-23 11:44:36 +01:00
..
2023-10-30 17:08:14 +01:00

parachain-example

This example showcases working with Subxt and Zombienet to try out connecting to a locally deployed parachain, here "Statemint", also known as "Asset Hub".

Running the example

1. Install zombienet

Zombienet is a tool for quickly spinning up a (local) blockchain network. We will use it to start up a local Asset Hub for us.

Please follow the install guide in the zombienet github repo to install it.

2. polkadot

We need a relay chain. Build the polkadot binary from the polkadot github repo and install it in your path:

git clone https://github.com/paritytech/polkadot.git
cd polkadot
cargo install --path .

3. polkadot-parachain

The Asset Hub is part of the cumulus github repo, an SDK for developing parachains. Building the cumulus workspace produces a binary called polkadot-parachain which can be used to run Asset Hub nodes.

git clone https://github.com/paritytech/cumulus.git
cd cumulus
cargo install --path polkadot-parachain

4. Run the parachain locally

With these binaries installed, Zombienet can now get the parachain running locally from a configuration file, asset-hub-zombienet.toml in this case. We need to have at least 2 validator nodes running via the polkadot binary, and an Asset Hub node running via the polkadot-parachain binary. Zombienet starts these up, and gets the parachain registered with the validator nodes for us. To do that, run:

zombienet -p native spawn asset-hub-zombienet.toml

Zombienet uses Kubernetes by default, but we can use it without Kubernetes by providing the -p native flag.

You might have noticed that we use chain = "rococo-local" in the asset-hub-zombienet.toml file for the relay chain. This is just to make the epoch time shorter and should have no effect on your interactions with the parachain. Polkadot / Kusama / Rococo have different epoch times of 24h / 2h / 2min respectively.

5. Run the example

The parachain is only registered after the first epoch. So after the previous step, we need to wait 2 minutes until the parachain becomes interactive and produces blocks. At this point, we can run:

cargo run --bin parachain-example

To run our example code.

Dev notes

We can obtain the metadata for Statemint via the subxt cli tool, like so:

subxt metadata  --url wss://polkadot-asset-hub-rpc.polkadot.io:443 > statemint_metadata.scale

It is important to explicitly specify the port as 443.

One way to find a suitable URL to obtain this from is by looking through the sidebar on Polkadot.js to find the Asset Hub entry, and seeing which RPC node URLs it uses.