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