1use cosmwasm_std::Uint128;
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4
5use crate::common::OrderBy;
6
7#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
8pub struct InstantiateMsg {
9 pub owner: String,
10 pub pylon_token: String,
11 pub genesis_time: u64,
12}
13
14#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
15#[serde(rename_all = "snake_case")]
16pub enum ExecuteMsg {
17 UpdateConfig {
18 owner: Option<String>,
19 pylon_token: Option<String>,
20 genesis_time: Option<u64>,
21 },
22 RegisterVestingAccounts {
23 vesting_accounts: Vec<VestingAccount>,
24 },
25 Claim {},
26}
27
28#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
30pub struct VestingAccount {
31 pub address: String,
32 pub schedules: Vec<(u64, u64, Uint128)>,
33}
34
35#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
36pub struct VestingInfo {
37 pub schedules: Vec<(u64, u64, Uint128)>,
38 pub last_claim_time: u64,
39}
40
41#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
42#[serde(rename_all = "snake_case")]
43pub enum QueryMsg {
44 Config {},
45 VestingAccount {
46 address: String,
47 },
48 VestingAccounts {
49 start_after: Option<String>,
50 limit: Option<u32>,
51 order_by: Option<OrderBy>,
52 },
53}
54
55#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
57pub struct ConfigResponse {
58 pub owner: String,
59 pub pylon_token: String,
60 pub genesis_time: u64,
61}
62
63#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
65pub struct VestingAccountResponse {
66 pub address: String,
67 pub info: VestingInfo,
68}
69
70#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
72pub struct VestingAccountsResponse {
73 pub vesting_accounts: Vec<VestingAccountResponse>,
74}