1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
//! Entrypoint messages for liquidity token proxy
use super::LiquidityTokenKind;
use cosmwasm_schema::QueryResponses;
use cosmwasm_std::{Binary, Uint128};
use cw_utils::Expiration;
use shared::prelude::*;

/// Instantiate message for liquidity token proxy
#[cw_serde]
pub struct InstantiateMsg {
    /// The factory address
    pub factory: RawAddr,
    /// Unique market identifier, also used for `symbol` in ContractInfo response
    pub market_id: MarketId,
    /// The liquidity token kind
    pub kind: LiquidityTokenKind,
}

/// Execute message for liquidity token proxy
#[cw_serde]
pub enum ExecuteMsg {
    /************** Cw20 spec *******************/
    /// Transfer is a base message to move tokens to another account without triggering actions
    Transfer {
        /// Recipient of the funds
        recipient: RawAddr,
        /// Amount to transfer
        amount: Uint128,
    },
    /// Send is a base message to transfer tokens to a contract and trigger an action
    /// on the receiving contract.
    Send {
        /// Contract to receive the funds
        contract: RawAddr,
        /// Amount to send
        amount: Uint128,
        /// Message to execute on the receiving contract
        msg: Binary,
    },
    /// Allows spender to access an additional amount tokens
    /// from the owner's (env.sender) account. If expires is Some(), overwrites current allowance
    /// expiration with this one.
    IncreaseAllowance {
        /// Who is allowed to spend
        spender: RawAddr,
        /// Amount they can spend
        amount: Uint128,
        /// When the allowance expires
        expires: Option<Expiration>,
    },
    /// Lowers the spender's access of tokens
    /// from the owner's (env.sender) account by amount. If expires is Some(), overwrites current
    /// allowance expiration with this one.
    DecreaseAllowance {
        /// Whose spending to reduced
        spender: RawAddr,
        /// Amount to reduce by
        amount: Uint128,
        /// When the allowance should expire
        expires: Option<Expiration>,
    },
    /// Transfers amount tokens from owner -> recipient
    /// if `env.sender` has sufficient pre-approval.
    TransferFrom {
        /// Owner of the tokens being transferred
        owner: RawAddr,
        /// Recipient of the tokens
        recipient: RawAddr,
        /// Amount to send
        amount: Uint128,
    },
    /// Sends amount tokens from owner -> contract
    /// if `env.sender` has sufficient pre-approval.
    SendFrom {
        /// Owner of the tokens being transferred
        owner: RawAddr,
        /// Contract to receive the funds
        contract: RawAddr,
        /// Amount to send
        amount: Uint128,
        /// Message to execute on the receiving contract
        msg: Binary,
    },
}

/// Query message for liquidity token proxy
#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
    /************** Cw20 spec *******************/
    /// * returns [crate::contracts::cw20::entry::BalanceResponse]
    ///
    /// The current balance of the given address, 0 if unset.
    #[returns(crate::contracts::cw20::entry::BalanceResponse)]
    Balance {
        /// Address whose balance to check
        address: RawAddr,
    },

    /// * returns [crate::contracts::cw20::entry::TokenInfoResponse]
    ///
    /// Returns metadata on the contract - name, decimals, supply, etc.
    #[returns(crate::contracts::cw20::entry::TokenInfoResponse)]
    TokenInfo {},

    /// * returns [crate::contracts::cw20::entry::AllowanceResponse]
    ///
    /// Returns how much spender can use from owner account, 0 if unset.
    #[returns(crate::contracts::cw20::entry::AllowanceResponse)]
    Allowance {
        /// Owner of tokens
        owner: RawAddr,
        /// Who is allowed to spend them
        spender: RawAddr,
    },

    /// * returns [crate::contracts::cw20::entry::AllAllowancesResponse]
    ///
    /// Returns all allowances this owner has approved. Supports pagination.
    #[returns(crate::contracts::cw20::entry::AllAllowancesResponse)]
    AllAllowances {
        /// Owner of tokens
        owner: RawAddr,
        /// Last spender we saw
        start_after: Option<RawAddr>,
        /// How many spenders to iterate on
        limit: Option<u32>,
    },

    /// * returns [crate::contracts::cw20::entry::AllSpenderAllowancesResponse]
    ///
    /// Returns all allowances this spender has been granted. Supports pagination.
    #[returns(crate::contracts::cw20::entry::AllSpenderAllowancesResponse)]
    AllSpenderAllowances {
        /// Spender address
        spender: RawAddr,
        /// Last owner we saw
        start_after: Option<RawAddr>,
        /// How many owners to iterate on
        limit: Option<u32>,
    },

    /// * returns [crate::contracts::cw20::entry::AllAccountsResponse]
    ///
    /// Returns all accounts that have balances. Supports pagination.
    #[returns(crate::contracts::cw20::entry::AllAccountsResponse)]
    AllAccounts {
        /// Last owner we saw
        start_after: Option<RawAddr>,
        /// How many owners to iterate on
        limit: Option<u32>,
    },

    /// * returns [crate::contracts::cw20::entry::MarketingInfoResponse]
    ///
    /// Returns more metadata on the contract to display in the client:
    /// - description, logo, project url, etc.
    #[returns(crate::contracts::cw20::entry::MarketingInfoResponse)]
    MarketingInfo {},

    /************** Proprietary *******************/
    /// * returns [cw2::ContractVersion]
    #[returns(cw2::ContractVersion)]
    Version {},

    /// * returns [LiquidityTokenKind]
    #[returns(LiquidityTokenKind)]
    Kind {},
}

/// Placeholder migration message
#[cw_serde]
pub struct MigrateMsg {}