fireblocks_sdk/client/
transfer.rs

1use {
2    super::Client,
3    crate::{
4        WalletType,
5        apis::{Api, transactions_api::CreateTransactionParams},
6        error::FireblocksError,
7        models::{
8            CreateTransactionResponse,
9            DestinationTransferPeerPath,
10            SourceTransferPeerPath,
11            TransactionRequest,
12            TransferPeerPathType,
13            transaction_request::FeeLevel,
14        },
15    },
16};
17
18impl Client {
19    pub async fn vault_whitelist_transfer(
20        &self,
21        vault_id: &str,
22        asset_id: impl Into<String>,
23        amount: impl Into<String>,
24        dest_type: WalletType,
25        dest_id: &str,
26        fee_level: Option<FeeLevel>,
27    ) -> crate::Result<CreateTransactionResponse> {
28        let api = self.api_client.transactions_api();
29        let mut req = TransactionRequest::default();
30        let peer: TransferPeerPathType = match dest_type {
31            WalletType::Internal => TransferPeerPathType::InternalWallet,
32            WalletType::External => TransferPeerPathType::ExternalWallet,
33            WalletType::Contract => TransferPeerPathType::Contract,
34        };
35        if fee_level.is_some() {
36            req.fee_level = fee_level;
37        }
38        req.source = Some(SourceTransferPeerPath {
39            r#type: TransferPeerPathType::VaultAccount,
40            sub_type: None,
41            id: Some(String::from(vault_id)),
42            name: None,
43            wallet_id: None,
44        });
45        let uuid = uuid::Uuid::try_from(dest_id)?;
46        req.destination = Some(DestinationTransferPeerPath {
47            r#type: peer,
48            sub_type: None,
49            id: Some(uuid.to_string()),
50            name: None,
51            wallet_id: None,
52            one_time_address: None,
53        });
54        req.asset_id = Some(asset_id.into());
55        req.amount = Some(crate::models::TransactionRequestAmount::String(
56            amount.into(),
57        ));
58        let params = CreateTransactionParams::builder()
59            .transaction_request(req)
60            .build();
61        let response = api
62            .create_transaction(params)
63            .await
64            .map_err(|e| FireblocksError::FetchCreateTransactionError(e.to_string()))?;
65
66        Ok(response)
67    }
68}