Am I correct in understanding that every node receives information about every transaction (as the technical paper says)? Doesn't that make bitcoin completely impractical for use as a currency on a large scale?

Why do you say that? Pretty much every P2P system works by replicating the information across all the participating nodes, even 100G movie packs for BitTorrent - we're talking about less than a kilobyte of information for a transaction.

Every other P2P system is replicating the information across a small group of participating nodes who are all interested in that content. On average each BitTorrent user downloads the movie once and uploads it once and that's it. And if you can't or don't want to download that 100G movie pack (like the vast majority of internet users) you can still use BitTorrent for smaller things.

Bitcoin, on the other hand, gives the whole world (assuming the whole world uses it) a live feed of the whole world's financial transactions all the time, and doesn't stop.

Say it becomes a popular payment method like Paypal or Alipay, which each process a few million transactions a day. That few million multiplied by "less than a kilobyte" makes at least a few hundred MB per day. That's more than the average person's internet usage. In some places it's more than the average person's available internet quota. And then that has to be distributed to millions of nodes, putting a significant load on some networks, not just individuals' connections.

I guess it's not quite as bad as I initially thought, but it's still enough to make it impractical for many people to run their own bitcoin clients in a world where bitcoin is popular. The likely scenario (assuming no change to how Bitcoin works) is that most people use big payment providers instead and those providers use Bitcoin between each other.

And then one of those providers ends up dominating and has more CPUs than the rest combined, and the whole "bitcoin is secure as long as the honest CPUs collectively outnumber any attacker" thing becomes moot.

This seems like a great idea but I also don't understand how it will scale? I'm assuming the goal of bitcoin is to be at least as big as paypal right?

I see 3 scaling issues:1) Having every node need to know about all transactions that happened ever.2) Keeping the network connected3) Amount of coins scaling with increased economic activity.

1) This seems like the biggest issue. Is the hope is that bandwidth and storage will keep pace with the number of transactions? Like the OP said paypal has millions of transactions a day. This will totally clog a lot of users bandwidth if they all have to be notified of each transaction.Is the plan to eventually have the chain drop off old blocks? or is there a way to split the chain into parts so only part of the network has to keep track of certain span of coins.

2) What happens when there are a few million concurrent users? everyone connects to IRC still? (Granted this is fixable as the network grows since it seems outside of the whole block chain system)

3) You have this clever method of slowly introducing coins by time but time isn't really the important thing. Shouldn't the amount of coins in circulation be proportional to the amount of users? If you want to avoid inflation & deflation the number of coins shouldn't the number of coins be proportional to the number of users or number of transactions or some other metric that is closer to the size of the economy?(Also I was able to figure out how/why the 21 million number was chosen?)

1 & 2 could be solved by using a distributed hash table:You should really look at http://en.wikipedia.org/wiki/KademliaI haven't looked lately to see if someone has come up with a better distributed storage system but it was by far the best solution a few years ago. (and I've implemented it before if you have questions)

This seems like a great idea but I also don't understand how it will scale? I'm assuming the goal of bitcoin is to be at least as big as paypal right?

I see 3 scaling issues:1) Having every node need to know about all transactions that happened ever.2) Keeping the network connected3) Amount of coins scaling with increased economic activity.

1) Actually, from what I read in the PDF, I don't think it's necessary. It only needs to know that a transfer of *this* coin from Owner A to Owner B was valid. It doesn't matter if 1 year ago, Owner C gave Owner A that coin.

2) It's P2P, someone out there will be connected. I run a 24/7 Dedicated Server just for Bit Coin now on a Fiber connection. Not because I work with them, but because I see the need to donate the resources for the cause.

3) Don't let the 21 million limit fool you. It's more like 21000000.00000000 limit because the coin is so divisible, but for sanity reasons, it would make sense not to be trading coin in the Quadrillion Bundles

1) Well even if you are right and the system can forget about old transactions, it still is broadcasting all current transactions to all nodes which doesn't scale. And nodes will need to keep collecting blocks forever which also doesn't scale.

