Hacker News new | past | comments | ask | show | jobs | submit login
Bitcoin will soon block small transaction outputs (github.com/bitcoin)
97 points by fdm on May 5, 2013 | hide | past | favorite | 84 comments



Small value amounts are useful for smart property: https://en.bitcoin.it/wiki/Smart_Property

The tl;dr: Represent a piece of property, say a stock certificate, as a small value of bitcoin. By transferring the bitcoin to another user, you are transferring the ownership of the property. This can be useful for creating distributed markets where property can be traded for bitcoins without requiring a trusted intermediary.

I don't understand why this is such a big deal for the developers. You see a lot of panic about UTXO bloat. It seems to me this can be solved by making the UTXO cache a bit smarter. If you have a very small value output that has not been used in a while, store it on the harddrive, not in RAM. If the output shows up in a new transaction, you will have a cache miss, but that doesn't seem like a serious issue. If the client is smart property aware, store those dusty-looking outputs in a seperate cache.

This might be an attack vector for DDOS attacks, but that should be solvable by throttling the processing of transactions that miss the cache.

The propogation of transactions that are not in the RAM cache might be a bit longer, but that is the price you pay for making a transaction with dust.


The problem is that Bitcoin is a distributed network, and therefore the whole blockchain needs to be replicated across all the computers across all the network.

Right now, the blockchain is around 9GB, most of it because of "dust" - that is, if you want to set up your own Bitcoin node, you need to download 9GB of data. And this is growing quite fast.

The practice of microtransactions was abused a lot - for example, SatoshiDice uses 1 satoshi (the minimum amount) transactions to confirm that a player lost. Or some other guys used the blockchain to embed WikiLeaks documents using the same hacks - right now everyone needs to download all this data.

tl;dr; it's not about caching and speed, it's about the amount of storage required to keep all the dust forever and ever.

Also, from what I gather from the commit - this is supposed to be just a temporary solution, and there is something better in order.


How can Bitcoin network maintain integrity in a imaginary future where it has gained significant traction and there are millions or even more transactions happening every single second?


That's a good question - I'm not proficient in this area, but I think there are some cleanup ideas floating around.


Actually, it was recently stated by a developer on #bitcoin-dev that it is an issue of the total set of unspent transaction outputs (i.e., what all nodes must maintain in memory), not total blockchain size (which only nodes that need to do complete validation actually need).

Of course, it may be that all the developers are not of one mind on this.


Why does the deposited amount of Bitcoin for smart property have to be a small value?


It doesn't have to be, but the larger the value is, the more bitcoin being "wasted" tracking smart property.


Bitcoin may be finite in number, but it's ultimately infinitely divisible, so it does not matter how many bitcoins are "wasted". Regardless, any property worth tracking in such a scheme is likely worth enough to justify a $0.01 investment in bitcoin.


> Bitcoin may be finite in number, but it's ultimately infinitely divisible, so it does not matter how many bitcoins are "wasted".

Correct.

> Regardless, any property worth tracking in such a scheme is likely worth enough to justify a $0.01 investment in bitcoin.

A doubling of the current price would make transactions of less than 1 US penny impossible. So, if the price goes up 10x, it would be 5 pennies. 100x, 50 cents. 1000x, 5 dollars. So, yeah, it does seem like a non-issue.

However, this policy clearly rules out microtransactions.


The problem is that this minimum transaction size may change in the future. So, lets say you set 10 X MIN_VALUE to equal one stock certificate. If the MIN_VALUE adds a couple zeroes in the future, anyone with less than 10 certificates just lost their property.

Also, maybe you want to allow the user to transfer fractions of your property issue. Stocks can go up 10000x in value and you don't want the issuer to have to perform stock splits. If there is no minimum transaction value, this is easy. With minimum transaction values, the value of a single certificate in bitcoin becomes much more important.

The point is, there are valid reasons to transact small amounts of bitcoin that do not involve micro-transactions. If the user is willing to pay the transaction fee, these should be allowed. The developers are limiting the useful (and profitable) application of the network to fix an issue that can be solved by other means.


It doesn't need to be. But it helps. Imagine if you wanted to create a bunch of smart properties which had very little intrinsic dollar values(lets say, collectible sports cards) - you would be forced to spend a bunch of money to do so.


Why not forward your suggestion to the lead developer?

https://news.ycombinator.com/item?id=5660244


They are aware of the issue. There is a long discussion of it in the linked pull request comments.

