BitcoinTalk
Transaction / spam flood attack currently under way

View Satoshi only

External link

Someone is apparently "testing" the main bitcoin network by flooding it with 0.01 BTC transactions from A->A and B->B, where A and B are two random public keys.  You can watch at http://theymos.ath.cx:64150/bbe

We've hit the free transaction limit on each block, for many blocks now -- appears to be ~219 free transactions per block.  "real" transactions do not appear DoS'd at this time, presumably due to logic that prioritizes, in part, based on transaction value.

<soapbox>
Free TX's are just asking for permanent level of spam.  There should be a cost to each TX, even if it's only 0.001 BTC or so.
</soapbox>
I'm not so ready to blame this on MrBurns.
I'm not so ready to blame this on MrBurns.

Oh, right he did it earlier for sure, same address I sent the coins to. I assume he split it up and is now using multiple computers.

Go back about 1 day and you can see a bunch of .06 trades to and from the address MrBurns put in his thread.
The .06 in 17yhRAYKJvVmBh14HMxYRHp2Z4erWgk1ne which was MrBurns old spam eventually was transferred to 1GcbuFVxrjstRoGzChn5t2xJnm2HKoDBSE 0.05 and
15JzKgaSoW5nX3qJKh6ze1uCojn9WVVnDE 0.01
in transaction c37dd025e8b7329989ab9ac378604d015895e4ec630c863620a90f3a12f73e76
in block 92767 (2010-11-18 22:51:36)

It got 0.05 back from 1GcbuFVxrjstRoGzChn5t2xJnm2HKoDBSE in block 92767
which was transferred to 14mUbjiofYY2F6h3ZGUSoTo3kxdqtajVTp in 92875

There has been a lot of spamming with 14mUbjiofYY2F6h3ZGUSoTo3kxdqtajVTp but also with
1NNVFX7SiJF44fkqB27QbARXojhRSotF2o which was created from 14mUbjiofYY2F6h3ZGUSoTo3kxdqtajVTp
via 1H2aPofjULC65MBeojs3eVpPvdScV8H9ou
in block  92877 (2010-11-19 15:12:33)

So it's the same person.

ByteCoin
That's a good point about fee competition, but I'm wondering about near-term implications of this spam flood, too, like

  • What happens to the transactions that don't make it into the current block?  (somewhat rhetorical question... the answer is "they keep piling up in memory" AFAICS, but that raises a bigger question -- how to deal with ever-larger TX cache?)
  • Will this create a de facto situation where TX fee is required for "normal" bitcoin users?
  • Would it make sense to introduce a consensus blacklist, of abusive bitcoin addresses? ie. miners could -- at their discretion -- simply drop TX's with the blacklisted addresses.

What happens to the transactions that don't make it into the current block?

