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
}
// 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
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<void> => {
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.',
})
}
}

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 {}