diff --git a/client-sdk/src/client/fee_payment.rs b/client-sdk/src/client/fee_payment.rs index 03048b7b..a7147f64 100644 --- a/client-sdk/src/client/fee_payment.rs +++ b/client-sdk/src/client/fee_payment.rs @@ -203,6 +203,15 @@ pub async fn generate_withdrawal_transfers( }) } +pub async fn get_used_memos( + store_vault_server: &dyn StoreVaultClientInterface, + view_pair: ViewPair, +) -> Result, SyncError> { + let used_memos = + get_all_payment_memos(store_vault_server, view_pair.view, USED_OR_INVALID_MEMO).await?; + Ok(used_memos) +} + /// get unused payment memos pub async fn get_unused_payments( store_vault_server: &dyn StoreVaultClientInterface, diff --git a/validity-prover/src/app/observer_rpc.rs b/validity-prover/src/app/observer_rpc.rs index 289c7e84..af04952c 100644 --- a/validity-prover/src/app/observer_rpc.rs +++ b/validity-prover/src/app/observer_rpc.rs @@ -469,7 +469,7 @@ impl SyncEvent for RPCObserver { } } -// This function is used to generate an error for trigging RPC error for testing purposes. +// This function is used to generate an error for triggering RPC error for testing purposes. pub fn generate_error_for_test() -> Result<(), ObserverError> { let error_timestamps = match std::env::var("ERROR_TIMESTAMPS") { Ok(val) => val, diff --git a/wasm/src/fee_payment.rs b/wasm/src/fee_payment.rs index e97e223a..fbad1888 100644 --- a/wasm/src/fee_payment.rs +++ b/wasm/src/fee_payment.rs @@ -5,8 +5,11 @@ use crate::{ client::{get_client, Config}, init_logger, js_types::{ - client::JsTransferRequest, fee::JsWithdrawalTransfers, payment_memo::JsPaymentMemoEntry, + client::JsTransferRequest, + fee::JsWithdrawalTransfers, + payment_memo::{JsPaymentMemo, JsPaymentMemoEntry}, }, + utils::str_to_view_pair, }; // Quote the fee for withdrawal and claim fee (if with_claim_fee is true), and generate the corresponding transfers @@ -58,3 +61,20 @@ pub fn generate_fee_payment_memo( .collect(); Ok(js_payment_memos) } + +#[wasm_bindgen] +pub async fn get_used_memos( + config: &Config, + view_pair: &str, +) -> Result, JsError> { + init_logger(); + let client = get_client(config); + let view_pair = str_to_view_pair(view_pair)?; + let payment_memos = intmax2_client_sdk::client::fee_payment::get_used_memos( + client.store_vault_server.as_ref(), + view_pair, + ) + .await?; + let js_payment_memos = payment_memos.into_iter().map(JsPaymentMemo::from).collect(); + Ok(js_payment_memos) +} diff --git a/wasm/src/js_types/payment_memo.rs b/wasm/src/js_types/payment_memo.rs index 57a9f6d3..c9e49100 100644 --- a/wasm/src/js_types/payment_memo.rs +++ b/wasm/src/js_types/payment_memo.rs @@ -1,7 +1,9 @@ -use intmax2_client_sdk::client::types::PaymentMemoEntry; +use intmax2_client_sdk::client::{misc::payment_memo::PaymentMemo, types::PaymentMemoEntry}; use serde::{Deserialize, Serialize}; use wasm_bindgen::{prelude::wasm_bindgen, JsError}; +use crate::js_types::{common::JsMetaData, data::JsTransferData}; + #[derive(Debug, Clone, Serialize, Deserialize)] #[wasm_bindgen(getter_with_clone)] pub struct JsPaymentMemoEntry { @@ -31,3 +33,21 @@ impl TryFrom for PaymentMemoEntry { }) } } + +#[derive(Debug, Clone)] +#[wasm_bindgen(getter_with_clone)] +pub struct JsPaymentMemo { + pub meta: JsMetaData, + pub transfer_data: JsTransferData, + pub memo: String, +} + +impl From for JsPaymentMemo { + fn from(payment_memo: PaymentMemo) -> Self { + Self { + meta: JsMetaData::from(payment_memo.meta), + transfer_data: JsTransferData::from(payment_memo.transfer_data), + memo: payment_memo.memo, + } + } +}