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 put_transaction(
91 JsonRpcId::from(rand::thread_rng().gen::<u64>().to_string()),
92 &self.get_rpc_address(rpc_address),
93 self.get_verbosity(verbosity).into(),
94 transaction.into(),
95 )
96 .await
97 }
98}
99
100#[cfg(test)]
101mod tests {
102 use super::*;
103 use crate::{
104 helpers::public_key_from_secret_key,
105 types::transaction_params::transaction_str_params::TransactionStrParams,
106 };
107 use sdk_tests::{
108 config::TRANSFER_AMOUNT,
109 tests::helpers::{get_network_constants, get_user_secret_key},
110 };
111
112 fn get_transaction() -> Transaction {
113 let secret_key = get_user_secret_key(None).unwrap();
114 let initiator_addr = public_key_from_secret_key(&secret_key).unwrap();
115 let (_, _, _, _, chain_name) = get_network_constants();
116
117 let transaction_params = TransactionStrParams::default();
118 transaction_params.set_secret_key(&secret_key);
119 transaction_params.set_chain_name(&chain_name);
120 transaction_params.set_payment_amount(TRANSFER_AMOUNT);
121
122 Transaction::new_transfer(
123 None,
124 &initiator_addr, TRANSFER_AMOUNT,
126 transaction_params,
127 None,
128 )
129 .unwrap()
130 }
131
132 #[tokio::test]
133 async fn test_put_transaction_with_none_values() {
134 let sdk = SDK::new(None, None, None);
136 let error_message = "failed to parse node address as valid URL";
137 let transaction = get_transaction();
138
139 let result = sdk.put_transaction(transaction, None, None).await;
141
142 assert!(result.is_err());
144 let err_string = result.err().unwrap().to_string();
145 assert!(err_string.contains(error_message));
146 }
147
148 #[tokio::test]
149 async fn test_put_transaction() {
150 let sdk = SDK::new(None, None, None);
152 let verbosity = Some(Verbosity::High);
153 let (rpc_address, _, _, _, _) = get_network_constants();
154 let transaction = get_transaction();
155
156 let result = sdk
158 .put_transaction(transaction, verbosity, Some(rpc_address))
159 .await;
160
161 assert!(result.is_ok());
163 }
164
165 #[tokio::test]
166 async fn test_put_transaction_with_error() {
167 let sdk = SDK::new(Some("http://localhost".to_string()), None, None);
169 let error_message = "error sending request for url (http://localhost/rpc)";
170 let transaction = get_transaction();
171
172 let result = sdk.put_transaction(transaction, None, None).await;
174
175 assert!(result.is_err());
177 let err_string = result.err().unwrap().to_string();
178 assert!(err_string.contains(error_message));
179 }
180}