casper_rust_wasm_sdk/sdk/transaction_utils/
make_transaction.rs1use crate::{
2 types::{
3 sdk_error::SdkError,
4 transaction::Transaction,
5 transaction_params::{
6 transaction_builder_params::{
7 transaction_builder_params_to_casper_client, TransactionBuilderParams,
8 },
9 transaction_str_params::{
10 transaction_str_params_to_casper_client, TransactionStrParams,
11 },
12 },
13 },
14 SDK,
15};
16use casper_client::cli::make_transaction as client_make_transaction;
17#[cfg(target_arch = "wasm32")]
18use wasm_bindgen::prelude::*;
19
20#[cfg(target_arch = "wasm32")]
22#[wasm_bindgen]
23impl SDK {
24 #[wasm_bindgen(js_name = "make_transaction")]
35 pub fn make_transaction_js_alias(
36 &self,
37 builder_params: TransactionBuilderParams,
38 transaction_params: TransactionStrParams,
39 ) -> Result<Transaction, JsError> {
40 let result = make_transaction(builder_params, transaction_params);
41 match result {
42 Ok(data) => Ok(data),
43 Err(err) => {
44 let err = &format!("Error occurred with {err:?}");
45 Err(JsError::new(err))
46 }
47 }
48 }
49}
50
51impl SDK {
52 pub fn make_transaction(
63 &self,
64 builder_params: TransactionBuilderParams,
65 transaction_params: TransactionStrParams,
66 ) -> Result<Transaction, Box<SdkError>> {
67 make_transaction(builder_params, transaction_params)
68 }
69}
70
71pub(crate) fn make_transaction(
73 builder_params: TransactionBuilderParams,
74 transaction_params: TransactionStrParams,
75) -> Result<Transaction, Box<SdkError>> {
76 let transaction_builder_params = transaction_builder_params_to_casper_client(&builder_params);
77 let transaction_str_params = transaction_str_params_to_casper_client(&transaction_params);
78 let transaction =
79 client_make_transaction(transaction_builder_params, transaction_str_params, false);
80 transaction
81 .map(Into::into)
82 .map_err(|e| Box::new(SdkError::from(e)))
83}
84
85#[cfg(test)]
86mod tests {
87
88 use super::*;
89 use crate::{helpers::public_key_from_secret_key, types::addr::entity_addr::EntityAddr};
90 use sdk_tests::{
91 config::{ENTRYPOINT_MINT, PAYMENT_AMOUNT},
92 tests::helpers::{get_network_constants, get_user_secret_key},
93 };
94
95 #[tokio::test]
96 async fn test_make_transaction_with_valid_params() {
97 let sdk = SDK::new(None, None, None);
99 let (_, _, _, _, chain_name) = get_network_constants();
100 let secret_key = get_user_secret_key(None).unwrap();
101
102 let transaction_params = TransactionStrParams::default();
103 transaction_params.set_secret_key(&secret_key);
104 transaction_params.set_chain_name(&chain_name);
105 transaction_params.set_payment_amount(PAYMENT_AMOUNT);
106
107 let entity_addr = EntityAddr::from_formatted_str(
108 "entity-contract-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
109 )
110 .unwrap();
111
112 let builder_params =
113 TransactionBuilderParams::new_invocable_entity(entity_addr.into(), ENTRYPOINT_MINT);
114
115 let result = sdk.make_transaction(builder_params, transaction_params);
117
118 assert!(result.is_ok());
120 }
121
122 #[tokio::test]
123 async fn test_make_transaction_with_valid_params_without_secret_key() {
124 let sdk = SDK::new(None, None, None);
126 let (_, _, _, _, chain_name) = get_network_constants();
127 let secret_key = get_user_secret_key(None).unwrap();
128 let initiator_addr = public_key_from_secret_key(&secret_key).unwrap();
129
130 let transaction_params = TransactionStrParams::default();
131 transaction_params.set_chain_name(&chain_name);
132 transaction_params.set_initiator_addr(&initiator_addr);
133 transaction_params.set_payment_amount(PAYMENT_AMOUNT);
134
135 let entity_addr = EntityAddr::from_formatted_str(
136 "entity-contract-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
137 )
138 .unwrap();
139
140 let builder_params =
141 TransactionBuilderParams::new_invocable_entity(entity_addr.into(), ENTRYPOINT_MINT);
142
143 let result = sdk.make_transaction(builder_params, transaction_params);
145 assert!(result.is_ok());
147 }
148}