Skip to main content

fuzion_utilities/
execute.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::{Addr, Coin};
5
6#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
7#[serde(rename_all = "snake_case")]
8pub enum ExecuteMsg {
9    /// Change the admin
10    UpdateAdmin {
11        admin: Option<String>,
12    },
13    /// Upload Chain Info from chain-registry
14    UploadChain {
15        chain_info: Box<ChainInfo>,
16        asset_list: Option<AssetList>,
17    },
18    /// Upload Chain Info from chain-registry
19    UploadChains {
20        chain_list: Vec<ChainsAndAssets>,
21    },
22    /// Upload Chain Info from chain-registry
23    UploadAsset {
24        asset: AssetList,
25    },
26    /// Upload Chain Info from chain-registry
27    UploadAssets {
28        asset_list: Vec<AssetList>,
29    },
30    /// Delete asset from chain-registry
31    DeleteAsset {
32        chain_name: String,
33        base: String,
34    },
35    /// Upload IBC Path  
36    UploadIbc {
37        ibc_path: IBCPath,
38    },
39    UploadIbcs {
40        ibc_path_list: Vec<IBCPath>,
41    },
42    UploadIbcDenoms {
43        ibc_denom_list: Vec<IBCPathDenomUpload>,
44    },
45    UploadTotalSupply {
46        total_supply_list: Vec<Coin>,
47    },
48    UploadCuratedDenoms {
49        curated_denom_list: Vec<Coin>,
50    },
51    /// Delete asset from chain-registry
52    DeleteCuratedDenom {
53        denom: String,
54    },
55    UploadFuzionChainConfig {
56        fuzion_chain_config_list: Vec<FuzionChainConfig>,
57    },
58}
59
60#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
61#[serde(rename_all = "snake_case")]
62#[derive(Default)]
63pub struct ChainsAndAssets {
64    pub chain_info: ChainInfo,
65    pub asset_list: Option<AssetList>,
66}
67
68#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
69#[serde(rename_all = "snake_case")]
70#[derive(Default)]
71pub struct ChainInfo {
72    pub chain_name: String,
73    pub status: String,
74    pub network_type: String,
75    pub pretty_name: String,
76    pub chain_id: String,
77    pub bech32_prefix: String,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub daemon_name: Option<String>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub node_home: Option<String>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub slip44: Option<u32>,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub genesis: Option<Genesis>,
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub codebase: Option<Codebase>,
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub peers: Option<Peers>,
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub apis: Option<Apis>,
92    #[serde(rename = "logo_URIs", skip_serializing_if = "Option::is_none")]
93    pub logo_uris: Option<LogoURIs>,
94}
95
96#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
97#[serde(rename_all = "snake_case")]
98#[derive(Default)]
99pub struct Genesis {
100    pub genesis_url: String,
101}
102
103#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
104#[serde(rename_all = "snake_case")]
105#[derive(Default)]
106pub struct Codebase {
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub git_repo: Option<String>,
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub recommended_version: Option<String>,
111    #[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::<String>::new")]
112    pub compatible_versions: Vec<String>,
113}
114
115#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
116#[serde(rename_all = "snake_case")]
117#[derive(Default)]
118pub struct Peers {
119    #[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::<Seed>::new")]
120    pub seeds: Vec<Seed>,
121    #[serde(
122        skip_serializing_if = "Vec::is_empty",
123        default = "Vec::<PersistentPeer>::new"
124    )]
125    pub persistent_peers: Vec<PersistentPeer>,
126}
127
128#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
129#[serde(rename_all = "snake_case")]
130#[derive(Default)]
131pub struct Seed {
132    pub id: String,
133    pub address: String,
134    pub provider: Option<String>,
135}
136
137#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
138#[serde(rename_all = "snake_case")]
139#[derive(Default)]
140pub struct PersistentPeer {
141    pub id: String,
142    pub address: String,
143}
144
145#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
146#[serde(rename_all = "snake_case")]
147#[derive(Default)]
148pub struct Apis {
149    #[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::<Rpc>::new")]
150    pub rpc: Vec<Rpc>,
151    #[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::<Rest>::new")]
152    pub rest: Vec<Rest>,
153    #[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::<Grpc>::new")]
154    pub grpc: Vec<Grpc>,
155}
156
157#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
158#[serde(rename_all = "snake_case")]
159#[derive(Default)]
160pub struct Rpc {
161    pub address: String,
162    pub provider: Option<String>,
163}
164
165#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
166#[serde(rename_all = "snake_case")]
167#[derive(Default)]
168pub struct Rest {
169    pub address: String,
170    pub provider: Option<String>,
171}
172
173#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
174#[serde(rename_all = "snake_case")]
175#[derive(Default)]
176pub struct Grpc {
177    pub address: String,
178    pub provider: Option<String>,
179}
180
181#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
182#[serde(rename_all = "snake_case")]
183#[derive(Default)]
184pub struct AssetList {
185    pub chain_name: String,
186    pub assets: Vec<Asset>,
187}
188
189#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
190#[serde(rename_all = "snake_case")]
191#[derive(Default)]
192pub struct Asset {
193    #[serde(skip_serializing_if = "Option::is_none")]
194    pub description: Option<String>,
195    pub denom_units: Vec<DenomUnit>,
196    pub base: String,
197    pub name: String,
198    pub display: String,
199    pub symbol: String,
200    #[serde(rename = "logo_URIs", skip_serializing_if = "Option::is_none")]
201    pub logo_uris: Option<LogoURIs>,
202    #[serde(skip_serializing_if = "Option::is_none")]
203    pub coingecko_id: Option<String>,
204}
205
206#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
207#[serde(rename_all = "snake_case")]
208#[derive(Default)]
209pub struct DenomUnit {
210    pub denom: String,
211    pub exponent: u16,
212}
213
214#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
215#[serde(rename_all = "snake_case")]
216#[derive(Default)]
217pub struct LogoURIs {
218    #[serde(skip_serializing_if = "Option::is_none")]
219    pub png: Option<String>,
220    #[serde(skip_serializing_if = "Option::is_none")]
221    pub svg: Option<String>,
222}
223
224#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
225#[serde(rename_all = "snake_case")]
226#[derive(Default)]
227
228pub struct IBCPath {
229    #[serde(rename = "$schema")]
230    pub schema: String,
231    #[serde(alias = "chain-1")]
232    pub chain_1: Chain1,
233    #[serde(alias = "chain-2")]
234    pub chain_2: Chain2,
235    pub channels: Vec<Channel>,
236}
237
238#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
239#[serde(rename_all = "snake_case")]
240#[derive(Default)]
241
242pub struct IBCPathDenom {
243    pub hash: String,
244    pub path: String,
245    pub base_denom: String,
246}
247
248#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
249#[serde(rename_all = "snake_case")]
250#[derive(Default)]
251pub struct IBCPathDenomUpload {
252    pub path: String,
253    pub base_denom: String,
254}
255
256#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
257#[serde(rename_all = "snake_case")]
258pub struct FuzionChainConfig {
259    pub chain_name: String,
260    pub chain_display_name: String,
261    pub chain_id: String,
262    pub chain_lcd_url: String,
263    pub chain_rpc_url: String,
264    pub connect_type: String,
265    pub network_type: String,
266    pub chain_api_urls: Vec<ChainApiUrls>,
267    pub chain_contracts: Vec<FuzionContractsConfig>,
268}
269
270#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
271#[serde(rename_all = "snake_case")]
272#[derive(Default)]
273
274pub struct Chain1 {
275    #[serde(alias = "chain-name")]
276    pub chain_name: String,
277    #[serde(alias = "client-id")]
278    pub client_id: String,
279    #[serde(alias = "connection-id")]
280    pub connection_id: String,
281}
282
283#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
284#[serde(rename_all = "snake_case")]
285#[derive(Default)]
286pub struct Chain2 {
287    #[serde(alias = "chain-name")]
288    pub chain_name: String,
289    #[serde(alias = "client-id")]
290    pub client_id: String,
291    #[serde(alias = "connection-id")]
292    pub connection_id: String,
293}
294
295#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
296#[serde(rename_all = "snake_case")]
297#[derive(Default)]
298
299pub struct Channel {
300    #[serde(alias = "chain-1")]
301    pub chain_1: ChannelChain1,
302    #[serde(alias = "chain-2")]
303    pub chain_2: ChannelChain2,
304    pub ordering: String,
305    pub version: String,
306    #[serde(skip_serializing_if = "Option::is_none")]
307    pub tags: Option<Tags>,
308}
309
310#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
311#[serde(rename_all = "snake_case")]
312#[derive(Default)]
313
314pub struct ChannelChain1 {
315    #[serde(alias = "channel-id")]
316    pub channel_id: String,
317    #[serde(alias = "port-id")]
318    pub port_id: String,
319}
320
321#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
322#[serde(rename_all = "snake_case")]
323#[derive(Default)]
324pub struct ChannelChain2 {
325    #[serde(alias = "channel-id")]
326    pub channel_id: String,
327    #[serde(alias = "port-id")]
328    pub port_id: String,
329}
330
331#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
332#[serde(rename_all = "snake_case")]
333#[derive(Default)]
334
335pub struct Tags {
336    #[serde(skip_serializing_if = "Option::is_none")]
337    pub dex: Option<String>,
338    #[serde(skip_serializing_if = "Option::is_none")]
339    pub preferred: Option<bool>,
340    #[serde(skip_serializing_if = "Option::is_none")]
341    pub properties: Option<String>,
342    #[serde(skip_serializing_if = "Option::is_none")]
343    pub status: Option<String>,
344}
345
346/// Represents an IBC path tag
347pub enum Tag {
348    Dex(String),
349    Preferred(bool),
350    Properties(String),
351    Status(String),
352}
353
354#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
355#[serde(rename_all = "snake_case")]
356pub struct FuzionContractsConfig {
357    pub contract_name: String,
358    pub contract_address: Addr,
359}
360
361#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
362#[serde(rename_all = "snake_case")]
363pub struct ChainApiUrls {
364    pub api_name: String,
365    pub api_url: String,
366}