UNPKG

whales-pre-market-aptos-sdk

Version:

TypeScript SDK for Whales Pre-Market on Aptos blockchain

162 lines (161 loc) 6.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkCoinToFa = exports.signDiscount = void 0; const ts_sdk_1 = require("@aptos-labs/ts-sdk"); const signDiscount = (discountVerifierPK, id, buyerDiscount, sellerDiscount) => { const discountVerifierKeypair = new ts_sdk_1.Ed25519PrivateKey(discountVerifierPK); const signAccount = ts_sdk_1.Account.fromPrivateKey({ privateKey: discountVerifierKeypair, }); const serializer = new ts_sdk_1.Serializer(); serializer.serialize(ts_sdk_1.AccountAddress.fromStringStrict(id)); serializer.serialize(new ts_sdk_1.U64(buyerDiscount)); serializer.serialize(new ts_sdk_1.U64(sellerDiscount)); const signature = Array.from(signAccount.sign(serializer.toUint8Array()).toUint8Array()); return { orderId: id, buyerDiscount, sellerDiscount, signature, }; }; exports.signDiscount = signDiscount; const checkCoinToFa = async (aptos, sender, exToken) => { if (!(0, ts_sdk_1.isValidFunctionInfo)(exToken) && standardizeMoveTypeString(exToken) !== standardizeMoveTypeString(ts_sdk_1.APTOS_FA)) { return { useCoin: false, coinType: exToken, }; } const coinType = standardizeMoveTypeString(exToken) === standardizeMoveTypeString(ts_sdk_1.APTOS_FA) ? ts_sdk_1.APTOS_COIN : exToken; const faAddress = standardizeMoveTypeString(coinType) === ts_sdk_1.APTOS_COIN ? ts_sdk_1.AccountAddress.A : (0, ts_sdk_1.createObjectAddress)(ts_sdk_1.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, }; }; exports.checkCoinToFa = checkCoinToFa; // /* eslint-disable */ // export const convertCoinToFA = async ( // aptosConfig: AptosConfig, // sender: string, // exToken: string, // signTransaction: (args: { // transactionOrPayload: AnyRawTransaction | InputTransactionData; // asFeePayer?: boolean; // }) => Promise<{ // authenticator: AccountAuthenticator; // rawTransaction: Uint8Array; // }> // ) => { // if ( // !( // standardizeMoveTypeString(exToken) === // standardizeMoveTypeString(APTOS_FA) || // standardizeMoveTypeString(exToken) === // standardizeMoveTypeString(APTOS_COIN) // ) // ) { // return; // } // const aptos = new AptosV1(aptosConfig); // const [faBalance] = await aptos.view({ // payload: { // function: "0x1::primary_fungible_store::balance", // typeArguments: ["0x1::fungible_asset::Metadata"], // functionArguments: [sender, APTOS_FA], // }, // }); // const [coinBalance] = await aptos.view({ // payload: { // function: "0x1::coin::balance", // typeArguments: [APTOS_COIN], // functionArguments: [sender], // }, // }); // if (coinBalance === faBalance) { // return; // } // const transaction = await aptos.transaction.build.scriptComposer({ // sender: sender, // // The builder expects a closure to build up the move call sequence. // builder: async (builder) => { // // invoke 0x1::coin::withdraw. This function would return a value of a coin type. // const coin = await builder.addBatchedCalls({ // function: "0x1::coin::withdraw", // functionArguments: [ // sender, // new U64V1(Number(coinBalance) - Number(faBalance)), // ], // typeArguments: ["0x1::aptos_coin::AptosCoin"], // }); // // Passing the coin value to the 0x1::coin::coin_to_fungible_asset to convert a coin // // into fungible asset. // const fungibleAsset = await builder.addBatchedCalls({ // function: "0x1::coin::coin_to_fungible_asset", // // coin[0] represents the first return value from the first call you added. // functionArguments: [coin[0]], // typeArguments: ["0x1::aptos_coin::AptosCoin"], // }); // // Deposit the fungibleAsset converted from second call. // await builder.addBatchedCalls({ // function: "0x1::primary_fungible_store::deposit", // functionArguments: [sender, fungibleAsset[0]], // typeArguments: [], // }); // return builder; // }, // }); // const { authenticator, rawTransaction } = await signTransaction({ // transactionOrPayload: transaction as unknown as AnyRawTransaction, // }); // const pendingTxn = await aptos.transaction.submit.simple({ // transaction, // senderAuthenticator: authenticator as unknown as AccountAuthenticatorV1, // }); // const response = await aptos.waitForTransaction({ // transactionHash: pendingTxn.hash, // }); // if (response.success) { // throw new Error(`Coin to FA failed: ${response.vm_status}`); // } // return response; // }; /** * Helper function to standardize Move type string by converting all addresses to short form, * including addresses within nested type parameters */ function standardizeMoveTypeString(input) { // 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 ts_sdk_1.AccountAddress.from(match, { maxMissingChars: 63 }).toStringShort(); }); }