whales-pre-market-aptos-sdk
Version:
TypeScript SDK for Whales Pre-Market on Aptos blockchain
162 lines (161 loc) • 6.12 kB
JavaScript
;
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();
});
}