My interpretation is that they do not see this application as important enough to take into account in their updates. This is a perfectly valid stance, and they are the developers doing the work; I just don't agree with it.


I assume the reason behind this is to block people from encoding data into the block chain by doing thousands of worthless transactions. If I recall correctly someone recently encoded the URL to a child porn site into the block chain, this is the only reasonable response to prevent it from happening again IMO.


Encoding data into the blockchain isn't a bug--it's a feature (perhaps THE feature). When you want distributed consensus (e.g. for free-as-in-speech domain names), it's the only game in town. People should be able to put whatever data they want in the system, assuming they cover the cost.


Encoding domain names in the block chain probably isn't optimal, have you looked at Namecoin?


The problem with "dust" transactions is that they do not cover the cost.


Well, miners can ignore transactions that have small fees or no fees. If there were not enough space in a block for all outstanding transactions, the transactions with the least fees will just be ignored.

So, there is an economic mechanism already in place to make sure dust transactions are paid for.

So that's not the problem that's being addressed.

EDIT: Well, actually, it's a "tragedy of the commons" situation. Having tons of dust transactions is seen as bad for Bitcoin (for reasons that are not yet 100% clear to me). So the devs think there is a need to dis-incentivize that. But the economic mechanism I explained above has not yet kicked in, so right now, you can make tons of dust transactions without having to directly pay for it. The burden of storing those small outputs for all time then falls on everybody who uses bitcoin.


I don't think developers care about that issue.

Per the lead developer:

"If you have a better suggestion for fixing the problem of new users wasting lots of time gathering tiny drips and drabs of bitcoins, and then getting upset when they can't spend them (because it costs more in fees that they are worth), I'm open to suggestions."

https://bitcointalk.org/index.php?topic=191425.msg1985498#ms...


This type of spam is solved through minimum fees for transacting very small amounts of bitcoin.

If a user is willing to spend $10 to insert a URL in the block chain, there is no way to stop them without making bitcoin useless.

The move to treat very small amounts of bitcoin as simply invalid is intended to reduce the bloat of the unspent address cache (called the UTXO). This is explained at the top of the linked page.


It's more to do with certain services (SatoshiDice) sending very small, useless transactions through the network (SatoshiDice is a gambling service, they send a small transaction to tell you you lost). All those small transactions put a burden on the network.

Regarding the CP URL, it was actually several hundreds of links in a large FAQ, and I don't think this changes anything regarding encoding data in the block chain.


AFAICT, this only applies to bitcoin-qt. Miners can still accept small tx into a block from other clients.


From what I read on bitcointalk I believe this applies to miners too (if they use bitcoind). However it would be possible to run a mining pool which would accept small txs with no fee, and clients would still accept them as valid blocks.


I don't get this problem. It's not like people literally actively read the BlockChain.

(Also, IIRC, wasn't their a proposal to make the data a hash or something mandatory so that it couldn't be random|misc-manual data? Or was that unfeasible for some reason?)


No, but you have to download the blockchain before you can join the network. It's in everyone's interests to keep bloat out of it.


I do not understand this move. If blockchain size is an issue, I don't understand why the focus isn't pruning the blockchain so that only the hashed headers are stored for past transactions. This defeats the point of having 8 decimal places if you can only reasonably use 3+.


It's presumably only temporary measure, and only present in the reference client.

Anything below four decimal places is completely worthless at this point anyway; do you really have a use for being able to send 0.01c USD?


If micropayments are ever to be possible, sub-penny transactions need to happen. If 10^6 people send you $0.001, you get $1k....


$.001 is so low it's not even worth talking about in terms of a globally visible transaction. Your bank won't let you transfer that amount. Why should bitcoin? You don't need to be able to transfer such amounts in order to have sub-1-cent microtransactions. You can have $.000001 cent microtransactions. You simply can't clear them in the global economy without batching them up... which people are used to doing already, because payment clearing services in gov currency have transaction charges that far exceed $.01.

Even if payment processing costs weren't an issue (which would cause many more small unbatched transactions in gov currency, similar to the crap being dumped into the block chain... banks have to log gov currency transactions for auditing purposes), whatever the cost of individual transactions, if you have a payor who owes you $.001 over a billing period, you've done something wrong. They'd be just as willing to pay you $.01 as $.001.


There are many things your bank simply won't let you do.

Is that now the guiding principle for Bitcoin?


You should be able to send whatever value you want, as long as you pay a fee for the resources used.

