Author

Topic: Please delete. (Read 1585 times)

legendary
Activity: 1330
Merit: 1019
December 25, 2015, 02:56:36 PM
#13
The blockchain is the magic of bitcoin. It's a timeline of hope bitcoin has changed, a failsafe for all double spends, it's the whole ecosystem.

When you make a transaction, the inputs must be confirmed as unspent. Without a record to go off of, you'd have to get the proof of input from somewhere. It can't be stored in a central location, as that destroys the idea of a peer to peer system.
[/qr
Bitcoins is a real money so the way we track our money in banks passbook. Bitcoins also requires a track of payments receive or payments withdrawn or spendings on buying and selling.
sr. member
Activity: 392
Merit: 251
December 25, 2015, 05:50:27 AM
#12
The blockchain is the magic of bitcoin. It's a timeline of hope bitcoin has changed, a failsafe for all double spends, it's the whole ecosystem.

When you make a transaction, the inputs must be confirmed as unspent. Without a record to go off of, you'd have to get the proof of input from somewhere. It can't be stored in a central location, as that destroys the idea of a peer to peer system.
legendary
Activity: 3472
Merit: 4801
December 19, 2015, 07:46:32 PM
#11
Inputs are just references to unspent outputs.
No, inputs are references to the *spent* outputs of previous transactions. What makes outputs unspent is that there are no inputs that reference them.

Ok, I can see how you got confused by my description, but your description is even less clear. A node treats a transaction as invalid if the inputs aren't in the node's UTXO (that's unspent transaction outputs). Once the node verifies that the transaction is valid, it removes the outputs from its list of unspent outputs, but if that transaction later becomes invalid (or forgotten), the transaction will be tossed out and the outputs that were being referenced will go back to being unspent and will be returned to the UTXO.

So, if you are building a transaction, the inputs you choose MUST be *unspent*.  Once you are done building the transaction the outputs that are being referenced will become *spent* for you, but until you broadcast the transaction they will remain *unspent* for everyone else.  Then as each node receives and validates the transaction, they will consider the outputs to be *spent* (unless the transaction becomes invalid or forgotten).

You really are chasing a misunderstanding on your part and not explaining how any of this applies to your concept of a better protocol.

Outputs are a representation of value...
Yes, and we usually represent value with numbers, like on bills- $5, $10, $20, $50.

Yes, and in the case of the bitcoin protocol we represent the value with numbers on outputs, like 100000000, 10000, 236100

...along with a script that encumbers the output with a requirement that must be met before it can be used as a valid input.
In short, the script is a lock that requires a key to spend the balance.

Balance? Generally when people use the word "balance" while talking about money they're referring to a sum of multiple credits and debits.  In this case, the script (if supplied with input that results in successful execution) simply allows a single output that is not yet referenced as an input in any other transaction to be referenced as an input in the transaction being built.


I realize that these details are obscure and that I'm being very specific about what I'm saying, but this is the "Technical Discussion" section of the forum, not the "Beginners & Help" section.  Therefore, if we're going to talk about re-designing the protocol then we've got to consider that actual technical details of how it works and what needs to be accomplished.
The way you said it is vague and confusing, not specific.

It certainly seemed to confuse you, but it seemed clear to me.  I've made an attempt to clear up the confusion.  Let me know if you're still having a hard time understanding.

When we talk about addresses, bitcoins, and balances we are using abstractions that make it easier to discuss the transfer of control over value with those that aren't interested in the technical details of what is actually happening.  None of those things actually exist in the blockchain.  Websites and wallets that show you those things are creating a representation of information and presenting it to the users with the abstractions that they are familiar with.
The whole point of the blockchain is to validate balances.

Nope.

The point of the blockchain is to provide a decentralized method of setting an order for transactions. I explained this already.

Without balance data there's nothing to validate.

Nodes validate transactions and blocks, not balances. 

There would be no money and people would be making up there own balances.

With bitcoin, money is represented as transaction output values.  People choose which outputs they believe they have control over, and they add them all up.  The sum of those outputs are what people like to call their own balances, but the blockchain, blocks, and transactions have no use for an address balance, wallet balance, or person's balance. When validating a transaction, nodes do verify that the sum of the value supplied by the transaction inputs is not less than the sum of the value assigned to the transaction outputs.  When validating a block, nodes do validate that the block reward that the block pays is not more than the sum of the block subsidy and all the transaction fees.

We're using abstract terms to simplify the details but that doesn't mean the terms are inaccurate or complete fiction.

The concept of "a bitcoin" is an abstraction.  There is nothing in the protocol that exists as a distinct entity to represent a specific bitcoin.  The idea that someone is "sending" a thing called "a bitcoin" to someone else's wallet is complete fiction.

While individuals might work with a concept of "a balance" when they add up all the outputs that they believe they have control over, there are no actual address balances or wallet balances in the blockchain or protocol.

A bitcoin address is certainly a real thing that people use, but that's an abstraction that the wallet created for them.  The blockchain has output scripts, not all of which can be accurately represented as an address.

All computers data is subject to interpretation. Abstractions are the standards of interpretation as well as the models that systems are designed to emulate.

Sure.  Fine.

None of this explains how your suggested improvements to the protocol would work.  Perhaps instead of disagreeing on the definitions of "spent", "balance", and "address" you might want to explain how your solution can work in a decentralized system while withstanding Sybil attacks and attempts to fork the blockchain or otherwise isolate a peer.

Take a look at the original whitepaper, then explain exactly how transactions will be represented in your system, how they will be validated, and how new nodes can enter the system without needing to trust any other nodes.

legendary
Activity: 1246
Merit: 1011
December 19, 2015, 05:20:54 PM
#10
... [the] "blockchain" is the decentralized public ledger that keeps track of transactions and ensures an order between them.
(emphasis mine)

May I suggest the use of the word "journal" instead of "ledger" here?  In accounting, a journal is a record of transactions ordered by date whereas a ledger is more like a journal's summary and could be considered akin to the UTXO.

In most contexts this is a pointless nitpick, but on the topic of distinguishing between protocol-level concepts and higher-level abstractions I believe this extra precision is helpful.
staff
Activity: 3458
Merit: 6793
Just writing some code
December 19, 2015, 02:10:26 PM
#9
If you are using the term "balances" as the value assigned to an input or output, then you are correct. However in the OP you are defining balances in the way that most people associate the term "balance" with, the value associated with an address. Of course that doesn't exist at a protocol level, and neither do addresses.

Can you explain what you are exactly trying to say using protocol level terminology and not using abstractions like balances?
sr. member
Activity: 384
Merit: 258
December 19, 2015, 01:55:54 PM
#8
Quote
The whole point of the blockchain is to validate balances.

Sorry but this is wrong.

Quote
Without balance data there's nothing to validate.
...
In short, the script is a lock that requires a key to spend the balance.

This is also wrong because the concept of balance data don't exist in the blockchain.

Quote
We're using abstract terms to simplify the details but that doesn't mean the terms are inaccurate or complete fiction.

You're right.



The thing is that DannyHamilton is absolutely right when he writes that balances, addresses and coins don't exist at protocol level (and in the blockchain).
But we're humans and the concepts managed at protocol level are a bit hard for every day use by a human person ! Cheesy

Therefore, a layer of abstraction has been built on top of the protocol with wallets, blocks explorers, ...
Concepts defined by these tools (addresses, balances, ...) are more human friendly and are really useful but remains this truth: balances or addresses don't exist at protocol level or in the blockchain.

Actually, the same thing happens in software development.
If you use an object-oriented language, you talk about classes and object all day long and these concepts are really useful for developers.
But fact is that at CPU level, the concepts of class or object don't have any sense (and ultimately everything in a computer is just about electrons).


EDIT: Note that some proposals were made to introduce the concept of utxos commitment in the protocol. It doesn't introduce the concept of balances but it allows to achieve something similar to your proposition (it builds a "snapshot" of the utxo set at a given height of the chain). This is often thought as a possible solution to reduce the disk space consumed by the blockchain.
copper member
Activity: 1498
Merit: 1528
No I dont escrow anymore.
December 19, 2015, 10:17:05 AM
#7
The block chain is the key element in how Bitcoin functions. If you read more about how Bitcoin works (specifically transactions), you should start to understand why the block chain exists.

Quote from: bitcoin.pdf
In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions.

Bitcoin transactions are sent from and to electronic bitcoin wallets like Blockchain

"Blockchain" is not a wallet, "blockchain" is the decentralized public ledger journal[1] that keeps track of transactions and ensures an order between them.

Are you maybe refering to the service called "blockchain.info"?

, other in market and are digitally signed for security. Everyone on the network knows about a transaction, and the history of a transaction can be traced back to the point where the bitcoins were produced. Keeping record of transactions will help you to see how and when you have used it or traded it

You didnt read what danny wrote above did you?


[1] See the post by teukon[2] below for definitions of both words and why journal is the better word here.
[2] https://bitcointalksearch.org/topic/m.13301043
legendary
Activity: 3472
Merit: 4801
December 18, 2015, 04:19:56 PM
#6
Inputs and outputs ARE balances/bitcoins.

Nope.

I know a lot of people like to think they are, but that's not how it works (it took me a few months of arguing your side of this disagreement with other experts when I first discovered bitcoin before I realized that they were right and finally gained a better understanding of the protocol).

Inputs are just references to unspent outputs.

Outputs are a representation of value along with a script that encumbers the output with a requirement that must be met before it can be used as a valid input.

I realize that these details are obscure and that I'm being very specific about what I'm saying, but this is the "Technical Discussion" section of the forum, not the "Beginners & Help" section.  Therefore, if we're going to talk about re-designing the protocol then we've got to consider that actual technical details of how it works and what needs to be accomplished.

When we talk about addresses, bitcoins, and balances we are using abstractions that make it easier to discuss the transfer of control over value with those that aren't interested in the technical details of what is actually happening.  None of those things actually exist in the blockchain.  Websites and wallets that show you those things are creating a representation of information and presenting it to the users with the abstractions that they are familiar with.

legendary
Activity: 4214
Merit: 1313
December 18, 2015, 03:52:19 PM
#5
There are transactions with inputs (outputs that are being spent) and newly created outputs.

No balances.  No addresses.  No bitcoins.

Just transactions made up of inputs and outputs.
Inputs and outputs ARE balances/bitcoins.

No they aren't.  They are abstractions of inputs and outputs which is what Danny is pointing out. 

If you are talking about "balances" it is important to understand how bitcoin works and does not track balances.  This is an important point to be clear about since it does not reflect the underlying design. 

legendary
Activity: 3472
Merit: 4801
December 18, 2015, 03:22:23 PM
#4
There are no balances, no bitcoin addresses, and no actual bitcoins in the blockchain.
Actually there are. Every block includes a list of transactions with all input and output data. That's why the blockchain is 50GB instead of 50MB.

Correct.  There are transactions with inputs (outputs that are being spent) and newly created outputs.

No balances.  No addresses.  No bitcoins.

Just transactions made up of inputs and outputs.

A transactions output can only be spent once. (not once per block, just once and that's all).

The blocks don't "separate transactions between time intervals", they establish an order (which came first, second, third, etc) for transactions.  That way if two transactions attempt to spend the same output, then the transaction that came first (identified by being in the blockchain) is the valid transaction and any subsequent transaction attempting to spend that same output is invalid.

If two transaction attempt to spend the same output at the same time, neither of them will be in the blockchain. That's why transaction outputs can only be spent once per block.

If two transactions attempt to spend the same output at the same time, only one of them will make it into the blockchain and will therefore be the "real" transaction.  Once one of those two transactions are in the blockchain, the other one becomes invalid and is rejected by all peers.

Outputs can only be spent once.  Not "once per block".  Just once and then never again.

In order for a transaction to be valid, all of it's inputs must be unspent outputs.  If any input is an output that has already been spent then the transaction is not valid.

With unconfirmed transactions, each peer keeps its own list of which outputs have been spent and determines for itself if a transaction is valid or not.  This means that if two different nodes each receive a different transaction spending the same input, then there will be a discrepancy.  They won't agree which transaction is valid.  Each peer will assume that the first transaction that it saw is the "valid" one and will assume that the other peer is wrong.  The discrepancy will remain until one of the transactions is included in a block. Then both peers will receive the block, accept the block as an indication of which transaction is actually valid, and whichever peer had the other transaction will get rid of the transaction it had (and any transactions that are dependent on the outputs that the invalid transaction created).
legendary
Activity: 3472
Merit: 4801
December 18, 2015, 01:30:13 PM
#3
Quote from: bitcoin.pdf
In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions.
Bitcoin solves the double spending problem by separating transactions between consecutive time intervals (called blocks) so that balances can only be spent once per block.

There are no balances, no bitcoin addresses, and no actual bitcoins in the blockchain.

A transaction's output can only be spent once.  (not once per block, just once and that's all).

The blocks don't "separate transactions between time intervals", they establish a an order (which came first, second, third, etc) for transactions.  That way if two transactions attempt to spend the same output, then the transaction that came first (identified by being in the blockchain) is the valid transaction and any subsequent transaction attempting to spend that same output is invalid.

If you would please explain in detail how my idea compromises the blockchain, I will gladly take it into consideration.

Your idea doesn't really have enough details to point out the flaws.

Just one of many details that you haven't explained yet:

If a miner receives a transaction, how will they know if the transaction is valid?  How will they know that the indicated source of the bitcoins in the transaction actually authorized the transaction?

legendary
Activity: 1120
Merit: 1012
December 18, 2015, 12:41:02 PM
#2
The block chain is the key element in how Bitcoin functions. If you read more about how Bitcoin works (specifically transactions), you should start to understand why the block chain exists.

Quote from: bitcoin.pdf
In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions.
jr. member
Activity: 49
Merit: 38
December 18, 2015, 12:24:43 PM
#1
Never mind. Please delete.  Embarrassed
Jump to: