8 releases

0.1.7 Oct 23, 2023
0.1.6 Oct 16, 2023

#2 in #ru-snap


Used in rusnap

MIT license

15KB
278 lines

RuSnap

Build Metamask Snap use Rust.

Features

  • Snap basic function.
    • Manage keys
    • Dialog and Notification
    • Random
    • Store Data
    • Network Access (WIP)
    • Ethereum Provider
  • RPC Handle
  • Keyring API (TODO)

Example

https://github.com/tiannian/rusnap-example

Install and Usage

Install cargo-rusnap.

cargo install rusnap

Dependencies

Please install these dependencies.

  • wasm-pack
  • npm (yarn or pnpm)

Create Snap

cargo rusnap new <pkg-name>

Build Snap

# Build dev mode in default
cargo rusnap build

# Build release mode
cargo rusnap build --release

Start Snap

cargo rusnap start

Snap

Install Snap in Metamask

Then you can load snap in metamask.

Execute these js statement in broswer devtool:

window.ethereum.request({
  method: "wallet_requestSnaps",
  params: { "local:http://localhost:8080": {} },
});

Or use Metamask Snap Debug Tool.

Call Snap

Execute these js statement in broswer devtool:

window.ethereum.request({
  method: "wallet_invokeSnap",
  params: {
    snapId: "local:http://localhost:8080",
    request: {
      method: "hello",
    },
  },
});

Publish Snap

TODO

Reference

Basic Function

Basic function of Snap: docs.rs

Random

Use OsRng in rand_core or other random crate based on getrandom.

Please add getrandom with js feature.

getrandom = { version = "0.2.10", features = ["js"] }

Web3 SDK

Use rusnap-ethers and ethers.

Note: rusnap-ethers don't re-export in rusnap crate, please add this crate independently.

Dependencies

~1.1–2MB
~41K SLoC