2) Yes I know it is p2p that is why you have to worry about how the network stays connected and not just assume everyone will be connected. There are issues like islanding that you have to worry about if you remove a central point like the irc channel is now. This issue is more minor because this problem has been solved before and you don't have to change the way the currency system works to fix it later. I only mention it because I think the solution to 1 will also help here.

3) I know the number is really 21million*10^8 or whatever. But that is still fixed and the size of the bitcoin economy (hopefully) isn't fixed. The idea is that it will grow right? So that means that the value of bitcoins will have to change over time which isn't ideal. A currency that has 0 inflation/deflation is the most ideal right?

3) I know the number is really 21million*10^8 or whatever. But that is still fixed and the size of the bitcoin economy (hopefully) isn't fixed. The idea is that it will grow right? So that means that the value of bitcoins will have to change over time which isn't ideal. A currency that has 0 inflation/deflation is the most ideal right?

I think we need to be clear to separate inflation/deflation from supply/demand.

So that means that the value of bitcoins will have to change over time which isn't ideal.

What is the value of bitcoin? It has value only in that people perceive that it has value (the same as any fiat currency). Perceptions change all the time. If you want to see how this plays out look at the currency exchange market today. The value of bitcoin will float over time as supply and demand for it ebbs and flows. The important point is that the supply is fixed (once most of the coins are in circulation) and this serves to protect the value of bitcoin. Inflation erodes the value of currency and punishes savers; its a type of tax.

3) I know the number is really 21million*10^8 or whatever. But that is still fixed and the size of the bitcoin economy (hopefully) isn't fixed. The idea is that it will grow right? So that means that the value of bitcoins will have to change over time which isn't ideal. A currency that has 0 inflation/deflation is the most ideal right?

A currency with a fixed supply has 0 inflation/deflation by definition.

You are probably referring to price inflation/deflation, which is a seperate phenomenon and is unimportant as long as there is no monetary inflation/deflation. Even if you wanted to, there is no meaningful way to do it. Just look at how fudged the CPI numbers are.

I don't know that it's valid to say there is a fixed supply of bitcoins, because as has been discussed elsewhere in the forums, lost coins (lost/stolen wallets, hoarded coins on never-to-connect-again machines, etc) will not be recoverable in any way. So there's a cap on the number of coins that can be created over the lifetime of the currency, but the amount of bitcoins in circulation will not be fixed, as there will inevitably be lost coins as time goes on.

Now the divisibility of the coins is, as I understand it, what helps to insulate the currency against crazy deflation... but the economic discussions usually elude me, so I'm not 100% positive on that.

I don't know that it's valid to say there is a fixed supply of bitcoins, because as has been discussed elsewhere in the forums, lost coins (lost/stolen wallets, hoarded coins on never-to-connect-again machines, etc) will not be recoverable in any way. So there's a cap on the number of coins that can be created over the lifetime of the currency, but the amount of bitcoins in circulation will not be fixed, as there will inevitably be lost coins as time goes on.

Now the divisibility of the coins is, as I understand it, what helps to insulate the currency against crazy deflation... but the economic discussions usually elude me, so I'm not 100% positive on that.

You have a point here; it would probably be good if there was a mechanism to regenerate lost coins, but I'm not sure how that could be implemented.

As Bitcoins become more valuable, people will increasingly take precautions. Therefore, the loss should decrease as time goes on. Losing 5000 BTCs worth $5 isn't such a big deal; losing 5000 BTCs worth $10,000 is!

1) Well even if you are right and the system can forget about old transactions, it still is broadcasting all current transactions to all nodes which doesn't scale. And nodes will need to keep collecting blocks forever which also doesn't scale.

That is a good point, one I didn't think about. So, let me think out loud here. There are a possible 21 million coins. Every time a block is generated by someone, they earn 50 coins. Right now, I see 66,618 blocks have been generated since the beginning. So that's 66618 x 50 = 3,330,900 coins so far. To reach 21 million, we need to reach 21,000,000 / 50 = 420,000 blocks. 66,618 blocks take up about 56 megabytes of hard disk space. So, perhaps 420,000 blocks (if every single coin is created) would take up about 420000 x 56 / 66618 = 353 megabytes of hard disk space.

