@layerzerolabs/hyperliquid-composer
Version:
LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation for Hyperliquid
171 lines (125 loc) • 6.22 kB
text/typescript
import { createModuleLogger, setDefaultLogLevel } from '@layerzerolabs/io-devtools'
import inquirer from 'inquirer'
import { getHyperliquidWallet } from '@/signer'
import {
setTradingFeeShare,
setUserGenesis,
setGenesis,
setNoHyperliquidity,
registerSpot,
enableFreezePrivilege,
freezeUser,
revokeFreezePrivilege,
enableQuoteToken,
} from '@/operations'
import { LOGGER_MODULES } from '@/types/cli-constants'
import {
TradingFeeArgs,
UserGenesisArgs,
GenesisArgs,
CreateSpotDeploymentArgs,
RegisterTradingSpotArgs,
EnableTokenFreezePrivilegeArgs,
RevokeTokenFreezePrivilegeArgs,
EnableTokenQuoteAssetArgs,
FreezeUserArgs,
} from '@/types'
export async function tradingFee(args: TradingFeeArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.TRADING_FEE, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
logger.info(`Setting trading fee share for token ${args.tokenIndex} to ${args.share}`)
const { executeTx } = await inquirer.prompt([
{
type: 'confirm',
name: 'executeTx',
message: `Trading fee can ONLY be decreased. Do you want to execute the transaction?`,
default: false,
},
])
if (!executeTx) {
logger.info('Transaction cancelled - quitting.')
process.exit(1)
}
const tokenIndex: number = parseInt(args.tokenIndex)
const share: string = args.share
logger.info(`Setting trading fee share for token ${tokenIndex} to ${share}`)
await setTradingFeeShare(wallet, isTestnet, tokenIndex, share, args.logLevel)
}
export async function userGenesis(args: UserGenesisArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.USER_GENESIS, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
const action = args.action
logger.info(`Setting user genesis for token ${args.tokenIndex}`)
const tokenIndex: number = parseInt(args.tokenIndex)
await setUserGenesis(wallet, isTestnet, tokenIndex, action, args.logLevel)
}
export async function genesis(args: GenesisArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.GENESIS, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
logger.info(`Setting genesis for token ${args.tokenIndex}`)
const tokenIndex: number = parseInt(args.tokenIndex)
await setGenesis(wallet, isTestnet, tokenIndex, args.logLevel)
}
export async function createSpotDeployment(args: CreateSpotDeploymentArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.CREATE_SPOT_DEPLOYMENT, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
const tokenIndex: number = parseInt(args.tokenIndex)
logger.info(`Setting no hyperliquidity for token ${tokenIndex}`)
await setNoHyperliquidity(wallet, isTestnet, tokenIndex, args.logLevel)
}
export async function registerTradingSpot(args: RegisterTradingSpotArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.REGISTER_TRADING_SPOT, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
logger.info(`Registering core spot ${args.tokenIndex} for trading`)
const tokenIndex: number = parseInt(args.tokenIndex)
await registerSpot(wallet, isTestnet, tokenIndex, args.logLevel)
}
// === Post-Launch Management Functions ===
export async function enableTokenFreezePrivilege(args: EnableTokenFreezePrivilegeArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.ENABLE_FREEZE_PRIVILEGE, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
const tokenIndex: number = parseInt(args.tokenIndex)
logger.info(`Enabling freeze privilege for token ${tokenIndex}`)
await enableFreezePrivilege(wallet, isTestnet, tokenIndex, args.logLevel)
}
export async function freezeTokenUser(args: FreezeUserArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.FREEZE_USER, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
const tokenIndex: number = parseInt(args.tokenIndex)
const userAddress: string = args.userAddress
const freeze: boolean = args.freeze === 'true'
logger.info(`${freeze ? 'Freezing' : 'Unfreezing'} user ${userAddress} for token ${tokenIndex}`)
await freezeUser(wallet, isTestnet, tokenIndex, userAddress, freeze, args.logLevel)
}
export async function revokeTokenFreezePrivilege(args: RevokeTokenFreezePrivilegeArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.REVOKE_FREEZE_PRIVILEGE, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
const tokenIndex: number = parseInt(args.tokenIndex)
logger.info(`Revoking freeze privilege for token ${tokenIndex}`)
await revokeFreezePrivilege(wallet, isTestnet, tokenIndex, args.logLevel)
}
export async function enableTokenQuoteAsset(args: EnableTokenQuoteAssetArgs): Promise<void> {
setDefaultLogLevel(args.logLevel)
const logger = createModuleLogger(LOGGER_MODULES.ENABLE_QUOTE_TOKEN, args.logLevel)
const wallet = await getHyperliquidWallet(args.privateKey)
const isTestnet = args.network === 'testnet'
const tokenIndex: number = parseInt(args.tokenIndex)
logger.info(`Enabling quote token capability for token ${tokenIndex}`)
await enableQuoteToken(wallet, isTestnet, tokenIndex, args.logLevel)
}