What is an unspent output?[/b]
Lets say your bitcoin address is 111. Now someone sends 1 BTC to this address. Now address 111 has one unspent output. Now someone else sends 2 BTC to this address. Now address 111 has two unspent outputs and a balance of 3 BTC in total.
So now ur telling me an unspent output is really a sig script from a previous tx to that receiving address. So 2 txs to an address: 2 sig scripts controlling the movement of coins there. But 111 would list 3 BTC in the UTXO correct? UTXO doesn't list the address twice. Once with 1 btc, and again with 2 btc. That's all kinds of database fail. (unless your goal is to allow for every coin balance in UTXO to reference the blockchain txs that created it. Then its dbase overkill.) I still can't understand why Satoshi didn't build pruning in from day one.
Now lets say you want to send someone 0.1 ...You always have to spent the whole output. This means in this case the bitcoin client would take the first unspent output, send 0.1 BTC to the other person and 0.9 BTC back to yourself. For this the client creates a new change address in the background and adds this address to your wallet.
Why on God's green earth did Satoshi choose to do this. I;ve seen txns on blockexplorer that only move a portion of a balance to a new address. No, 2 output address to move the "change" of the unspent input. Or is it that i'm just seeing a full unspent input being moved?
Why don't tx's just track the net movement from one address to another(s), and have the client alter the UTXO table (which i think just contains the output addresses and their total balances). Then every 10 blocks or so, hash this UTXO and include it in the header (say stuff it in the merkle root as if it were a tx hash). This means a new client could just d/l the last X number of blocks & headers till it felt confident it had enough. DL then most recent UTXO, and then check then UTXO it received by walking it back by all the txns in the X blocks it d/led and checking the UTXO hashes in the header? Could allow new clients to d/l and catch up to the current chain in minutes instead of days. Then it will be like Star Terk II, where days become hours.
Wouldn't this be the most elegant way to prune? It might of course require a new data field added to the header (UTXO hash), but maybe this can be stuffed into the merkle root instead, as if it were a tx hash. Thus, the UTXO hash data would be seeded into the header via the merkle root w/o having to add a new header field which would be a hard fork.
Of course how to get the UTXO hash to look like a tx is key. Aren't there unused data fields in the coinbase. Does coinbase go into the merkle roots? Does the unused field get hashed into that? thus that would be the best place to stick the utxo hash.