casper_rust_wasm_sdk/sdk/deploy/
speculative_deploy.rs1#[cfg(target_arch = "wasm32")]
2use crate::rpcs::speculative_exec_deploy::SpeculativeExecResult;
3use crate::{
4 types::{
5 deploy_params::{
6 deploy_str_params::{deploy_str_params_to_casper_client, DeployStrParams},
7 payment_str_params::{payment_str_params_to_casper_client, PaymentStrParams},
8 session_str_params::{session_str_params_to_casper_client, SessionStrParams},
9 },
10 sdk_error::SdkError,
11 verbosity::Verbosity,
12 },
13 SDK,
14};
15use casper_client::{
16 cli::deploy::make_deploy, rpcs::results::SpeculativeExecResult as _SpeculativeExecResult,
17 SuccessResponse,
18};
19#[cfg(target_arch = "wasm32")]
20use wasm_bindgen::prelude::*;
21
22#[cfg(target_arch = "wasm32")]
23#[wasm_bindgen]
24impl SDK {
25 #[wasm_bindgen(js_name = "speculative_deploy")]
39 #[allow(clippy::too_many_arguments, deprecated)]
40 #[deprecated(note = "prefer speculative_transaction")]
41 pub async fn speculative_deploy_js_alias(
42 &self,
43 deploy_params: DeployStrParams,
44 session_params: SessionStrParams,
45 payment_params: PaymentStrParams,
46 verbosity: Option<Verbosity>,
47 rpc_address: Option<String>,
48 ) -> Result<SpeculativeExecResult, JsError> {
49 let result = self
50 .speculative_deploy(
51 deploy_params,
52 session_params,
53 payment_params,
54 verbosity,
55 rpc_address,
56 )
57 .await;
58 match result {
59 Ok(data) => Ok(data.result.into()),
60 Err(err) => {
61 let err = &format!("Error occurred with {:?}", err);
62 Err(JsError::new(err))
63 }
64 }
65 }
66}
67
68impl SDK {
69 #[allow(clippy::too_many_arguments, deprecated)]
83 #[deprecated(note = "prefer speculative_transaction")]
84 pub async fn speculative_deploy(
85 &self,
86 deploy_params: DeployStrParams,
87 session_params: SessionStrParams,
88 payment_params: PaymentStrParams,
89 verbosity: Option<Verbosity>,
90 rpc_address: Option<String>,
91 ) -> Result<SuccessResponse<_SpeculativeExecResult>, SdkError> {
92 let deploy = make_deploy(
94 "",
95 deploy_str_params_to_casper_client(&deploy_params),
96 session_str_params_to_casper_client(&session_params),
97 payment_str_params_to_casper_client(&payment_params),
98 false,
99 );
100
101 if let Err(err) = deploy {
102 return Err(SdkError::from(err));
103 }
104
105 self.speculative_exec_deploy(deploy.unwrap().into(), verbosity, rpc_address)
106 .await
107 }
108}
109
110#[cfg(test)]
111#[allow(deprecated)]
112mod tests {
113 use super::*;
114 use crate::helpers::public_key_from_secret_key;
115 use once_cell::sync::Lazy;
116 use sdk_tests::{
117 config::{ARGS_SIMPLE, HELLO_CONTRACT, PAYMENT_AMOUNT, WASM_PATH},
118 tests::helpers::{get_network_constants, get_user_secret_key, read_wasm_file},
119 };
120 use std::sync::Mutex;
121
122 static SESSION_PARAMS: Lazy<Mutex<Option<SessionStrParams>>> = Lazy::new(|| Mutex::new(None));
123
124 fn get_session_params() -> SessionStrParams {
125 let mut session_params = SESSION_PARAMS.lock().unwrap();
126
127 if session_params.is_none() {
128 let mut new_session_params = SessionStrParams::default();
129 let file_path = &format!("{WASM_PATH}{HELLO_CONTRACT}");
130 let module_bytes = match read_wasm_file(file_path) {
131 Ok(module_bytes) => module_bytes,
132 Err(err) => {
133 eprintln!("Error reading file: {:?}", err);
134 unimplemented!()
135 }
136 };
137 new_session_params.set_session_bytes(module_bytes.into());
138 let args_simple: Vec<String> = ARGS_SIMPLE.iter().map(|s| s.to_string()).collect();
139 new_session_params.set_session_args(args_simple);
140 *session_params = Some(new_session_params);
141 }
142
143 session_params.clone().unwrap()
144 }
145
146 #[tokio::test]
147 #[ignore]
148 async fn _test_speculative_deploy_with_valid_params() {
149 let sdk = SDK::new(None, None, None);
151 let verbosity = Some(Verbosity::High);
152 let (_, _, default_speculative_address, _, chain_name) = get_network_constants();
153
154 let secret_key = get_user_secret_key(None).unwrap();
155 let account = public_key_from_secret_key(&secret_key).unwrap();
156
157 let deploy_params =
158 DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
159 let payment_params = PaymentStrParams::default();
160 payment_params.set_payment_amount(PAYMENT_AMOUNT);
161
162 let result = sdk
164 .speculative_deploy(
165 deploy_params,
166 get_session_params().clone(),
167 payment_params,
168 verbosity,
169 Some(default_speculative_address),
170 )
171 .await;
172
173 assert!(result.is_ok());
175 }
176
177 #[tokio::test]
178 async fn test_speculative_deploy_with_valid_params_without_secret_key() {
179 let sdk = SDK::new(None, None, None);
181 let verbosity = Some(Verbosity::High);
182 let (_, _, default_speculative_address, _, chain_name) = get_network_constants();
183
184 let deploy_params = DeployStrParams::new(&chain_name, "", None, None, None, None);
185 let payment_params = PaymentStrParams::default();
186 payment_params.set_payment_amount(PAYMENT_AMOUNT);
187
188 let result = sdk
190 .speculative_deploy(
191 deploy_params,
192 get_session_params().clone(),
193 payment_params,
194 verbosity,
195 Some(default_speculative_address),
196 )
197 .await;
198
199 assert!(result.is_err());
201 }
202
203 #[tokio::test]
204 async fn test_speculative_deploy_with_invalid_params() {
205 let sdk = SDK::new(None, None, None);
207 let verbosity = Some(Verbosity::High);
208 let (_, _, default_speculative_address, _, _) = get_network_constants();
209
210 let error_message = "Missing a required arg - exactly one of the following must be provided: [\"payment_amount\", \"payment_hash\", \"payment_name\", \"payment_package_hash\", \"payment_package_name\", \"payment_path\", \"has_payment_bytes\"]";
211
212 let deploy_params = DeployStrParams::default();
213 let payment_params = PaymentStrParams::default();
214 payment_params.set_payment_amount(""); let result = sdk
218 .speculative_deploy(
219 deploy_params,
220 get_session_params().clone(),
221 payment_params,
222 verbosity,
223 Some(default_speculative_address),
224 )
225 .await;
226
227 assert!(result.is_err());
229
230 let err_string = result.err().unwrap().to_string();
231
232 assert!(err_string.contains(error_message));
233 }
234}