UNPKG

@cygnus-wealth/wallet-integration-system

Version:

Multi-chain wallet integration system for CygnusWealth

58 lines (57 loc) 1.99 kB
import { AssetType } from '@cygnus-wealth/data-models'; import { NATIVE_TOKEN_ADDRESS } from './constants'; export function createAssetFromToken(token) { return { id: `${token.chain}-${token.address}`, symbol: token.symbol, name: token.name, type: AssetType.CRYPTOCURRENCY, chain: token.chain, contractAddress: token.address === NATIVE_TOKEN_ADDRESS ? undefined : token.address, decimals: token.decimals, metadata: { logoURI: token.logoURI, coingeckoId: token.coingeckoId } }; } export function createWalletBalance(asset, amount, walletAddress, chain, value) { const balance = { assetId: asset.id, asset, amount, walletAddress, chain, lastUpdated: new Date() }; if (value !== undefined) { balance.value = { value: value, currency: 'USD', timestamp: new Date(), source: 'COINGECKO' }; } return balance; } export function formatTokenAmount(amount, decimals) { const divisor = BigInt(10 ** decimals); const integerPart = amount / divisor; const fractionalPart = amount % divisor; if (fractionalPart === 0n) { return integerPart.toString(); } const fractionalString = fractionalPart.toString().padStart(decimals, '0'); const trimmedFractional = fractionalString.replace(/0+$/, ''); return `${integerPart}.${trimmedFractional}`; } export function parseTokenAmount(amount, decimals) { const [integerPart, fractionalPart = ''] = amount.split('.'); const paddedFractional = fractionalPart.padEnd(decimals, '0').slice(0, decimals); const combinedString = integerPart + paddedFractional; return BigInt(combinedString); } export function isNativeToken(address) { return address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase() || address === '0x0000000000000000000000000000000000000000'; }