I'm implementing a Bitcoin payment system that generates bitcoin address for each user to deposit. I use BitcoinJ to generate user's addresses and rawblock API from Blockchain.com to get every single block to check if my addresses are in any transaction output, then my system increases the user's internal balance.

I save scanned block height in the database and send a request for a new block every 10 minutes.

Is that solution correct? (I need testnet so I cannot use their Wallet Service)

Thank you.

1 Answer 1


This doesn't sound correct to me.

  1. You're relying on a centralized service to fetch blocks. What if their system has an error and sends you incorrect data?
    What if their service is unreachable?

  2. It doesn't seem like you have any way to handle blockchain reorganization. You might end up crediting a payment twice, or crediting where a double spend was successful in a competing chain.

Consider looking into something like BTCpay which FOSS self-hosted bitcoin payment processor.

  • I've been thinking Blockchain.com is a trusted service and we can rely on them and I don't want to maintain a node on my server. For the (2.), I fetch only blocks that have at least n confirmations and fetch only 1 block (1 time) at any height. I haven't known any other mechanism to handle blockchain reorganization. Do you think electrum.org or a centralized service is a better choice in my case? Thank you. Commented Dec 31, 2018 at 15:41
  • 2
    Blockchain[dot]com is definitely not a trusted service. Really there are not any trusted services in bitcoin. WRT electrum, it's a bit better but you will lose all your privacy in the process. I still believe something like BTCpay is your best bet.
    – arubi
    Commented Dec 31, 2018 at 16:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.