UNPKG

whales-otc-pre-market-aptos-sdk

Version:

TypeScript SDK for Whales OTC Pre-Market trading on Aptos blockchain

93 lines (83 loc) 2.23 kB
import { Account, AccountAddress, Ed25519PrivateKey, Hex, Serializer, U64, AnyRawTransaction, AccountAuthenticator, AptosConfig, APTOS_COIN, APTOS_FA, Aptos, isValidFunctionInfo, createObjectAddress, AccountAddressInput, } from "@aptos-labs/ts-sdk"; export const checkCoinToFa = async ( aptos: Aptos, sender: AccountAddressInput, exToken: string ): Promise<{ useCoin: boolean; coinType: string; }> => { if ( !isValidFunctionInfo(exToken) && standardizeMoveTypeString(exToken) !== standardizeMoveTypeString(APTOS_FA) ) { return { useCoin: false, coinType: exToken, }; } const coinType = standardizeMoveTypeString(exToken) === standardizeMoveTypeString(APTOS_FA) ? APTOS_COIN : exToken; const faAddress = standardizeMoveTypeString(coinType) === APTOS_COIN ? AccountAddress.A : createObjectAddress( AccountAddress.A, standardizeMoveTypeString(coinType) ); const [faBalance] = await aptos.view({ payload: { function: "0x1::primary_fungible_store::balance", typeArguments: ["0x1::fungible_asset::Metadata"], functionArguments: [sender, faAddress], }, }); const [coinBalance] = await aptos.view({ payload: { function: "0x1::coin::balance", typeArguments: [coinType], functionArguments: [sender], }, }); if (coinBalance === faBalance) { return { useCoin: false, coinType: exToken, }; } return { useCoin: true, coinType: coinType, }; }; /** * Helper function to standardize Move type string by converting all addresses to short form, * including addresses within nested type parameters */ function standardizeMoveTypeString(input: string): string { // Regular expression to match addresses in the type string, including those within type parameters // This regex matches "0x" followed by hex digits, handling both standalone addresses and those within <> const addressRegex = /0x[0-9a-fA-F]+/g; return input.replace(addressRegex, (match) => { // Use AccountAddress to handle the address return AccountAddress.from(match, { maxMissingChars: 63 }).toStringShort(); }); }