olympus_pro/
custom_bond.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::{Decimal, Uint128};
5use cw20::Cw20ReceiveMsg;
6use terraswap::asset::AssetInfo;
7
8#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
9pub struct InstantiateMsg {
10    pub custom_treasury: String,
11    pub principal_token: AssetInfo,
12    pub olympus_treasury: String,
13    pub subsidy_router: String,
14    pub initial_owner: String,
15    pub olympus_dao: String,
16    pub fee_tiers: Vec<FeeTier>,
17    pub fee_in_payout: bool,
18}
19
20#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
21#[serde(rename_all = "snake_case")]
22pub enum ExecuteMsg {
23    Receive(Cw20ReceiveMsg),
24    InitializeBond {
25        terms: Terms,
26        initial_debt: Uint128,
27    },
28    SetBondTerms {
29        vesting_term: Option<u64>,
30        max_payout: Option<Decimal>,
31        max_debt: Option<Uint128>,
32    },
33    SetAdjustment {
34        addition: bool,
35        increment: Decimal,
36        target: Decimal,
37        buffer: u64,
38    },
39    UpdatePolicy {
40        policy: String,
41    },
42    UpdateOlympusTreasury {
43        olympus_treasury: String,
44    },
45    PaySubsidy {},
46    Deposit {
47        max_price: Decimal,
48        depositor: String,
49    },
50    Redeem {},
51}
52
53#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
54#[serde(rename_all = "snake_case")]
55pub enum Cw20HookMsg {
56    Deposit {
57        max_price: Decimal,
58        depositor: String,
59    },
60}
61
62#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
63#[serde(rename_all = "snake_case")]
64pub struct MigrateMsg {}
65
66#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
67#[serde(rename_all = "snake_case")]
68pub enum QueryMsg {
69    Config {},
70    State {},
71    BondPrice {},
72    PayoutFor { value: Uint128 },
73    CurrentDebt {},
74    CurrentOlympusFee {},
75    BondInfo { user: String },
76}
77
78// We define a custom struct for each query response
79#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
80pub struct ConfigResponse {
81    pub custom_treasury: String,
82    pub payout_token: String,
83    pub principal_token: AssetInfo,
84    pub olympus_treasury: String,
85    pub subsidy_router: String,
86    pub policy: String,
87    pub olympus_dao: String,
88    pub fee_tiers: Vec<FeeTier>,
89    pub fee_in_payout: bool,
90}
91
92#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default)]
93pub struct Terms {
94    pub control_variable: Decimal,
95    pub vesting_term: u64,
96    pub minimum_price: Decimal,
97    pub max_payout: Decimal,
98    pub max_debt: Uint128,
99}
100
101#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default)]
102pub struct Adjustment {
103    pub addition: bool,
104    pub rate: Decimal,
105    pub target: Decimal,
106    pub buffer: u64,
107    pub last_time: u64,
108}
109
110#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default)]
111pub struct State {
112    pub total_debt: Uint128,
113    pub terms: Terms,
114    pub last_decay: u64,
115    pub adjustment: Adjustment,
116    pub payout_since_last_subsidy: Uint128,
117    pub total_principal_bonded: Uint128,
118    pub total_payout_given: Uint128,
119}
120
121#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
122pub struct FeeTier {
123    pub tier_ceiling: Uint128,
124    pub fee_rate: Decimal,
125}
126
127#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default)]
128pub struct BondInfo {
129    pub payout: Uint128,
130    pub vesting: u64,
131    pub last_time: u64,
132    pub true_price_paid: Decimal,
133}
134
135#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default)]
136pub struct BondInfoResponse {
137    pub info: BondInfo,
138    pub pending_payout: Uint128,
139}