0

I have created a database table simply copying the information from listsinceblock from Bitcoin Core's API. I have a UNIQUE constraint set to "txid + vout", as I'm supposed to. But when, as I'm trying to understand how Bitcoin works at least on a surface level, I do this:

SELECT txid, count(*) FROM "Bitcoin Core transactions" GROUP BY txid;

Then it is revealed that not one of my txids have more than one vout. The count column says "1" for each txid, meaning they all have only one vout.

I've made numerous Bitcoin transactions. Why has none of them ever used more than one vout? And what happens the day this happens? I'm using this table's data in order to automatically update my separate bookkeeping of all my Bitcoin transactions ("transactions" here meaning actual transactions -- not some internal "txid + vout" concept). I obviously don't want some internal Bitcoin logic to result in two different "bookkeeping posts", when it's really just a single Bitcoin transaction!

I'm starting to wonder if I'm simply stupid for not understanding this, or if Bitcoin is deliberately designed to be as confusing as possible. How should I handle the possibility that there will at some point be one transaction which is listed as the same txid but multiple different vout ids?

If it weren't for the fact that my future and survival is dependent on this, I would have long ago given up on Bitcoin and rejected it as "cryptic nonsense". I don't understand what the problem is with just having a clear interface for the actual Bitcoin transactions. I don't care about some complex internal logic and don't want to be exposed to it. I can't escape the feeling of still having missed something important, in spite of all this endless reading and asking questions for years and years.

Using any kind of "intermediate" service or software would destroy the point of Bitcoin. Why can't Bitcoin Core just clearly list the human-relevant information instead of exposing internal mechanisms to the "end user"/programmer? Or is it?

1 Answer 1

3

Why has none of them ever used more than one vout?

If each of your transactions only sends Bitcoin to one receiver, then there's going to be only one receiver output in each of those transactions. Hence you only see a single vout per txid.

You can create transactions which send to multiple receivers. You should see multiple vouts for those. You can make them by using the sendmany command or by clicking the Add Recipient button in the GUI.

And what happens the day this happens?

Nothing should happen except that you will see multiple txids with different vouts. In the end, it all depends on your software and how it is handling that. Since it sounds like you have dealt with the uniqueness constraint correctly, nothing should happen.

Why can't Bitcoin Core just clearly list the human-relevant information instead of exposing internal mechanisms to the "end user"/programmer?

If you want human relevant information, use the GUI. The RPC interface is intended for developers and advanced users. The whole point of the RPC is to allow people to build software that use Bitcoin Core and they are going to need to understand and access all of this additional information.

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.