peatio/peatio — pull request #10 by tomlion (2014-03-17 06:10:49+00:00)
Title: Refactor withdraw

这个分支主要是提现部分的一些改进

1. 用aasm这个gem定义了Withdraw的states和transitions https://github.com/peatio/peatio/blob/refactor_withdraw/app/models/withdraw.rb#L91-L147

2. 给withdraw增加了一个aasm_state字段，保留原来的state字段，同时overwrite Withdraw#state，尽量保持向后兼容.
对于btc提现，有可能在bitcoind发送btc的时候出现crash，btc已发出，但withdraw的状态未更新。所以额外有一个almost_done的状态，在调用bitcoind之前就更新withdraw的状态，防止发送两次btc.

3. 针对可能的并发，锁定withdraw和account
* resque job在处理withdraw的时候，用户取消提现
* withdraw涉及account balance变化的时候，用户进行交易

4. 邮件通知
* 用户成功登录后会收到一封邮件通知 （防止帐号盗用，参考btc-e）
* 提现处于终止状态(final state)， 发送邮件通知用户