From 9a2857bffdb95bf4f208b619187867e0c47b3b4d Mon Sep 17 00:00:00 2001 From: zramsay Date: Thu, 19 Dec 2024 15:27:45 -0500 Subject: [PATCH] wroking --- src/app/page.tsx | 46 ++++++++++++++++++++++++++++++++----------- src/types/solflare.ts | 16 --------------- 2 files changed, 35 insertions(+), 27 deletions(-) delete mode 100644 src/types/solflare.ts diff --git a/src/app/page.tsx b/src/app/page.tsx index 90aba7e..c63ef53 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -21,10 +21,28 @@ interface GenerationState { error: string | null } +// Solflare wallet type definition +interface SolflareWallet { + connect(): Promise + disconnect(): Promise + signAndSendTransaction( + transaction: Transaction | VersionedTransaction, + options?: { skipPreflight?: boolean } + ): Promise<{ signature: string; publicKey: string }> + publicKey: PublicKey + connected: boolean +} + +declare global { + interface Window { + solflare?: SolflareWallet + } +} + // Replace these with your actual addresses const MTM_TOKEN_MINT: string = '97RggLo3zV5kFGYW4yoQTxr4Xkz4Vg2WPHzNYXXWpump' const PAYMENT_RECEIVER_ADDRESS: string = 'JB8YCqKBKNtS4ZHcGPJXSJokcvdgdeeyWRxGqgyX5EwP' -const REQUIRED_PAYMENT_AMOUNT: number = 1 +const REQUIRED_PAYMENT_AMOUNT: number = 2 const SOLANA_NETWORK: string = 'mainnet' const SOLANA_RPC_URL: string = 'https://young-radial-orb.solana-mainnet.quiknode.pro/67612b364664616c29514e551bf5de38447ca3d4' const SOLANA_WEBSOCKET_URL: string = 'wss://young-radial-orb.solana-mainnet.quiknode.pro/67612b364664616c29514e551bf5de38447ca3d4' @@ -81,7 +99,7 @@ const Page: React.FC = (): React.ReactElement => { } const processPayment = async (): Promise => { - if (!walletState.connected || !walletState.publicKey) { + if (!walletState.connected || !walletState.publicKey || !window.solflare) { return } @@ -108,10 +126,10 @@ const Page: React.FC = (): React.ReactElement => { senderATA, receiverATA, senderPublicKey, - BigInt(REQUIRED_PAYMENT_AMOUNT * (10 ** 9)) // Convert to proper format + BigInt(REQUIRED_PAYMENT_AMOUNT * (10 ** 6)) // Convert to proper format ) - const latestBlockhash = await connection.getLatestBlockhash() + const latestBlockhash = await connection.getLatestBlockhash('confirmed') // Create transaction const transaction = new Transaction() @@ -120,16 +138,21 @@ const Page: React.FC = (): React.ReactElement => { transaction.feePayer = senderPublicKey try { - // Request signature and send transaction - const signedTransaction = await window.solflare.signAndSendTransaction(transaction) - const signature = await connection.sendRawTransaction(signedTransaction.serialize()) + // Sign and send transaction with preflight disabled + const { signature } = await window.solflare.signAndSendTransaction(transaction, { + skipPreflight: true + }) - // Wait for confirmation + console.log('Transaction sent:', signature) + + // Wait for confirmation with WebSocket support const confirmation = await connection.confirmTransaction({ signature, blockhash: latestBlockhash.blockhash, lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, - }) + }, 'confirmed') + + console.log('Transaction confirmed:', confirmation) if (confirmation.value.err) { throw new Error('Transaction failed to confirm') @@ -141,14 +164,15 @@ const Page: React.FC = (): React.ReactElement => { error: null, }) } catch (error) { - throw new Error('Failed to sign or send transaction') + console.error('Transaction error:', error) + throw new Error(`Failed to sign or send transaction: ${error instanceof Error ? error.message : 'Unknown error'}`) } } catch (error) { console.error('Payment error:', error) setPaymentStatus({ ...paymentStatus, processing: false, - error: 'Payment failed. Please try again.', + error: error instanceof Error ? error.message : 'Payment failed. Please try again.', }) } } diff --git a/src/types/solflare.ts b/src/types/solflare.ts deleted file mode 100644 index 2880e3e..0000000 --- a/src/types/solflare.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface SolflareWallet { - connect(): Promise - disconnect(): Promise - signAndSendTransaction(transaction: any): Promise - publicKey: { - toString(): string - } -} - -declare global { - interface Window { - solflare?: SolflareWallet - } -} - -export {}