Skip to content

Remove async-std dependency from Polkadot SDK #10874

@rockbmb

Description

@rockbmb

async-std has been deprecated as of March 2025, with its maintainers recommending migration to smol.
See

Since tokio is already a workspace dependency, migrating to it is an option.

Current usage

In the Polkadot SDK workspace, the following 7 crates depend on async-std:

  • equivocation-detector
  • finality-relay
  • messages-relay
  • parachains-relay
  • relay-substrate-client
  • relay-utils
  • substrate-relay-helper
$ cargo tree -i async-std --workspace
async-std v1.12.0
├── equivocation-detector v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/equivocation)
│   └── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)
├── finality-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/finality)
│   ├── equivocation-detector v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/equivocation) (*)
│   ├── messages-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/messages)
│   │   └── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)
│   ├── relay-substrate-client v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/client-substrate)
│   │   ├── parachains-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/parachains)
│   │   │   └── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)
│   │   └── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)
│   │   [dev-dependencies]
│   │   ├── parachains-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/parachains) (*)
│   │   └── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)
│   └── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)
├── messages-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/messages) (*)
├── parachains-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/parachains) (*)
├── relay-substrate-client v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/client-substrate) (*)
├── relay-utils v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/utils)
│   ├── equivocation-detector v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/equivocation) (*)
│   ├── finality-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/finality) (*)
│   ├── messages-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/messages) (*)
│   ├── parachains-relay v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/parachains) (*)
│   ├── relay-substrate-client v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/client-substrate) (*)
│   └── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)
└── substrate-relay-helper v0.1.0 (/home/ubuntu/Work/polkadot-sdk/bridges/relays/lib-substrate-relay)

Migration notes

The codebase only uses a few primitives from async-std, all of which have direct equivalents in tokio:

async-std tokio/std replacement
async_std::sync::Arc std::sync::Arc
async_std::sync::RwLock tokio::sync::RwLock
async_std::sync::Mutex tokio::sync::Mutex
async_std::task::sleep tokio::time::sleep
async_std::task::block_on tokio::runtime::Runtime::new().unwrap().block_on
#[async_std::test] #[tokio::test]

Example migration from parachains-relay:

- use async_std::sync::{Arc, Mutex};
+ use std::sync::Arc;
+ use tokio::sync::Mutex;

- async_std::task::sleep(min_block_interval).fuse()
+ tokio::time::sleep(min_block_interval).fuse()

- #[async_std::test]
+ #[tokio::test]

Metadata

Metadata

Assignees

No one assigned

    Labels

    D0-easyCan be fixed primarily by duplicating and adapting code by an intermediate coder.T13-deprecationThe current issue/pr is, or should be, part of a deprecation process.dependenciesPull requests that update a dependency file

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions