-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget_balances_for_accounts_promises.js
119 lines (94 loc) · 2.53 KB
/
get_balances_for_accounts_promises.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//
// get balances for given set of accounts
// the balances are the total sum of both XRP and IOU's
// balances for IOU's get retrieved by retrieving the account lines and summing the balances
// balances for XRP get retrieved by account info
//
// requires ripple-lib 0.9.2-rc5 or higher
//
var Remote = require('ripple-lib').Remote;
var _ = require('lodash');
var Promise = require('bluebird');
var accounts = [
{
'name' : '',
'address' : ''
},
{
'name' : '',
'address' : ''
}
]
var remote = new Remote({
trace : false,
trusted: true,
local_signing: true,
servers: [
{ host: 's-west.ripple.com', port: 443, secure: true }
]
});
remote.connect(function() {
console.log('connected');
getAccountInfoForAccounts(accounts);
});
function getAccountInfoForAccounts(accounts) {
var promises = _.map(accounts, function(account) {
return new Promise(function (resolve, reject) {
Promise.all([getXRPBalance(account), getBalances(account)])
.then(function(data) {
var result = {
'account' : account,
'balances' : [data[0]].concat(data[1])
}
resolve(result);
})
.error(reject);
});
});
Promise.all(promises)
.then(function(data) {
console.log('all accounts have been processed');
console.log(JSON.stringify(data, null, 2));
process.exit(0);
})
.error(function(e) {
console.log("Error", e);
process.exit(1);
});
}
function getBalances(account) {
return new Promise(function (resolve, reject) {
var request = remote.requestAccountLines({account: account.address});
// reject on error
request.once('error', reject);
// parse result on success
request.once('success', function(result) {
var balances = [];
result.lines.forEach(function(line) {
balances.push({
value: line.balance,
currency: line.currency,
counterparty: line.account
});
});
resolve(balances);
});
request.request();
});
}
function getXRPBalance(account) {
return new Promise(function (resolve, reject) {
var xrpRequest = remote.requestAccountInfo({account: account.address});
// reject on error
xrpRequest.once('error', reject);
// parse result on success
xrpRequest.once('success', function(result) {
resolve({
value: result.account_data.Balance / 1000000,
currency: 'XRP',
counterparty: ''
});
});
xrpRequest.request();
});
}