walletconnect-client

Crates.iowalletconnect-client
lib.rswalletconnect-client
version0.2.0
sourcesrc
created_at2024-02-13 11:22:43.350125
updated_at2024-06-21 08:02:22.073149
descriptionWASM library for walletconnect dApp connections
homepagehttps://quay.rs/
repositoryhttps://github.com/quay-rs/walletconnect-client
max_upload_size
id1138414
size126,727
Przemysław Olszewski (day01)

documentation

https://docs.rs/walletconnect-client

README

Quickstart

Add this to your Cargo.toml:

[dependencies]
walletconnect-client = "0.1"

And this to your code:

use walletconnect_client::prelude::*;

To initiate walletconnect connection with the wallet, set up your dApps metadata:

use url::Url;
use walletconnect_client::prelude::*;

let dapp = Metadata::from("Your dApp's name", 
                          "Your dApp's short description", 
                          Url::parse("https://url.of.your.dapp").expect("Wrong URL"), 
                          vec!["https://url.to.your.dapps.icon".to_string()]);

...and once you'll get your projects id from WalletConnect portal, you can simply create the connection:

use walletconnect_client::prelude::*;

const PROJECT_ID: &str = "myprojectidfromwalletconnectportal";

async fn start_session(dapp: Metadata) -> Result<String, WalletConnectError> {
    let client = WalletConnect::connect(PROJECT_ID.into(), 
            1 /* Ethereums chain id */, 
            dapp, 
            None)?;
    let url = client.initiate_session(None).await?;
    Ok(url)
}

Now your wallet need to get your sessions url. You can pass it on using url call with proper schema, or present it using qrcode using crates such as qrcode-generator:

State loop is manually handled by the implementor (there's no concurrency in some places). You have to loop somewhere to get any updates from WalletConnect.

use walletconnect_client::prelude::*;

async fn handle_messages(wc: WalletConnect) {
    while let Ok(event) = wc.next().await {
        match event {
            Some(event) => println!("Got a new WC event {event:?}"),
            None => println!("This loop brought no new event, and that is fine")
        }
    }
}

Documentation

In progress of creation.

Features

  • Session creation and handling
  • Handling transaction signatures
  • Handling typed data signatures
  • Handling manual chain changes
  • Handling events
  • Handling pings
  • Handling session updates
  • Handling session deletion
  • Handling non-WASM usage for servers

Note on WASM

This library currently needs WASM to work. There is a plan to support server-side implementations, though. For now, we focus on building robust solution for WASM implementations of websites.

Commit count: 41

cargo fmt