diff --git a/rust-libs/modules/gva/bca/src/exec_req_type.rs b/rust-libs/modules/gva/bca/src/exec_req_type.rs index fc6c927493577b8308f4eb407be44ee10dca7400..183a3e5e678fef8d20490c7f9c7558b1690a1a96 100644 --- a/rust-libs/modules/gva/bca/src/exec_req_type.rs +++ b/rust-libs/modules/gva/bca/src/exec_req_type.rs @@ -92,5 +92,8 @@ pub(super) async fn execute_req_type( )) } BcaReqTypeV0::CurrentUd => current_ud::exec_req_current_ud(bca_executor).await, + BcaReqTypeV0::BalancesOfScripts(scripts) => { + balances::exec_req_balances_of_scripts(bca_executor, scripts).await + } } } diff --git a/rust-libs/modules/gva/bca/src/exec_req_type/balances.rs b/rust-libs/modules/gva/bca/src/exec_req_type/balances.rs index 7a468df84cb67aecee01da753eaeb7913e960600..6901a9d03e7f49015031fa2064acd9c18a1d28c0 100644 --- a/rust-libs/modules/gva/bca/src/exec_req_type/balances.rs +++ b/rust-libs/modules/gva/bca/src/exec_req_type/balances.rs @@ -37,3 +37,25 @@ pub(super) async fn exec_req_balances_of_pubkeys( .await??, )) } + +pub(super) async fn exec_req_balances_of_scripts( + bca_executor: &BcaExecutor, + scripts: ArrayVec<[WalletScriptV10; 16]>, +) -> Result<BcaRespTypeV0, ExecReqTypeError> { + let dbs_reader = bca_executor.dbs_reader(); + Ok(BcaRespTypeV0::Balances( + bca_executor + .dbs_pool + .execute(move |_| { + scripts + .into_iter() + .map(|script| { + dbs_reader + .get_account_balance(&script) + .map(|balance_opt| balance_opt.map(|balance| balance.0)) + }) + .collect::<Result<ArrayVec<_>, _>>() + }) + .await??, + )) +} diff --git a/rust-libs/modules/gva/bca/types/src/lib.rs b/rust-libs/modules/gva/bca/types/src/lib.rs index 4cc715f0593a74597bc4a516ab42e7e58733d61f..a9b987ba3fb79b635586838f529f12fae31f2497 100644 --- a/rust-libs/modules/gva/bca/types/src/lib.rs +++ b/rust-libs/modules/gva/bca/types/src/lib.rs @@ -78,6 +78,7 @@ pub enum BcaReqTypeV0 { SendTxs(Txs), Identities(ArrayVec<[PublicKey; 16]>), CurrentUd, + BalancesOfScripts(ArrayVec<[WalletScriptV10; 16]>), } // Request types helpers