I am approaching this from the perspective of asking, what is the point of all this "extra" information. Why can't btc just track agreed upon balances on each address?
Bitcoin is designed in such a way that you can guarantee the validity of any transaction you receive without needing to trust what anyone else says about the history of the bitcoins being received.
I don't understand why the blockchain doesn't simply keep track of the unspent balances. The input sig history should only need to be maintained until the blocks go deep enough that we are certain of the chain we are on (several days). All the tx's before these "recent blocks" can just be referenced by a much smaller table of output address carrying the total balances of all the coins they received. What's wrong with this?
If the blockchain only had recent totals associated with each address, then you would have to trust that the peer (or peers) that are providing you with your copy of the blockchain are not providing you an altered version that has different totals than the "real" blockchain. You have no way of tracing the provenance yourself to ensure the validity of the balances.
Lets say i start out with 25 mined coins sitting on a address. That address represents the hash of the public key associated with the private key sitting in my wallet. Now when i originate a tx to send 10 coins to a new receiving address i take the amount, and the receiving address and attach a signed message of those two and transmit that to a miner. how can the miner verify that signed message if he can only see the hash of the public key? Doesn't he need the whole public key, or is there some neat trick of cryptography going on here?
Also, if i send the next 15 coins to the same address later, the blockchain will retain the sig file for that tx as well. right?
So, when a tx is sent from that receiving address for 20 btc to a yet another new address, both "tokens" are then presented in the next block with a new sig right? I think they are called unspent outputs right? And 5 btc is then broken into yet another token as being sent back as change. (to a new address? or the sending address)
Lets walk through your example:
A brand new block mined by a solo miner rewards 25 BTC to a single address (lets say address 1AAAaaa, which is a hash of the public key 123456789, which is derived from the private key ABCDEFG) with a transaction that has a transactionID of 2222222.
Address 1AAAaaa has one unspent output valued at 25 BTC.
You create a transaction (transactionID 3333333) sending 10 BTC to address 1BBBbbb.
Your wallet indicates that the input to this transaction is the output of transactionID 2222222.
Your wallet provides in the input the public key 123456789 to prove that the public key hashes to the address 1AAAaaa.
Your wallet provides a signature using private key 987654321 to prove that it has the authorization to spend the input.
Your wallet creates 2 outputs.
The first output indicates that 10 BTC should be assigned to address 1BBBbbb
The second output indicates that 15 BTC should be assigned to some other address
Depending on the wallet that you choose to use, this second output could be assigned back to 1AAAaaa, or it could be assigned to some other new address back in your wallet.
The address 1BBBbbb now has 1 unspent output valued at 10 BTC.
Some address in your wallet now has 1 unspent output valued at 15 BTC.
The 25 BTC output that had previously been associated with 1AAAaaa has now been spent.
Now you create a transaction (transactionID 4444444) sending 15 BTC to address 1BBBbbb.
Your wallet indicates that the input to this transaction is the second output of transactionID 3333333.
Your wallet provides in the input the public key of whatever address received the 15 BTC output in transaction 3333333.
Your wallet provides a signature using the private key of whatever address recevied the 15 BTC output in transaction 3333333.
Your wallet only creates 1 output (since the entire 15 BTC output is being sent, there is no need for "change")
The output indicates that the 15 BTC should be assigned to address 1BBBbbb
The address 1BBBbbb now has 2 unspent outputs. One from transaction 3333333 for 10 BTC, and the other from transaction 4444444 for 15 BTC.
The 25 BTC output that had previously been associated with 1AAAaaa and the 15 BTC output that had been associated with some address in your wallet have now both been spent.
Now the owner of 1BBBbbb creates a transaction (transactionID 5555555) sending 20 BTC to address 1CCCccc.
Their wallet indicates that there are 2 inputs to this transaction.
The first input to this transaction is the first output of transaction 3333333
The second input to this transaction is the first (only) output of transaction 4444444.
Their wallet provides in each input the public key that hashes to address 1BBBbbb.
Their wallet provides 2 signatures (one in each input) using the private key that the 1BBBbbb address is derived from.
Their wallet creates 2 outputs.
The first output indicates that 20 BTC should be assigned to some other address (lets call it 1CCCccc).
The second output indicates that 5 BTC should be assigned back to some address in the wallet of the person that owns 1BBBbbb. Depending on the wallet program that they use, this may be the same 1BBBbbb address or it may be some new address in that same wallet.
The address 1CCCccc now has one unspent output valued at 20 BTC.
Some address in the wallet owned by the person who owns 1BBBbbb has one unspent output valued at 5 BTC.
All other outputs have been spent at this time.