Crate walletconnect_client

Source
Expand description

A simple dApp client library for wallet interaction using WalletConnect v2 protocol.

§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.

Structs§

MessageIdGenerator
MessageId generator based on sequence and current timestamp
WalletConnect
Main struct for handling WalletConnect links with wallets.
WalletConnectState

Enums§

State
Enum defining WalletConnect state at the given moment.
WalletConnectError
WalletConnect error.