casper_rust_wasm_sdk/sdk/contract/
call_entrypoint_deploy.rs1#[cfg(target_arch = "wasm32")]
2use crate::deploy::deploy::PutDeployResult;
3use crate::types::deploy_params::{
4 deploy_str_params::{deploy_str_params_to_casper_client, DeployStrParams},
5 payment_str_params::{payment_str_params_to_casper_client, PaymentStrParams},
6 session_str_params::{session_str_params_to_casper_client, SessionStrParams},
7};
8use crate::{types::sdk_error::SdkError, SDK};
9use casper_client::{
10 cli::deploy::make_deploy, rpcs::results::PutDeployResult as _PutDeployResult, SuccessResponse,
11};
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 = "call_entrypoint_deploy")]
36 #[deprecated(note = "prefer 'call_entrypoint' with transaction")]
37 #[allow(deprecated)]
38 pub async fn call_entrypoint_deploy_js_alias(
39 &self,
40 deploy_params: DeployStrParams,
41 session_params: SessionStrParams,
42 payment_amount: &str,
43 rpc_address: Option<String>,
44 ) -> Result<PutDeployResult, JsError> {
45 let payment_params = PaymentStrParams::default();
46 payment_params.set_payment_amount(payment_amount);
47
48 let result = self
49 .call_entrypoint_deploy(deploy_params, session_params, payment_params, rpc_address)
50 .await;
51 match result {
52 Ok(data) => Ok(data.result.into()),
53 Err(err) => {
54 let err = &format!("Error occurred with {:?}", err);
55 Err(JsError::new(err))
56 }
57 }
58 }
59}
60
61impl SDK {
64 #[deprecated(note = "prefer 'call_entrypoint' with transaction")]
81 #[allow(deprecated)]
82 pub async fn call_entrypoint_deploy(
83 &self,
84 deploy_params: DeployStrParams,
85 session_params: SessionStrParams,
86 payment_params: PaymentStrParams,
87 rpc_address: Option<String>,
88 ) -> Result<SuccessResponse<_PutDeployResult>, SdkError> {
89 let deploy = make_deploy(
91 "",
92 deploy_str_params_to_casper_client(&deploy_params),
93 session_str_params_to_casper_client(&session_params),
94 payment_str_params_to_casper_client(&payment_params),
95 false,
96 )?;
97
98 self.put_deploy(deploy.into(), None, rpc_address)
99 .await
100 .map_err(SdkError::from)
101 }
102}
103
104#[cfg(test)]
105#[allow(deprecated)]
106mod tests {
107 use super::*;
108 use crate::{helpers::public_key_from_secret_key, install_cep78};
109 use sdk_tests::{
110 config::{ARGS_SIMPLE, ENTRYPOINT_MINT, PAYMENT_AMOUNT, TTL},
111 tests::helpers::{get_network_constants, get_user_secret_key},
112 };
113 use tokio;
114
115 async fn get_contract_hash() -> String {
116 install_cep78().await
117 }
118
119 #[tokio::test]
120 async fn test_call_entrypoint_deploy_with_none_values() {
121 let sdk = SDK::new(None, None, None);
123 let deploy_params = DeployStrParams::new("", "", None, None, None, None);
124 let session_params = SessionStrParams::default();
125 let payment_params = PaymentStrParams::default();
126
127 let error_message =
128 "Invalid argument 'is_session_transfer': requires --session-arg to be present";
129
130 let result = sdk
132 .call_entrypoint_deploy(deploy_params, session_params, payment_params, None)
133 .await;
134
135 assert!(result.is_err());
137 let err_string = result.err().unwrap().to_string();
138 assert!(err_string.contains(error_message));
139 }
140
141 #[tokio::test]
142 async fn test_call_entrypoint_deploy_with_valid_input() {
143 let sdk = SDK::new(None, None, None);
145 let (rpc_address, _, _, _, chain_name) = get_network_constants();
146 let secret_key = get_user_secret_key(None).unwrap();
147 let account = public_key_from_secret_key(&secret_key).unwrap();
148
149 let deploy_params =
150 DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
151
152 let payment_params = PaymentStrParams::default();
153 payment_params.set_payment_amount(PAYMENT_AMOUNT);
154
155 let mut session_params = SessionStrParams::default();
156 session_params
157 .set_session_hash(&get_contract_hash().await.replace("entity-contract", "hash"));
158 session_params.set_session_entry_point(ENTRYPOINT_MINT);
159 let args_simple: Vec<String> = ARGS_SIMPLE.iter().map(|s| s.to_string()).collect();
160 session_params.set_session_args(args_simple);
161
162 let result = sdk
164 .call_entrypoint_deploy(
165 deploy_params,
166 session_params,
167 payment_params,
168 Some(rpc_address),
169 )
170 .await;
171
172 assert!(result.is_ok());
174 let deploy_hash = result.unwrap().result.deploy_hash;
175 assert!(!deploy_hash.to_string().is_empty());
176 }
177
178 #[tokio::test]
179 async fn test_call_entrypoint_deploy_with_invalid_input() {
180 let sdk = SDK::new(None, None, None);
182 let (rpc_address, _, _, _, chain_name) = get_network_constants();
183 let secret_key = get_user_secret_key(None).unwrap();
184 let account = public_key_from_secret_key(&secret_key).unwrap();
185
186 let error_message =
187 "Missing a required arg - exactly one of the following must be provided";
188
189 let deploy_params = DeployStrParams::new(
190 &chain_name,
191 &account,
192 Some(secret_key.clone()),
193 None,
194 Some(TTL.to_string()),
195 None,
196 );
197
198 let payment_params = PaymentStrParams::default();
199 payment_params.set_payment_amount(""); let mut session_params = SessionStrParams::default();
202 session_params.set_session_hash(
203 "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
204 );
205 session_params.set_session_entry_point(ENTRYPOINT_MINT);
206 let args_simple: Vec<String> = ARGS_SIMPLE.iter().map(|s| s.to_string()).collect();
207 session_params.set_session_args(args_simple);
208
209 let result = sdk
211 .call_entrypoint_deploy(
212 deploy_params,
213 session_params,
214 payment_params,
215 Some(rpc_address),
216 )
217 .await;
218
219 assert!(result.is_err());
221 let err_string = result.err().unwrap().to_string();
222 assert!(err_string.contains(error_message));
223 }
224
225 #[tokio::test]
226 async fn test_call_entrypoint_deploy_without_secret_key() {
227 let sdk = SDK::new(None, None, None);
229 let (rpc_address, _, _, _, chain_name) = get_network_constants();
230 let secret_key = get_user_secret_key(None).unwrap();
231 let account = public_key_from_secret_key(&secret_key).unwrap();
232
233 let error_message = "the deploy was invalid: invalid associated keys";
234
235 let deploy_params = DeployStrParams::new(
236 &chain_name,
237 &account,
238 None,
239 None,
240 Some(TTL.to_string()),
241 None,
242 );
243 let payment_params = PaymentStrParams::default();
244 payment_params.set_payment_amount(PAYMENT_AMOUNT);
245
246 let mut session_params = SessionStrParams::default();
247 session_params.set_session_hash(
248 "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
249 );
250 session_params.set_session_entry_point(ENTRYPOINT_MINT);
251 let args_simple: Vec<String> = ARGS_SIMPLE.iter().map(|s| s.to_string()).collect();
252 session_params.set_session_args(args_simple);
253
254 let result = sdk
256 .call_entrypoint_deploy(
257 deploy_params,
258 session_params,
259 payment_params,
260 Some(rpc_address),
261 )
262 .await;
263
264 assert!(result.is_err());
266 let err_string = result.err().unwrap().to_string();
267 assert!(err_string.contains(error_message));
268 }
269
270 #[tokio::test]
271 async fn test_call_entrypoint_deploy_with_error() {
272 let sdk = SDK::new(Some("http://localhost".to_string()), None, None);
274 let (_, _, _, _, chain_name) = get_network_constants();
275 let secret_key = get_user_secret_key(None).unwrap();
276 let account = public_key_from_secret_key(&secret_key).unwrap();
277
278 let deploy_params = DeployStrParams::new(
279 &chain_name,
280 &account,
281 Some(secret_key.clone()),
282 None,
283 None,
284 None,
285 );
286
287 let error_message = "error sending request for url (http://localhost/rpc)";
288
289 let payment_params = PaymentStrParams::default();
290 payment_params.set_payment_amount(PAYMENT_AMOUNT);
291
292 let mut session_params = SessionStrParams::default();
293 session_params.set_session_hash(
294 "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
295 );
296 session_params.set_session_entry_point(ENTRYPOINT_MINT);
297 let args_simple: Vec<String> = ARGS_SIMPLE.iter().map(|s| s.to_string()).collect();
298 session_params.set_session_args(args_simple);
299
300 let result = sdk
302 .call_entrypoint_deploy(deploy_params, session_params, payment_params, None)
303 .await;
304
305 assert!(result.is_err());
307 let err_string = result.err().unwrap().to_string();
308 assert!(err_string.contains(error_message));
309 }
310}