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, storage_namespaces,
44 AssetEntry, ChannelEntry, 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(storage_namespaces::CONFIG_STORAGE_KEY);
55 pub const ASSET_ADDRESSES: Map<&AssetEntry, AssetInfo> =
59 Map::new(storage_namespaces::ans_host::ASSET_ADDRESSES);
60 pub const REV_ASSET_ADDRESSES: Map<&AssetInfo, AssetEntry> =
61 Map::new(storage_namespaces::ans_host::REV_ASSET_ADDRESSES);
62
63 pub const CONTRACT_ADDRESSES: Map<&ContractEntry, Addr> =
65 Map::new(storage_namespaces::ans_host::CONTRACT_ADDRESSES);
66
67 pub const CHANNELS: Map<&ChannelEntry, String> =
69 Map::new(storage_namespaces::ans_host::CHANNELS);
70
71 pub const REGISTERED_DEXES: Item<Vec<DexName>> =
73 Item::new(storage_namespaces::ans_host::REGISTERED_DEXES);
74
75 pub const ASSET_PAIRINGS: Map<&DexAssetPairing, Vec<PoolReference>> =
78 Map::new(storage_namespaces::ans_host::ASSET_PAIRINGS);
79
80 pub const POOL_METADATA: Map<UniquePoolId, PoolMetadata> =
82 Map::new(storage_namespaces::ans_host::POOL_METADATA);
83 }
85
86#[cosmwasm_schema::cw_serde]
88pub struct InstantiateMsg {
89 pub admin: String,
90}
91
92#[cw_ownable::cw_ownable_execute]
94#[cosmwasm_schema::cw_serde]
95#[derive(cw_orch::ExecuteFns)]
96pub enum ExecuteMsg {
97 UpdateContractAddresses {
99 to_add: Vec<(UncheckedContractEntry, String)>,
101 to_remove: Vec<UncheckedContractEntry>,
103 },
104 UpdateAssetAddresses {
106 to_add: Vec<(String, AssetInfoUnchecked)>,
108 to_remove: Vec<String>,
110 },
111 UpdateChannels {
113 to_add: Vec<(UncheckedChannelEntry, String)>,
115 to_remove: Vec<UncheckedChannelEntry>,
117 },
118 UpdateDexes {
120 to_add: Vec<String>,
122 to_remove: Vec<String>,
124 },
125 UpdatePools {
127 to_add: Vec<(UncheckedPoolAddress, PoolMetadata)>,
129 to_remove: Vec<UniquePoolId>,
131 },
132}
133
134#[cosmwasm_schema::cw_serde]
135pub struct AssetPairingFilter {
136 pub asset_pair: Option<AssetPair>,
138 pub dex: Option<String>,
140}
141
142#[cosmwasm_schema::cw_serde]
144pub struct ContractFilter {}
145
146#[cosmwasm_schema::cw_serde]
148pub struct ChannelFilter {}
149
150#[cosmwasm_schema::cw_serde]
152pub struct AssetFilter {}
153
154#[cosmwasm_schema::cw_serde]
156pub struct AssetInfoFilter {}
157
158#[cosmwasm_schema::cw_serde]
160#[derive(Default)]
161pub struct PoolMetadataFilter {
162 pub pool_type: Option<PoolType>,
164 }
167
168#[cw_ownable::cw_ownable_query]
170#[cosmwasm_schema::cw_serde]
171#[derive(QueryResponses, cw_orch::QueryFns)]
172pub enum QueryMsg {
173 #[returns(ConfigResponse)]
176 Config {},
177 #[returns(AssetsResponse)]
180 Assets {
181 names: Vec<String>,
183 },
184 #[returns(AssetListResponse)]
187 AssetList {
188 filter: Option<AssetFilter>,
189 start_after: Option<String>,
190 limit: Option<u8>,
191 },
192 #[returns(AssetInfosResponse)]
195 AssetInfos {
196 infos: Vec<AssetInfoUnchecked>,
198 },
199 #[returns(AssetInfoListResponse)]
202 AssetInfoList {
203 filter: Option<AssetInfoFilter>,
204 start_after: Option<AssetInfoUnchecked>,
205 limit: Option<u8>,
206 },
207 #[returns(ContractsResponse)]
210 Contracts {
211 entries: Vec<ContractEntry>,
213 },
214 #[returns(ContractListResponse)]
217 ContractList {
218 filter: Option<ContractFilter>,
219 start_after: Option<ContractEntry>,
220 limit: Option<u8>,
221 },
222 #[returns(ChannelsResponse)]
225 Channels {
226 entries: Vec<ChannelEntry>,
228 },
229 #[returns(ChannelListResponse)]
232 ChannelList {
233 filter: Option<ChannelFilter>,
234 start_after: Option<ChannelEntry>,
235 limit: Option<u8>,
236 },
237 #[returns(RegisteredDexesResponse)]
240 RegisteredDexes {},
241 #[returns(PoolsResponse)]
244 Pools { pairings: Vec<DexAssetPairing> },
245 #[returns(PoolAddressListResponse)]
248 PoolList {
249 filter: Option<AssetPairingFilter>,
250 start_after: Option<DexAssetPairing>,
251 limit: Option<u8>,
252 },
253 #[returns(PoolMetadatasResponse)]
256 PoolMetadatas { ids: Vec<UniquePoolId> },
257 #[returns(PoolMetadataListResponse)]
260 PoolMetadataList {
261 filter: Option<PoolMetadataFilter>,
262 start_after: Option<UniquePoolId>,
263 limit: Option<u8>,
264 },
265}
266
267#[cosmwasm_schema::cw_serde]
268pub enum MigrateMsg {
269 Instantiate(InstantiateMsg),
271 Migrate {},
273}
274
275#[cosmwasm_schema::cw_serde]
276pub struct ConfigResponse {
277 pub next_unique_pool_id: UniquePoolId,
278}
279#[cosmwasm_schema::cw_serde]
281pub struct AssetsResponse {
282 pub assets: Vec<AssetMapEntry>,
284}
285
286pub type AssetListResponse = AssetsResponse;
288
289#[cosmwasm_schema::cw_serde]
290pub struct AssetInfosResponse {
291 pub infos: Vec<AssetInfoMapEntry>,
293}
294
295pub type AssetInfoListResponse = AssetInfosResponse;
296
297#[cosmwasm_schema::cw_serde]
298pub struct ContractsResponse {
299 pub contracts: Vec<ContractMapEntry>,
301}
302
303#[cosmwasm_schema::cw_serde]
304pub struct ContractListResponse {
305 pub contracts: Vec<ContractMapEntry>,
307}
308
309#[cosmwasm_schema::cw_serde]
310pub struct ChannelsResponse {
311 pub channels: Vec<ChannelMapEntry>,
312}
313
314#[cosmwasm_schema::cw_serde]
315pub struct ChannelListResponse {
316 pub channels: Vec<ChannelMapEntry>,
317}
318
319#[cosmwasm_schema::cw_serde]
320pub struct RegisteredDexesResponse {
321 pub dexes: Vec<String>,
322}
323
324#[cosmwasm_schema::cw_serde]
325pub struct PoolAddressListResponse {
326 pub pools: Vec<AssetPairingMapEntry>,
327}
328
329#[cosmwasm_schema::cw_serde]
330pub struct PoolsResponse {
331 pub pools: Vec<AssetPairingMapEntry>,
332}
333
334#[cosmwasm_schema::cw_serde]
335pub struct PoolMetadatasResponse {
336 pub metadatas: Vec<PoolMetadataMapEntry>,
337}
338
339#[cosmwasm_schema::cw_serde]
340pub struct PoolMetadataListResponse {
341 pub metadatas: Vec<PoolMetadataMapEntry>,
342}