diff --git a/helios-ts/lib.ts b/helios-ts/lib.ts index ca5ac54b..79ec7a6f 100644 --- a/helios-ts/lib.ts +++ b/helios-ts/lib.ts @@ -102,34 +102,41 @@ export class HeliosProvider { return this.#client.send_raw_transaction(req.params[0]); } case "eth_getTransactionReceipt": { - return this.#client.get_transaction_receipt(req.params[0]); - } - case "eth_getTransactionByHash": { - return this.#client.get_transaction_by_hash(req.params[0]); + const receipt = await this.#client.get_transaction_receipt(req.params[0]); + return mapToObj(receipt); } case "eth_getTransactionByBlockHashAndIndex": { - return this.#client.get_transaction_by_block_hash_and_index( + const tx = await this.#client.get_transaction_by_block_hash_and_index( req.params[0], req.params[1] ); + return mapToObj(tx); } case "eth_getTransactionByBlockNumberAndIndex": { - return this.#client.get_transaction_by_block_number_and_index( + const tx = await this.#client.get_transaction_by_block_number_and_index( req.params[0], req.params[1] ); + return mapToObj(tx); } case "eth_getBlockReceipts": { - return this.#client.get_block_receipts(req.params[0]); + const receipts = await this.#client.get_block_receipts(req.params[0]); + return receipts.map(mapToObj); } case "eth_getLogs": { - return this.#client.get_logs(req.params[0]); + const logs = await this.#client.get_logs(req.params[0]); + return logs.map(mapToObj); } case "eth_getFilterChanges": { - return this.#client.get_filter_changes(req.params[0]); + const changes = await this.#client.get_filter_changes(req.params[0]); + if (changes.length > 0 && typeof changes[0] === "object") { + return changes.map(mapToObj); + } + return changes; } case "eth_getFilterLogs": { - return this.#client.get_filter_logs(req.params[0]); + const logs = await this.#client.get_filter_logs(req.params[0]); + return logs.map(mapToObj); } case "eth_uninstallFilter": { return this.#client.uninstall_filter(req.params[0]); @@ -150,6 +157,10 @@ export class HeliosProvider { const block = await this.#client.get_block_by_number(req.params[0], req.params[1]); return mapToObj(block); } + case "eth_getBlockByHash": { + const block = await this.#client.get_block_by_hash(req.params[0], req.params[1]); + return mapToObj(block); + } case "web3_clientVersion": { return this.#client.client_version(); } diff --git a/helios-ts/src/ethereum.rs b/helios-ts/src/ethereum.rs index c108886c..7286112f 100644 --- a/helios-ts/src/ethereum.rs +++ b/helios-ts/src/ethereum.rs @@ -219,6 +219,13 @@ impl EthereumClient { Ok(serde_wasm_bindgen::to_value(&block)?) } + #[wasm_bindgen] + pub async fn get_block_by_hash(&self, hash: String, full_tx: bool) -> Result { + let hash = B256::from_str(&hash)?; + let block = map_err(self.inner.get_block_by_hash(hash, full_tx).await)?; + Ok(serde_wasm_bindgen::to_value(&block)?) + } + #[wasm_bindgen] pub async fn get_code(&self, addr: JsValue, block: JsValue) -> Result { let addr: Address = serde_wasm_bindgen::from_value(addr)?; diff --git a/helios-ts/src/opstack.rs b/helios-ts/src/opstack.rs index a4029c29..979df3ad 100644 --- a/helios-ts/src/opstack.rs +++ b/helios-ts/src/opstack.rs @@ -167,6 +167,13 @@ impl OpStackClient { Ok(serde_wasm_bindgen::to_value(&block)?) } + #[wasm_bindgen] + pub async fn get_block_by_hash(&self, hash: String, full_tx: bool) -> Result { + let hash = B256::from_str(&hash)?; + let block = map_err(self.inner.get_block_by_hash(hash, full_tx).await)?; + Ok(serde_wasm_bindgen::to_value(&block)?) + } + #[wasm_bindgen] pub async fn get_code(&self, addr: JsValue, block: JsValue) -> Result { let addr: Address = serde_wasm_bindgen::from_value(addr)?;