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, 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, 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.map(Into::into).map_err(SdkError::from)
81}
82
83#[cfg(test)]
84mod tests {
85
86 use super::*;
87 use crate::{helpers::public_key_from_secret_key, types::addr::entity_addr::EntityAddr};
88 use sdk_tests::{
89 config::{ENTRYPOINT_MINT, PAYMENT_AMOUNT},
90 tests::helpers::{get_network_constants, get_user_secret_key},
91 };
92
93 #[tokio::test]
94 async fn test_make_transaction_with_valid_params() {
95 let sdk = SDK::new(None, None, None);
97 let (_, _, _, _, chain_name) = get_network_constants();
98 let secret_key = get_user_secret_key(None).unwrap();
99
100 let transaction_params = TransactionStrParams::default();
101 transaction_params.set_secret_key(&secret_key);
102 transaction_params.set_chain_name(&chain_name);
103 transaction_params.set_payment_amount(PAYMENT_AMOUNT);
104
105 let entity_addr = EntityAddr::from_formatted_str(
106 "entity-contract-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
107 )
108 .unwrap();
109
110 let builder_params =
111 TransactionBuilderParams::new_invocable_entity(entity_addr.into(), ENTRYPOINT_MINT);
112
113 let result = sdk.make_transaction(builder_params, transaction_params);
115
116 assert!(result.is_ok());
118 }
119
120 #[tokio::test]
121 async fn test_make_transaction_with_valid_params_without_secret_key() {
122 let sdk = SDK::new(None, None, None);
124 let (_, _, _, _, chain_name) = get_network_constants();
125 let secret_key = get_user_secret_key(None).unwrap();
126 let initiator_addr = public_key_from_secret_key(&secret_key).unwrap();
127
128 let transaction_params = TransactionStrParams::default();
129 transaction_params.set_chain_name(&chain_name);
130 transaction_params.set_initiator_addr(&initiator_addr);
131 transaction_params.set_payment_amount(PAYMENT_AMOUNT);
132
133 let entity_addr = EntityAddr::from_formatted_str(
134 "entity-contract-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
135 )
136 .unwrap();
137
138 let builder_params =
139 TransactionBuilderParams::new_invocable_entity(entity_addr.into(), ENTRYPOINT_MINT);
140
141 let result = sdk.make_transaction(builder_params, transaction_params);
143 assert!(result.is_ok());
145 }
146}