iota_cluster_test/test_case/
fullnode_build_publish_transaction_test.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use async_trait::async_trait;
6use iota_core::test_utils::compile_basics_package;
7use iota_json_rpc_types::IotaTransactionBlockEffectsAPI;
8use iota_types::{base_types::ObjectID, object::Owner};
9use jsonrpsee::rpc_params;
10
11use crate::{TestCaseImpl, TestContext};
12
13pub struct FullNodeBuildPublishTransactionTest;
14
15#[async_trait]
16impl TestCaseImpl for FullNodeBuildPublishTransactionTest {
17    fn name(&self) -> &'static str {
18        "FullNodeBuildPublishTransaction"
19    }
20
21    fn description(&self) -> &'static str {
22        "Test building publish transaction via full node"
23    }
24
25    async fn run(&self, ctx: &mut TestContext) -> Result<(), anyhow::Error> {
26        let compiled_package = compile_basics_package();
27        let all_module_bytes =
28            compiled_package.get_package_base64(/* with_unpublished_deps */ false);
29        let dependencies = compiled_package.get_dependency_storage_package_ids();
30
31        let params = rpc_params![
32            ctx.get_wallet_address(),
33            all_module_bytes,
34            dependencies,
35            None::<ObjectID>,
36            // Doesn't need to be scaled by RGP since most of the cost is storage
37            50_000_000.to_string()
38        ];
39
40        let data = ctx
41            .build_transaction_remotely("unsafe_publish", params)
42            .await?;
43        let response = ctx.sign_and_execute(data, "publish basics package").await;
44        response
45            .effects
46            .as_ref()
47            .unwrap()
48            .created()
49            .iter()
50            .find(|obj_ref| obj_ref.owner == Owner::Immutable)
51            .unwrap();
52
53        Ok(())
54    }
55}