ethereum-provider

Crates.ioethereum-provider
lib.rsethereum-provider
version0.2.0
sourcesrc
created_at2023-08-04 15:50:03.354379
updated_at2023-08-09 14:28:56.960905
descriptionEIP-1193 Ethereum Provider API for Rust
homepagehttps://github.com/LouisBrunner/rs-ethereum-browser-tools
repositoryhttps://github.com/LouisBrunner/rs-ethereum-browser-tools
max_upload_size
id935352
size27,207
Louis Brunner (LouisBrunner)

documentation

https://docs.rs/ethereum-provider

README

ethereum-provider

This project implements a Provider type which wraps the browser's window.ethereum for use in Rust, which is useful for wasm-based projects (e.g. front-ends).

Installation

cargo add ethereum-provider
ethereum-provider = "0.2.0"

Features

  • yew (optional): provides a hook, use_provider, which simplifies the interaction with the provider when using yew

Examples

use ethereum_provider::{Provider, ProviderError};
use web_sys::window;

# async fn foo() -> Result<(), Box<dyn std::error::Error>> {
// create a provider
let provider = Provider::new(&window().unwrap())?;

// request accounts
let v = provider.request::<()>("eth_requestAccounts".to_string(), None).await?;
println!("eth_requestAccounts: {:?}", v);
// or use the convenience method
let v = provider.request_accounts().await?;
println!("accounts: {:?}", v);
# Ok(())
# }

Yew examples

use ethereum_provider::yew::use_provider;
use yew::prelude::*;

#[function_component]
fn Wallet() -> Html {
    let status = use_provider();

    html! {
        <div>
            {
              match status {
                  Some(status) => match status {
                      Ok(status) => html! {
                        <div>
                          <pre>{ format!("Wallet: {:?}", status) }</pre>
                        </div>
                      },
                      Err(e) => html! { <pre>{ format!("Error: {:?}", e) }</pre> },
                  },
                  None => html! { <pre>{ "Loading wallet provider..." }</pre> },
              }
            }
        </div>
    }
}
Commit count: 29

cargo fmt