| Crates.io | dx-ether-rs |
| lib.rs | dx-ether-rs |
| version | 0.0.1 |
| created_at | 2025-06-27 08:58:08.072097+00 |
| updated_at | 2025-06-27 08:58:08.072097+00 |
| description | Connect ether browser extension provider |
| homepage | https://github.com/kotletti/dx-ether-rs |
| repository | https://github.com/kotletti/dx-ether-rs |
| max_upload_size | |
| id | 1728343 |
| size | 118,018 |
Its bridge between JS layer and WASM.
dioxus::document::eval invoke JS functions and manage the responses, thats all.
cargo builddx serve -p web --platform web --port 8080eth_accounts -> use_ether_accountseth_blockNumber -> use_ether_block_numbereth_call -> use_ether_calleth_chainId -> use_ether_chain_ideth_gasPrice -> use_ether_gas_priceeth_getBalance -> use_ether_get_balanceeth_getTransactionReceipt -> use_ether_get_transaction_receipteth_requestAccounts -> use_ether_request_accountseth_sendTransaction -> use_ether_send_transactionwallet_switchEthereumChain -> use_ether_switch_chain_iduse_ether_initialize -- await loading JS scripts for eval.-> Connect wallet
#[component]
fn ConnectWallet() -> Element {
let mut activated = use_signal(|| false);
let (_, accounts_error, accounts_loading) = use_ether_request_accounts(Some(activated));
use_effect(move || {
let accounts_error = accounts_error();
let accounts_loading = accounts_loading();
if !accounts_error.is_empty() && !accounts_loading {
tracing::error!(accounts_error);
}
});
let connect_wallet = use_callback(move |_: ()| {
activated.set(!activated());
});
rsx! {
div {
button { onclick: move |_| connect_wallet(()), "Connect Wallet" }
}
}
}
-> Personal Sign
#[component]
fn PersonalSign() -> Element {
let mut activated = use_signal(|| false);
let (signature, signature_error, signature_loading) = use_ether_personal_sign(
"Hello",
"0x57ca7f8e277696f79f913d853E809B18805807Cc",
Some(activated),
);
use_effect(move || {
let signature_error = signature_error();
let signature_loading = signature_loading();
if !signature_error.is_empty() && !signature_loading {
tracing::error!(signature_error);
}
});
let request = use_callback(move |_: ()| {
activated.set(!activated());
});
rsx! {
div {
button { onclick: move |_| request(()), "Personal Sign" }
div {
"Signature: "
span { {signature} }
}
}
}
}
-> Get block number
#[component]
fn BlockNumber() -> Element {
let (block_number, block_number_error, block_number_loading) = use_ether_block_number();
use_effect(move || {
let block_number_error = block_number_error();
let block_number_loading = block_number_loading();
if !block_number_error.is_empty() && !block_number_loading {
tracing::error!(block_number_error);
}
});
match block_number().is_empty() {
true => rsx! {},
false => rsx! {
div {
"Block number: "
span { {block_number} }
}
},
}
}
packages/web/src/main.rsIts pre-alpha version, many things could be unstable but works in exampled view. Maybe later I will add the tests and more documentation.