UNPKG

hyperspace-sdk

Version:

An unofficial SDK for Hyperspace NFT Marketplace on Avalanche

61 lines (60 loc) 3.4 kB
"use strict"; 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;