The rest would be transaction history to make sure the owners are valid and older transactions are pruned after a while, so perhaps at full scale, this application could eat up as much as 1GB of hard disk space. So, someone correct me if I'm wrong, but even at full scale, the clients would need about 1GB of hard disk space to contain a fully generated coin network?

Quote

2) Yes I know it is p2p that is why you have to worry about how the network stays connected and not just assume everyone will be connected. There are issues like islanding that you have to worry about if you remove a central point like the irc channel is now. This issue is more minor because this problem has been solved before and you don't have to change the way the currency system works to fix it later. I only mention it because I think the solution to 1 will also help here.

From what I read in the release notes, the IRC is just a bootstrap, the new version can work around IRC failure as it has an alternative (but slower) ways to sync up the first time users to the network.

Quote

3) I know the number is really 21million*10^8 or whatever. But that is still fixed and the size of the bitcoin economy (hopefully) isn't fixed. The idea is that it will grow right? So that means that the value of bitcoins will have to change over time which isn't ideal. A currency that has 0 inflation/deflation is the most ideal right?

Well, imagine if you will, the US and our national gross. It's somewhere in the multi-trillions last I heard. So, if everything had to be converted to dollars, that would be a trillion dollars in circulation (ignore how a complex system like a countries currency, this is way over simplifying). No imagine all of that was to be transfered into Bit Coins? Well, there are only 21 million Bit Coins, so a 1 to 1 conversion is out of the question. Basically it would have to be scaled back to the decimal points (probably 4 places) to fit all of that in. That still leaves 4 more decimal places in which any economy working in the Quadrillion range is probably out of scope of any country in the world (or all countries combined really)

So, if you don't think of a 1 to 1 conversion for Bit Coins, because even I want to think of Bit Coins as dollars for example. But it isn't. It is it's own currency within itself whose value is only dependent on the people that use it and what value they give it. It's like that for any currency really, the only difference is, instead of the bank or government in XYZ country being the one who controls how it's created and distributed, WE *all* control how it's created and distributed.

We are *minting* the coin (through CPU cycles to generate the encryption hashes) and at the same time using it for trade and value. The only difference is, this isn't a USA currency or a Swedish currency, it's all completely electronic. The bank, the teller, the minting; is all of us at the same time. Basically, all of our clients have agreed upon certain rules to follow and as long as each client follows those rules, it can participate. Any client that doesn't (through hacking, cheating, etc.) is basically ignored by the rest. It's like playing a game of soccer where you have two teams competing and one guy just up and grabs the ball, runs down to the other side and throws the ball in. Dances up and down that he scored a point. Well, everyone else will just ignore him and his point, he wasn't playing by the set rules.

knightmb: the number of coins per block is set to go down as time goes on so the number ends up being quite a bit larger than that. Also you have to include the transactions. There have been way less transactions during these first 67k blocks than there will be if millions of people start using the system.

Can someone that works on the code please answer this question of how scaling will be dealt with? The most important thing right now seems to be making a good case for why this system will work to get sellers to adopt it. The pdf is too light on details.

Can someone that works on the code please answer this question of how scaling will be dealt with? The most important thing right now seems to be making a good case for why this system will work to get sellers to adopt it. The pdf is too light on details.

I will second this. I am investigating whether this is a project I want to invest time and energy into (I am a professional C++ developer) as I see the potential for a revolutionary technology. However if the solution doesn't scale to millions and millions of transactions per-day (and a very large number of blocks) I fear this solution is destined to become more of an interesting research project rather than something that will have longevity and practical usefulness.

knightmb: the number of coins per block is set to go down as time goes on so the number ends up being quite a bit larger than that. Also you have to include the transactions. There have been way less transactions during these first 67k blocks than there will be if millions of people start using the system.

