IMHO it’s not secure to offer the handle to a consumer instantly however, from my place, your proposed answer appears possible with adjustment.
I’d advocate ammending as follows:
-
Examine the hole by API. If **hole>x* goto #3 else #2.
-
Generate the handle and retailer it inside
unpaid_address
desk based mostly on the “index quantity” that blockchain returns with handle. set expiration time for 60 minutes, retailer additionally the quantity requested and go to the #4. -
Get the primary expired unpaid handle from
unpaid_address
desk. Duplicate it whether it is nonetheless marked as pending and retailer the quantity additionally. If there is not something, present sorry server is busy, else goto #4. -
Present the handle to the consumer and say you might have quarter-hour to pay to this handle. (quarter-hour is lower than expire time to keep away from issues).
-
I be aware that you simply appear to be utilizing blockchin pockets however, you are able to do this as well as: If utilizing Bitcoin Core (bitcoin-qt|bitcoind) set
-walletnotify
on the command line to execute a script, calling your callback URL with a standing of pending if a transaction to any your handle enters mempool (caveat: I solely consider thatwalletnotify
executes when a transaction to your pockets enters mempool – you’ll have to check this). Your script might want to extract the payto handle and BTC quantity to match with theunpaid_address
desk. Additional,walletnotify
ought to run once more when the transaction has its first affirmation, you possibly can name your callback URL with a standing of inexperienced after checking the transaction particulars. See How do I exploit walletnotify?. -
If blockchain callback my URL then I take away the handle from
unpaid_address
else the handle has been there for the subsequent request by different consumer **if not even pending*. I’ll give that handle to the subsequent consumer for paying.
Notice that on many wallets you possibly can enhance the hole restrict to, say, 100 or 1000 as you might have understood. I will surely take into account a spot restrict of 1000 for the implementation that you simply suggest.
Notice additionally that you will want to rigorously take into account how you can consider a transaction that exists that isn’t but confirmed. Until the charge is ridiculously low it ought to verify ultimately, whilst a lot as greater than 30 days is just not inconceivable as I’ve skilled this with a reasonable, however not notably low charge concentrating on 3 day affirmation time.
I’d additionally advocate storing the handle together with the BTC quantity requested and by no means take away it as soon as it’s marked as pending, though, in doing so there isn’t any motive that you simply can’t re-use the handle at some future time anyway (with out eradicating it because you retailer the handle and quantity) supplied, after all, that folks pay the complete quantity precisely and with out deducting the charges from the paid quantity.
If you’re promoting excessive worth good you may take into account ready till the cost is marked inexperienced earlier than delivery as I beleive that that is what you might have supposed.