0.4.1 • Published 8 months ago

funsdk v0.4.1

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

funsdk

A package for interacting with pumpfun fully typed.

!CAUTION THIS PACKAGE IS NOT PRODUCTION READY\ expect breaking changes in the future

Instalation

npm i funsdk # any package manager should work

How to use

Initiate

import { Fun } from 'funsdk';
import { Connection, clusterApiUrl } from '@solana/web3.js';

const connection = new Connection(clusterApiUrl("mainnet-beta"));
const fun = new Fun(connection);

!WARNING RENT EXEMPTION CHECK IS INCLUDED IN THIS FUNCTION\ Please ensure that the creator account has enough SOL for rent exemption before executing any transaction.

Get Create Token Instruction

import { Fun, type TokenMeta } from 'funsdk';
import fs from 'fs';
import { Connection, clusterApiUrl, Keypair } from '@solana/web3.js';

// ... previous init code

const creator = Keypair.generate();
const token = Keypair.generate();

const imagePath = fs.readFileSync("./image.jpg", {encoding: "base64"});
const image = new File([imagePath], "image.jpg");

const tokenData: TokenMeta = {
    name: "ABC",
    symbol: "DEF",
    description: "GHI",
    image,
    keypair: token
    // socials if any...
};

/** 
 * If insufficient SOL is provided, the function will throw an error
 * 
 * This will return a TransactionInstruction instance
 * so you can freely assign the instruction to any type
 * of transaction that you like.
 * 
 * ex. Transaction | VersionedTransaction
 * **/
const createInstruct = await fun.compileCreateTokenInstruction({
    creator: creator.publicKey,
    tokenData
});

!WARNING RENT EXEMPTION CHECK IS INCLUDED IN THIS FUNCTION\ Please ensure that the creator account has enough SOL for rent exemption before executing any transaction.

Get token buy instruction