Can someone that works on the code please answer this question of how scaling will be dealt with? The most important thing right now seems to be making a good case for why this system will work to get sellers to adopt it. The pdf is too light on details.

Thanks for pointing that out, I wasn't sure how that would scale over time, was just making some guess. Given that the formula for coin generation should be known somewhere, can't someone just calculate how much disk space X amount of coins will take given XYZ transactions, etc.

Given that the formula for coin generation should be known somewhere, can't someone just calculate how much disk space X amount of coins will take given XYZ transactions, etc.I'm curious myself to how much space it will take.

From the pdf: "A block header with no transactions would be about 80 bytes."and"Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space."

so 80 x number of blocks + average transaction size * number of transactions.

Practically, from my disk:77428 transactions in 66663 blocks is about 46,752,464 bytes.which works out to about 600 bytes per transaction (including block headers + database overheads)

77428 transactions in 66663 blocks is about 46,752,464 bytes.which works out to about 600 bytes per transaction (including block headers + database overheads)

That sounds about right.

So a million transactions a day would be 600 million bytes. 600 megabytes a day, 18 GB a month.

That's not bad. Actual network bandwidth will be higher (the way the network is connected you get the same transaction multiple times from your peers). You won't be running an always-connected-network node on your iPhone, but any low-cost server will give you twenty times that bandwidth per month. And 18GB isn't much disk space in these days of terabyte hard drives.

Eventually, if Bitcoin survives and gets as popular as credit cards for paying for stuff I expect somebody will create a compatible version with a more efficient network structure (maybe by that time there will be some fancy IPV6 multicast protocol or something). And they'll implement a couple of gateway nodes (running on really fast connections) that shuttle transaction and block traffic from the current Bitcoin network into the super-efficient network. And I expect most of us will be running lightweight clients that just keep our wallets, sign transactions, and send and receive transactions to the ultra-fast nodes that ARE looking at every transaction.

You know, kind of like how we have those Big Routers in the Sky that handle Internet backbone traffic (or the ultra-fast DNS root servers). The Internet didn't start out with astoundingly fast routers zinging packets around.

How often do you get the chance to work on a potentially world-changing project?

And I expect most of us will be running lightweight clients that just keep our wallets, sign transactions, and send and receive transactions to the ultra-fast nodes that ARE looking at every transaction.

Is this possible? What would this look like? From a technical perspective what does a "lightweight client" look like for you? My understanding is that the Bitcoin client needs the entire block chain in order to establish trust.

I am just thinking out loud here...

Although the peer-to-peer model is certainly novel perhaps it seems to me to be somewhat utopian. Bear with me for a minute here (I am not trying to troll). Consider banks. Banks have a system whereby they can work together efficiently. I take take money out of a ATM from bank X even though I bank with bank Y. Banks loan money to each other. They are generally cooperative. Instead of every Tom, Dick & Harry having a Bitcoin client on his/her PC (or smartphone) participating in an open P2P network, perhaps there is a collection of Bitcoin "banks" who provide the service of hosting and "peering" the Bitcoin block chain. These are large enough organizations that they can afford the bandwidth and hardware needed to maintain an infinitely long block chain with a million (or more) transactions a day. These banks would still be peer-2-peer, and hopefully also completely open. Ideally anybody could participate in the peer-2-peer network, its just that the average person won't because of the barrier to entry. These banks still operate using the same fundamental technology we have to day. All of the beautiful facets of Bitcoin are preserved, except that the number of active participants is somewhat reduced. Anybody that _wanted_ to participate still could.

The problem remaining would be the typical "last mile" problem. How does Tom (or Dick or Harry) perform transactions? Well the issue becomes much more straight forward at this point. Now the trust only has to be between two parties (the "bank" and Tom). This really becomes more of a proxy issue. Now Tom has to send a transaction request through his "bank". It might even be possible to bake into Bitcoin a protocol for proxy transactions.

Anyway...This is just my 2 cents. I would really like a tangible answer to this problem because it seems foundational to the success of this endeavor to me.