I've got a question about broadcasting transactions from mycelium wallets.
Sometimes when I send a transaction it takes a while before it is broadcast to the bitcoin network.
I've noticed that whenever this delay happens, the delayed transaction is always announced just after a new block is found.
My questions are
- is it really a delayed broadcast or am I mistaken in my deduction from my observations?
- why is the delay happening?
- is it unique to mycelium or is it something that can happen on any wallet?
This has affected me in a contrived test environment when sending lots of transactions in a row (and is how I have been able to correlate a delayed broadcast with a new block being found).
I almost wrote it off as something that won't affect real-world use cases, but this did affect me today in real life when I bought something at a shop with mycelium, then ten minutes later I bought another thing at a different shop and the second transaction didn't broadcast. I loaded blockchain.info and saw the last block was about 20 minutes old. As soon as the new block was found, my second transaction was announced.
First transaction - https://blockchain.info/tx/2ce67ec3f2e5d63625d809bc0f513036273dce6fd68691590eb940ef02e79c6f
Second transaction - https://blockchain.info/tx/bfe8801f7779ca18dbb6f387784f2d898f00e0929e80b28d27c36780558f5c75
I should clarify when I say 'broadcast to the bitcoin network' I mean that I can see the transaction with zero confirmations on blockchain.info or in the destination coinjar.com wallet. When it is 'delayed' I cannot see the transaction on either of these services at all.
Any help in understanding this is much appreciated.
Let me explain how transaction broadcasting works on our side:
Our servers are connected to 500+ nodes each. Whenever Mycelium pushes a transaction to our servers it is immediately broadcasted to half of those nodes (250). From there it is proliferating the network and eventually gets echoed back to us through the other 250 nodes. We use this data to calculate a proliferation rate, which can be used for calculating a "confirmation confidence" (along with other observations) for zero confirmation transactions. Right now this data is not displayed in Mycelium.
When we broadcast a transaction we get the first echoes back after about half a second, and reach >90% proliferation within a few seconds.
I have on several occasions observed that blockchain.info misses unconfirmed transactions, this is a general trend and unrelated to Mycelium. Other developers I have spoken to have made similar observations. I think it is a bug on the blockchain.info side, or maybe they just skip some transactions when their system is overloaded. In the end it all gets resolved when the transaction finally confirms.
If you see the same behavior with coinjar it could be because they use blockchain.info as their backend system. I really have no idea what they do though.
Let me know if there is any thing else.