Skip to content

Commit

Permalink
feat: wasm bindings for filter-related RPC methods (#477)
Browse files Browse the repository at this point in the history
  • Loading branch information
eshaan7 authored Dec 23, 2024
1 parent d3cabf2 commit 333651b
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 2 deletions.
18 changes: 18 additions & 0 deletions helios-ts/lib.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
42 changes: 41 additions & 1 deletion helios-ts/src/ethereum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;
Expand Down Expand Up @@ -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<JsValue, JsError> {
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<JsValue, JsError> {
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<bool, JsError> {
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<JsValue, JsError> {
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<JsValue, JsError> {
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<JsValue, JsError> {
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
Expand Down
42 changes: 41 additions & 1 deletion helios-ts/src/opstack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;

Expand Down Expand Up @@ -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<JsValue, JsError> {
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<JsValue, JsError> {
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<bool, JsError> {
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<JsValue, JsError> {
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<JsValue, JsError> {
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<JsValue, JsError> {
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
Expand Down

0 comments on commit 333651b

Please sign in to comment.