7 个版本

0.0.7 2024 年 7 月 8 日
0.0.6 2024 年 6 月 29 日

#18 in #wasm-framework

每月 36 次下载

MIT 许可证

78KB
1.5K SLoC

🦀 Wasi Sol

wasi-sol-logo

made-with-rust Netlify Status Netlify Status Netlify Status Rust Maintenance Crates.io Crates.io Downloads docs License

Open in GitHub Codespaces

GigaDAO Discord

框架 演示 实时演示
Yew yew-demo Netlify Status
Dioxus dioxus-demo Netlify Status
Leptos leptos-demo Netlify Status

适用于 WASM 框架的 Solana 钱包适配器。

🔒 钱包支持

钱包 支持的 功能
Phantom 全部
Solflare 全部
Backpack 全部

🌐 WASM 框架支持

框架 支持的
Yew
Dioxus
Leptos

⚙️ 功能

方法 支持的 已测试
connect
disconnect
sign_in
sign_message
sign_transaction
send_transaction

🔥 快速入门

Wasi Sol 提供了提供者和钩子,您可以使用它们将所有钱包适配器功能引入您的应用程序。要开始,请将相应的提供者包装在您的 main App 组件中

// Yew Component

#[function_component]
pub fn App() -> Html {
    let endpoint = "https://api.mainnet-beta.solana.com";
    let wallets = vec![
        Wallet::Phantom.into(),
        Wallet::Solflare.into(),
        Wallet::Backpack.into(),
    ];

    html! {
        <ConnectionProvider {endpoint}>
            <WalletProvider {wallets}>
                <LoginPage />
            </WalletProvider>
        </ConnectionProvider>
    }
}

这将允许您使用钩子创建 wallets 向量中存在的钱包适配器

// Yew Component

#[function_component]
pub fn LoginPage() -> Html {
    let phantom_context = use_wallet::<Wallet>(Wallet::Phantom);
    let solflare_context = use_wallet::<Wallet>(Wallet::Solflare);
    let backpack_context = use_wallet::<Wallet>(Wallet::Backpack);

    // ...snip...

    html! {
        <>
        </>
    }
}

现在您可以选择要添加的钱包,允许用户连接。Wasi Sol 随带内置的可用组件,它们封装了所有连接和断开逻辑,以便您可以快速开发 Web 应用程序

// Yew Component

#[function_component]
pub fn LoginPage() -> Html {
    // ...snip...

    html! {
        <LoginForm
            phantom={Some(phantom_wallet_adapter)}
            solflare={Some(solflare_wallet_adapter)}
            backpack={None}
            {connected}
        />
    }
}

这将选择 Phantom 和 Solflare 钱包,并允许用户将它们连接到应用程序。在这种情况下,Backpack 钱包被禁用。

更详细的实现可以在下面的示例中找到。

🚀 示例

框架 示例
Yew Github
Dioxus Github
Leptos Github

🎧 事件监听器

Event Emitter Pattern

这个包实现了一个便捷的事件监听器模式,内置了一个 emitter 对象,您可以使用它来订阅特定的事件。此功能允许您在 UI 中设置状态,在钱包连接时执行操作,等等。

// Yew Component
// ...snip...

#[function_component]
pub fn LoginPage() -> Html {
    let wallet_context = use_wallet();
    let connected = use_state(|| false);
    let wallet_adapter = use_state(|| wallet_context);

    let connect_wallet = {
        // ...snip...

        Callback::from(move |_| {
            // ...snip...

            spawn_local(async move {
                let mut wallet_info = (*wallet_adapter).clone();

                wallet_info.emitter.on("connect", move |public_key: Pubkey| {
                    log::info!("Event Listener: Got pubkey {}", public_key);
                    wallet_adapter.set(wallet_info);
                    connected.set(true);
                });

                match wallet_info.connect().await {
                    Ok(_) => {
                    }
                    Err(err) => {
                        log::error!("Failed to connect wallet: {}", err);
                    }
                }
            });
        })
    };

    // ...snip...

    html! {
        <>
        </>
    }
}

event emitter demo

👥 贡献

欢迎贡献和反馈!如果您想贡献、报告问题或提出改进建议,请在 GitHub 上与项目互动。您的贡献有助于改进此库以供社区使用。

📝 许可证

本项目采用 MIT 许可证

依赖

~30–46MB
~804K SLoC