Skip to main content

casper_rust_wasm_sdk/sdk/deploy_utils/
make_deploy.rs

1use crate::types::deploy::Deploy;
2use crate::{
3    types::{
4        deploy_params::{
5            deploy_str_params::{deploy_str_params_to_casper_client, DeployStrParams},
6            payment_str_params::{payment_str_params_to_casper_client, PaymentStrParams},
7            session_str_params::{session_str_params_to_casper_client, SessionStrParams},
8        },
9        sdk_error::SdkError,
10    },
11    SDK,
12};
13use casper_client::cli::deploy::make_deploy as client_make_deploy;
14#[cfg(all(feature = "js", target_arch = "wasm32"))]
15use wasm_bindgen::prelude::*;
16
17/// Exposes the `make_deploy` function to JavaScript with an alias.
18#[cfg(all(feature = "js", target_arch = "wasm32"))]
19#[cfg_attr(feature = "js", wasm_bindgen)]
20impl SDK {
21    /// JS function for `make_deploy`.
22    ///
23    /// # Arguments
24    ///
25    /// * `deploy_params` - The deploy parameters.
26    /// * `session_params` - The session parameters.
27    /// * `payment_params` - The payment parameters.
28    ///
29    /// # Returns
30    ///
31    /// A `Result` containing the created `Deploy` or a `JsError` in case of an error.
32    #[cfg_attr(feature = "js", wasm_bindgen(js_name = "make_deploy"))]
33    #[deprecated(note = "prefer 'make_transaction'")]
34    #[allow(deprecated)]
35    #[cfg(feature = "js")]
36    pub fn make_deploy_js_alias(
37        &self,
38        deploy_params: DeployStrParams,
39        session_params: SessionStrParams,
40        payment_params: PaymentStrParams,
41    ) -> Result<Deploy, JsError> {
42        let result = make_deploy(deploy_params, session_params, payment_params);
43        match result {
44            Ok(data) => Ok(data),
45            Err(err) => {
46                let err = &format!("Error occurred with {err:?}");
47                Err(JsError::new(err))
48            }
49        }
50    }
51}
52
53impl SDK {
54    /// Creates a deploy using the provided parameters.
55    ///
56    /// # Arguments
57    ///
58    /// * `deploy_params` - The deploy parameters.
59    /// * `session_params` - The session parameters.
60    /// * `payment_params` - The payment parameters.
61    ///
62    /// # Returns
63    ///
64    /// A `Result` containing the created `Deploy` or a `SdkError` in case of an error.
65    #[deprecated(note = "prefer 'make_transaction'")]
66    #[allow(deprecated)]
67    pub fn make_deploy(
68        &self,
69        deploy_params: DeployStrParams,
70        session_params: SessionStrParams,
71        payment_params: PaymentStrParams,
72    ) -> Result<Deploy, Box<SdkError>> {
73        make_deploy(deploy_params, session_params, payment_params)
74    }
75}
76
77/// Internal function to create a deploy.
78#[deprecated(note = "prefer 'make_transaction'")]
79#[allow(deprecated)]
80pub(crate) fn make_deploy(
81    deploy_params: DeployStrParams,
82    session_params: SessionStrParams,
83    payment_params: PaymentStrParams,
84) -> Result<Deploy, Box<SdkError>> {
85    // log("make_deploy");
86    client_make_deploy(
87        "",
88        deploy_str_params_to_casper_client(&deploy_params),
89        session_str_params_to_casper_client(&session_params),
90        payment_str_params_to_casper_client(&payment_params),
91        false,
92    )
93    .map(Into::into)
94    .map_err(|e| Box::new(SdkError::from(e)))
95}
96
97#[cfg(test)]
98#[allow(deprecated)]
99mod tests {
100
101    use super::*;
102    use crate::helpers::public_key_from_secret_key;
103    use sdk_tests::{
104        config::{ENTRYPOINT_MINT, PAYMENT_AMOUNT},
105        tests::helpers::{get_network_constants, get_user_secret_key},
106    };
107
108    #[tokio::test]
109    async fn test_make_deploy_with_valid_params() {
110        // Arrange
111        let sdk = SDK::new(None, None, None);
112        let (_, _, _, _, chain_name) = get_network_constants();
113        let secret_key = get_user_secret_key(None).unwrap();
114        let account = public_key_from_secret_key(&secret_key).unwrap();
115
116        let deploy_params =
117            DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
118        let session_params = SessionStrParams::default();
119        session_params.set_session_hash(
120            "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
121        );
122        session_params.set_session_entry_point(ENTRYPOINT_MINT);
123        let payment_params = PaymentStrParams::default();
124        payment_params.set_payment_amount(PAYMENT_AMOUNT);
125
126        // Act
127        let result = sdk.make_deploy(deploy_params, session_params, payment_params);
128
129        // Assert
130        assert!(result.is_ok());
131    }
132
133    #[tokio::test]
134    async fn test_make_deploy_with_valid_params_without_secret_key() {
135        // Arrange
136        let sdk = SDK::new(None, None, None);
137        let (_, _, _, _, chain_name) = get_network_constants();
138        let secret_key = get_user_secret_key(None).unwrap();
139        let account = public_key_from_secret_key(&secret_key).unwrap();
140
141        let deploy_params = DeployStrParams::new(&chain_name, &account, None, None, None, None);
142        let session_params = SessionStrParams::default();
143        session_params.set_session_hash(
144            "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
145        );
146        session_params.set_session_entry_point(ENTRYPOINT_MINT);
147        let payment_params = PaymentStrParams::default();
148        payment_params.set_payment_amount(PAYMENT_AMOUNT);
149
150        // Act
151        let result = sdk.make_deploy(deploy_params, session_params, payment_params);
152
153        // Assert
154        assert!(result.is_ok());
155    }
156
157    #[tokio::test]
158    async fn test_make_deploy_with_invalid_params() {
159        // Arrange
160        let sdk = SDK::new(None, None, None);
161        let (_, _, _, _, chain_name) = get_network_constants();
162        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\"]";
163        let secret_key = get_user_secret_key(None).unwrap();
164        let account = public_key_from_secret_key(&secret_key).unwrap();
165
166        let deploy_params =
167            DeployStrParams::new(&chain_name, &account, Some(secret_key), None, None, None);
168        let session_params = SessionStrParams::default();
169        session_params.set_session_hash(
170            "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
171        );
172        session_params.set_session_entry_point(ENTRYPOINT_MINT);
173        let payment_params = PaymentStrParams::default();
174        payment_params.set_payment_amount(""); // This is not valid payment amount
175
176        // Act
177        let result = sdk.make_deploy(deploy_params, session_params, payment_params);
178
179        // Assert
180        assert!(result.is_err());
181
182        let err_string = result.err().unwrap().to_string();
183        assert!(err_string.contains(error_message));
184    }
185}