hyperspace-sdk
Version:
An unofficial SDK for Hyperspace NFT Marketplace on Avalanche
61 lines (60 loc) • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleSignAndExecute = exports.handleSignTransaction = exports.approveNft = exports.getNftApprovalStatus = exports.approveWavax = exports.getWavaxApprovalStatus = exports.getWavaxBalance = void 0;
const ethers_1 = require("ethers");
const constants_1 = require("./constants");
const wavax_abi_1 = require("../abis/wavax_abi");
const signature_1 = require("./signature");
const erc721_abi_1 = require("../abis/erc721_abi");
const getWavaxBalance = async (provider, address) => {
const wavaxContract = new ethers_1.ethers.Contract(constants_1.WAVAX_CONTRACT_ADDRESS, wavax_abi_1.wavax_abi, provider);
return wavaxContract.balanceOf(address);
};
exports.getWavaxBalance = getWavaxBalance;
const getWavaxApprovalStatus = async (provider, address, balance) => {
const wavaxContract = new ethers_1.ethers.Contract(constants_1.WAVAX_CONTRACT_ADDRESS, wavax_abi_1.wavax_abi, provider);
const allowance = await wavaxContract.allowance(address, constants_1.AVAX_MP_CONTRACT_ADDRESS);
return allowance.gte(ethers_1.BigNumber.from(balance));
};
exports.getWavaxApprovalStatus = getWavaxApprovalStatus;
const approveWavax = async (wallet) => {
const wavaxContract = new ethers_1.ethers.Contract(constants_1.WAVAX_CONTRACT_ADDRESS, wavax_abi_1.wavax_abi, wallet);
const approveTxn = await wavaxContract.approve(constants_1.AVAX_MP_CONTRACT_ADDRESS, constants_1.MAX_APPROVAL);
const approveTxnReceipt = await approveTxn.wait();
if (approveTxnReceipt.status === 0) {
throw new Error("WAVAX approve transaction failed");
}
return approveTxnReceipt;
};
exports.approveWavax = approveWavax;
const getNftApprovalStatus = async (provider, address, contractAddress) => {
const erc721 = new ethers_1.ethers.Contract(contractAddress, erc721_abi_1.erc721_abi, provider);
const erc721ApprovalForAllPromise = await erc721.isApprovedForAll(address, constants_1.AVAX_MP_CONTRACT_ADDRESS);
return erc721ApprovalForAllPromise ?? false;
};
exports.getNftApprovalStatus = getNftApprovalStatus;
const approveNft = async (wallet, contractAddress) => {
const tokenContract = new ethers_1.ethers.Contract(contractAddress, erc721_abi_1.erc721_abi, wallet);
const approveTxn = await tokenContract.setApprovalForAll(constants_1.AVAX_MP_CONTRACT_ADDRESS, true);
const approveTxnReceipt = await approveTxn.wait();
if (approveTxnReceipt.status === 0) {
throw new Error("ERC721 approve transaction failed");
}
return approveTxnReceipt;
};
exports.approveNft = approveNft;
const handleSignTransaction = async (txInput, wallet) => {
const signedOrder = await (0, signature_1.signOrder)(txInput, wallet);
return {
transactionBlockBytes: JSON.stringify(signedOrder),
signature: signedOrder.rawSignature,
};
};
exports.handleSignTransaction = handleSignTransaction;
const handleSignAndExecute = async (wallet, gasPriceMultiplier, gasLimitMultiplier, transactionInput) => {
const transaction = await (0, signature_1.prepareEncodedTransaction)(wallet, gasPriceMultiplier, gasLimitMultiplier, transactionInput);
const transactionResponse = await wallet.sendTransaction(transaction);
const transactionReceipt = await transactionResponse.wait(1);
return transactionReceipt;
};
exports.handleSignAndExecute = handleSignAndExecute;