Add --private-key command argument so that users shouldn't have to save the private key in the clear in .env file

This commit is contained in:
Theo 2023-05-10 18:49:59 +03:00
parent e9fcc51dae
commit 910643ab5e
2 changed files with 26 additions and 20 deletions

@ -38,17 +38,17 @@ If you want to use Tor connection to conceal ip address, install [Tor Browser](h
Note that you should reset your tor connection by restarting the browser every time when you deposit & withdraw otherwise you will have the same exit node used for connection. Note that you should reset your tor connection by restarting the browser every time when you deposit & withdraw otherwise you will have the same exit node used for connection.
### Goerli, Mainnet, Binance Smart Chain, Gnosis Chain, Polygon Network, Arbitrum, Avalanche ### Goerli, Mainnet, Binance Smart Chain, Gnosis Chain, Polygon Network, Arbitrum, Avalanche
1. Add `PRIVATE_KEY` to `.env` file 1. `node cli.js --help`
2. `node cli.js --help` 2. If you want to use secure, anonymous tor connection add `--tor <torPort>` behind the command.
3. If you want to use secure, anonymous tor connection add `--tor <torPort>` behind the command. 3. Add `PRIVATE_KEY` to `.env` file (optional, only if you want to use it for many operations) - open `.env.example` file, add private key after `PRIVATE_KEY=` and rename file to `.env`.
#### To deposit: #### To deposit:
```bash ```bash
$ node cli.js deposit <currency> <amount> --rpc <rpc url> --tor <torPort> $ node cli.js deposit <currency> <amount> --rpc <rpc url> --tor <torPort> --private-key <private key>
``` ```
Note that `--tor <torPort>` is optional. Note that `--tor <torPort>` is optional, and use `--private-key <private key>` only if you didn't add it to `.env` file.
For RPC nodes please refer to the list of public RPC nodes below. For RPC nodes please refer to the list of public RPC nodes below.
@ -67,16 +67,14 @@ Sender account ETH balance is 1004873.361652048361352542
#### To withdraw: #### To withdraw:
```bash ```bash
$ node cli.js withdraw <note> <recipient> --rpc <rpc url> --relayer <relayer url> --tor <torPort> $ node cli.js withdraw <note> <recipient> --rpc <rpc url> --relayer <relayer url> --tor <torPort> --private-key <private key>
``` ```
Note that `--relayer <relayer url>`, `--tor <torPort>` is optional. Note that `--relayer <relayer url>`, `--tor <torPort>` is optional, and use `--private-key <private key>` only if you withdraw without relayer.
If you want to use Tornado Cash relayer for your first withdrawal to your new ethereum account, please refer to the list of relayers below. If you want to use Tornado Cash relayer for your first withdrawal to your new ethereum account, please refer to the list of relayers below.
If you don't need relayer while doing withdrawals, you must apply your withdrawal account's private key to `.env` file. If you don't need relayer while doing withdrawals, you must provide your withdrawal account's private key - either as parameter, or by adding it to `.env` file.
Copy the `PRIVATE_KEY=` line of `.env.example` to `.env`, and add your private key behind the `=`.
##### Example: ##### Example:

28
cli.js

@ -1368,7 +1368,7 @@ async function promptConfirmation() {
/** /**
* Init web3, contracts, and snark * Init web3, contracts, and snark
*/ */
async function init({ rpc, noteNetId, currency = 'dai', amount = '100', balanceCheck, localMode }) { async function init({ rpc, noteNetId, currency = 'dai', amount = '100', balanceCheck, localMode, privateKey }) {
let contractJson, instanceJson, erc20ContractJson, erc20tornadoJson, tornadoAddress, tokenAddress; let contractJson, instanceJson, erc20ContractJson, erc20tornadoJson, tornadoAddress, tokenAddress;
let ipOptions = {}; let ipOptions = {};
@ -1428,13 +1428,13 @@ async function init({ rpc, noteNetId, currency = 'dai', amount = '100', balanceC
MERKLE_TREE_HEIGHT = process.env.MERKLE_TREE_HEIGHT || 20; MERKLE_TREE_HEIGHT = process.env.MERKLE_TREE_HEIGHT || 20;
ETH_AMOUNT = process.env.ETH_AMOUNT; ETH_AMOUNT = process.env.ETH_AMOUNT;
TOKEN_AMOUNT = process.env.TOKEN_AMOUNT; TOKEN_AMOUNT = process.env.TOKEN_AMOUNT;
const privKey = process.env.PRIVATE_KEY; const privKey = privateKey || process.env.PRIVATE_KEY;
if (privKey) { if (privKey) {
if (privKey.includes('0x')) { if (privKey.startsWith('0x')) {
PRIVATE_KEY = process.env.PRIVATE_KEY.substring(2); PRIVATE_KEY = privKey.substring(2);
} else { } else {
PRIVATE_KEY = process.env.PRIVATE_KEY; PRIVATE_KEY = privKey;
} }
} }
if (PRIVATE_KEY) { if (PRIVATE_KEY) {
@ -1502,6 +1502,7 @@ async function main() {
.option('-r, --rpc <URL>', 'The RPC that CLI should interact with', 'http://localhost:8545') .option('-r, --rpc <URL>', 'The RPC that CLI should interact with', 'http://localhost:8545')
.option('-R, --relayer <URL>', 'Withdraw via relayer') .option('-R, --relayer <URL>', 'Withdraw via relayer')
.option('-T, --tor <PORT>', 'Optional tor port') .option('-T, --tor <PORT>', 'Optional tor port')
.option('-p, --private-key <KEY>', "Wallet private key - If you didn't add it to .env file and it is needed for operation")
.option('-S --gas_speed <SPEED>', 'Gas speed preference [ instant, fast, standard, low ]') .option('-S --gas_speed <SPEED>', 'Gas speed preference [ instant, fast, standard, low ]')
.option('-N --noconfirmation', 'No confirmation mode - Does not query confirmation ') .option('-N --noconfirmation', 'No confirmation mode - Does not query confirmation ')
.option('-L, --local-rpc', 'Local node mode - Does not submit signed transaction to the node') .option('-L, --local-rpc', 'Local node mode - Does not submit signed transaction to the node')
@ -1522,7 +1523,7 @@ async function main() {
statePreferences(program); statePreferences(program);
const { currency, amount, netId, commitmentNote } = parseInvoice(invoice); const { currency, amount, netId, commitmentNote } = parseInvoice(invoice);
await init({ rpc: program.rpc, currency, amount, localMode: program.local }); await init({ rpc: program.rpc, currency, amount, localMode: program.local, privateKey: program.privateKey });
console.log('Creating', currency.toUpperCase(), amount, 'deposit for', netName, 'Tornado Cash Instance'); console.log('Creating', currency.toUpperCase(), amount, 'deposit for', netName, 'Tornado Cash Instance');
await deposit({ currency, amount, commitmentNote }); await deposit({ currency, amount, commitmentNote });
}); });
@ -1536,7 +1537,7 @@ async function main() {
statePreferences(program); statePreferences(program);
await init({ rpc: program.rpc, currency, amount, localMode: program.local }); await init({ rpc: program.rpc, currency, amount, localMode: program.local, privateKey: program.privateKey });
await deposit({ currency, amount }); await deposit({ currency, amount });
}); });
program program
@ -1549,7 +1550,14 @@ async function main() {
const { currency, amount, netId, deposit } = parseNote(noteString); const { currency, amount, netId, deposit } = parseNote(noteString);
await init({ rpc: program.rpc, noteNetId: netId, currency, amount, localMode: program.local }); await init({
rpc: program.rpc,
noteNetId: netId,
currency,
amount,
localMode: program.local,
privateKey: program.privateKey
});
await withdraw({ await withdraw({
deposit, deposit,
currency, currency,
@ -1581,7 +1589,7 @@ async function main() {
.action(async (address, amount, tokenAddress) => { .action(async (address, amount, tokenAddress) => {
statePreferences(program); statePreferences(program);
await init({ rpc: program.rpc, balanceCheck: true, localMode: program.local }); await init({ rpc: program.rpc, balanceCheck: true, localMode: program.local, privateKey: program.privateKey });
await send({ address, amount, tokenAddress }); await send({ address, amount, tokenAddress });
}); });
program program
@ -1693,7 +1701,7 @@ async function main() {
console.log('Start performing ETH deposit-withdraw test'); console.log('Start performing ETH deposit-withdraw test');
let currency = 'eth'; let currency = 'eth';
let amount = '0.1'; let amount = '0.1';
await init({ rpc: program.rpc, currency, amount }); await init({ rpc: program.rpc, currency, amount, privateKey: program.privateKey });
let noteString = await deposit({ currency, amount }); let noteString = await deposit({ currency, amount });
let parsedNote = parseNote(noteString); let parsedNote = parseNote(noteString);
await withdraw({ await withdraw({