jl2012 (OP)
Legendary
Offline
Activity: 1792
Merit: 1111
|
|
May 07, 2013, 08:54:53 AM |
|
https://blockchain.info/zh-cn/address/15Z4XmorKSN51ndyPrZ2EtL7Nnksb88888Miner should not accept a chain of zero fee transactions in the same block. By the way, it seems he's playing with raw transaction. I wish he will somehow screw up and lose the 500BTC forever
|
Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY) LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC) PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
|
|
|
escrow.ms
Legendary
Offline
Activity: 1274
Merit: 1004
|
|
May 07, 2013, 09:00:06 AM |
|
There's a message in every transaction " one chinese sb which love 8 "
Classic
|
|
|
|
jl2012 (OP)
Legendary
Offline
Activity: 1792
Merit: 1111
|
|
May 07, 2013, 09:02:19 AM |
|
There's a message in every transaction " one chinese sb which love 8 "
Classic
Just the name tag function of blockchain.info . SB is a Chinese slang literally means "stupid puxxy". In proper English, that means: "A Chinese fool who loves the number 8".
|
Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY) LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC) PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
|
|
|
|
techwtf
|
|
May 07, 2013, 09:31:58 AM |
|
the single input with 500 BTC, its priority should get recharged (to remain free) every confirmation...
|
|
|
|
Peter Todd
Legendary
Offline
Activity: 1120
Merit: 1160
|
|
May 07, 2013, 09:32:55 AM |
|
I think what's happening is the value is so large that it can reach the priority required for a free transaction in a single block, and due to a bug, that happens multiple times as the block is created. CTransaction::AllowFree returns true if dPriority > COIN * 144 / 250, and dPriority is calculated as nValueIn * nConf / nTxSize. So 500BTC * 1conf / 225bytes = 2.2 > 144 / 250 = 0.576; note how you could pull thus stunt with just 95.616BTC using the minimum possible (safe) transaction size of 166bytes.The problem is how the number of confirmations is calculated: in CreateNewBlock() we have: int nConf = pindexPrev->nHeight - coins.nHeight + 1;
Now coins comes from view.GetCoins(txin.prevout.hash, coins). The thing is the coin view is updated as transactions are added to the block - see viewTemp.Flush(); later in the function - which means it looks like the transaction already has one confirmation even though that "confirmation" comes from the block being created right now! The easiest solution would be to change The nConf calculation to remove the + 1: int nConf = max(0, pindexPrev->nHeight - coins.nHeight);
...but that's gonna need testing.
|
|
|
|
TalkingAntColony
Member
Offline
Activity: 62
Merit: 10
|
|
May 07, 2013, 05:15:09 PM |
|
Seems he's doing around 300 Tx a day since May 4 and also really likes SatoshiDice 48%
|
|
|
|
jl2012 (OP)
Legendary
Offline
Activity: 1792
Merit: 1111
|
|
May 07, 2013, 05:38:19 PM |
|
Is he trying to Finney attack SD?
Somebody described this before:
1. Mine his own block, with his 500BTC sending to himself. He may have a farm of Avalon ---- not surprising, he is a Chinese
2. Using the same 500BTC to make a long chain of transaction and finally send to SD
3. If he wins, let it go
4. If he loses, broadcast the block
(seems not entirely correct since some of his bets are smaller than 25BTC, any idea?)
|
Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY) LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC) PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
|
|
|
Zeilap
|
|
May 07, 2013, 06:38:49 PM |
|
These transactions aren't in the same block. The chain of transactions was broadcast at the same time, but each transaction appeared in consecutive blocks. The first transaction which links off a confirmed transaction has high priority so gets into the block, and the rest of the chain has zero priority, so doesn't get into the block. Now coins comes from view.GetCoins(txin.prevout.hash, coins). The thing is the coin view is updated as transactions are added to the block - see viewTemp.Flush(); later in the function - which means it looks like the transaction already has one confirmation even though that "confirmation" comes from the block being created right now!
The priority is calculated before the transactions are selected to go into the block. The view is NOT updated while this is happening - in fact, the view is not of the memory pool at all, it is of the previous block. For any chain of transactions in the memory pool, only the first (the one linking off the blockchain) has its nConf calculated.
|
|
|
|
Peter Todd
Legendary
Offline
Activity: 1120
Merit: 1160
|
|
May 07, 2013, 07:29:15 PM |
|
These transactions aren't in the same block. The chain of transactions was broadcast at the same time, but each transaction appeared in consecutive blocks.
You're not looking at the transactions I am. The end of the chain I'm talking about is a20d26236c45724677fe3f8de380450994342f3107301be67669d700c0fc2d22 which were all included in block 000000000000016779d88a16b6d71ebd53ddf860f466f1f3d906b43a45f50865; note how the last transaction in the chain has no fee, so it's not a child-pays-parent issue either. (well, possibly it's due to buggy child-pays-parent code, but the owner of BTC Guild has said they're running stock bitcoind)
|
|
|
|
Zeilap
|
|
May 07, 2013, 07:59:52 PM |
|
Ah sorry, I didn't look hard enough. Back to the drawing board I guess. I also just realized that blockchain.info displays the transactions in a block from last to first (except the coinbase tx). Confused the hell out of me trying to follow the chain and seeing inputs from transactions which seemingly didn't exist yet.
|
|
|
|
Peter Todd
Legendary
Offline
Activity: 1120
Merit: 1160
|
|
May 07, 2013, 08:51:30 PM |
|
blockchain.info is even worse than that actually - I've seen them display the coinbase in the middle of a block. Feel free to look into the possible bug I found and make up a patch if I'm right - I'm happy to be scooped. That said, it's a rare enough issue that fixing it won't be something they'll rush; it should get at least a month or two of testing if not more.
|
|
|
|
Zeilap
|
|
May 07, 2013, 11:13:29 PM |
|
Ok, I think I solved the mystery.
Firstly, BTC Guild are almost certainly running 2 bitcoind instances, one of which has 'blockprioritysize' set to maximum, meaning that fee/kB is essentially ignored.
Secondly, a few blocks before (234941) was solved by BTC Guild, only a few seconds after the previous block. Because of the short time period, there were very few transactions left in the memory pool which linked directly off the main chain. Instead it was filled with very low priority transactions and chains of transactions (zero priority). This block cleared out most of the low priority transactions, thus all that was left was this guy's chain.
Fast forward a few blocks and BTC Guild solved another block (234946), and again in only a few seconds. This time there were no low priority transactions left, only zero priority transaction chains. So that is what got included in the block.
|
|
|
|
Zeilap
|
|
May 07, 2013, 11:41:46 PM Last edit: May 08, 2013, 12:32:04 AM by Zeilap |
|
This has illustrated an issue however.
When the transactions are being added to the block. Each time one is added, it's dependants are added to the queue. When we've exhausted all the transactions which link directly off the main chain, we're left with these dependant transactions which always have zero priority. If they also have zero fee, then the ordering fails to choose one over another.
Thus the ordering of the priority queue ends up being determined by the order that the transactions were added to it.
When Mr 8's 500BTC transaction is added to the block, it has a very high priority, meaning that it's added early and its dependants are added to the queue first. Once the priority>0 transactions are all added, his next transaction is at the front of the queue. This again puts the next one in the queue early. It wouldn't even matter if the other transactions were of low value and huge. They'd be first in the queue. You could use this to fill the entire block with one transaction with zero fee, simply by making it depend on a high priority transaction (which also has zero fee).
One solution is to amend the ordering. It currently only depends on the priority value and the fee/kB, so it fails to distinguish when they are both equal, falling back to insertion order. If the third element (the tx pointer) of the TxPriority object was used for comparison too, then the zero fee, zero priority transactions would be ordered by where they are in RAM - which is at least not predictable. This does have the downside (?) that it is no longer deterministic. To do that you'd want to order by hash - but that could get expensive.
EDIT: thinking a bit more, ordering by pointer doesn't really work either because the allocation strategy in std::map is (I'm guessing) likely to be to allocate a chunk of memory enough for multiple elements, so the chain of transactions coming in one after another will end up in a chunk of contiguous memory, and we end up falling back to insertion order again.
|
|
|
|
Mr.Coin
Jr. Member
Offline
Activity: 37
Merit: 1
|
|
May 09, 2013, 03:17:02 AM |
|
what it looks like whats happening, he's increasing his chance of solving a block. Any miner that requires a tx's in the block won't get to solve his blocks, thus lowering his difficulty.
|
|
|
|
jonytk
Member
Offline
Activity: 106
Merit: 10
|
|
May 09, 2013, 03:37:47 PM Last edit: May 09, 2013, 04:42:04 PM by jonytk |
|
Is he trying to Finney attack SD?
Somebody described this before:
1. Mine his own block, with his 500BTC sending to himself. He may have a farm of Avalon ---- not surprising, he is a Chinese
2. Using the same 500BTC to make a long chain of transaction and finally send to SD
3. If he wins, let it go
4. If he loses, broadcast the block
(seems not entirely correct since some of his bets are smaller than 25BTC, any idea?)
Well of course he's not playing with 500btc, he's emptying his wallet to prevent his smaller SD transaction going thru, however in the event he mines he will get the win from sd and also his btc back. oh look his balance: https://blockchain.info/zh-cn/charts/balance?address=15Z4XmorKSN51ndyPrZ2EtL7Nnksb88888sometimes he has over 800btc others -500 ... looks like if he has more than 2% hashing power he could win to satoshi dice more times than lose. if not, even if successful he will lose in the long run. but he cannot trick bitcoin, bitcoin will always choose the longer branch. that's why it's so dangerous to implement that add fee change transaction pach! https://bitcointalk.org/index.php?topic=199947.0
|
|
|
|
|
candoo
|
|
July 31, 2013, 12:32:05 AM |
|
hahahha I love that. I cant imagine how anyone would play with 200 btc at sdice...
|
Einer trage des andern Last, so werdet ihr das Gesetz Christi erfüllen.
|
|
|
BTCMiners.net
|
|
July 31, 2013, 12:52:14 AM |
|
hahahha I love that. I cant imagine how anyone would play with 200 btc at sdice... I'm not sure, but that really made my day seeing him flush away 23K USD
|
|
|
|
jackjack
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
July 31, 2013, 01:27:01 AM |
|
Gambling at its best
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
|