> Lastly, if they'll fork for one bad contract, why not fork for all bad contracts?
It's not easy to a HF of this nature, there was a lot of discussion for a consensus to come about. In that case the funds were also effectively locked for a time in a single address so it was much easier to do a change to return those funds. the % of eth at the time was also enormous (around 15% of the supply) and arguably enough to cause problems later with future updates like proof of stake.
If you're saying that they have failed at that goal I'd agree. The contract language they implemented is too error-prone for writing secure contracts, and the only solution they have is to break every contract in the system except the one large enough to perform a 51% attack on the blockchain.
But if we call these programs or code instead of contracts, are they useful for anything? Why would we invest our wealth in programs that lose that value if the code isn't unrealistically bulletproof and the largest program in the system? Calling it a program instead of a contract doesn't make it any less useless.
Regarding the programming language, please note there is VM and Solidity is but one language (although by far the most popular currently) that compiles to bytecode for this VM. Much more restrictive/secure programming languages can be created for this VM and we'll likely see more work towards this as development continues, it's likely in the future developers will use different languages depending on the usecase they are trying to implement on the blockchain. Also in regards to the code deployed (the contracts) they can be decentralized, but contrary to popular belief they can also be as centralized as one wants in order to be possible to an update if something goes wrong. However in either case the Infrastructure remains distributed and decentralized.
Regarding the other comments: "if you somehow manage to write it correctly, the DAO might reverse your code by hard forking" and "the only solution they have is to break every contract in the system except the one large enough to perform a 51% attack on the blockchain."
In one sentence it sounds like you're saying the DAO contract somehow reverses 3rd party correct code, and in the other that every contract gets broken (?) except one contract because it's large? and the contract (?) performs a 51% attack on the blockchain (?)
Honestly I don't understand those sentences which is why I didn't address them, I mean you no offense.
> In one sentence it sounds like you're saying the DAO contract somehow reverses 3rd party correct code, and in the other that every contract gets broken (?) except one contract because it's large? and the contract (?) performs a 51% attack on the blockchain (?)
Yes. When the DAO broke, the Ethereum community banded together and performed a 51% attack on the Ethereum block chain, potentially breaking every other contract in the entire system, even correctly coded ones.
For the DAO HF: The DAO contract was replaced by a withdrawal one, that was the only change, No other contract broke because of the fork.
Conceptually, they would, it's just that DAO was an exceptional case.
a) The amount was really large. b) Ethereum ecosystem wasn't mature enough (and yesterday's event proved that they can take a hit like that and survive). c) DAO had a 30 day lockdown of the hacker's fund, this is something which allowed for a hard fork to be possible.
The last is really important. Once hacker gets your money out of the hacked contract, no hard fork is feasible. The DAO essentially created a situation where it was impossible for hacker to get the money, nor for the white hat hackers to get the money. Both could have created a script, where hacker would move his funds to a new child contract, and the WHG would follow him to the child contract (thus essentially rendering him unable to get his money out).
Why wouldn't it be feasible? Have all users update to a version of the client which artificially corrects for the balances of the hacked wallets. Isn't anything possible with a hard fork?
Sorting out who should get their money returned and who gets to keep it would be infeasible.
I would go even further and suggest that the user (not "attacker") of this ethereum contract proudly stand up and identify themselves - without fear of retribution.
This individual played their game by their rules.
They are not an attacker, this was not a hack, and nothing was stolen.
"Your program just computes a different function than you expected and I supplied legal inputs" can be used as a defense of literally all software exploitation.
I'm pretty sure you wouldn't just say "It's their own fault for living there and it's also the construction company's fault for not carrying out safety tests. Let them burn because intervening now will only let the construction company & tenants off the hook - they all should have known better."
A more apt comparison would be: Someone found a flaw in my distributed MMORPG and now the game isn't interesting / useful anymore to some people. Should we collectively change the rules, even though we previously committed to not doing so? And before you say "Ethereum is no game", consider how serious some people take their gaming worlds and how much resources (time and money) they invest.