From faa709b159bbb01c176001b4090369464183acb9 Mon Sep 17 00:00:00 2001 From: Eshaan Bansal Date: Fri, 20 Dec 2024 18:38:27 +0530 Subject: [PATCH] feat: wasm bindings for filter-related RPC methods --- helios-ts/lib.ts | 18 +++++++++++++++++ helios-ts/src/ethereum.rs | 42 ++++++++++++++++++++++++++++++++++++++- helios-ts/src/opstack.rs | 42 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 100 insertions(+), 2 deletions(-) diff --git a/helios-ts/lib.ts b/helios-ts/lib.ts index 374e3ca3..49b5e38b 100644 --- a/helios-ts/lib.ts +++ b/helios-ts/lib.ts @@ -122,6 +122,24 @@ export class HeliosProvider { case "eth_getLogs": { return this.#client.get_logs(req.params[0]); } + case "eth_getFilterChanges": { + return this.#client.get_filter_changes(req.params[0]); + } + case "eth_getFilterLogs": { + return this.#client.get_filter_logs(req.params[0]); + } + case "eth_uninstallFilter": { + return this.#client.uninstall_filter(req.params[0]); + } + case "eth_newFilter": { + return this.#client.new_filter(req.params[0]); + } + case "eth_newBlockFilter": { + return this.#client.new_block_filter(); + } + case "eth_newPendingTransactionFilter": { + return this.#client.new_pending_transaction_filter(); + } case "net_version": { return this.#chainId; } diff --git a/helios-ts/src/ethereum.rs b/helios-ts/src/ethereum.rs index c4a7e9f5..95eaec72 100644 --- a/helios-ts/src/ethereum.rs +++ b/helios-ts/src/ethereum.rs @@ -4,7 +4,7 @@ extern crate web_sys; use std::str::FromStr; use alloy::hex::FromHex; -use alloy::primitives::{Address, B256}; +use alloy::primitives::{Address, B256, U256}; use alloy::rpc::types::{Filter, TransactionRequest}; use eyre::Result; use wasm_bindgen::prelude::*; @@ -281,6 +281,46 @@ impl EthereumClient { Ok(serde_wasm_bindgen::to_value(&logs)?) } + #[wasm_bindgen] + pub async fn get_filter_changes(&self, filter_id: JsValue) -> Result { + let filter_id: U256 = serde_wasm_bindgen::from_value(filter_id)?; + let filter_changes = map_err(self.inner.get_filter_changes(filter_id).await)?; + Ok(serde_wasm_bindgen::to_value(&filter_changes)?) + } + + #[wasm_bindgen] + pub async fn get_filter_logs(&self, filter_id: JsValue) -> Result { + let filter_id: U256 = serde_wasm_bindgen::from_value(filter_id)?; + let logs = map_err(self.inner.get_filter_logs(filter_id).await)?; + Ok(serde_wasm_bindgen::to_value(&logs)?) + } + + #[wasm_bindgen] + pub async fn uninstall_filter(&self, filter_id: JsValue) -> Result { + let filter_id: U256 = serde_wasm_bindgen::from_value(filter_id)?; + let uninstalled = map_err(self.inner.uninstall_filter(filter_id).await)?; + Ok(uninstalled) + } + + #[wasm_bindgen] + pub async fn new_filter(&self, filter: JsValue) -> Result { + let filter: Filter = serde_wasm_bindgen::from_value(filter)?; + let filter_id = map_err(self.inner.new_filter(&filter).await)?; + Ok(serde_wasm_bindgen::to_value(&filter_id)?) + } + + #[wasm_bindgen] + pub async fn new_block_filter(&self) -> Result { + let filter_id = map_err(self.inner.new_block_filter().await)?; + Ok(serde_wasm_bindgen::to_value(&filter_id)?) + } + + #[wasm_bindgen] + pub async fn new_pending_transaction_filter(&self) -> Result { + let filter_id = map_err(self.inner.new_pending_transaction_filter().await)?; + Ok(serde_wasm_bindgen::to_value(&filter_id)?) + } + #[wasm_bindgen] pub async fn client_version(&self) -> String { self.inner.client_version().await diff --git a/helios-ts/src/opstack.rs b/helios-ts/src/opstack.rs index 640d490a..4634a7da 100644 --- a/helios-ts/src/opstack.rs +++ b/helios-ts/src/opstack.rs @@ -3,7 +3,7 @@ extern crate web_sys; use std::str::FromStr; -use alloy::primitives::{Address, B256}; +use alloy::primitives::{Address, B256, U256}; use alloy::rpc::types::{Filter, TransactionRequest}; use wasm_bindgen::prelude::*; @@ -227,6 +227,46 @@ impl OpStackClient { Ok(serde_wasm_bindgen::to_value(&logs)?) } + #[wasm_bindgen] + pub async fn get_filter_changes(&self, filter_id: JsValue) -> Result { + let filter_id: U256 = serde_wasm_bindgen::from_value(filter_id)?; + let filter_changes = map_err(self.inner.get_filter_changes(filter_id).await)?; + Ok(serde_wasm_bindgen::to_value(&filter_changes)?) + } + + #[wasm_bindgen] + pub async fn get_filter_logs(&self, filter_id: JsValue) -> Result { + let filter_id: U256 = serde_wasm_bindgen::from_value(filter_id)?; + let logs = map_err(self.inner.get_filter_logs(filter_id).await)?; + Ok(serde_wasm_bindgen::to_value(&logs)?) + } + + #[wasm_bindgen] + pub async fn uninstall_filter(&self, filter_id: JsValue) -> Result { + let filter_id: U256 = serde_wasm_bindgen::from_value(filter_id)?; + let uninstalled = map_err(self.inner.uninstall_filter(filter_id).await)?; + Ok(uninstalled) + } + + #[wasm_bindgen] + pub async fn new_filter(&self, filter: JsValue) -> Result { + let filter: Filter = serde_wasm_bindgen::from_value(filter)?; + let filter_id = map_err(self.inner.new_filter(&filter).await)?; + Ok(serde_wasm_bindgen::to_value(&filter_id)?) + } + + #[wasm_bindgen] + pub async fn new_block_filter(&self) -> Result { + let filter_id = map_err(self.inner.new_block_filter().await)?; + Ok(serde_wasm_bindgen::to_value(&filter_id)?) + } + + #[wasm_bindgen] + pub async fn new_pending_transaction_filter(&self) -> Result { + let filter_id = map_err(self.inner.new_pending_transaction_filter().await)?; + Ok(serde_wasm_bindgen::to_value(&filter_id)?) + } + #[wasm_bindgen] pub async fn client_version(&self) -> String { self.inner.client_version().await