1use cosmwasm_std::{Addr, Uint128};
2use cw20::Cw20ReceiveMsg;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6use cw_utils::Duration;
7
8pub use cw_controllers::ClaimsResponse;
9
10#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, PartialEq)]
11pub struct InstantiateMsg {
12 pub admin: Option<String>,
13 pub token_address: String,
14 pub unstaking_duration: Option<Duration>,
15}
16
17#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
18#[serde(rename_all = "snake_case")]
19pub enum ExecuteMsg {
20 Receive(Cw20ReceiveMsg),
21 Unstake {
22 amount: Uint128,
23 },
24 Claim {},
25 UpdateConfig {
26 admin: Option<String>,
27 duration: Option<Duration>,
28 },
29}
30#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
31#[serde(rename_all = "snake_case")]
32pub enum ReceiveMsg {
33 Stake {},
34 Fund {},
35}
36
37#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
38#[serde(rename_all = "snake_case")]
39pub enum QueryMsg {
40 StakedBalanceAtHeight {
41 address: String,
42 height: Option<u64>,
43 },
44 TotalStakedAtHeight {
45 height: Option<u64>,
46 },
47 StakedValue {
48 address: String,
49 },
50 TotalValue {},
51 GetConfig {},
52 Claims {
53 address: String,
54 },
55}
56
57#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
58#[serde(rename_all = "snake_case")]
59pub struct StakedBalanceAtHeightResponse {
60 pub balance: Uint128,
61 pub height: u64,
62}
63
64#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
65#[serde(rename_all = "snake_case")]
66pub struct TotalStakedAtHeightResponse {
67 pub total: Uint128,
68 pub height: u64,
69}
70
71#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
72#[serde(rename_all = "snake_case")]
73pub struct StakedValueResponse {
74 pub value: Uint128,
75}
76
77#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
78#[serde(rename_all = "snake_case")]
79pub struct TotalValueResponse {
80 pub total: Uint128,
81}
82
83#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
84#[serde(rename_all = "snake_case")]
85pub struct GetConfigResponse {
86 pub admin: Option<Addr>,
87 pub token_address: Addr,
88 pub unstaking_duration: Option<Duration>,
89}