1use cosmwasm_schema::QueryResponses;
9use cosmwasm_std::Addr;
10use cw_asset::{AssetInfo, AssetInfoUnchecked};
11
12use crate::objects::{
13 pool_id::UncheckedPoolAddress, pool_reference::PoolReference, AssetEntry, ChannelEntry,
14 ContractEntry, DexAssetPairing, PoolMetadata, PoolType, UncheckedChannelEntry,
15 UncheckedContractEntry, UniquePoolId,
16};
17
18pub type AssetPair = (AssetEntry, AssetEntry);
19type DexName = String;
20
21pub type AssetPairingMapEntry = (DexAssetPairing, Vec<PoolReference>);
23pub type AssetMapEntry = (AssetEntry, AssetInfo);
25pub type AssetInfoMapEntry = (AssetInfo, AssetEntry);
27pub type ChannelMapEntry = (ChannelEntry, String);
29pub type ContractMapEntry = (ContractEntry, Addr);
31pub type PoolMetadataMapEntry = (UniquePoolId, PoolMetadata);
33
34pub mod state {
36 use cosmwasm_std::Addr;
37 use cw_asset::AssetInfo;
38 use cw_storage_plus::{Item, Map};
39
40 use crate::{
41 ans_host::{DexAssetPairing, DexName, UniquePoolId},
42 objects::{
43 pool_metadata::PoolMetadata, pool_reference::PoolReference, AssetEntry, ChannelEntry,
44 ContractEntry,
45 },
46 };
47
48 #[cosmwasm_schema::cw_serde]
50 pub struct Config {
51 pub next_unique_pool_id: UniquePoolId,
52 }
53
54 pub const CONFIG: Item<Config> = Item::new("config");
55 pub const ASSET_ADDRESSES: Map<&AssetEntry, AssetInfo> = Map::new("assets");
59 pub const REV_ASSET_ADDRESSES: Map<&AssetInfo, AssetEntry> = Map::new("rev_assets");
60
61 pub const CONTRACT_ADDRESSES: Map<&ContractEntry, Addr> = Map::new("contracts");
63
64 pub const CHANNELS: Map<&ChannelEntry, String> = Map::new("channels");
66
67 pub const REGISTERED_DEXES: Item<Vec<DexName>> = Item::new("registered_dexes");
69
70 pub const ASSET_PAIRINGS: Map<&DexAssetPairing, Vec<PoolReference>> = Map::new("pool_ids");
73
74 pub const POOL_METADATA: Map<UniquePoolId, PoolMetadata> = Map::new("pools");
76 }
78
79#[cosmwasm_schema::cw_serde]
81pub struct InstantiateMsg {
82 pub admin: String,
83}
84
85#[cw_ownable::cw_ownable_execute]
87#[cosmwasm_schema::cw_serde]
88#[cfg_attr(feature = "interface", derive(cw_orch::ExecuteFns))]
89pub enum ExecuteMsg {
90 UpdateContractAddresses {
92 to_add: Vec<(UncheckedContractEntry, String)>,
94 to_remove: Vec<UncheckedContractEntry>,
96 },
97 UpdateAssetAddresses {
99 to_add: Vec<(String, AssetInfoUnchecked)>,
101 to_remove: Vec<String>,
103 },
104 UpdateChannels {
106 to_add: Vec<(UncheckedChannelEntry, String)>,
108 to_remove: Vec<UncheckedChannelEntry>,
110 },
111 UpdateDexes {
113 to_add: Vec<String>,
115 to_remove: Vec<String>,
117 },
118 UpdatePools {
120 to_add: Vec<(UncheckedPoolAddress, PoolMetadata)>,
122 to_remove: Vec<UniquePoolId>,
124 },
125}
126
127#[cosmwasm_schema::cw_serde]
128pub struct AssetPairingFilter {
129 pub asset_pair: Option<AssetPair>,
131 pub dex: Option<String>,
133}
134
135#[cosmwasm_schema::cw_serde]
137pub struct ContractFilter {}
138
139#[cosmwasm_schema::cw_serde]
141pub struct ChannelFilter {}
142
143#[cosmwasm_schema::cw_serde]
145pub struct AssetFilter {}
146
147#[cosmwasm_schema::cw_serde]
149pub struct AssetInfoFilter {}
150
151#[cosmwasm_schema::cw_serde]
153pub struct PoolMetadataFilter {
154 pub pool_type: Option<PoolType>,
156 }
159
160#[cw_ownable::cw_ownable_query]
162#[cosmwasm_schema::cw_serde]
163#[derive(QueryResponses)]
164#[cfg_attr(feature = "interface", derive(cw_orch::QueryFns))]
165pub enum QueryMsg {
166 #[returns(ConfigResponse)]
169 Config {},
170 #[returns(AssetsResponse)]
173 Assets {
174 names: Vec<String>,
176 },
177 #[returns(AssetListResponse)]
180 AssetList {
181 filter: Option<AssetFilter>,
182 start_after: Option<String>,
183 limit: Option<u8>,
184 },
185 #[returns(AssetsResponse)]
188 AssetInfos {
189 infos: Vec<AssetInfoUnchecked>,
191 },
192 #[returns(AssetInfoListResponse)]
195 AssetInfoList {
196 filter: Option<AssetInfoFilter>,
197 start_after: Option<AssetInfoUnchecked>,
198 limit: Option<u8>,
199 },
200 #[returns(ContractsResponse)]
203 Contracts {
204 entries: Vec<ContractEntry>,
206 },
207 #[returns(ContractListResponse)]
210 ContractList {
211 filter: Option<ContractFilter>,
212 start_after: Option<ContractEntry>,
213 limit: Option<u8>,
214 },
215 #[returns(ChannelsResponse)]
218 Channels {
219 entries: Vec<ChannelEntry>,
221 },
222 #[returns(ChannelListResponse)]
225 ChannelList {
226 filter: Option<ChannelFilter>,
227 start_after: Option<ChannelEntry>,
228 limit: Option<u8>,
229 },
230 #[returns(RegisteredDexesResponse)]
233 RegisteredDexes {},
234 #[returns(PoolsResponse)]
238 Pools { pairings: Vec<DexAssetPairing> },
239 #[returns(PoolAddressListResponse)]
242 PoolList {
243 filter: Option<AssetPairingFilter>,
244 start_after: Option<DexAssetPairing>,
245 limit: Option<u8>,
246 },
247 #[returns(PoolMetadatasResponse)]
250 PoolMetadatas { ids: Vec<UniquePoolId> },
251 #[returns(PoolMetadataListResponse)]
254 PoolMetadataList {
255 filter: Option<PoolMetadataFilter>,
256 start_after: Option<UniquePoolId>,
257 limit: Option<u8>,
258 },
259}
260
261#[cosmwasm_schema::cw_serde]
262pub struct MigrateMsg {}
263
264#[cosmwasm_schema::cw_serde]
265pub struct ConfigResponse {
266 pub next_unique_pool_id: UniquePoolId,
267}
268#[cosmwasm_schema::cw_serde]
270pub struct AssetsResponse {
271 pub assets: Vec<AssetMapEntry>,
273}
274
275#[cosmwasm_schema::cw_serde]
277pub struct AssetListResponse {
278 pub assets: Vec<AssetMapEntry>,
280}
281
282#[cosmwasm_schema::cw_serde]
283pub struct AssetInfosResponse {
284 pub infos: Vec<AssetInfoMapEntry>,
286}
287
288#[cosmwasm_schema::cw_serde]
289pub struct AssetInfoListResponse {
290 pub infos: Vec<AssetInfoMapEntry>,
292}
293
294#[cosmwasm_schema::cw_serde]
295pub struct ContractsResponse {
296 pub contracts: Vec<ContractMapEntry>,
298}
299
300#[cosmwasm_schema::cw_serde]
301pub struct ContractListResponse {
302 pub contracts: Vec<ContractMapEntry>,
304}
305
306#[cosmwasm_schema::cw_serde]
307pub struct ChannelsResponse {
308 pub channels: Vec<ChannelMapEntry>,
309}
310
311#[cosmwasm_schema::cw_serde]
312pub struct ChannelListResponse {
313 pub channels: Vec<ChannelMapEntry>,
314}
315
316#[cosmwasm_schema::cw_serde]
317pub struct RegisteredDexesResponse {
318 pub dexes: Vec<String>,
319}
320
321#[cosmwasm_schema::cw_serde]
322pub struct PoolAddressListResponse {
323 pub pools: Vec<AssetPairingMapEntry>,
324}
325
326#[cosmwasm_schema::cw_serde]
327pub struct PoolsResponse {
328 pub pools: Vec<AssetPairingMapEntry>,
329}
330
331#[cosmwasm_schema::cw_serde]
332pub struct PoolMetadatasResponse {
333 pub metadatas: Vec<PoolMetadataMapEntry>,
334}
335
336#[cosmwasm_schema::cw_serde]
337pub struct PoolMetadataListResponse {
338 pub metadatas: Vec<PoolMetadataMapEntry>,
339}