casper_rust_wasm_sdk/sdk/rpcs/
put_transaction.rs1#[cfg(target_arch = "wasm32")]
2use crate::transaction::transaction::PutTransactionResult;
3use crate::{
4 types::{transaction::Transaction, verbosity::Verbosity},
5 SDK,
6};
7use casper_client::{
8 put_transaction, rpcs::results::PutTransactionResult as _PutTransactionResult, Error,
9 JsonRpcId, SuccessResponse,
10};
11use rand::Rng;
12#[cfg(target_arch = "wasm32")]
13use wasm_bindgen::prelude::*;
14
15#[cfg(target_arch = "wasm32")]
17#[wasm_bindgen]
18impl SDK {
19 #[wasm_bindgen(js_name = "put_transaction")]
35 pub async fn put_transaction_js_alias(
36 &self,
37 transaction: Transaction,
38 verbosity: Option<Verbosity>,
39 rpc_address: Option<String>,
40 ) -> Result<PutTransactionResult, JsError> {
41 let result = self
42 .put_transaction(transaction, verbosity, rpc_address)
43 .await;
44 match result {
45 Ok(data) => Ok(data.result.into()),
46 Err(err) => {
47 let err = &format!("Error occurred with {err:?}");
48 Err(JsError::new(err))
49 }
50 }
51 }
52
53 #[deprecated(note = "This function is an alias. Please use `put_transaction` instead.")]
55 #[allow(deprecated)]
56 pub async fn account_put_transaction(
57 &self,
58 transaction: Transaction,
59 verbosity: Option<Verbosity>,
60 rpc_address: Option<String>,
61 ) -> Result<PutTransactionResult, JsError> {
62 self.put_transaction_js_alias(transaction, verbosity, rpc_address)
63 .await
64 }
65}
66
67impl SDK {
68 pub async fn put_transaction(
84 &self,
85 transaction: Transaction,
86 verbosity: Option<Verbosity>,
87 rpc_address: Option<String>,
88 ) -> Result<SuccessResponse<_PutTransactionResult>, Error> {
89 let random_id = JsonRpcId::from(rand::thread_rng().gen::<u64>().to_string());
90 put_transaction(
92 random_id,
93 &self.get_rpc_address(rpc_address),
94 self.get_verbosity(verbosity).into(),
95 transaction.into(),
96 )
97 .await
98 }
99}
100
101#[cfg(test)]
102mod tests {
103 use super::*;
104 use crate::{
105 helpers::public_key_from_secret_key,
106 types::transaction_params::transaction_str_params::TransactionStrParams,
107 };
108 use sdk_tests::{
109 config::TRANSFER_AMOUNT,
110 tests::helpers::{get_network_constants, get_user_secret_key},
111 };
112
113 fn get_transaction() -> Transaction {
114 let secret_key = get_user_secret_key(None).unwrap();
115 let initiator_addr = public_key_from_secret_key(&secret_key).unwrap();
116 let (_, _, _, _, chain_name) = get_network_constants();
117
118 let transaction_params = TransactionStrParams::default();
119 transaction_params.set_secret_key(&secret_key);
120 transaction_params.set_chain_name(&chain_name);
121 transaction_params.set_payment_amount(TRANSFER_AMOUNT);
122
123 Transaction::new_transfer(
124 None,
125 &initiator_addr, TRANSFER_AMOUNT,
127 transaction_params,
128 None,
129 )
130 .unwrap()
131 }
132
133 #[tokio::test]
134 async fn test_put_transaction_with_none_values() {
135 let sdk = SDK::new(None, None, None);
137 let error_message = "failed to parse node address as valid URL";
138 let transaction = get_transaction();
139
140 let result = sdk.put_transaction(transaction, None, None).await;
142
143 assert!(result.is_err());
145 let err_string = result.err().unwrap().to_string();
146 assert!(err_string.contains(error_message));
147 }
148
149 #[tokio::test]
150 async fn test_put_transaction() {
151 let sdk = SDK::new(None, None, None);
153 let verbosity = Some(Verbosity::High);
154 let (rpc_address, _, _, _, _) = get_network_constants();
155 let transaction = get_transaction();
156
157 let result = sdk
159 .put_transaction(transaction, verbosity, Some(rpc_address))
160 .await;
161
162 assert!(result.is_ok());
164 }
165
166 #[tokio::test]
167 async fn test_put_transaction_with_error() {
168 let sdk = SDK::new(Some("http://localhost".to_string()), None, None);
170 let error_message = "error sending request";
171 let transaction = get_transaction();
172
173 let result = sdk.put_transaction(transaction, None, None).await;
175
176 assert!(result.is_err());
178 let err_string = result.err().unwrap().to_string();
179 assert!(err_string.contains(error_message));
180 }
181}