use crate::types::deploy::Deploy;
use crate::{
types::{
deploy_params::{
deploy_str_params::{deploy_str_params_to_casper_client, DeployStrParams},
payment_str_params::{payment_str_params_to_casper_client, PaymentStrParams},
},
sdk_error::SdkError,
},
SDK,
};
use casper_client::cli::deploy::make_transfer as client_make_transfer;
use rand::Rng;
#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen]
impl SDK {
#[wasm_bindgen(js_name = "make_transfer")]
#[deprecated(note = "prefer 'make_transfer_transaction'")]
#[allow(deprecated)]
pub fn make_transfer_js_alias(
&self,
amount: &str,
target_account: &str,
transfer_id: Option<String>,
deploy_params: DeployStrParams,
payment_params: PaymentStrParams,
) -> Result<Deploy, JsError> {
let result = self.make_transfer(
amount,
target_account,
transfer_id,
deploy_params,
payment_params,
);
match result {
Ok(data) => Ok(data),
Err(err) => {
let err = &format!("Error occurred with {:?}", err);
Err(JsError::new(err))
}
}
}
}
impl SDK {
#[deprecated(note = "prefer 'make_transfer_transaction'")]
#[allow(deprecated)]
pub fn make_transfer(
&self,
amount: &str,
target_account: &str,
transfer_id: Option<String>,
deploy_params: DeployStrParams,
payment_params: PaymentStrParams,
) -> Result<Deploy, SdkError> {
make_transfer(
amount,
target_account,
transfer_id,
deploy_params,
payment_params,
)
.map_err(SdkError::from)
}
}
#[deprecated(note = "prefer 'make_transfer_transaction'")]
#[allow(deprecated)]
pub(crate) fn make_transfer(
amount: &str,
target_account: &str,
transfer_id: Option<String>,
deploy_params: DeployStrParams,
payment_params: PaymentStrParams,
) -> Result<Deploy, SdkError> {
let transfer_id = if let Some(transfer_id) = transfer_id {
transfer_id
} else {
rand::thread_rng().gen::<u64>().to_string()
};
client_make_transfer(
"",
amount,
target_account,
&transfer_id,
deploy_str_params_to_casper_client(&deploy_params),
payment_str_params_to_casper_client(&payment_params),
false,
)
.map(Into::into)
.map_err(SdkError::from)
}
#[cfg(test)]
#[allow(deprecated)]
mod tests {
use super::*;
use crate::helpers::public_key_from_secret_key;
use sdk_tests::{
config::{PAYMENT_TRANSFER_AMOUNT, TRANSFER_AMOUNT},
tests::helpers::{get_network_constants, get_user_secret_key},
};
#[tokio::test]
async fn test_make_transfer_with_valid_transfer_params() {
let sdk = SDK::new(None, None);
let (_, _, _, chain_name) = get_network_constants();
let secret_key = get_user_secret_key(None).unwrap();
let account = public_key_from_secret_key(&secret_key).unwrap();
let deploy_params =
DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
let payment_params = PaymentStrParams::default();
payment_params.set_payment_amount(PAYMENT_TRANSFER_AMOUNT);
let result = sdk.make_transfer(
TRANSFER_AMOUNT,
&account,
None,
deploy_params,
payment_params,
);
assert!(result.is_ok());
}
#[tokio::test]
async fn test_make_transfer_with_valid_transfer_params_without_secret_key() {
let sdk = SDK::new(None, None);
let (_, _, _, chain_name) = get_network_constants();
let secret_key = get_user_secret_key(None).unwrap();
let account = public_key_from_secret_key(&secret_key).unwrap();
let deploy_params = DeployStrParams::new(&chain_name, &account, None, None, None, None);
let payment_params = PaymentStrParams::default();
payment_params.set_payment_amount(PAYMENT_TRANSFER_AMOUNT);
let result = sdk.make_transfer(
TRANSFER_AMOUNT,
&account,
None,
deploy_params,
payment_params,
);
assert!(result.is_ok());
}
#[tokio::test]
async fn test_make_transfer_with_invalid_transfer_params() {
let sdk = SDK::new(None, None);
let (_, _, _, chain_name) = get_network_constants();
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\"]";
let secret_key = get_user_secret_key(None).unwrap();
let account = public_key_from_secret_key(&secret_key).unwrap();
let deploy_params =
DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
let payment_params = PaymentStrParams::default();
payment_params.set_payment_amount(""); let result = sdk.make_transfer(
TRANSFER_AMOUNT,
&account,
None,
deploy_params,
payment_params,
);
assert!(result.is_err());
let err_string = result.err().unwrap().to_string();
assert!(err_string.contains(error_message));
}
}