This commit is contained in:
zramsay 2024-12-19 15:27:45 -05:00
parent 01d95feb48
commit 9a2857bffd
2 changed files with 35 additions and 27 deletions

View File

@ -21,10 +21,28 @@ interface GenerationState {
error: string | null error: string | null
} }
// Solflare wallet type definition
interface SolflareWallet {
connect(): Promise<void>
disconnect(): Promise<void>
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 // Replace these with your actual addresses
const MTM_TOKEN_MINT: string = '97RggLo3zV5kFGYW4yoQTxr4Xkz4Vg2WPHzNYXXWpump' const MTM_TOKEN_MINT: string = '97RggLo3zV5kFGYW4yoQTxr4Xkz4Vg2WPHzNYXXWpump'
const PAYMENT_RECEIVER_ADDRESS: string = 'JB8YCqKBKNtS4ZHcGPJXSJokcvdgdeeyWRxGqgyX5EwP' 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_NETWORK: string = 'mainnet'
const SOLANA_RPC_URL: string = 'https://young-radial-orb.solana-mainnet.quiknode.pro/67612b364664616c29514e551bf5de38447ca3d4' 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' 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<void> => { const processPayment = async (): Promise<void> => {
if (!walletState.connected || !walletState.publicKey) { if (!walletState.connected || !walletState.publicKey || !window.solflare) {
return return
} }
@ -108,10 +126,10 @@ const Page: React.FC = (): React.ReactElement => {
senderATA, senderATA,
receiverATA, receiverATA,
senderPublicKey, 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 // Create transaction
const transaction = new Transaction() const transaction = new Transaction()
@ -120,16 +138,21 @@ const Page: React.FC = (): React.ReactElement => {
transaction.feePayer = senderPublicKey transaction.feePayer = senderPublicKey
try { try {
// Request signature and send transaction // Sign and send transaction with preflight disabled
const signedTransaction = await window.solflare.signAndSendTransaction(transaction) const { signature } = await window.solflare.signAndSendTransaction(transaction, {
const signature = await connection.sendRawTransaction(signedTransaction.serialize()) skipPreflight: true
})
// Wait for confirmation console.log('Transaction sent:', signature)
// Wait for confirmation with WebSocket support
const confirmation = await connection.confirmTransaction({ const confirmation = await connection.confirmTransaction({
signature, signature,
blockhash: latestBlockhash.blockhash, blockhash: latestBlockhash.blockhash,
lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
}) }, 'confirmed')
console.log('Transaction confirmed:', confirmation)
if (confirmation.value.err) { if (confirmation.value.err) {
throw new Error('Transaction failed to confirm') throw new Error('Transaction failed to confirm')
@ -141,14 +164,15 @@ const Page: React.FC = (): React.ReactElement => {
error: null, error: null,
}) })
} catch (error) { } 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) { } catch (error) {
console.error('Payment error:', error) console.error('Payment error:', error)
setPaymentStatus({ setPaymentStatus({
...paymentStatus, ...paymentStatus,
processing: false, processing: false,
error: 'Payment failed. Please try again.', error: error instanceof Error ? error.message : 'Payment failed. Please try again.',
}) })
} }
} }

View File

@ -1,16 +0,0 @@
export interface SolflareWallet {
connect(): Promise<void>
disconnect(): Promise<void>
signAndSendTransaction(transaction: any): Promise<any>
publicKey: {
toString(): string
}
}
declare global {
interface Window {
solflare?: SolflareWallet
}
}
export {}