Why should it take hours for my Bitcoin client to sync (and therefore for me to do anything with my Bitcoins) because people want to encode URLs in the blockchain?

In a few years, it could take days to sync a new client. What kind of banking system would that be?


Can't you submit transaction before it syncs as long as you you're confident the transaction will be valid? For a business, they could maintain a current sync and you submit your transmitting address to them and they can verify, that way your smartphone doesn't have to get bogged down with the task of anything other than signing the transaction.


If I recall, the standard Bitcoin client doesn't work until the blockchain is synced. I've had to wait an hour to do a transaction I wanted to do because I hadn't opened it in a few months.


> If 10^6 people send you $0.001, you get $1k....

Is this sarcasm?

0.01US$ might be worth nothing in the US, but might be worth something in some poorer countries.


Shh, economics. This is why people in developing (or not developing) regions will continue to use mobile phone minutes as a medium of exchange rather than adopting btc.

There are a number of effective "we're gonna change the world" platforms in the bitcoin world.

1) No centralized bank or government control of value/transactions/etc. 2) Anonymous wealth control 3) Microtransactions 4) Non-repudiable 'instant' transactions

These are not exclusive, nor a complete list. For example, I'm very much a fan of #3 and #4 because I have been hoping for years that we can create a sustainable system for implementing many of the commercial aspects, including transclusion, of the Xanadu goals.

All of us are ignorant or dismissive of some basic facts, whether technical, political, or economical. For example, people are very fascinated with identifying the high-net-worth btc holders. While the effort to track their accounts and transfers was originally non-trivial, people spent a lot of time developing tools and methods for correlating accumulation and distribution. It's a short hop from there to tying an account to human entities.

It's not that this was unforeseeable, but that the effort seemed too much to worry about. However, one should probably assume that any effort distributed across the Internet will attract the attention of those people who have the time and inclination to grind away at tasks considered to be pointless by the vast majority. For some, it's a way of counting coup, and you'll never escape that.

The 'opportunity' that the limitation on transaction size creates is a value-added service for micropayments. In effect, a merchant would keep a ledger of microtransactions that could be remitted at any time. You could do this today with Mt. Gox, for example.

The downside of this is much the same as with a conventional financial system. That is, people are morons and principles have a price. Many of the systems built to date have been compromised (Mt. Gox, Bitcoinica, etc.) or misappropriated completely (BTCST, Bitcoinica, etc.). It is unlikely (but possible) that an entity with technical and legal competence and a scrupled imperative will bridge the gap for microtransactions on a long-term basis.

If it were to happen, one would still have a centralized 'bank' that would have to follow practices that would compromise anonymity due to AML and KYC regulations because bitcoin services are not a competitive market at this time.


Maybe I do, yes.

A handful of developers shouldn't be deciding acceptable business models for bitcoin. That's not going to lead anywhere good.


It's like they did it by fiat or something.


If you're making transactions smaller than 1 cent, keep them off the blockchain. You're just wasting everyone's resources. Aggregate them until they're big enough to matter and THEN commit them to the blockchain.


What if I have need to send $0.10c tomorrow if BTC is then worth $1000?

Placing the constraint right on the edge of the current value seems like it will just cause a lot of problems as the value continues to fluctuate.


The limit will be adjusted if BTC becomes worth thousands.


Yes, I see that they're adding command line flags. I don't really think BTC can be considered so stable at this point that a run up to $1000 and then a drop back down to the low hundreds within a day or two could be considered impossible. And if its value grows beyond even that the fluctuations may swing even wilder in terms of monetary value.

I'd also point out that in much of the world, the local equivalent of $0.01 USD may actually not be a trivially dismissable amount of money.

But I'm not sure it's a bad idea, I just think they chose a very awkward value to peg it at.


I can't but people are always talking up bitcoin's ability to be more than just currency, so I assume some of those people probably have a use.


Yeah, I do actually.


Why


The UTXO acronym stands for unspent transaction output. Think of it as the total number of Bitcoin bank accounts. Pruning past transactions doesn't shrink this size at all. These UTXOs have to stick around and can never[1] be pruned as they're used in future transactions. And yes, it does seem like 8 decimal places was too much for the current time and they're now correcting for that.

[1] If they really wanted to do so with a major fork it's possible but it's not nearly worth the hassle.


If people are worried about an explosion of ghost accounts with 1 satoshi (80 bytes, right?), just give unspent transaction output to miners if the receiving account has below a certain threshold of funds. Don't tell me I can't send arbitrary payments if I am willing to pay whatever the necessary transaction fee is to process them.


