#browser #signer #ethereum #provider #web3

ethers-signers-browser

一个与 ethers-signers 兼容的 Signer,用于与基于浏览器的钱包交互

2 个不稳定版本

0.2.0 2023年8月9日
0.1.0 2023年8月4日

#59#signer

MPL-2.0 许可证

665KB
2K SLoC

ethers-signers-browser

一个与 ethers-signers 兼容的 Signer,它使用浏览器中的 window.ethereum 对象来签署交易,让您能够在 CLI 中方便地使用 Coinbase 钱包、MetaMask 或其他基于浏览器的以太坊钱包。

有关如何使用 Signer 的更多信息,请参阅 ethers-rs 书籍

安装

cargo add ethers-signers-browser
ethers-signers-browser = "0.2.0"

示例

use ethers::{core::{k256::ecdsa::SigningKey, types::TransactionRequest}, signers::Signer};
use ethers_signers_browser::BrowserSigner;

# async fn foo() -> Result<(), Box<dyn std::error::Error>> {
// instantiate the wallet with a chain id,
// you will be prompted to unlock your wallet in the browser
let wallet = BrowserSigner::new(0).await?;

// create a transaction
let tx = TransactionRequest::new()
    .to("vitalik.eth") // this will use ENS
    .value(10000).into();

// sign it, again, you will be prompted to sign it in the browser
let signature = wallet.sign_transaction(&tx).await?;

// can also sign a message, again, you will be prompted to sign it in the browser
let signature = wallet.sign_message("hello world").await?;
signature.verify("hello world", wallet.address()).unwrap();
# Ok(())
# }

截图

假设您正在运行以下代码

use ethers::signers::Signer;
use ethers_signers_browser::BrowserSigner;

# async fn foo() -> Result<(), Box<dyn std::error::Error>> {
let signer = BrowserSigner::new(14).await.unwrap();
let message = "hello world".as_bytes();
let sig = signer.sign_message(&message).await.unwrap();
# Ok(())
# }

当创建 BrowserSigner 时,您的浏览器将打开一个页面并提示您解锁钱包。URL 将类似于这样:https://127.0.0.1:PORT/?nonce=NONCE 其中 PORTNONCE 是随机数字,例如 https://127.0.0.1:7777/?nonce=123

然后您将看到以下页面

Homepage of the signer displaying some metadata

并且,可能同时,您的钱包也会弹出一个窗口

CoinBase Wallet popup to unlock your wallet

一旦您解锁了钱包,您的代码将继续运行,直到它到达 sign_message,之后您将被提示签署消息

CoinBase Wallet popup to sign the message

依赖项

~40–59MB
~1M SLoC