If you're going to run a payment system this way, by generating addresses and then checking if they've confirmed, the better way to do it (rather than pre-generating a batch), is to use hierarchical deterministic (HD) wallets. This way, instead of having to re-generate a batch of one-time receiving addresses to use on a regular basis, you generate a master key and then use the algorithm to generate addresses without having to use a full Bitcoin node (there are libraries in Python, JS, and all the common languages, look for "BIP 32" or "HD Wallet"). All you need to generate the deterministic addresses on your server is the master public key, thus there's less security risk (if the master public key is disclosed, it threatens the privacy of your users, but not the integrity of your funds).<p>If you don't want to bother generating the deterministic keys online, you could pre-generate thousands, even millions of them if you want. And keep both the private and public master keys offline. It also is a safer approach since you can securely store the master private key in a offline hardware wallet and not have to worry about keeping track of hundreds of private keys.<p>Long time since I've been active in Bitcoin, but this is the way I would have run a payment service without using a full node.