diff --git a/README.md b/README.md index b54972c..50d6fc2 100755 --- a/README.md +++ b/README.md @@ -1,2 +1,161 @@ -**This repository is no longer maintained. Please visit the new repository at: [https://github.com/0xfnzero/pumpfun-sdk](https://github.com/0xfnzero/pumpfun-sdk)** +# PumpFun Rust SDK +A comprehensive Rust SDK for seamless interaction with the PumpFun Solana program. This SDK provides a robust set of tools and interfaces to integrate PumpFun functionality into your applications. + + +# Explanation +1. Add `create, buy, sell` for pump.fun. +2. Add `logs_subscribe` to subscribe the logs of the PumpFun program. +3. Add `yellowstone grpc` to subscribe the logs of the PumpFun program. +4. Add `jito` to send transaction with Jito. +5. Add `nextblock` to send transaction with nextblock. +6. Add `0slot` to send transaction with 0slot. +7. Submit a transaction using Jito, Nextblock, and 0slot simultaneously; the fastest one will succeed, while the others will fail. + +## Usage +```shell +cd `your project root directory` +git clone https://github.com/0xfnzero/pumpfun-sdk +``` + +```toml +# add to your Cargo.toml +pumpfun-sdk = { path = "./pumpfun-sdk", version = "2.4.3" } +``` + +### logs subscription for token create and trade transaction +```rust +use pumpfun_sdk::{common::logs_events::PumpfunEvent, grpc::YellowstoneGrpc}; + +// create grpc client +let grpc_url = "http://127.0.0.1:10000"; +let client = YellowstoneGrpc::new(grpc_url); + +// Define callback function +let callback = |event: PumpfunEvent| { + match event { + PumpfunEvent::NewToken(token_info) => { + println!("Received new token event: {:?}", token_info); + }, + PumpfunEvent::NewDevTrade(trade_info) => { + println!("Received dev trade event: {:?}", trade_info); + }, + PumpfunEvent::NewUserTrade(trade_info) => { + println!("Received new trade event: {:?}", trade_info); + }, + PumpfunEvent::NewBotTrade(trade_info) => { + println!("Received new bot trade event: {:?}", trade_info); + } + PumpfunEvent::Error(err) => { + println!("Received error: {}", err); + } + } +}; + +let payer_keypair = Keypair::from_base58_string("your private key"); +client.subscribe_pumpfun(callback, Some(payer_keypair.pubkey())).await?; + +``` + +### Init pumpfun instance for configs +```rust +use std::sync::Arc; +use pumpfun_sdk::{common::{Cluster, PriorityFee}, PumpFun}; +use solana_sdk::{commitment_config::CommitmentConfig, signature::Keypair, signer::Signer}; + +let priority_fee = PriorityFee{ + unit_limit: 190000, + unit_price: 1000000, + buy_tip_fee: 0.001, + sell_tip_fee: 0.0001, +}; + +let cluster = Cluster { + rpc_url: "https://api.mainnet-beta.solana.com".to_string(), + block_engine_url: "https://block-engine.example.com".to_string(), + nextblock_url: "https://nextblock.example.com".to_string(), + nextblock_auth_token: "nextblock_api_token".to_string(), + zeroslot_url: "https://zeroslot.example.com".to_string(), + zeroslot_auth_token: "zeroslot_api_token".to_string(), + use_jito: true, + use_nextblock: false, + use_zeroslot: false, + priority_fee, + commitment: CommitmentConfig::processed(), +}; + +// create pumpfun instance +let payer = Keypair::from_base58_string("your private key"); +let pumpfun = PumpFun::new( + Arc::new(payer), + &cluster, +).await; +``` + +### pumpfun create Token +```rust +use std::sync::Arc; +use pumpfun_sdk::{ipfs, PumpFun}; +use solana_sdk::{native_token::sol_to_lamports, signature::Keypair, signer::Signer}; + +// create pumpfun instance +let pumpfun = PumpFun::new(Arc::new(payer), &cluster).await; + +// Mint keypair +let mint_pubkey: Keypair = Keypair::new(); + +let metadata = ipfs::CreateTokenMetadata { + name: "Doge".to_string(), + symbol: "DOGE".to_string(), + description: "Dogecoin".to_string(), + file: "/Users/joseph/Desktop/doge.png".to_string(), + twitter: None, + telegram: None, + website: None, + metadata_uri: None, +}; + +// ipfs jwt_token for https://pinata.cloud +let jwt_token = "your ipfs jwt_token"; +let ipfs_metadata = ipfs::create_token_metadata(metadata, &jwt_token).await?; +println!("ipfs_metadata: {:?}", ipfs_metadata); + +pumpfun.create_and_buy( + mint, + ipfs_metadata, + sol_to_lamports(0.1), + None, +).await?; +``` + +### pumpfun buy token +```rust +use pumpfun_sdk::PumpFun; +use solana_sdk::{native_token::sol_to_lamports, signature::Keypair, signer::Signer}; + +// create pumpfun instance +let pumpfun = PumpFun::new(Arc::new(payer), &cluster).await; + +// Mint keypair +let mint_pubkey: Keypair = Keypair::new(); + +// buy token with tip +pumpfun.buy_with_tip(mint_pubkey, 10000, None).await?; + +``` + +### pumpfun sell token +```rust +use pumpfun_sdk::PumpFun; +use solana_sdk::{native_token::sol_to_lamports, signature::Keypair, signer::Signer}; + +// create pumpfun instance +let pumpfun = PumpFun::new(Arc::new(payer), &cluster).await; + +// sell token with tip +pumpfun.sell_with_tip(mint_pubkey, 100000, None).await?; + +// sell token by percent with tip +pumpfun.sell_by_percent_with_tip(mint_pubkey, 100, None).await?; + +``` \ No newline at end of file