2 个不稳定版本
0.2.0 | 2023年8月9日 |
---|---|
0.1.0 | 2023年8月4日 |
#59 在 #signer
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
其中 PORT
和 NONCE
是随机数字,例如 https://127.0.0.1:7777/?nonce=123
。
然后您将看到以下页面
并且,可能同时,您的钱包也会弹出一个窗口
一旦您解锁了钱包,您的代码将继续运行,直到它到达 sign_message
,之后您将被提示签署消息
依赖项
~40–59MB
~1M SLoC