casper_rust_wasm_sdk/sdk/deploy_utils/
sign_deploy.rs

1use crate::{types::deploy::Deploy, SDK};
2#[cfg(target_arch = "wasm32")]
3use wasm_bindgen::prelude::*;
4
5/// Exposes the `sign_deploy` function to JavaScript with an alias.
6#[cfg(target_arch = "wasm32")]
7#[wasm_bindgen]
8impl SDK {
9    /// JS function for `sign_deploy`.
10    ///
11    /// # Arguments
12    ///
13    /// * `deploy` - The deploy to sign.
14    /// * `secret_key` - The secret key for signing.
15    ///
16    /// # Returns
17    ///
18    /// The signed `Deploy`.
19    #[deprecated(note = "prefer sign_transaction")]
20    #[allow(deprecated)]
21    #[wasm_bindgen(js_name = "sign_deploy")]
22    pub fn sign_deploy_js_alias(&self, deploy: Deploy, secret_key: &str) -> Deploy {
23        sign_deploy(deploy, secret_key)
24    }
25}
26
27impl SDK {
28    /// Signs a deploy using the provided secret key.
29    ///
30    /// # Arguments
31    ///
32    /// * `deploy` - The deploy to sign.
33    /// * `secret_key` - The secret key for signing.
34    ///
35    /// # Returns
36    ///
37    /// The signed `Deploy`.
38    #[deprecated(note = "prefer sign_transaction")]
39    #[allow(deprecated)]
40    pub fn sign_deploy(&self, deploy: Deploy, secret_key: &str) -> Deploy {
41        sign_deploy(deploy, secret_key)
42    }
43}
44
45/// Internal function to sign a deploy.
46#[deprecated(note = "prefer sign_transaction")]
47#[allow(deprecated)]
48pub(crate) fn sign_deploy(mut deploy: Deploy, secret_key: &str) -> Deploy {
49    // log("sign_deploy!");
50    deploy.sign(secret_key)
51}
52
53#[cfg(test)]
54#[allow(deprecated)]
55mod tests {
56    use super::*;
57    use crate::{
58        helpers::public_key_from_secret_key,
59        types::deploy_params::{
60            deploy_str_params::DeployStrParams, payment_str_params::PaymentStrParams,
61            session_str_params::SessionStrParams,
62        },
63    };
64    use sdk_tests::{
65        config::{ENTRYPOINT_MINT, PAYMENT_AMOUNT},
66        tests::helpers::{get_network_constants, get_user_secret_key},
67    };
68
69    #[tokio::test]
70    async fn test_sign_deploy_with_valid_params() {
71        // Arrange
72        let sdk = SDK::new(None, None, None);
73        let (_, _, _, _, chain_name) = get_network_constants();
74
75        let secret_key = get_user_secret_key(None).unwrap();
76        let account = public_key_from_secret_key(&secret_key).unwrap();
77
78        let deploy_params = DeployStrParams::new(&chain_name, &account, None, None, None, None);
79        let session_params = SessionStrParams::default();
80        session_params.set_session_hash(
81            "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
82        );
83        session_params.set_session_entry_point(ENTRYPOINT_MINT);
84        let payment_params = PaymentStrParams::default();
85        payment_params.set_payment_amount(PAYMENT_AMOUNT);
86
87        // Act
88        let deploy = sdk
89            .make_deploy(deploy_params, session_params, payment_params)
90            .unwrap();
91
92        let signed_deploy = sdk.sign_deploy(deploy, &secret_key);
93
94        // Assert
95        assert!(signed_deploy.is_valid());
96        assert!(signed_deploy.has_valid_hash());
97        assert!(!signed_deploy
98            .compute_approvals_hash()
99            .unwrap()
100            .to_string()
101            .is_empty());
102        assert_eq!(signed_deploy.account(), account);
103    }
104
105    #[tokio::test]
106    async fn test_sign_deploy_with_invalid_signature() {
107        // Arrange
108        let sdk = SDK::new(None, None, None);
109        let (_, _, _, _, chain_name) = get_network_constants();
110
111        let secret_key = get_user_secret_key(None).unwrap();
112        let account = public_key_from_secret_key(&secret_key).unwrap();
113
114        let deploy_params = DeployStrParams::new(&chain_name, &account, None, None, None, None);
115        let session_params = SessionStrParams::default();
116        session_params.set_session_hash(
117            "hash-cfa781f5eb69c3eee952c2944ce9670a049f88c5e46b83fb5881ebe13fb98e6d",
118        );
119        session_params.set_session_entry_point(ENTRYPOINT_MINT);
120        let payment_params = PaymentStrParams::default();
121        payment_params.set_payment_amount(PAYMENT_AMOUNT);
122
123        // Act
124        let deploy = sdk
125            .make_deploy(deploy_params, session_params, payment_params)
126            .unwrap();
127
128        let signed_deploy = sdk.sign_deploy(deploy, "test_wrong_signature");
129
130        // Assert
131        assert!(signed_deploy.has_valid_hash());
132        assert!(!signed_deploy.is_valid());
133        assert!(!signed_deploy
134            .compute_approvals_hash()
135            .unwrap()
136            .to_string()
137            .is_empty());
138        assert_eq!(signed_deploy.account(), account);
139    }
140}