not sure pruning the blockchain is really possible. most of the earliest coins are not even spent and many are likely lost; this was something satoshi may not have thought through completely as pruning the blockchain was something he specifically talked about.. but many of the 'deep' coins are still unspent and anything 'above' them is unprunable.


What does above mean in this context? If its later tx involving those addresses then it isn't a problem because there are none?


Well the way to prune the blockchain is to store the merklehash only of all spent outputs if you can get a whole tree that has no spendable coins left. So if a bunch of old outputs all had their coins spent you can just prune that part of the tree and forget the blocks themselves and just store the merkleroot that represents the tree; but so many of the oldest coins are still unspent that there won't be a lot of benefit to this (I haven't done the analysis so this is somewhat a hypothesis).

You actually have it backwards, it's aproblem precisely because there are not transactions involving those addresses other than the initial block rewards; pruning the tree would make those coins unspendable, which would be unfair.

There are so many definitely-lost and likely-lost coins that I imagine at some point there will be a 'move your coins or lose them' mandate that will give people.. idk maybe 2 years or something to move coins to prove they aren't lost, and allow a large chunk of the blockchain to be pruned.


No central authority - well at least until we hit a small technological bump and it becomes mildly annoying - then we will solve the problem with a decree or fiat.


An open source software project has to make policy decisions. They've been making these kinds of decisions for years. In fact, there used to be (a long time ago) a rule that outputs smaller than .01 BTC were not relayed.

The "no central authority" concept is from a different context, i.e., the fact that a decentralized Byzantine consensus type scheme is being used to guard against double-spends and to control minting, instead of an individual company or bank or government (i.e., "authority").

Plus, anybody can always fork Bitcoin.


Update changes a hard coded limit to a setting with a default value. IE easily changeable. So it's more like a guideline. So basically they went in the opposite direction of a dictate with this release.


Every developer worth his salt knows that what is set as default stays as default for the majority of users.


For typical users I totally agree. My sense is that the miners who run the nodes probably are pretty comfortable tweaking settings. So as a developer who I dare say is worth his salt I'd agree with this regarding a general population, but not the group that's currently running the nodes.


So this slows the growth of the blockchain. If blockchain length is already becoming an issue today, what happens a year from now if trading volume multiplies as much as it did in the past year? What happens in five, ten years? Could the blockchain outstrip the economic feasibility of maintaining it at some point, or is there a mechanism already built into Bitcoin that addresses this?


There is a game called "satoshidice" that is basically clogging the network with ridiculous amounts of tiny transactions. So far, there's plenty of room for "normal" traffic. Here's an opinionated explanation that sums up people's dislike of the practice: http://buttcoin.org/satoshidice-is-killing-bitcoin


This isn't a protocol change, so it's not really a big deal. It's basically a strongly worded (coded) suggestion from the core developers to discourage micro-transactions and blockchain spam (SatoshiDice, encoding data in the blockchain, etc)

If miners decide they still want to include these transactions, they can.

This is the way it should be since miners bear the cost of every transaction in the form of computing/network/storage resources.


Miners also are the ones running the system. If you control 51% of bitcoin miners, you control the BTC network as well as the rules.

A malicious BTC miner would want the BTC network to be as hard as possible. The fewer people mining, the easier it is to take over the network.


This sucks. I thought one of the killer apps for bitcoin was going to be micropayments. Oh well maybe the world will switch to litecoin.


Bitcoin was never intended for raw micropayments. The blockchain is just too expensive to maintain for such transactions. Litecoin doesn't provide any advantages over Bitcoin in this respect.

Some types of micro-transactions can be supported. Mainly, transactions where you have an ongoing relationship with the other party. For instance, paying for Wi-Fi access, one kilobit at a time: https://en.bitcoin.it/wiki/Contracts#Example_7:_Rapidly-adju...

Micro-transactions can also be supported through other centralized systems built on top of the main bitcoin system. For example Open Transactions: https://github.com/FellowTraveler/Open-Transactions


It's been revealed before that bitcoin doesn't really do micropayments.. Not completely sure why. Block reward is also still far larger than transaction rewards, yet miners still enforce pretty large transaction fees.


It's particularly interesting given the extreme fractionizability of the btc. One would expect transactions in the extremely small range, especially as the precision can be increased even further if btc increases in value.

