1use crate::objects::{
9 asset_entry::AssetEntry,
10 contract_entry::{ContractEntry, UncheckedContractEntry},
11 dex_asset_pairing::DexAssetPairing,
12 pool_id::UncheckedPoolAddress,
13 pool_reference::PoolReference,
14 ChannelEntry, PoolMetadata, PoolType, UncheckedChannelEntry, UniquePoolId,
15};
16use cosmwasm_schema::QueryResponses;
17use cosmwasm_std::Addr;
18use cw_asset::{AssetInfo, AssetInfoUnchecked};
19
20pub type AssetPair = (AssetEntry, AssetEntry);
21type DexName = String;
22
23pub type AssetPairingMapEntry = (DexAssetPairing, Vec<PoolReference>);
25pub type AssetMapEntry = (AssetEntry, AssetInfo);
27pub type AssetInfoMapEntry = (AssetInfo, AssetEntry);
29pub type ChannelMapEntry = (ChannelEntry, String);
31pub type ContractMapEntry = (ContractEntry, Addr);
33pub type PoolMetadataMapEntry = (UniquePoolId, PoolMetadata);
35
36pub mod state {
38 use crate::ans_host::{DexAssetPairing, DexName, UniquePoolId};
39 use cosmwasm_std::Addr;
40 use cw_asset::AssetInfo;
41 use cw_controllers::Admin;
42 use cw_storage_plus::{Item, Map};
43
44 use crate::objects::{
45 asset_entry::AssetEntry, common_namespace::ADMIN_NAMESPACE, contract_entry::ContractEntry,
46 pool_metadata::PoolMetadata, pool_reference::PoolReference, ChannelEntry,
47 };
48
49 #[cosmwasm_schema::cw_serde]
51 pub struct Config {
52 pub next_unique_pool_id: UniquePoolId,
53 }
54
55 pub const CONFIG: Item<Config> = Item::new("config");
56
57 pub const ADMIN: Admin = Admin::new(ADMIN_NAMESPACE);
59
60 pub const ASSET_ADDRESSES: Map<&AssetEntry, AssetInfo> = Map::new("assets");
63 pub const REV_ASSET_ADDRESSES: Map<&AssetInfo, AssetEntry> = Map::new("rev_assets");
64
65 pub const CONTRACT_ADDRESSES: Map<&ContractEntry, Addr> = Map::new("contracts");
67
68 pub const CHANNELS: Map<&ChannelEntry, String> = Map::new("channels");
70
71 pub const REGISTERED_DEXES: Item<Vec<DexName>> = Item::new("registered_dexes");
73
74 pub const ASSET_PAIRINGS: Map<&DexAssetPairing, Vec<PoolReference>> = Map::new("pool_ids");
77
78 pub const POOL_METADATA: Map<UniquePoolId, PoolMetadata> = Map::new("pools");
80}
81
82#[cosmwasm_schema::cw_serde]
84pub struct InstantiateMsg {}
85
86#[cosmwasm_schema::cw_serde]
88#[cfg_attr(feature = "boot", derive(boot_core::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 SetAdmin { admin: String },
127}
128
129#[cosmwasm_schema::cw_serde]
130pub struct AssetPairingFilter {
131 pub asset_pair: Option<AssetPair>,
133 pub dex: Option<String>,
135}
136
137#[cosmwasm_schema::cw_serde]
139pub struct ContractFilter {}
140
141#[cosmwasm_schema::cw_serde]
143pub struct ChannelFilter {}
144
145#[cosmwasm_schema::cw_serde]
147pub struct AssetFilter {}
148
149#[cosmwasm_schema::cw_serde]
151pub struct AssetInfoFilter {}
152
153#[cosmwasm_schema::cw_serde]
155pub struct PoolMetadataFilter {
156 pub pool_type: Option<PoolType>,
158 }
161
162#[cosmwasm_schema::cw_serde]
164#[derive(QueryResponses)]
165#[cfg_attr(feature = "boot", derive(boot_core::QueryFns))]
166pub enum QueryMsg {
167 #[returns(ConfigResponse)]
170 Config {},
171 #[returns(AssetsResponse)]
174 Assets {
175 names: Vec<String>,
177 },
178 #[returns(AssetListResponse)]
181 AssetList {
182 filter: Option<AssetFilter>,
183 start_after: Option<String>,
184 limit: Option<u8>,
185 },
186 #[returns(AssetsResponse)]
189 AssetInfos {
190 infos: Vec<AssetInfoUnchecked>,
192 },
193 #[returns(AssetInfoListResponse)]
196 AssetInfoList {
197 filter: Option<AssetInfoFilter>,
198 start_after: Option<AssetInfoUnchecked>,
199 limit: Option<u8>,
200 },
201 #[returns(ContractsResponse)]
204 Contracts {
205 entries: Vec<ContractEntry>,
207 },
208 #[returns(ContractListResponse)]
211 ContractList {
212 filter: Option<ContractFilter>,
213 start_after: Option<ContractEntry>,
214 limit: Option<u8>,
215 },
216 #[returns(ChannelsResponse)]
219 Channels {
220 entries: Vec<ChannelEntry>,
222 },
223 #[returns(ChannelListResponse)]
226 ChannelList {
227 filter: Option<ChannelFilter>,
228 start_after: Option<ChannelEntry>,
229 limit: Option<u8>,
230 },
231 #[returns(RegisteredDexesResponse)]
234 RegisteredDexes {},
235 #[returns(PoolsResponse)]
239 Pools { pairings: Vec<DexAssetPairing> },
240 #[returns(PoolAddressListResponse)]
243 PoolList {
244 filter: Option<AssetPairingFilter>,
245 start_after: Option<DexAssetPairing>,
246 limit: Option<u8>,
247 },
248 #[returns(PoolMetadatasResponse)]
251 PoolMetadatas { ids: Vec<UniquePoolId> },
252 #[returns(PoolMetadataListResponse)]
255 PoolMetadataList {
256 filter: Option<PoolMetadataFilter>,
257 start_after: Option<UniquePoolId>,
258 limit: Option<u8>,
259 },
260}
261
262#[cosmwasm_schema::cw_serde]
263pub struct MigrateMsg {}
264
265#[cosmwasm_schema::cw_serde]
266pub struct ConfigResponse {
267 pub next_unique_pool_id: UniquePoolId,
268 pub admin: Addr,
269}
270#[cosmwasm_schema::cw_serde]
272pub struct AssetsResponse {
273 pub assets: Vec<AssetMapEntry>,
275}
276
277#[cosmwasm_schema::cw_serde]
279pub struct AssetListResponse {
280 pub assets: Vec<AssetMapEntry>,
282}
283
284#[cosmwasm_schema::cw_serde]
285pub struct AssetInfosResponse {
286 pub infos: Vec<AssetInfoMapEntry>,
288}
289
290#[cosmwasm_schema::cw_serde]
291pub struct AssetInfoListResponse {
292 pub infos: Vec<AssetInfoMapEntry>,
294}
295
296#[cosmwasm_schema::cw_serde]
297pub struct ContractsResponse {
298 pub contracts: Vec<(ContractEntry, String)>,
300}
301
302#[cosmwasm_schema::cw_serde]
303pub struct ContractListResponse {
304 pub contracts: Vec<(ContractEntry, String)>,
306}
307
308#[cosmwasm_schema::cw_serde]
309pub struct ChannelsResponse {
310 pub channels: Vec<ChannelMapEntry>,
311}
312
313#[cosmwasm_schema::cw_serde]
314pub struct ChannelListResponse {
315 pub channels: Vec<ChannelMapEntry>,
316}
317
318#[cosmwasm_schema::cw_serde]
319pub struct RegisteredDexesResponse {
320 pub dexes: Vec<String>,
321}
322
323#[cosmwasm_schema::cw_serde]
324pub struct PoolAddressListResponse {
325 pub pools: Vec<AssetPairingMapEntry>,
326}
327
328#[cosmwasm_schema::cw_serde]
329pub struct PoolsResponse {
330 pub pools: Vec<AssetPairingMapEntry>,
331}
332
333#[cosmwasm_schema::cw_serde]
334pub struct PoolMetadatasResponse {
335 pub metadatas: Vec<PoolMetadataMapEntry>,
336}
337
338#[cosmwasm_schema::cw_serde]
339pub struct PoolMetadataListResponse {
340 pub metadatas: Vec<PoolMetadataMapEntry>,
341}