fuzion_flows/
execute.rs

1use std::fmt;
2
3use fuzion_std::FeeCollector;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7use cosmwasm_std::{Addr, Decimal, Uint128};
8
9#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
10#[serde(rename_all = "snake_case")]
11pub enum ExecuteMsg {
12    UpdateConfig(UpdateConfigMsg),
13    ConfirmConfig {},
14    CreateFlows {
15        flow_list: Vec<FlowCreate>,
16    },
17    CreateFlowTemplate {
18        flow_template: FlowTemplateCreate,
19    },
20    CreateFlowFromTemplate {
21        template_id: u64,
22        taker: Addr,
23        identifier: Option<String>,
24    },
25    Claim {
26        id: u64,
27    },
28}
29
30#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
31#[serde(rename_all = "snake_case")]
32pub struct ConfigMsg {
33    pub admins: Admins,
34    pub contracts: Contracts,
35    pub flow_type_config: Vec<FlowTypeConfigMsg>,
36}
37
38#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
39#[serde(rename_all = "snake_case")]
40pub struct UpdateConfigMsg {
41    pub admins: Option<Admins>,
42    pub contracts: Option<Contracts>,
43    pub flow_type_config: Option<Vec<FlowTypeConfigMsg>>,
44}
45
46#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
47#[serde(rename_all = "snake_case")]
48pub struct Admins {
49    pub config_admin: Addr,
50    pub confirm_admin: Addr,
51}
52
53#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
54#[serde(rename_all = "snake_case")]
55pub struct Contracts {
56    pub oracle_price_contract: Addr,
57    pub utilities_contract: Addr,
58    pub funds_distributor_contract: Addr,
59}
60
61#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
62#[serde(rename_all = "snake_case")]
63pub struct FlowTypeConfigMsg {
64    pub flow_type: FlowType,
65    pub fee: Decimal,
66    pub partner_fee: Decimal,
67    pub fee_collectors: Vec<FeeCollector>,
68}
69
70#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
71pub struct FlowTemplateCreate {
72    pub flow_type: FlowType,
73    pub genesis_time: u64,
74    pub maker: Option<Addr>,
75    pub identifier: Option<u64>,
76    pub schedules: Vec<FlowTemplateSchedule>,
77}
78
79#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
80pub struct FlowCreate {
81    pub flow_type: FlowType,
82    pub taker: Addr,
83    pub denom: String,
84    pub identifier: Option<String>,
85    pub genesis_time: u64,
86    pub schedules: Vec<FlowSchedule>,
87}
88
89#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)]
90pub enum FlowType {
91    Vesting,
92}
93
94impl fmt::Display for FlowType {
95    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
96        write!(f, "{self:?}")
97    }
98}
99
100#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
101pub struct FlowTemplateSchedule {
102    pub start_time: u64,
103    pub end_time: u64,
104    pub cliff_end_time: u64,
105    pub percent: Uint128,
106}
107
108#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
109pub struct FlowSchedule {
110    pub start_time: u64,
111    pub end_time: u64,
112    pub cliff_end_time: u64,
113    pub amount: Uint128,
114}
115
116#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
117pub struct ExtendedFlowSchedule {
118    pub start_time: u64,
119    pub end_time: u64,
120    pub cliff_end_time: u64,
121    pub amount: Uint128,
122    pub claimed: Uint128,
123    pub claimable: Uint128,
124}
125
126impl ExtendedFlowSchedule {
127    pub fn new(
128        start_time: u64,
129        end_time: u64,
130        cliff_end_time: u64,
131        amount: Uint128,
132        claimed: Uint128,
133        claimable: Uint128,
134    ) -> Self {
135        Self {
136            start_time,
137            end_time,
138            cliff_end_time,
139            amount,
140            claimed,
141            claimable,
142        }
143    }
144}