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