import { useSelectPaymentModal } from '@0xsequence/checkout'
import { encodeFunctionData, toHex } from 'viem'
import { useAccount } from 'wagmi'
function App() {
const { address } = useAccount()
const { openSelectPaymentModal } = useSelectPaymentModal()
const handleCheckout = () => {
if (!address) return
// ERC-20 payment settings
const currencyAddress = '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359' // USDC on Polygon
const salesContractAddress = '0xe65b75eb7c58ffc0bf0e671d64d0e1c6cd0d3e5b'
const collectionAddress = '0xdeb398f41ccd290ee5114df7e498cf04fac916cb'
const price = '20000' // Price in smallest unit (0.02 USDC)
const chainId = 137 // Polygon
// NFT details
const collectibles = [
{
tokenId: '1',
quantity: '1'
}
]
// Transaction data for the ERC-1155 mint function
const purchaseTransactionData = encodeFunctionData({
abi: ERC_1155_SALE_CONTRACT, // Your contract ABI
functionName: 'mint',
args: [
address,
collectibles.map(c => BigInt(c.tokenId)),
collectibles.map(c => BigInt(c.quantity)),
toHex(0),
currencyAddress,
price,
[toHex(0, { size: 32 })]
]
})
// Open the payment selection modal
openSelectPaymentModal({
collectibles,
chain: chainId,
price,
targetContractAddress: salesContractAddress,
recipientAddress: address,
currencyAddress,
collectionAddress,
creditCardProviders: ['sardine', 'transak'],
transakConfig: {
contractId: 'your-contract-id',
apiKey: 'your-api-key'
},
copyrightText: 'ⓒ2024 Your Company',
onSuccess: (txnHash: string) => {
console.log('success!', txnHash)
},
onError: (error: Error) => {
console.error(error)
},
onClose: () => {
console.log('modal closed!')
},
txData: purchaseTransactionData
})
}
return (
<button onClick={handleCheckout}>
Buy NFT with multiple payment options
</button>
)
}