The network forgets about them over time. Queued transactions are forgotten when Bitcoin shuts down (or when it crashes because it's using too much memory...). The attacker probably won't rebroadcast their spam transactions, but real users will.

Quote
Will this create a de facto situation where TX fee is required for "normal" bitcoin users?

Yes. This has always been inevitable.

Quote
Would it make sense to introduce a consensus blacklist, of abusive bitcoin addresses? ie. miners could -- at their discretion -- simply drop TX's with the blacklisted addresses.

This would be easy to bypass unless you also follow a transaction's history, and if you do that the attacker can "infect" people by sending them bitcoins.
...

Oh, I agree. Well, I'm not going to praise him, we were already aware of the possibility. Apparently, "no incentive" isn't good enough and we need an actual cost of some sort. Well... actually there is some tiny cost to him, so I guess we need a little bit bigger cost. An increasing marginal cost really would be good.

I mentioned a minimum required [age]*[size] could be required by miners in the other thread. Maybe with a portion (10-20 transactions?) with no requirement.

MrBurns is probably just checking to see what happens before he buys 100,000 coins.
Perhaps in addition to the age priority rule recently implimented, there should be a minimum age rule without a transaction fee.  Said another way, perhaps a generation rule that says that a free transaction must be 3 blocks deep before it can be transfered again for free.  This will still allow real users to immediately spend new funds if they have to, while still permitting real users to reshuffle funds to suit their needs without an overhead cost.  I think that this would significantly inhibit the type of spamming attack that is currently underway.
In a free market for transaction fees,
spamming the network will have the effect of increasing transaction fees for everybody.

Maybe Mr Burns is more than just a common griefer. Maybe he is a miner with more rational motivations.

A miner has more to gain than to lose by spamming. Yes, eventually a spam equilibrium will be reached where the marginal amount you lose in your spam to the transaction fees of competing miners equals the marginal amount gained from your own transaction fees.  But that is still a macroeconomically subobtimal situation.

To escape this http://en.wikipedia.org/wiki/Social_trap social trap, more than a market is needed.

Some simple but effective rules should be hardcoded into the Bitcion protocol/specification itself, to discourage the excesses of spamming.

I know that this approach probably sounds too "top-down" for the free market enthusiasts in this forum, but the rules should of course be purely voluntary and consensus based, like the 21M rule we have already.


Perhaps in addition to the age priority rule recently implimented, there should be a minimum age rule without a transaction fee.  Said another way, perhaps a generation rule that says that a free transaction must be 3 blocks deep before it can be transfered again for free.  This will still allow real users to immediately spend new funds if they have to, while still permitting real users to reshuffle funds to suit their needs without an overhead cost.  I think that this would significantly inhibit the type of spamming attack that is currently underway.

That could make people get tied up in their funds again. Think MtGox or even the bitcoin faucet. Faucet can only send out a nickel every 3 blocks, because each time it sends a nickel, it sends the change to a new address, tying up transaction fee free for 3 blocks.

Only a little.  If the rule is generally known, and the reason for it, I think that those like the bitcoin faucet could adjust.  I'm talking about limiting based upon the coins movement, if that's possible, not a three block ban upon a particular address.  The new client has 100 addresses, correct?  If bitcoin faucet has more than BTC .05 in each address, and simply rotates the addresses as the requests come it, then it can service 100 requests in half an hour without delay, and more with delays.  I'm not saying that transactions can't be created, just that generators will not put them into blocks until the transaction that they depend upon is three blocks deep without a fee.  With a fee, they can do whatever they want; and the generators probably wouldn't honor a 3 block delay upon a fee paying transaction anyway.  This leaves the possibility of free transactions an open possibility, while inhibiting spamming.  If there is a technical reason that this rule cannot work, I wouldn't know about that.

EDIT:  Markets that are trying to service withdraw requests would know how many requests have been sent in the previous 30 minutes, and could choose to warn the requester that such requests may be delayed by this rule, or they can choose to pay a fee out of it.
Perhaps in addition to the age priority rule recently implimented, there should be a minimum age rule without a transaction fee.  Said another way, perhaps a generation rule that says that a free transaction must be 3 blocks deep before it can be transfered again for free.  This will still allow real users to immediately spend new funds if they have to, while still permitting real users to reshuffle funds to suit their needs without an overhead cost.  I think that this would significantly inhibit the type of spamming attack that is currently underway.
I'm doing something like that.  Priority is a more formalised version of the concept you're describing.

As it stands now 3.15 has a lot of free transaction space and that space is given first to transactions with the highest [age]*[value]/[size] correct? Would it be reasonable to make some arbitrary portion of the free space require [age]*[value]/[size] > C ?

Maybe set C so that a standard 1BTC transaction can get into the main free area on the next block. And a .1 can get in after waiting about 10 blocks. And make the area which allows [age]*[value]/[size] < C to let in about a dozen transactions or so.
Yes, like this.  And the no-priority-requirement area is 3K, about a dozen transactions per block.

I just uploaded SVN rev 185 which has a minimal priority requirement for free transactions.  Transaction floods are made up of coins that are re-spent over and over, so they depend on their own 0 conf transactions repeatedly.  0 conf transactions have 0 priority, so free transactions like that will have to wait for one transaction to get into a block at a time.

Version 0.3.15 doesn't write transactions using 0 conf dependencies unless that's all it has left, so normal users shouldn't usually have a problem with this.

I think this is a good compromise short of making the default fee 0.01.  It's not so much to ask that free transactions can only be used to turn coins over so often.  If you're using free transactions, you're taking charity and there has to be some limit on how often you can use it with the same coins.

We've always said free transactions may be processed more slowly.  You can help ensure your transactions go through quickly by adding -paytxfee=0.01.