@cygnus-wealth/wallet-integration-system
Version:
Multi-chain wallet integration system for CygnusWealth
58 lines (57 loc) • 1.99 kB
JavaScript
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';
}