Skip to main content

df_hyperliquid_core/deploy/
tokens.rs

1//! Spot deploys in progress: an account's unfinished token deployments and the token auction
2//! (`spotDeployState`), and the auction for a pair of existing tokens (`spotPairDeployAuctionStatus`).
3
4use crate::client::{ApiError, Transport, info, info_request, user_request};
5use crate::deploy::auction::GasAuction;
6use crate::utils::{Address, Dec};
7use serde::Deserialize;
8
9/// `{"type":"spotDeployState","user":..}`.
10#[must_use]
11pub fn spot_deploy_state_request(user: Address) -> String {
12    user_request("spotDeployState", user)
13}
14
15pub async fn spot_deploy_state(transport: &impl Transport, user: Address) -> Result<SpotDeployState, ApiError> {
16    info(transport, spot_deploy_state_request(user)).await
17}
18
19/// `{"type":"spotPairDeployAuctionStatus"}`.
20#[must_use]
21pub fn spot_pair_deploy_auction_request() -> String {
22    info_request("spotPairDeployAuctionStatus", &[])
23}
24
25pub async fn spot_pair_deploy_auction(transport: &impl Transport) -> Result<GasAuction, ApiError> {
26    info(transport, spot_pair_deploy_auction_request()).await
27}
28
29#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct SpotDeployState {
32    /// The account's deployments that have not finished, each until it does.
33    #[serde(default)]
34    pub states: Vec<DeployingToken>,
35    /// The auction a new token's first step pays.
36    pub gas_auction: GasAuction,
37}
38
39/// One token being deployed. Every field but the token and its spec is read as optional: none has been seen live.
40#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct DeployingToken {
43    /// Its index, claimed by the first step.
44    pub token: u32,
45    pub spec: TokenSpec,
46    #[serde(default)]
47    pub full_name: Option<String>,
48    #[serde(default)]
49    pub deployer_trading_fee_share: Option<Dec>,
50    /// The pairs registered for it so far, by pair index.
51    #[serde(default)]
52    pub spots: Vec<u32>,
53    /// Set by genesis.
54    #[serde(default)]
55    pub max_supply: Option<Dec>,
56    #[serde(default)]
57    pub hyperliquidity_genesis_balance: Option<Dec>,
58    #[serde(default)]
59    pub total_genesis_balance_wei: Option<Dec>,
60    #[serde(default)]
61    pub user_genesis_balances: Vec<(Address, Dec)>,
62    #[serde(default)]
63    pub existing_token_genesis_balances: Vec<(u32, Dec)>,
64    #[serde(default)]
65    pub blacklist_users: Vec<Address>,
66}
67
68/// What the first step registered: fixed for good.
69#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct TokenSpec {
72    pub name: String,
73    pub sz_decimals: u32,
74    pub wei_decimals: u32,
75}
76
77#[cfg(test)]
78#[path = "tests/tokens.rs"]
79mod tests;