OSDN Git Service

update the list vote stauts.
[bytom/Byone.git] / src / models / account.js
1 import bytom from './bytom'
2 import uuid from 'uuid'
3
4
5 let account = {
6   setupNet: bytom.setupNet
7 }
8
9 account.create = function(accountAlias, keyAlias, passwd, success, error) {
10   let retPromise = new Promise((resolve, reject) => {
11     if(!keyAlias){
12       keyAlias = `${accountAlias}-key-${uuid.v4()}`
13     }
14     bytom.keys
15       .create(keyAlias, passwd)
16       .then(res => {
17         bytom.accounts
18           .createAccountUseServer(res.xpub, accountAlias)
19           .then(ret => {
20             resolve(ret)
21           })
22           .catch(error => {
23             reject(error)
24           })
25       })
26       .catch(error => {
27         reject(error)
28       })
29   })
30   return retPromise
31 }
32
33 account.copy = function(guid) {
34   let retPromise = new Promise((resolve, reject) => {
35     bytom.accounts
36       .copyAccountUseServer(guid, 'btm')
37       .then(ret => {
38         resolve(ret)
39       })
40       .catch(error => {
41         reject(error)
42       })
43   })
44   return retPromise
45 }
46
47 account.balance = function(guid) {
48   let retPromise = new Promise((resolve, reject) => {
49     bytom.accounts
50       .listAddressUseServer(guid)
51       .then(addresses => {
52         let balances = []
53         let votes = []
54         addresses.forEach(address => {
55           if (address.balances != null) {
56             balances = balances.concat(address.balances)
57           }
58           if (address.votes != null) {
59             votes = votes.concat(address.votes)
60           }
61         })
62         let obj = {};
63
64         balances.forEach(function (balance) {
65           if(obj.hasOwnProperty(balance.asset)) {
66             obj[balance.asset].balance = Number(obj[balance.asset].balance) + Number(balance.balance);
67           } else {
68             balance.balance =  Number(balance.balance)
69             obj[balance.asset] = balance;
70             delete obj[balance.asset]['total_received']
71             delete obj[balance.asset]['total_sent']
72             delete obj[balance.asset]['in_btc']
73             delete obj[balance.asset]['in_cny']
74             delete obj[balance.asset]['in_usd']
75           }
76         });
77
78
79         let res = [];
80
81         for(let prop in obj) {
82           res.push(obj[prop]);
83         }
84
85         resolve({
86             balances:res,
87             votes
88           })
89       })
90       .catch(error => {
91         reject(error)
92       })
93   })
94   return retPromise
95 }
96
97 account.list = function() {
98   let retPromise = new Promise((resolve, reject) => {
99     bytom.accounts
100       .listAccountUseServer()
101       .then(accounts => {
102         Promise.all(accounts.map(async (account) => {
103           try{
104             const balances = await this.balance(account.guid)
105             account.balances = balances
106           }catch (e) {
107             return e
108           }
109         })).then(()=>{
110           resolve(accounts)
111         }).catch(error=>{
112           throw error
113         })
114       })
115       .catch(error => {
116         reject(error)
117       })
118   })
119
120   return retPromise
121 }
122
123 account.backup = function() {
124   return bytom.wallet.backup()
125 }
126
127 account.restore = function(walletImage) {
128   return bytom.wallet.restore(walletImage)
129 }
130
131 export default account