It is designed to support micropayments, but with the inefficient blockchain, the implementation does not support them.


Funny, I always thought of it as a near perfect store of value and nothing more.

The fact of the matter is that this is all Bitcoin has been used for so far (no company has used Bitcoins thus far for micropayments) so I think it will continue to evolve into an even more perfect store of value as time goes on.


Why do you think it's such a good store of value?


Mainly because it is impossible for anyone to take your bitcoins without your consent (if you know what you're doing, of course).

It's not like you can place a password on your gold to prevent authorities from seizing it as they have done in the past.


I'm not sure it's any more resistant to rubber-hose attacks ("What's your private key/passphrase?" vs "Where did you bury your gold stash?"). Perhaps a little more convenient, though.


There is no such thing as a perfect store of value that is nothing else. A store of value must have real value - for use as a material or as a medium of exchange. Otherwise, there is no value to store.

By this logic, any cryptographically strong series of bits is a perfect store of value.


Check out http://bitvisitor.com -- they pay out hourly in > 10^-5 BTC increments (~$0.0012 at current prices). There are totally legitimate reasons to allow micro-transactions.


No this is awesome. Only transaction smaller than about half a cent is blocked. There's no good reason to make a transaction that small on the blockchain. Satoshidice sends thousands of transactions of one satoshi each every day and it adds gigabytes of data to to millions of computers worldwide. What a waste of resources.


No its not. When faced with a scalability problem, they decided to ban certain uses rather than fix the root cause. Bitcoin isn't going to be able to grow beyond a niche currency if Satoshi Dice's level of activity causes such large problems.


I don't see any suggestions from your side?


The parent didn't claim to be a proponent or supporter of bitcoin. He may not know of any improvements. He may not believe any fundamental ones are possible. That does not detract from the point.


But true micro payments do need to be a lot smaller than that. It's kind of the idea if every web browser could load a dollar a week into their browser and have it evenly paid to each site they visit.

It doesn't seem like a lot of money but if everyone did it I'm guessing it would probably beat Adsense.

There are hundreds of other applications as well for micropayments.


You can aggregate those and pay them out when they become big enough. Bitcoin stores every transaction on every computer on the Bitcoin network. It's not suited to transactions that small, you're just wasting everyone's resources.


>here's no good reason to make a transaction that small on the blockchain.

You don't have the right to say that, it should be my right to decide whether my transaction size is appropriate or not. This sounds like regulation to me.


No we do have the right, as these are our computer resources being wasted. This is not a protocol change of bitcoin - you can still make and include your tiny transactions. You'll just have to mine your own blocks if you want them on the chain. All this change does is give nodes the ability to set thresholds on which transactions are relayed and included on the blocks they mine.


When your transaction size affects my bandwidth and my hard disk, it becomes my business. Essentially you are acting like a spammer: wasting a disproportional amount of other people's computational resources for your gain.


But that's not his fault. That's Bitcoin's model's fault.


Let's just have the model pay for the transactions, then?


That's like saying I have no right to stop email spammers and that they should have the right to decide if their email volume is appropriate or not.

Making sub-cent transactions is a waste of MY resources because every transaction gets duplicated to everyone's copy of the blockchain. That's spam. If we don't stop this then the blockchain will become so unwieldy that it makes Bitcoin all but useless for everyone, and that's not good for anyone.


Actually what's changing is the default value for minimum transaction size, which can be overridden by nodes and clients who wish to. Further reading @ http://www.reddit.com/r/Bitcoin/comments/1drslh/082_will_not...


I haven't gotten around to reading the Bitcoin paper yet. But in cases where features like this are added, don't they rely on most miners moving over? Otherwise, won't some miners reject the new block while others accept it?

Or it is only for non-confirmation mode that "dust" is dropped?


If you're thinking this would result in a block chain split I don't think that's the case. This affects which transactions get relayed and eventually included into the blocks miners are mining against, but it doesn't mean that blocks with these transactions would be rejected by any client.


This is idiocy. I know it's a knee jerk reaction to ZOMG-PORN-IN-THE-BLOCKCHAIN!!1!, but c'mon. We can use such steganography all over the net.

Do we have to show proof-of-concept by putting porn into the DNS records? How about imgur; You know all those LSBs in the pictures? Think it's hard to get google search to propagate your steganography for you [and then have Bing steal it?]

The genie is out of the bottle, I'm surprised that the bitcoin / litecoin /cryptocoin world is where a line got drawn in the sand.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: