-
Notifications
You must be signed in to change notification settings - Fork 3
/
get_private_keys.js
executable file
·95 lines (76 loc) · 2.54 KB
/
get_private_keys.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
#!/usr/bin/env node
"use strict";
require('dotenv').config({path: '../.env'});
const axios = require("axios");
const Web3 = require("web3");
const getStringValue = (input) => {
return input === undefined ? '' : input;
};
const getBooleanValue = (input) => {
return input.toUpperCase() === "TRUE";
};
const Config = {
faucetUrl: getStringValue(process.env.FAUCET_URL),
useFaucet: getBooleanValue(process.env.USE_FAUCET),
requestAmount: Number.parseInt(getStringValue(process.env.REQUEST_AMOUNT)),
usersNumber: Number.parseInt(getStringValue(process.env.USERS_NUMBER))
};
if (Config.useFaucet) {
if (Config.faucetUrl.length === 0) {
Config.useFaucet = false;
console.error('Unable to request faucet: FAUCET_URL is empty');
} else {
console.error(`Use faucet: ${Config.faucetUrl}`)
}
} else {
console.error(`Skipping faucet requests: USE_FAUCET set to false`);
}
function delay(ms) {
return new Promise( resolve => setTimeout(resolve, ms) );
}
const requestFaucet = async (wallet, amount) => {
if (!Config.useFaucet) {
return;
}
const data = {amount: amount, wallet: wallet};
try {
console.error(`Request ${amount} tokens for the wallet ${wallet} from the faucet ${Config.faucetUrl}`)
const resp = await axios.post(Config.faucetUrl, data);
console.error(`Faucet response code: ${resp.status}`);
} catch (err) {
console.error(`Failed to send request to the faucet: ${err}`);
}
};
const web3 = new Web3(
new Web3.providers.HttpProvider(Config.proxyUrl, 3000000)
);
const main = async () => {
let privateKeys = [];
let publicKeys = [];
const requests = Array.from(Array(Config.usersNumber), async (_, x) => {
const acc = web3.eth.accounts.create();
privateKeys.push(acc.privateKey);
publicKeys.push(acc.address);
return (async (address, amount) => requestFaucet(address, amount))(
acc.address,
Config.requestAmount
);
});
await delay(3000);
[0, 1, 2].forEach((i) => {
requests.push((async (address, amount) => requestFaucet(address, amount))(
publicKeys[i],
Config.requestAmount - Math.round(Math.random() * 100)
))
})
for (const request of requests) {
await request;
}
console.log(privateKeys.join(','))
};
main()
.then(() => process.exit(process.exitCode))
.catch((error) => {
console.error(`Failed to get private keys: ${error}`);
process.exit(1);
});