OSDN Git Service

update to production mode.
[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.listVapor = function(guid) {
48   let retPromise = new Promise((resolve, reject) => {
49     bytom.accounts
50       .listVaporAccountUseServer(guid)
51       .then(ret => {
52         resolve(ret)
53       })
54       .catch(error => {
55         reject(error)
56       })
57   })
58   return retPromise
59 }
60
61 account.balance = function(guid) {
62   let retPromise = new Promise((resolve, reject) => {
63     bytom.accounts
64       .listAddressUseServer(guid)
65       .then(addresses => {
66         let balances = []
67         let votes = []
68         addresses.forEach(address => {
69           if (address.balances != null) {
70             balances = balances.concat(address.balances)
71           }
72           if (address.votes != null) {
73             votes = votes.concat(address.votes)
74           }
75         })
76         let obj = {};
77
78         balances.forEach(function (balance) {
79           if(obj.hasOwnProperty(balance.asset)) {
80             obj[balance.asset].balance = Number(obj[balance.asset].balance) + Number(balance.balance);
81           } else {
82             balance.balance =  Number(balance.balance)
83             obj[balance.asset] = balance;
84             delete obj[balance.asset]['total_received']
85             delete obj[balance.asset]['total_sent']
86             // delete obj[balance.asset]['in_btc']
87             // delete obj[balance.asset]['in_cny']
88             // delete obj[balance.asset]['in_usd']
89           }
90         });
91
92
93         let res = [];
94
95         for(let prop in obj) {
96           res.unshift(obj[prop]);
97         }
98
99         resolve({
100             balances:res,
101             votes
102           })
103       })
104       .catch(error => {
105         reject(error)
106       })
107   })
108   return retPromise
109 }
110
111 account.list = function() {
112   let retPromise = new Promise((resolve, reject) => {
113     bytom.accounts
114       .listAccountUseServer()
115       .then(accounts => {
116         Promise.all(accounts.map(async (account) => {
117           try{
118             const obj = await this.balance(account.guid)
119             account.balances = obj.balances
120             account.votes = obj.votes
121           }catch (e) {
122             return e
123           }
124         })).then(()=>{
125           resolve(accounts)
126         }).catch(error=>{
127           throw error
128         })
129       })
130       .catch(error => {
131         reject(error)
132       })
133   })
134
135   return retPromise
136 }
137
138 account.backup = function() {
139   return bytom.wallet.backup()
140 }
141
142 account.restore = function(walletImage) {
143   return bytom.wallet.restore(walletImage)
144 }
145
146 export default account