sui_types/sui_system_state/
mock.rs1use crate::balance::Balance;
5use crate::base_types::{MoveObjectType, TransactionDigest};
6use crate::collection_types::VecMap;
7use crate::dynamic_field::{derive_dynamic_field_id, serialize_dynamic_field};
8use crate::id::UID;
9use crate::object::{MoveObject, Object, Owner};
10use crate::sui_system_state::sui_system_state_inner_v1::{
11 StakeSubsidyV1, StorageFundV1, SuiSystemStateInnerV1, SystemParametersV1, ValidatorSetV1,
12};
13use crate::sui_system_state::sui_system_state_inner_v2::{
14 SuiSystemStateInnerV2, SystemParametersV2,
15};
16use crate::sui_system_state::{SuiSystemState, SuiSystemStateWrapper};
17use crate::{MoveTypeTagTrait, SUI_SYSTEM_STATE_OBJECT_ID};
18use sui_protocol_config::ProtocolConfig;
19
20pub fn validator_set_v1() -> ValidatorSetV1 {
21 ValidatorSetV1 {
22 total_stake: 0,
23 active_validators: vec![],
24 pending_active_validators: Default::default(),
25 pending_removals: vec![],
26 staking_pool_mappings: Default::default(),
27 inactive_validators: Default::default(),
28 validator_candidates: Default::default(),
29 at_risk_validators: VecMap { contents: vec![] },
30 extra_fields: Default::default(),
31 }
32}
33
34pub fn storage_fund_v1() -> StorageFundV1 {
35 StorageFundV1 {
36 total_object_storage_rebates: Balance::new(0),
37 non_refundable_balance: Balance::new(0),
38 }
39}
40
41pub fn system_parameters_v1() -> SystemParametersV1 {
42 SystemParametersV1 {
43 epoch_duration_ms: 0,
44 stake_subsidy_start_epoch: 0,
45 max_validator_count: 0,
46 min_validator_joining_stake: 0,
47 validator_low_stake_threshold: 0,
48 validator_very_low_stake_threshold: 0,
49 validator_low_stake_grace_period: 0,
50 extra_fields: Default::default(),
51 }
52}
53
54pub fn stake_subsidy_v1() -> StakeSubsidyV1 {
55 StakeSubsidyV1 {
56 balance: Balance::new(0),
57 distribution_counter: 0,
58 current_distribution_amount: 0,
59 stake_subsidy_period_length: 0,
60 stake_subsidy_decrease_rate: 0,
61 extra_fields: Default::default(),
62 }
63}
64
65pub fn sui_system_state_inner_v1() -> SuiSystemStateInnerV1 {
66 SuiSystemStateInnerV1 {
67 epoch: 0,
68 protocol_version: 0,
69 system_state_version: 1,
71 validators: validator_set_v1(),
72 storage_fund: storage_fund_v1(),
73 parameters: system_parameters_v1(),
74 reference_gas_price: 0,
75 validator_report_records: VecMap { contents: vec![] },
76 stake_subsidy: stake_subsidy_v1(),
77 safe_mode: false,
78 safe_mode_storage_rewards: Balance::new(0),
79 safe_mode_computation_rewards: Balance::new(0),
80 safe_mode_storage_rebates: 0,
81 safe_mode_non_refundable_storage_fee: 0,
82 epoch_start_timestamp_ms: 0,
83 extra_fields: Default::default(),
84 }
85}
86
87pub fn system_parameters_v2() -> SystemParametersV2 {
88 SystemParametersV2 {
89 epoch_duration_ms: 0,
90 stake_subsidy_start_epoch: 0,
91 min_validator_count: 0,
92 max_validator_count: 0,
93 min_validator_joining_stake: 0,
94 validator_low_stake_threshold: 0,
95 validator_very_low_stake_threshold: 0,
96 validator_low_stake_grace_period: 0,
97 extra_fields: Default::default(),
98 }
99}
100
101pub fn sui_system_state_inner_v2() -> SuiSystemStateInnerV2 {
102 SuiSystemStateInnerV2 {
103 epoch: 0,
104 protocol_version: 0,
105 system_state_version: 2,
107 validators: validator_set_v1(),
108 storage_fund: storage_fund_v1(),
109 parameters: system_parameters_v2(),
110 reference_gas_price: 0,
111 validator_report_records: VecMap { contents: vec![] },
112 stake_subsidy: stake_subsidy_v1(),
113 safe_mode: false,
114 safe_mode_storage_rewards: Balance::new(0),
115 safe_mode_computation_rewards: Balance::new(0),
116 safe_mode_storage_rebates: 0,
117 safe_mode_non_refundable_storage_fee: 0,
118 epoch_start_timestamp_ms: 0,
119 extra_fields: Default::default(),
120 }
121}
122
123pub fn system_state_output_objects(sui_system_state: SuiSystemState) -> Vec<Object> {
124 let version = sui_system_state.version();
125 let system_state_wrapper_object = Object::new_move(
126 unsafe {
127 MoveObject::new_from_execution(
128 MoveObjectType::gas_coin(),
129 true,
131 0.into(),
132 bcs::to_bytes(&SuiSystemStateWrapper {
133 id: UID::new(SUI_SYSTEM_STATE_OBJECT_ID),
135 version,
136 })
137 .unwrap(),
138 &ProtocolConfig::get_for_max_version_UNSAFE(),
139 false,
140 )
141 .unwrap()
142 },
143 Owner::Immutable,
144 TransactionDigest::genesis_marker(),
145 );
146 let dynamic_field_key = 0u64; let system_state_object_id = derive_dynamic_field_id(
150 SUI_SYSTEM_STATE_OBJECT_ID,
151 &dynamic_field_key.get_instance_type_tag(),
152 &bcs::to_bytes(&version).unwrap(),
153 )
154 .unwrap();
155
156 let field_id = UID::new(system_state_object_id);
157 let object_bytes = match sui_system_state {
158 SuiSystemState::V1(inner) => serialize_dynamic_field(&field_id, &dynamic_field_key, inner),
159 SuiSystemState::V2(inner) => serialize_dynamic_field(&field_id, &dynamic_field_key, inner),
160 #[cfg(msim)]
161 SuiSystemState::SimTestV1(_)
162 | SuiSystemState::SimTestShallowV2(_)
163 | SuiSystemState::SimTestDeepV2(_) => unimplemented!(),
164 }
165 .unwrap();
166 let system_state_inner_object = Object::new_move(
167 unsafe {
168 MoveObject::new_from_execution(
169 MoveObjectType::gas_coin(),
170 true,
171 0.into(),
172 object_bytes,
173 &ProtocolConfig::get_for_max_version_UNSAFE(),
174 false,
175 )
176 .unwrap()
177 },
178 Owner::Immutable,
179 TransactionDigest::genesis_marker(),
180 );
181 vec![system_state_wrapper_object, system_state_inner_object]
182}