Skip to main content

Overview

The Asset contract provides methods to interact with token assets, including listing, searching, and retrieving detailed asset information.

List Assets

Fetch assets with optional filtering and pagination.
import { AssetStatus } from '@longdotxyz/shared';

const response = await client.assets.listAssets({
  query: {
    status: AssetStatus.LIVE,
    limit: 10,
    offset: 0,
  },
});

if (response.status === 200) {
  const assets = response.body.result;
  assets.forEach(asset => {
    console.log(`${asset.auction_pool.base_token.token_symbol}: ${asset.asset_address}`);
  });
}

Parameters

  • status (optional): Filter by status
    • AssetStatus.LIVE - Active auctions
    • AssetStatus.GRADUATED - Completed auctions
    • AssetStatus.INCOMING - Upcoming auctions
    • AssetStatus.ALL - All assets (default)
  • limit (optional): Results per page (0-50, default: 10)
  • offset (optional): Pagination offset (default: 0)

Search Assets

Search by address, symbol, or name.
const response = await client.assets.searchAssets({
  query: {
    term: 'LONG',
    limit: 50,
  },
});

if (response.status === 200) {
  console.log(`Found ${response.body.result.length} assets`);
}

Parameters

  • term (required): Search term
  • limit (optional): Max results (0-50, default: 50)

Get Asset

Retrieve a specific asset by address.
const response = await client.assets.getAsset({
  params: {
    assetAddress: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e',
  },
});

if (response.status === 200) {
  const asset = response.body.result;

  console.log('Price:', asset.auction_pool.pool_current_price);
  console.log('Market Cap:', asset.auction_pool.pool_current_market_cap);
  console.log('Progress:', asset.auction_pool.pool_current_sale_progress_percentage);
} else if (response.status === 404) {
  console.error('Asset not found');
}

Parameters

  • assetAddress (required): Hex-encoded token address

Response Schema

{
  asset_address: string;
  asset_numeraire_address: string;
  asset_creation_timestamp: number;
  asset_migration_timestamp: number | null;

  auction_pool: {
    pool_id: string;
    pool_address: string;
    pool_type: string;

    // Configuration
    pool_config_starting_time: string;
    pool_config_ending_time: string;
    pool_config_max_proceeds: string;
    pool_config_min_proceeds: string;

    // Current state
    pool_current_price: string;
    pool_current_sqrt_price: string;
    pool_current_fdv: string;
    pool_current_liquidity: string;
    pool_current_tick: number;
    pool_current_market_cap: string;
    pool_current_fees_accrued: string;
    pool_current_total_proceeds: string;
    pool_current_total_tokens_sold: string;
    pool_current_sale_progress_percentage: number;

    base_token: {
      token_address: string;
      token_name: string;
      token_symbol: string;
      token_description: string | null;
      token_image_public_url: string | null;
      token_creator_address: string;
      token_fee_receiver_address: string;
      token_vesting_recipient_addresses: string[];
    };
  };

  graduation_pool: {
    pool_current_price: string;
    pool_current_sqrt_price: string;
    pool_current_fdv: string;
    pool_current_liquidity: string;
    pool_current_tick: number;
    pool_current_market_cap: string;
    pool_address: string;
    pool_migration_timestamp: number | null;
    pool_type: string;

    base_token: {
      token_address: string;
      token_name: string;
      token_description: string | null;
      token_symbol: string;
      token_uri_data: any | null;
      token_image_public_url: string | null;
      token_creator_address: string;
      token_fee_receiver_address: string;
      token_vesting_recipient_addresses: string[];
      integrator_address: string;
    };
  };
}

Examples

Check Auction Status

const response = await client.assets.getAsset({
  params: { assetAddress: '0x...' },
});

if (response.status === 200) {
  const { auction_pool } = response.body.result;
  const now = Date.now() / 1000;
  const startTime = parseInt(auction_pool.pool_config_starting_time);
  const endTime = parseInt(auction_pool.pool_config_ending_time);

  if (now < startTime) {
    console.log('Auction not started');
  } else if (now < endTime) {
    console.log(`Auction live - ${auction_pool.pool_current_sale_progress_percentage}% complete`);
  } else {
    console.log('Auction ended');
  }
}

Filter by Creator

const creatorAddress = '0x...';

const response = await client.assets.listAssets({
  query: { status: AssetStatus.ALL, limit: 50 },
});

if (response.status === 200) {
  const creatorAssets = response.body.result.filter(
    asset => asset.auction_pool.base_token.token_creator_address.toLowerCase() ===
             creatorAddress.toLowerCase()
  );

  console.log(`${creatorAssets.length} assets by creator`);
}

Calculate Remaining Tokens

const { auction_pool } = response.body.result;

const maxProceeds = BigInt(auction_pool.pool_config_max_proceeds);
const soldTokens = BigInt(auction_pool.pool_current_total_tokens_sold);
const remaining = maxProceeds - soldTokens;

console.log(`Remaining: ${remaining.toString()} tokens`);