From 7c755058cc37b5cd87cba64178b9b171f11eac23 Mon Sep 17 00:00:00 2001 From: William Date: Thu, 10 Apr 2025 11:04:55 +0800 Subject: [PATCH] fix create token, add param with creator pubkey --- README.md | 8 +++---- src/common/types.rs | 2 ++ src/grpc/mod.rs | 53 ------------------------------------------ src/instruction/mod.rs | 6 ++++- src/main.rs | 5 ++-- src/pumpfun/create.rs | 2 ++ 6 files changed, 16 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 4a3418d..261254a 100755 --- a/README.md +++ b/README.md @@ -53,7 +53,6 @@ let callback = |event: PumpfunEvent| { }; let payer_keypair = Keypair::from_base58_string("your private key"); -let client = GrpcClient::get_instance(); client.subscribe_pumpfun(callback, Some(payer_keypair.pubkey())).await?; ``` @@ -65,7 +64,7 @@ use pumpfun_sdk::{common::{Cluster, PriorityFee}, PumpFun}; use solana_sdk::{commitment_config::CommitmentConfig, signature::Keypair, signer::Signer}; let priority_fee = PriorityFee{ - unit_limit: 72000, + unit_limit: 190000, unit_price: 1000000, buy_tip_fee: 0.001, sell_tip_fee: 0.0001, @@ -116,8 +115,9 @@ let metadata = ipfs::CreateTokenMetadata { metadata_uri: None, }; -// ipfs_api_key for https://api.pinata.cloud -let ipfs_metadata = ipfs::create_token_metadata(metadata, &"your ipfs_api_key".to_string()).await?; +// 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( diff --git a/src/common/types.rs b/src/common/types.rs index dced0e9..b581aeb 100755 --- a/src/common/types.rs +++ b/src/common/types.rs @@ -91,3 +91,5 @@ impl MethodArgs { } } +pub type AnyResult = anyhow::Result; + diff --git a/src/grpc/mod.rs b/src/grpc/mod.rs index 940a3a8..52067a0 100755 --- a/src/grpc/mod.rs +++ b/src/grpc/mod.rs @@ -2,10 +2,8 @@ use std::{collections::HashMap, fmt, time::Duration}; use futures::{channel::mpsc, sink::Sink, Stream, StreamExt, SinkExt}; use rustls::crypto::{ring::default_provider, CryptoProvider}; -use tonic::codec::CompressionEncoding; use tonic::{transport::channel::ClientTlsConfig, Status}; use yellowstone_grpc_client::{GeyserGrpcClient, GeyserGrpcClientResult}; -use yellowstone_grpc_proto::geyser::SubscribeUpdateSlot; use yellowstone_grpc_proto::geyser::{ CommitmentLevel, SubscribeRequest, SubscribeRequestFilterTransactions, SubscribeUpdate, SubscribeUpdateTransaction, subscribe_update::UpdateOneof, SubscribeRequestPing, @@ -139,43 +137,6 @@ impl YellowstoneGrpc { transactions } - // pub fn get_subscribe_account_updater_request_filter( - // &self, - // account_include: Vec, - // account_exclude: Vec, - // account_required: Vec, - // ) -> TransactionsFilterMap { - // let mut transactions = HashMap::new(); - // transactions.insert( - // "client".to_string(), - // SubscribeUpdateAccount { - // account: account_include, - // slot: None, - // is_startup: None, - // }, - // ); - // transactions - // } - - // pub fn get_subscribe_update_slot_request_filter( - // &self, - // account_include: Vec, - // account_exclude: Vec, - // account_required: Vec, - // ) -> TransactionsFilterMap { - // let mut transactions = HashMap::new(); - // transactions.insert( - // "client".to_string(), - // SubscribeUpdateSlot { - // slot: 0, - // parent: None, - // status: None, - // dead_error: None, - // }, - // ); - // transactions - // } - async fn handle_stream_message( msg: SubscribeUpdate, tx: &mut mpsc::Sender, @@ -204,20 +165,6 @@ impl YellowstoneGrpc { Ok(()) } - // pub async fn subscribe_account_updater(&self, callback: F, bot_wallet: Option) -> ClientResult<()> - // where - // F: Fn(PumpfunEvent) + Send + Sync + 'static, - // { - // let addrs = vec![PUMP_PROGRAM_ID.to_string()]; - // let transactions = self.get_subscribe_request_filter(addrs, vec![], vec![]); - // let (mut subscribe_tx, mut stream) = self.connect(transactions).await? - // .map_err(|e| ClientError::Other(format!("Failed to subscribe: {:?}", e)))?; - // let (mut tx, mut rx) = mpsc::channel::(CHANNEL_SIZE); - - // let callback = Box::new(callback); - - // } - pub async fn subscribe_pumpfun(&self, callback: F, bot_wallet: Option) -> ClientResult<()> where F: Fn(PumpfunEvent) + Send + Sync + 'static, diff --git a/src/instruction/mod.rs b/src/instruction/mod.rs index c12b7af..bde237f 100755 --- a/src/instruction/mod.rs +++ b/src/instruction/mod.rs @@ -38,11 +38,12 @@ pub struct Create { pub _name: String, pub _symbol: String, pub _uri: String, + pub _creator: Pubkey, } impl Create { pub fn data(&self) -> Vec { - let mut data = Vec::with_capacity(8 + 4 + self._name.len() + 4 + self._symbol.len() + 4 + self._uri.len()); + let mut data = Vec::with_capacity(8 + 4 + self._name.len() + 4 + self._symbol.len() + 4 + self._uri.len() + 32); // 追加 discriminator data.extend_from_slice(&[24, 30, 200, 40, 5, 28, 7, 119]); // discriminator @@ -59,6 +60,8 @@ impl Create { data.extend_from_slice(&(self._uri.len() as u32).to_le_bytes()); // 添加 uri 长度 data.extend_from_slice(self._uri.as_bytes()); // 添加 uri 内容 + data.extend_from_slice(&self._creator.to_bytes()); + data } } @@ -247,6 +250,7 @@ pub async fn build_create_and_buy_instructions( _name: ipfs.metadata.name.clone(), _symbol: ipfs.metadata.symbol.clone(), _uri: ipfs.metadata_uri.clone(), + _creator: payer.pubkey(), }, )); diff --git a/src/main.rs b/src/main.rs index 04f9dcb..8125dbb 100755 --- a/src/main.rs +++ b/src/main.rs @@ -75,8 +75,9 @@ async fn create_and_buy() -> Result<(), Box> { metadata_uri: None, }; - // ipfs_api_key for https://api.pinata.cloud - let ipfs_metadata = ipfs::create_token_metadata(metadata, &"ipfs_api_key".to_string()).await?; + // 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); let mint = Keypair::new(); diff --git a/src/pumpfun/create.rs b/src/pumpfun/create.rs index 0f03f72..cc5f1ed 100755 --- a/src/pumpfun/create.rs +++ b/src/pumpfun/create.rs @@ -37,6 +37,7 @@ pub async fn create( _name: ipfs.metadata.name, _symbol: ipfs.metadata.symbol, _uri: ipfs.metadata_uri, + _creator: payer.pubkey(), }, )); @@ -203,6 +204,7 @@ pub async fn build_create_and_buy_instructions( _name: ipfs.metadata.name.clone(), _symbol: ipfs.metadata.symbol.clone(), _uri: ipfs.metadata_uri.clone(), + _creator: payer.pubkey(), }, ));