import { Fun } from 'funsdk';
import fs from 'fs';
import { Connection, clusterApiUrl, Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js';

// ... previous init code
// ... previous create code

const buyAmount = Bigint(1 * LAMPORTS_PER_SOL);

/** 
 * If insufficient SOL is provided, the function will throw an error
 * If the token bonding curve account is not found, the function will throw an error
 * 
 * Same return value as before 
 * **/
const buyInstruct = await fun.compileBuyInstruction({
    trader: creator.publicKey,
    token: token.publicKey,
    solAmount: buyAmount
}, true); // set to true if this is the initial token buy, else empty

// If true was passed, function will include createAssociatedTokenAccount along with
// the buy instruction [createATA, buyInstruct]
     
// with type annotation. Same return as above
// fun.compileBuyInstruction<true>({
//     solAmount: BigInt(1 * LAMPORTS_PER_SOL),
//     token: token.publicKey,
//     trader: creator.publicKey
// })

Get token sell instruction

import { Fun } from 'funsdk';
import fs from 'fs';
import { Connection, clusterApiUrl, Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js';

// ... previous init code
// ... previous create code

// Preferably build a function that fetches your token balance
// and do some calculations for the sell amount
const sellAmount = 1000000n;

/** 
 * Same return value as before
 * 
 * this will return Error if the token bonding curve account
 * is not found
 *  **/
const sellInstruct = await fun.compileSellInstruction({
    trader: creator.publicKey,
    token: token.publicKey,
    tokenAmount: sellAmount
}, true);

Get token data

const tokenData = await fun.getTokenDataAPI(token.publicKey);

console.log(tokenData);
// name, symbol, description, image_uri, metadata_uri, etc.

Get bonding curve data

const bondingCurveData = await fun.getBondingCurveData(token.publicKey);

console.log(bondingCurveData);
// virtualTokenReserves, virtualSolReserves, realTokenReserves, realSolReserves, tokenTotalSupply, complete

Listen to events

// ... previous init code

const removeListener = fun.listen("createEvent", (event) => {
    console.log(event);
});

// ... some codes

await removeListener();

API

.compileCreateTokenInstruction Use to compile a create token instruction for pumpfun program

.compileBuyInstruction Use to compile a buy token instruction for pumpfun program

  • async
  • Params object
    • solAmount bigint - Buy value in sol amount
    • trader PublicKey - The assign trader public key
    • token PublicKey - The assign token public key
  • isInitial boolean - is initial token buy
    • default false

.compileSellInstruction Use to compile a sell token instruction for pumpfun program

  • async
  • Params object
    • tokenAmount bigint - Sell value in token amount
    • trader PublicKey - The assign trader public key
    • token PublicKey - The assign token public key

.getTokenDataAPI Use to get token data from pumpfun API

  • async
  • Params PublicKey - The assign token public key

.getBondingCurveData Use to get bonding curve data from pumpfun program useful for calculating token price, mcap, etc.

  • async
  • Params PublicKey - The assign bonding curve public key

.listen Use to listen to pumpfun events

  • Params object
    • event Events - Event type
      • createEvent
      • tradeEvent
      • completeEvent
      • setParamsEvent
    • callback function - Event callback

Types

interface CreateEvent {
    name: string;
    symbol: string;
    uri: string;
    mint: PublicKey;
    bondingCurve: PublicKey;
    user: PublicKey;
}

interface TradeEvent {
    mint: PublicKey;
    solAmount: BN;
    tokenAmount: BN;
    isBuy: boolean;
    user: PublicKey;
    timestamp: BN;
    virtualSolReserves: BN;
    virtualTokenReserves: BN;
    realSolReserves: BN;
    realTokenReserves: BN;
}

interface CompleteEvent {
    user: PublicKey;
    mint: PublicKey;
    bondingCurve: PublicKey;
    timestamp: BN;
}

interface SetParamsEvent {
    feeRecipient: PublicKey;
    initialVirtualTokenReserves: BN;
    initialVirtualSolReserves: BN;
    initialRealTokenReserves: BN;
    tokenTotalSupply: BN;
    feeBasisPoints: BN;
}

type Events = "createEvent" | "tradeEvent" | "completeEvent" | "setParamsEvent";

interface EventCallback<E extends Events> {
    (event: E extends "createEvent" ? CreateEvent : never): void;
    (event: E extends "tradeEvent" ? TradeEvent : never): void;
    (event: E extends "completeEvent" ? CompleteEvent : never): void;
    (event: E extends "setParamsEvent" ? SetParamsEvent : never): void;
}

interface TokenMetadataResponse {
    metadata: {
        name: string
        symbol: string
        description: string
        image: string
        showName: boolean
        createdOn: string
    }
    metadataUri: string
}

interface TokenMeta {
    keypair: Keypair;
    name: string;
    symbol: string;
    image: File;
    description: string;
    telegram?: string;
    twitter?: string;
    website?: string;
}

interface CreateTokenInstructionParam {
    creator: PublicKey;
    tokenMeta: TokenMeta;
}

interface TradeInstructionParam {
    trader: PublicKey;
    token: PublicKey;
    amount: bigint;
    slippageCut: bigint;
}

interface BuyInstructionParam {
    trader: PublicKey;
    token: PublicKey;
    solAmount: bigint;
}

interface SellInstructionParam {
    trader: PublicKey;
    token: PublicKey;
    tokenAmount: bigint;
};

Author

on1force

License

MIT

0.3.9

8 months ago

0.3.6

8 months ago

0.3.8

8 months ago

0.3.7

8 months ago

0.4.1

8 months ago

0.4.0

8 months ago

0.3.0

8 months ago

0.2.1

8 months ago

0.2.0

8 months ago

0.2.7

8 months ago

0.1.8

8 months ago

0.3.5

8 months ago

0.2.6

8 months ago

0.1.7

8 months ago

0.2.9

8 months ago

0.2.8

8 months ago

0.1.9

8 months ago

0.3.2

8 months ago

0.2.3

8 months ago

0.1.4

8 months ago

0.3.1

8 months ago

0.2.2

8 months ago

0.3.4

8 months ago

0.2.5

8 months ago

0.1.6

8 months ago

0.3.3

8 months ago

0.2.4

8 months ago

0.1.5

8 months ago

0.1.0

8 months ago

0.1.2

8 months ago

0.1.1

8 months ago

0.0.9

8 months ago

0.0.8

8 months ago

0.1.3

8 months ago

0.0.7

8 months ago

0.0.6

11 months ago

0.0.5

11 months ago

0.0.4

11 months ago

0.0.3

11 months ago

0.0.2

11 months ago

0.0.1

11 months ago