I understand Bitcoin has an alert system. Can someone explain what it is, how does it work, and what was it designed for?
As @Alex Waters has stated, it's a centralised alert system to allow people to shutdown their clients in response to a threat to the overall Bitcoin network, pending a client patch to resolve the issue. This was intended as a short term measure to counter-act perceived problems in growing the software.
This thread on the forum has some interesting information about it (I've fixed the links to cover the moved forum):
Yes, it appeared in version 3.11. Here's the thread discussing it:
"Development of alert system" https://bitcointalk.org/index.php?topic=898.0;all
But I think Satoshi took it out of recent builds, to avoid accusations that he was a point of central control (because his key would be used to sign the alert). If I can find the reference to that announcement, I'll post it.
edit: here's the announcement about the removal of "safe mode". It's not clear to me whether the alert itself was removed, or whether the ability to have the alert shut down transaction processing was removed:
Removed safe mode (0.3.19) https://bitcointalk.org/smf/index.php?topic=2228
Clearly, Satoshi intended it to be a centralised mechanism to issue alerts that would result in clients stopping transactions (not block generation). This would act as an effective mechanism to cause clients to upgrade as a result of a bug, but a naive interpretation is that it is also a good way to shutdown an economy.
Anyone can build a standard client and replace the key requirement with one of their own, thus negating the efficacy of a system-wide shutdown due to a compromised key. Essentially, this would cause a fragmentation of the standard client as nodes seek to protect themselves from external compromise.
Satoshi notes this himself in this comment:
It can't do arbitrary actions remotely. Maybe some of you are responding to other posters who suggested the alert system should do more?
If there is an alert, the following json-rpc methods return an error: sendtoaddress getbalance getreceivedbyaddress getreceivedbylabel listreceivedbyaddress listreceivedbylabel
The remaining 14 methods function as normal.
I believe the safer option should be enabled by default. If you want your server to keep trading and ignore an alert saying the money its receiving might be like the money from the overflow bug, then you can use the switch and not blame anyone else if you lose your money.
Worst case if you leave alerts enabled, your site stops trading until you upgrade or add the -disablesafemode switch.
Getting surprised by some temporary down time when your node would otherwise be at risk is better than getting surprised by a thief draining all your inventory.
Someday when we haven't found any new bugs for a long time and it has been thoroughly security reviewed without finding anything, this can be scaled back. I'm not arguing that this is the permanent way of things forever. It's still beta software.
Given the ongoing backlash of misunderstanding over the concept, it appears that it was decided to remove the feature and rely instead on detecting a dodgy blockchain that is longer than the longest valid one:
- Removed "safe mode" alerts "safe mode" alerts was a temporary measure after the 0.3.9 overflow bug. We can say all we want that users can just run with "-disablesafemode", but it's better just not to have it for the sake of appearances. It was never intended as a long term feature. Safe mode can still be triggered by seeing a longer (greater total PoW) invalid block chain.