-
Notifications
You must be signed in to change notification settings - Fork 8
/
topUp.js
79 lines (69 loc) · 2.27 KB
/
topUp.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
const yargs = require("yargs");
const { ethers } = require("ethers");
const { withKeyArgs } = require("./parseArgKeys");
const parseArgs = yargs
.scriptName("echo")
.usage(
"$0 --jsonRpc=<value> ( --privKey=<value> | (--keyfile=<value> --password=<value>)) --value=<value> [--relayContract=<value>]"
)
.help()
.option("relayContract", {
description: "The address of the any.sender relay contract",
string: true,
alias: "r",
default: "0x9b4FA5A1D9f6812e2B56B36fBde62736Fa82c2a7",
})
.option("value", {
description: "The value to top up.",
string: true,
alias: "s",
default: "0.5",
})
.option("jsonRpc", {
description: "A json rpc url.",
string: true,
alias: "j",
demandOption: true,
});
const run = async () => {
const args = withKeyArgs(parseArgs).parse(process.argv);
let userWallet;
if (args.privKey) userWallet = new ethers.Wallet(args.privKey);
else if (args.mnemonic) userWallet = new ethers.Wallet(args.mnemonic);
else {
userWallet = ethers.Wallet.fromEncryptedJson(
readFileSync(args.keyfil),
args.password
);
}
let jsonRpcUrl;
if (args.jsonRpc.startsWith("https://")) {
jsonRpcUrl = args.jsonRpc.substr(8);
} else if (args.jsonRpc.startsWith("http://")) {
jsonRpcUrl = args.jsonRpc.substr(7);
} else jsonRpcUrl = args.jsonRpc;
// if (!jsonRpcUrl.startsWith("ropsten")) {
// throw new Error("--jsonRpc is not for ropsten network");
// }
jsonRpcUrl = "https://" + jsonRpcUrl;
const provider = new ethers.providers.JsonRpcProvider(jsonRpcUrl);
const connectedWallet = userWallet.connect(provider);
const value = ethers.utils.parseEther(args.value);
console.log(
`Sending transaction from ${connectedWallet.address} to ${args.relayContract} with value ${args.value}.`
);
const tx = await connectedWallet.sendTransaction({
to: args.relayContract,
value: value,
gasPrice: 30000000000,
});
console.log(`Transaction https://ropsten.etherscan.io/tx/${tx.hash} sent.`);
console.log("Waiting for mining.");
await tx.wait(1);
console.log(
"Transaction mined now waiting 10 confirmations. Should take approx. 4 minutes."
);
await tx.wait(12);
console.log("Transaction has 10 confirmation.");
};
run().catch((err) => console.error(err));