-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
129 lines (112 loc) · 4.79 KB
/
index.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
120
121
122
123
124
125
126
127
128
129
require('dotenv').config();
require('log-timestamp');
const xrpl = require("xrpl");
const fs = require('fs')
const { parse } = require('csv-parse');
var mode = process.argv[2]
var timestamp
addressesToCollect = []
function logToFile(data) {
const now = new Date();
timestamp = `${now.toISOString()}`;
// Append to file
fs.appendFile(`log/${mode}-evr-collect.csv`, `${timestamp}${data}\n`, function (err) {
if (err) throw err;
})
}
const createArray = new Promise((resolve, reject) => {
fs.createReadStream("data/nodes.csv")
.pipe(parse({ delimiter: ",", from_line: 1 }))
.on("data", function (row) {
addressesToCollect.push([row[0]])
})
.on("end", function() {
resolve(addressesToCollect)
})
.on("error", function(err) {
reject(err)
})
})
async function main() {
try {
try {
seed = xrpl.Wallet.fromSeed(process.env.SEED_MAINNET)
wallet = process.env.MAIN_WALLET
console.log(`Your main wallet to receive your EVR is ${wallet}.`)
console.log('')
} catch(err) {
console.log("Family seed likely incorrect, please check. Error:", err.message)
process.exit(1)
}
const client = new xrpl.Client(process.env.WS_MAINNET)
await client.connect()
fs.appendFile(`log/${mode}-evr-collect.csv`, 'Timestamp,AmountSent,SourceAddress,DestinationAddress,Fee,Hash\n', (err) => {
if (err) throw err;
})
for (const arrayAddress of addressesToCollect) {
var balance = await client.request({
command: "account_lines",
account: arrayAddress.toString(),
ledger_index: "validated",
})
const evrBalanceOnly = balance.result.lines.find(line => line.account === process.env.ISSUING_ADDR)
if (!evrBalanceOnly || parseFloat(evrBalanceOnly.balance) <= 0) {
console.log(`${arrayAddress} currently does not appear to have a trustline for EVR or has a zero balance.`)
logToFile(`,${evrBalanceOnly.balance},${arrayAddress},null,null,'no trustline or zero balance.'`)
console.log('')
continue
} else {
console.log(`${arrayAddress} currently has ${evrBalanceOnly.balance} EVR.`)
}
var prepared = await client.autofill({
TransactionType: "Payment",
Account: arrayAddress.toString(),
Amount: {
"value": evrBalanceOnly.balance,
"currency": process.env.CURRENCY_CODE,
"issuer": process.env.ISSUING_ADDR
},
Destination: wallet,
})
//const max_ledger = prepared.LastLedgerSequence
//console.log("Prepared transaction instructions:", prepared);
console.log(`Sending ${evrBalanceOnly.balance} EVR to ${prepared.Destination} from ${prepared.Account} at a fee of ${xrpl.dropsToXrp(prepared.Fee)} XAH\n`);
// Sign prepared instructions ------------------------------------------------
var signed = await seed.sign(prepared);
//console.log("Identifying hash:", signed.hash)
//console.log("Signed blob:", signed.tx_blob)
// Submit signed blob --------------------------------------------------------
if ( mode == 'sweep' ) {
var tx = await client.submitAndWait(signed.tx_blob);
// Check transaction results -------------------------------------------------
let txResult = tx.result.meta.TransactionResult
console.log("Transaction result:", txResult);
if ( tx.result.meta.TransactionResult !== 'tesSUCCESS') {
console.log(`Something wrong, non-success message of ${txResult} returned from TX`)
await client.disconnect()
process.exit(1)
} else {
console.log(`Success sending ${prepared.Amount.value} EVR to ${prepared.Destination} from ${prepared.Account} at a fee of ${xrpl.dropsToXrp(prepared.Fee)} XAH `)
logToFile(`,${prepared.Amount.value},${prepared.Account},${prepared.Destination},${xrpl.dropsToXrp(prepared.Fee)},${signed.hash}`)
}
} else {
console.log("Simulating the submitAndWait function")
console.log(`Simulated sending ${prepared.Amount.value} EVR to ${prepared.Destination} from ${prepared.Account} at a fee of ${xrpl.dropsToXrp(prepared.Fee)} XAH`)
console.log('')
logToFile(`,${prepared.Amount.value},${prepared.Account},${prepared.Destination},${xrpl.dropsToXrp(prepared.Fee)},null`)
}
}
// Disconnect ----------------------------------------------------------------
fs.rename(`log/${mode}-evr-collect.csv`, `log/${mode}-evr-collect-${timestamp}.csv`, (err) => {
if (err) throw err;
})
await client.disconnect();
} catch (error) {
console.error(error);
}
}
createArray.then(() => {
main()
}).catch((err) => {
console.error(err)
})