UNPKG

solana-web3-lite

Version:

A lightweight wrapper around @solana/web3.js for simplified Solana blockchain interactions

82 lines (81 loc) 5.32 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const spl_token_1 = require("@solana/spl-token"); const web3_js_1 = require("@solana/web3.js"); const helpers_1 = require("@solana-developers/helpers"); const umi_bundle_defaults_1 = require("@metaplex-foundation/umi-bundle-defaults"); const umi_1 = require("@metaplex-foundation/umi"); const mpl_token_metadata_1 = require("@metaplex-foundation/mpl-token-metadata"); const utils_1 = require("./utils"); const createAndManageSPLToken = (_a) => __awaiter(void 0, [_a], void 0, function* ({ wallet, metadata, recipientAddress = wallet.publicKey.toBase58(), amountToMint = 10, amountToTransfer = 1, decimals = 2, cluster = "devnet", commitment = "confirmed", }) { try { console.log(`Processing SPL token on ${cluster}...`); if (!wallet) throw new Error("Wallet keypair is required"); if (amountToMint <= 0 || amountToTransfer <= 0) throw new Error("Amounts must be greater than 0"); if (decimals < 0) throw new Error("Decimals must be non-negative"); const connection = (0, utils_1.getConnection)({ cluster, commitment }); const recipientPubKey = (0, utils_1.toPublicKey)(recipientAddress); const mintAuthority = wallet.publicKey; const minorUnits = BigInt(Math.pow(10, decimals)); const umi = (0, umi_bundle_defaults_1.createUmi)(connection); const umiKeypair = umi.eddsa.createKeypairFromSecretKey(wallet.secretKey); const userWalletSigner = (0, umi_1.createSignerFromKeypair)(umi, umiKeypair); umi.use((0, umi_1.signerIdentity)(userWalletSigner)); umi.use((0, mpl_token_metadata_1.mplTokenMetadata)()); // Create mint with metadata using UMI const mint = (0, umi_1.generateSigner)(umi); const metadataSignature = yield (0, mpl_token_metadata_1.createAndMint)(umi, { mint, authority: umi.identity, name: metadata.name, symbol: metadata.symbol, uri: metadata.uri, sellerFeeBasisPoints: (0, umi_1.percentAmount)(0), decimals, amount: 0, tokenStandard: mpl_token_metadata_1.TokenStandard.Fungible, }).sendAndConfirm(umi); const mintPublicKeyObj = new web3_js_1.PublicKey(mint.publicKey); const mintPublicKey = mintPublicKeyObj.toBase58(); const sourceTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(connection, wallet, mintPublicKeyObj, mintAuthority, false, commitment); const mintAmount = BigInt(Math.floor(amountToMint * Number(minorUnits))); const mintSignature = yield (0, spl_token_1.mintTo)(connection, wallet, mintPublicKeyObj, sourceTokenAccount.address, mintAuthority, mintAmount, [], { commitment }); const destinationTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(connection, wallet, mintPublicKeyObj, recipientPubKey, false, commitment); const transferTx = new web3_js_1.Transaction().add((0, spl_token_1.createTransferInstruction)(sourceTokenAccount.address, destinationTokenAccount.address, mintAuthority, BigInt(Math.floor(amountToTransfer * Number(minorUnits))), [], spl_token_1.TOKEN_PROGRAM_ID)); const transferSignature = yield (0, web3_js_1.sendAndConfirmTransaction)(connection, transferTx, [wallet], { commitment }); const explorerLinks = { mint: (0, helpers_1.getExplorerLink)("address", mintPublicKey, cluster), sourceAccount: (0, helpers_1.getExplorerLink)("address", sourceTokenAccount.address.toBase58(), cluster), destinationAccount: (0, helpers_1.getExplorerLink)("address", destinationTokenAccount.address.toBase58(), cluster), metadataTx: (0, helpers_1.getExplorerLink)("tx", metadataSignature.signature.toString(), cluster), mintTx: (0, helpers_1.getExplorerLink)("tx", mintSignature, cluster), transferTx: (0, helpers_1.getExplorerLink)("tx", transferSignature, cluster), }; console.log(`✅ Created and managed SPL token, visit explorer: ${explorerLinks.mint}`); return { mintPublicKey, sourceAccount: sourceTokenAccount.address.toBase58(), destinationAccount: destinationTokenAccount.address.toBase58(), mintSignature, transferSignature, metadataSignature: metadataSignature.signature.toString(), explorerLinks, }; } catch (error) { console.error("SPL token management failed:", error); throw error; } });