Okay, here we go. Imagine this is our current blockchain, awarding people 25 bitcoins per block find (Obviously not included crypto/signatures/etc...), hashes are direct SHA256, we're also assuming that we don't need any proof of work, for simplicity:-
Block one:-
{"blockHeight":0, "previousBlock":null, "transactions:{"b87a202d39825d59599c49ada3bbd348d145b4b7647d8d313425d8470d55ad79":{"txin":null, "txout":{"AddressOne":25}}}}
Block two:-
{"blockHeight":1, "previousBlock":"0c37eb0acf8f90c791acaccbbef7440ebccdde5bacce130d45c19b0a4deb1fd6", "transactions":{"27a6669c6d94ed165a2b6693643cdb54d9fa8453b3f3d894196a1b7057b026ee":{"txid":null, "txout":{"AddressTwo":25}}}}
Now, block three (two, counting from zero), we're going to spend the funds we got in block one:-
{"blockHeight":2, "previousBlock":"2c568981679d63c320a5e2d00663405f7ac9b2bfc71feed393ef62d0618f965b", "transactions":{"1fd79a39081f9c7217159398945b3016130c2b9a832f4dd20cfe5cc5b8e33986":{"txin":null, "txout":{"AddressThree":25}}, "63b2b3b5c75d45158b937cc81a380920888acac6999d8e09d48f0a541b2296c7":{"txin":{"txid":"b87a202d39825d59599c49ada3bbd348d145b4b7647d8d313425d8470d55ad79", "vout":0}, "txout":"OurFirstTransactionAddress"}}}
Grand. Now, finally, block four, based on block three, we also make a payment using the funds we mined in block 2, and, the funds we just transferred in block three:-
{"blockHeight":3, "previousBlock":"84de63d74f216677a5dd8cfb2b7e09fa2a4634d902e4e808004d9c792e9b5fc9", "transactions":{"031b1bad349e4d559a42aa560444bc8317ba17e6446f2373de6aae6033a836f5":{"txin":null, "txout":{"AddressFour":25}}, "121678d5fd6e03f7ea94b86446159f64c745b7e89657ce84916e28c10d3e9554":{"txin":{"txid":"27a6669c6d94ed165a2b6693643cdb54d9fa8453b3f3d894196a1b7057b026ee", "vout":0}, "txout":{"OurSecondTransactionAddress":25}}, "f1ba1000853d7a001e32df0efa3d5ad013b8cc6f07514d3ff9107dd34a68c1c5":{"txin":{"txid":"63b2b3b5c75d45158b937cc81a380920888acac6999d8e09d48f0a541b2296c7", "vout":0}, "txout":{"OurThirdTransactionAddress":25}}}}
Grand, now what we have is a four-block long chain where:-
Block:-
#1 Generates 25 bitcoins to address "AddressOne"
#2 Generates 25 bitcoins to address "AddressTwo"
#3 Generates 25 bitcoins to address "AddressThree", and, spends the 25 bitcoins from "AddressOne" (Generated in Block #1)
#4 Generates 25 bitcoins to address "AdddressFour", spends the 25 bitcoins from "AddressTwo" (Generated in Block #2), and, spends the 25 bitcoins in address "OurFirstTransactionAddress" moved there by the first transaction in block #3.
Do we agree? If not, stop reading, as, everything from here on out depends on the above being true.
Now, imagine I'm 51% of the network (or, any part of the network that can generate blocks as such a speed that
SOMETIME in the future, my blockchain will be longer than your block chain (You being 'legitimate' miners)), and, I dislike the fact that you spend block one's money in block three, and, I want to move it back. What do I do? I just start off back there and imagine it never happened.
So, let's ignore block three (onwards) ever happened, and, start back at block three.
{"blockHeight":2, "previousBlock":"2c568981679d63c320a5e2d00663405f7ac9b2bfc71feed393ef62d0618f965b", "transactions":{"1fd79a39081f9c7217159398945b3016130c2b9a832f4dd20cfe5cc5b8e33986":{"txin":null, "txout":{"AddressThree":25}}}
There we go, valid block, it generates 25 bitcoins and puts them in address "AddressThree", however, nobody will jump to me yet as I'm still not the longest chain. Let's continue, block four:-
{"blockHeight":3, "previousBlock":"bfa7ff7eef0d17ad52ff9e31016d13d0540cecc557ae4b07971011c5cd3c139b", "transactions":{"031b1bad349e4d559a42aa560444bc8317ba17e6446f2373de6aae6033a836f5":{"txin":null, "txout":{"AddressFour":25}}, "121678d5fd6e03f7ea94b86446159f64c745b7e89657ce84916e28c10d3e9554":{"txin":{"txid":"27a6669c6d94ed165a2b6693643cdb54d9fa8453b3f3d894196a1b7057b026ee", "vout":0}, "txout":{"OurSecondTransactionAddress":25}}}}
There we go, still a valid block, as, all we've done is remove any transaction that happened to now be void due to our previous changes, and, (If it were bitcoin), brute forced a nonce that hashed the block into the correct amount of leading zeros. However, still nobody will jump to us. Why? Although we're an equal length valid chain, peers are configured to stick to the first chain they see unless there's a
larger one (Equal length doesn't count). So, finally, if we can beat the current chain in a race, we win, people accept us, so, block five:-
{"blockHeight":4, "previousBlock":"c925afc503f0a7b7d095cc6ed8fdec7eb794d6f440980bd40bd2293c2f44e0b7", "transactions":{"c6dc7af91f101b194b6117d453188cd5ce0a4030163d219039caa89bf608abdf":{"txin":null, "txout":{"AddressFive":25}}}}
There we go, our chain is now the longest, still valid, chain, while kicking out the previous blocks. Here's a few real-life examples (Granted, not that long):-
https://blockchain.info/orphaned-blocksHere's a stackexchange post talking about the longest fork:-
https://bitcoin.stackexchange.com/questions/3343/what-is-the-longest-blockchain-fork-that-has-been-orphaned-to-dateAll you'd need to do is cause a longer fork, and, bamb, everyone would jump, unless I'm really misunderstanding the entire bitcoin network.
Each clients will independently select the longest VALID chain using the internal rules of the client. An invalid block can never be in the longest chain. A client on the current fork would see ANY "the gox block" as invalid and it would also see any block built off that blocks as invalid as well. It would never be the valid longest chain even if it had a billion more blocks than our current longest chain. Miners aren't the only element of the security model in Bitcoin. Each node independently verifies all data according to the rules in that node and discards data which it deems is invalid.
Point is, the blocks would be valid, the only difference is that it's selectively chosen not to include the MTGox transaction, and, any based on them. I'm not saying we take the currently block chain, and, rip the MTGox transaction out, as, that'd obviously be invalid, I'm saying we could generate a new blockchain, starting from where MTGox lost their bitcoins (Assuming they still know the private key to at-least one of the addresses it was originally in), and, build on that chain from there, copying the
transactions over (But, still, regenerating the blocks from scratch).
Transactions would still be valid, as, they don't depend on the blocks, the blocks depend on the transaction. If you had enough power you could generate new blocks, with, valid hashes, that, exceed the length of the current chain, if not, explain why not. To me, it seems absolutely standard, if it weren't valid, then, what'd happen if two people generated blocks at the same time based on one previous block? In your situation where peers never jumped, not even if there's a longer chain, then, there'd forever be forks of bitcoins, happening every couple of hours, which, obviously there isn't (Well, there is, but, we jump to the longest one selected by the next miner who mines a valid block).
I'm also not talking about changing the source, no idea where you got that info. I'm just talking about generating a legitimate chain longer than the current chain we all use, where, we never put the transaction where GOX lost their money into any blocks.
Imagine we're on block 20, and, gox lost their coins on block 15, and, in block 15-20 five transactions occurred. Gox sent money from their controlled address to an unknown one (#16), the unknown address sent money to another unknown address (#17), some random user sent money to his friend (#18), his friend send money back to the random user (#19) and I donated some money to the EFF (#20).
If we go ahead and imagine all the miners said "Right, fuck everything after block fifteen, let's start again", they'd go back to block fifteen, GOX would have their coins, and, they'd just need to regenerate the blocks from there on, however, since they know about the five transactions, they could just pack it all into the first block, minus the gox ones, so:-
#16 is invalid, as, we don't want to do it (It's where gox loses their money)
#17 is invalid because it relies on #16
#18 is still valid, so, drop that in the first block
#19 is still valid, so, also drop that in the first block
#20 is still valid, so, also drop that final one into the first block.
Aside from the issues pointed out by DeathAndTaxes, there's one huge hole in your premise. I've emphasized the part of your post where you've overlooked something. I am, of course, referring to mining rewards (fees and block rewards). Following your proposal would, aside from invalidating the chain, destroy 25*144 = 3600 btc for each day (plus fees). Every single transaction that includes even a satoshi of these 3600 btc / day would also become invalid.
Clearly, that would be the death of your scheme (one of many) right there, so another rule change is needed: The block rewards and fees would need to be inserted in the "gox block". The repercussions of that are not trivial, though.
Obviously any transactions based on anything invalidated due to the swap (I.E. gox BTC, or, transactions based off miner rewards that are now invalidated) would also be invalidated.