casper_rust_wasm_sdk/sdk/deploy_utils/
make_transfer.rs1use crate::types::deploy::Deploy;
2use crate::{
3 types::{
4 deploy_params::{
5 deploy_str_params::{deploy_str_params_to_casper_client, DeployStrParams},
6 payment_str_params::{payment_str_params_to_casper_client, PaymentStrParams},
7 },
8 sdk_error::SdkError,
9 },
10 SDK,
11};
12use casper_client::cli::deploy::make_transfer as client_make_transfer;
13use rand::RngExt;
14#[cfg(all(feature = "js", target_arch = "wasm32"))]
15use wasm_bindgen::prelude::*;
16
17#[cfg(all(feature = "js", target_arch = "wasm32"))]
19#[cfg_attr(feature = "js", wasm_bindgen)]
20impl SDK {
21 #[cfg_attr(feature = "js", wasm_bindgen(js_name = "make_transfer"))]
35 #[deprecated(note = "prefer 'make_transfer_transaction'")]
36 #[allow(deprecated)]
37 #[cfg(feature = "js")]
38 pub fn make_transfer_js_alias(
39 &self,
40 amount: &str,
41 target_account: &str,
42 transfer_id: Option<String>,
43 deploy_params: DeployStrParams,
44 payment_params: PaymentStrParams,
45 ) -> Result<Deploy, JsError> {
46 let result = self.make_transfer(
48 amount,
49 target_account,
50 transfer_id,
51 deploy_params,
52 payment_params,
53 );
54 match result {
55 Ok(data) => Ok(data),
56 Err(err) => {
57 let err = &format!("Error occurred with {err:?}");
58 Err(JsError::new(err))
59 }
60 }
61 }
62}
63
64impl SDK {
65 #[deprecated(note = "prefer 'make_transfer_transaction'")]
79 #[allow(deprecated)]
80 pub fn make_transfer(
81 &self,
82 amount: &str,
83 target_account: &str,
84 transfer_id: Option<String>,
85 deploy_params: DeployStrParams,
86 payment_params: PaymentStrParams,
87 ) -> Result<Deploy, Box<SdkError>> {
88 make_transfer(
90 amount,
91 target_account,
92 transfer_id,
93 deploy_params,
94 payment_params,
95 )
96 }
97}
98
99#[deprecated(note = "prefer 'make_transfer_transaction'")]
101#[allow(deprecated)]
102pub(crate) fn make_transfer(
103 amount: &str,
104 target_account: &str,
105 transfer_id: Option<String>,
106 deploy_params: DeployStrParams,
107 payment_params: PaymentStrParams,
108) -> Result<Deploy, Box<SdkError>> {
109 let transfer_id = if let Some(transfer_id) = transfer_id {
110 transfer_id
111 } else {
112 rand::rng().random::<u64>().to_string()
113 };
114 client_make_transfer(
115 "",
116 amount,
117 target_account,
118 &transfer_id,
119 deploy_str_params_to_casper_client(&deploy_params),
120 payment_str_params_to_casper_client(&payment_params),
121 false,
122 )
123 .map(Into::into)
124 .map_err(|e| Box::new(SdkError::from(e)))
125}
126
127#[cfg(test)]
128#[allow(deprecated)]
129mod tests {
130 use super::*;
131 use crate::helpers::public_key_from_secret_key;
132 use sdk_tests::{
133 config::{PAYMENT_TRANSFER_AMOUNT, TRANSFER_AMOUNT},
134 tests::helpers::{get_network_constants, get_user_secret_key},
135 };
136
137 #[tokio::test]
138 async fn test_make_transfer_with_valid_transfer_params() {
139 let sdk = SDK::new(None, None, None);
141 let (_, _, _, _, chain_name) = get_network_constants();
142 let secret_key = get_user_secret_key(None).unwrap();
143 let account = public_key_from_secret_key(&secret_key).unwrap();
144
145 let deploy_params =
146 DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
147 let payment_params = PaymentStrParams::default();
148 payment_params.set_payment_amount(PAYMENT_TRANSFER_AMOUNT);
149
150 let result = sdk.make_transfer(
152 TRANSFER_AMOUNT,
153 &account,
154 None,
155 deploy_params,
156 payment_params,
157 );
158
159 assert!(result.is_ok());
161 }
162
163 #[tokio::test]
164 async fn test_make_transfer_with_valid_transfer_params_without_secret_key() {
165 let sdk = SDK::new(None, None, None);
167 let (_, _, _, _, chain_name) = get_network_constants();
168 let secret_key = get_user_secret_key(None).unwrap();
169 let account = public_key_from_secret_key(&secret_key).unwrap();
170
171 let deploy_params = DeployStrParams::new(&chain_name, &account, None, None, None, None);
172 let payment_params = PaymentStrParams::default();
173 payment_params.set_payment_amount(PAYMENT_TRANSFER_AMOUNT);
174
175 let result = sdk.make_transfer(
177 TRANSFER_AMOUNT,
178 &account,
179 None,
180 deploy_params,
181 payment_params,
182 );
183
184 assert!(result.is_ok());
186 }
187
188 #[tokio::test]
189 async fn test_make_transfer_with_invalid_transfer_params() {
190 let sdk = SDK::new(None, None, None);
192 let (_, _, _, _, chain_name) = get_network_constants();
193 let error_message = "Missing a required arg - exactly one of the following must be provided: [\"payment_amount\", \"payment_hash\", \"payment_name\", \"payment_package_hash\", \"payment_package_name\", \"payment_path\", \"has_payment_bytes\"]";
194 let secret_key = get_user_secret_key(None).unwrap();
195 let account = public_key_from_secret_key(&secret_key).unwrap();
196
197 let deploy_params =
198 DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
199 let payment_params = PaymentStrParams::default();
200 payment_params.set_payment_amount(""); let result = sdk.make_transfer(
204 TRANSFER_AMOUNT,
205 &account,
206 None,
207 deploy_params,
208 payment_params,
209 );
210 assert!(result.is_err());
213
214 let err_string = result.err().unwrap().to_string();
215 assert!(err_string.contains(error_message));
216 }
217}