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