canic_core/dto/pool_import/
mod.rs1use candid::{CandidType, Principal};
4use serde::{Deserialize, Serialize};
5
6#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
9#[serde(deny_unknown_fields)]
10pub struct PoolImportBootstrap {
11 pub review_sha256: [u8; 32],
12 pub operator: Principal,
13 pub sources: Vec<Principal>,
14}
15
16#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
18pub struct PoolImportSource {
19 pub canister_id: Principal,
20 pub controllers: Vec<Principal>,
22 #[serde(deserialize_with = "crate::cdk::serialize::required_option")]
23 pub module_sha256: Option<[u8; 32]>,
24 pub canister_version: u64,
25 pub stopped: bool,
26 pub disposition_sha256: [u8; 32],
27 pub observed_cycles: u128,
28 pub observed_reserved_cycles: u128,
29 pub minimum_ready_cycles: u128,
30 pub maximum_debit_cycles: u128,
31}
32
33#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
35pub struct PoolImportReservation {
36 pub sequence: u64,
37 pub plan_sha256: [u8; 32],
38 pub root_authority_sha256: [u8; 32],
39 pub root: Principal,
40 pub operator: Principal,
41 pub subnet: Principal,
42 pub transitional_controllers: Vec<Principal>,
43 pub final_controllers: Vec<Principal>,
44 pub sources: Vec<PoolImportSource>,
45 pub observed_root_cycles: u128,
46 pub observed_root_reserved_cycles: u128,
47 pub minimum_root_cycles: u128,
48 pub maximum_root_debit_cycles: u128,
49 pub maximum_paid_calls: u32,
50}
51
52#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
54pub struct PoolImportIdentity {
55 pub sequence: u64,
56 pub plan_sha256: [u8; 32],
57}
58
59#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
61pub struct PoolImportSourceReceipt {
62 pub root_sender_canister_version: u64,
63 pub canister_id: Principal,
64 pub canister_version: u64,
65 pub before_uninstall_canister_version: u64,
66 pub retained_cycles: u128,
67 pub retained_reserved_cycles: u128,
68 pub observed_debit_cycles: u128,
69}
70
71#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
73pub enum PoolImportSourceProgress {
74 AwaitingHandoff,
75 ControllersIssued,
76 ControllersConfirmed,
77 StopIssued,
78 Stopped,
79 UninstallIssued,
80 Ready(PoolImportSourceReceipt),
81}
82
83#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
85pub enum PoolImportPhase {
86 Reserved,
87 Ready,
88 Released { publication_sha256: [u8; 32] },
89}
90
91#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
93pub struct PoolImportStatus {
94 pub reserved_at_ns: u64,
95 pub reservation: PoolImportReservation,
96 pub progress: Vec<PoolImportSourceProgress>,
97 pub phase: PoolImportPhase,
98 pub paid_calls: u32,
99 pub reserved_debit_cycles: u128,
100 pub last_root_cycles: u128,
101 #[serde(deserialize_with = "crate::cdk::serialize::required_option")]
102 pub root_receipt: Option<PoolImportRootReceipt>,
103}
104
105#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
107pub struct PoolImportContext {
108 pub maximum_call_debit_cycles: u128,
110 pub bootstrap: Option<PoolImportBootstrap>,
111 pub binding: crate::ids::FleetSubnetRootBinding,
112 pub root_authority_sha256: [u8; 32],
113 pub next_sequence: u64,
114 pub active_import: Option<PoolImportIdentity>,
115}
116
117#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
119pub struct PoolImportRootReceipt {
120 pub retained_cycles: u128,
121 pub retained_reserved_cycles: u128,
122 pub observed_debit_cycles: u128,
123}
124
125#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
127pub enum PoolImportCommand {
128 Advance {
129 identity: PoolImportIdentity,
130 canister_id: Principal,
131 },
132 Release {
133 identity: PoolImportIdentity,
134 publication_sha256: [u8; 32],
135 },
136 Reserve(Box<PoolImportReservation>),
137 Settle(PoolImportIdentity),
138}