-
交易所為每位用戶提供獨立的地址,用於區分不同用戶的充幣行為,這樣交易所就能知道每一筆充值是哪個用戶的。
-
提幣不是從用戶的地址中提取,而是從交易所地址中提取。
-
ERC20的token,不能用普通地址作為充值地址,因為充到普通地址的token無法做歸集,因為這個地址上不一定有ETH。那怎么辦?只能用合約地址作為用戶的充值地址,合約創建者可以調用合約地址上的合約方法來轉移token,費用由合約創建者出。
-
用戶的以太坊和ERC20幣使用相同的地址,為什么要這么做,因為3里面提的,充值地址是合約地址,部署合約是要費用的。
-
不預先給用戶生成地址,只有當用戶想充值的時候才給其地址,原因和4一樣。
-
用戶提幣的費用由用戶出,如果是提ERC20的token,從這個用戶的ETH里扣礦工費,如果這個用戶沒有ETH,那么不給提幣。
-
ERC20到賬監聽方法:監視所有發送到token合約地址調用transfer方法的transaction
前提是提幣失敗,比如交易所地址中沒有幣了,那么這個流程就被中斷了,這個時候有兩個辦法:
-
回退
-
交易所地址充幣,然后繼續執行
1. 回退
回退就是使用戶的賬戶回到沒有提幣時的狀態,當然也去除所有記錄:
// 第一步找出這個用戶的賬戶,並update記錄到原先的狀態 SELECT * FROM `accounts` WHERE `member_id` = 26; UPDATE ... // 第二步通過賬戶找到提幣記錄,刪除 SELECT * FROM `withdraws` WHERE `member_id` = 26 and `account_id` = 232; DELETE FROM `withdraws` WHERE `member_id` = 26 and `account_id` = 232; // 第三步找到賬戶變化歷史記錄,清楚 SELECT * FROM `account_versions` WHERE `member_id` = 26 and `account_id` = 232 and `modifiable_type` = 'Withdraw'; DELETE FROM `account_versions` WHERE `member_id` = 26 and `account_id` = 232 and `modifiable_type` = 'Withdraw';