2024-04-24 20:26:02 +03:00
< div class = "hero" align = "center" >
2022-01-23 12:42:08 +03:00
2024-04-24 20:26:02 +03:00
< img src = "./logo2.png" >
2022-01-23 12:42:08 +03:00
2024-04-24 20:26:02 +03:00
# Tornado CLI
2023-09-08 00:29:17 +03:00
2024-04-24 20:26:02 +03:00
Modern Toolsets for [Privacy Pools ](https://www.forbes.com/sites/tomerniv/2023/09/07/privacy-pools-bridging-the-gap-between-blockchain-and-regulatory-compliance ) on Ethereum
2022-01-23 12:42:08 +03:00
2024-04-25 13:51:42 +03:00
[![Telegram Badge ](https://img.shields.io/badge/Join%20Group-telegram?style=flat&logo=telegram&color=blue&link=https%3A%2F%2Ft.me%2Ftornadoofficial )](https://t.me/tornadoofficial) [![Element Badge ](https://img.shields.io/badge/Join%20Element%20Chat-Element?style=flat&logo=element&color=green&link=https%3A%2F%2Felement.tornadocash.social%2F )](https://element.tornadocash.social) [![Discourse Badge ](https://img.shields.io/badge/Discourse-Discourse?style=flat&logo=Discourse&color=black&link=https%3A%2F%2Fforum.tornado.ws%2F )](https://forum.tornado.ws/)
2022-02-27 01:32:37 +03:00
2024-04-24 20:26:02 +03:00
< / div >
2022-02-27 01:32:37 +03:00
2024-04-24 20:26:02 +03:00
### About Tornado CLI
2022-02-27 01:32:37 +03:00
2024-04-24 20:26:02 +03:00
Tornado CLI is a complete rewrite of old tornado-cli command line tool with the following changes
+ Rewritten to [TypeScript ](https://www.typescriptlang.org/ )
+ Built on top of modern tech stacks like [Ethers.js V6 ](https://docs.ethers.org/v6/ ) or [TypeChain ](https://github.com/dethcrypto/TypeChain )
+ Creates resource heavy Merkle Trees on a separate thread using Web Workers / Worker Threads
+ Resilient API requests made by [cross-fetch ](https://www.npmjs.com/package/cross-fetch ) and retries, especially for Tor Users
+ Modular design
### How to install Tornado CLI
Download and install the latest [Node.js ](https://nodejs.org/en/download/ ) LTS version (Current: 20.x).
You also need to install [Yarn ](https://yarnpkg.com/ ) 1.x package manager using following command
```bash
$ npm i -g yarn
```
2022-02-27 01:32:37 +03:00
2022-01-23 12:42:08 +03:00
If you have git installed on your system, clone the master branch.
```bash
2023-05-10 19:05:15 +03:00
$ git clone https://git.tornado.ws/tornadocash/tornado-cli
2022-01-23 12:42:08 +03:00
```
2023-05-10 19:05:15 +03:00
Or, download the archive file from git: https://git.tornado.ws/tornadocash/tornado-cli/archive/master.zip
2022-01-23 12:42:08 +03:00
After downloading or cloning the repository, you must install necessary libraries using the following command.
```bash
$ cd tornado-cli
2024-04-24 20:26:02 +03:00
$ yarn
2022-01-23 12:42:08 +03:00
```
2024-04-24 20:26:02 +03:00
If you want to use Tor connection to conceal ip address, install [Tor Browser ](https://www.torproject.org/download/ ) and add `--tor-port 9150` for `yarn start` if you connect tor with browser. (For non tor-browser tor service you can use the default 9050 port).
2022-02-27 01:32:39 +03:00
2022-01-23 12:42:08 +03:00
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.
2024-04-24 20:26:02 +03:00
### Configuration
Commands like `yarn deposit` , `yarn depositInvoice` or `yarn send` would require either a valid view-only wallet address or mnemonic or a private key to perform actions ( Because, if you want to deposit to pools or send the token, you would need your wallet right? ).
You can apply those values with two options
2023-09-08 00:29:17 +03:00
2024-04-24 20:26:02 +03:00
1. Refer the `VIEW_ONLY` or `MNEMONIC` or `PRIVATE_KEY` value from the `.env.example` file and create a new `.env` file with the appropriate value.
2. Supply command-line options `--view-only` or `--mnemonic` or `--private-key` during the commands.
### How to start
1. `yarn start --help`
2. If you want to use a secure, anonymous tor connection add `--tor-port <torPort>` behind the command or add `TOR_PORT` at the `.env` file.
2023-05-10 18:49:59 +03:00
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` .
2022-02-27 01:32:39 +03:00
#### To deposit:
2020-05-21 22:29:33 +03:00
2022-02-27 01:32:39 +03:00
```bash
2024-04-24 20:26:02 +03:00
$ yarn deposit < netId > < currency > < amount >
2022-02-27 01:32:39 +03:00
```
2024-04-24 20:26:02 +03:00
RPC nodes are now selected automatically however if you want to change you can use the `--rpc-url` option with the RPC URL following behind (Find any from https://chainlist.org)
2022-02-27 01:32:39 +03:00
##### Example:
2023-09-08 00:29:17 +03:00
2020-05-21 22:29:33 +03:00
```bash
2024-04-24 20:26:02 +03:00
$ yarn deposit 1 ETH 0.1
====================================================================
_____ _ ____ _ ___
|_ _|__ _ __ _ __ __ _ __ | | ___ / ___ | | |_ _|
| |/ _ \| '__| '_ \ / _` |/ _ ` |/ _ \ | | | | | |
| | (_) | | | | | | (_| | (_| | (_) | | |___| |___ | |
|_|\___/|_| |_| |_|\__,_|\__,_|\___/ \____|_____|___|
====================================================================
┌───────────────────────────────────────────────────────┐
│ Program Options │
├──────────┬────────────────────────────────────────────┤
│ IP │ │
├──────────┼────────────────────────────────────────────┤
│ Is Tor │ false │
└──────────┴────────────────────────────────────────────┘
Confirm? [Y/n]
Y
New deposit: {
"currency": "eth",
"amount": "0.1",
"netId": 1,
"nullifier": "447406849888912231527060205543641504804080944127170669822752873679919469946",
"secret": "174744806548157587591107992863852449674497869575837897594110402641101509504",
"note": "tornado-eth-0.1-1-0x7a558fc1c1169a22661ce7256ff1a525b494916832c6ea10ba8209652a39fd80d3c62ebb20ad83c0777ceb1fd7a463eb0e952fcad9223a6f37cc1cede662",
"noteHex": "0x7a558fc1c1169a22661ce7256ff1a525b494916832c6ea10ba8209652a39fd80d3c62ebb20ad83c0777ceb1fd7a463eb0e952fcad9223a6f37cc1cede662",
"invoice": "tornadoInvoice-eth-0.1-1-0x0ad52c6472894d3521e40b27af6c590d0567c11819e9bacd4a872f3cc7056a54",
"commitmentHex": "0x0ad52c6472894d3521e40b27af6c590d0567c11819e9bacd4a872f3cc7056a54",
"nullifierHex": "0x2eb4ea29bbf999c40c7ceef35dc5917fbc6ed591fa7eb50b0aea94d3c1254d67"
}
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Send Transaction? │
├──────────────────────┬─────────────────────────────────────────────────────────────────────────────────────┤
│ to │ 0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ from │ │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ data │ 0x13d98d1300000000000000000000000012d66f...0000000000000000000000000000000000000000 │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ gasLimit │ 1238242 │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ maxFeePerGas │ 10000000000 │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ maxPriorityFeePerGas │ 1000000 │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ value │ 100000000000000000 │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ type │ 2 │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ nonce │ │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ chainId │ 1 │
└──────────────────────┴─────────────────────────────────────────────────────────────────────────────────────┘
Confirm? [Y/n]
Y
Sent transaction 0x0ad52c6472894d3521e40b27af6c590d0567c11819e9bacd4a872f3cc7056a54
2020-05-21 22:29:33 +03:00
```
2022-02-27 01:32:39 +03:00
#### To withdraw:
```bash
2024-04-24 20:26:02 +03:00
$ yarn withdraw < note > < recipient >
2022-02-27 01:32:39 +03:00
```
2024-04-24 20:26:02 +03:00
Note that `--relayer <relayer url>` , `--tor-port <torPort>` and `--rpc-url <rpc url>` are optional parameters, and use `--wallet-withdrawal --private-key <private key>` only if you withdraw without the relayer.
2022-02-27 01:32:39 +03:00
2024-04-24 20:26:02 +03:00
The CLI will select the relayer from the Relayer Registry contract by scoring for more information about how the relayers are being selected you could refer here https://docs.tornado.ws/general/guides/relayer.html.
2022-02-27 01:32:39 +03:00
##### Example:
2020-05-21 22:29:33 +03:00
```bash
2024-04-24 20:26:02 +03:00
$ yarn withdraw tornado-eth-0.1-5-0xf73dd6833ccbcc046c44228c8e2aa312bf49e08389dadc7c65e6a73239867b7ef49c705c4db227e2fadd8489a494b6880bdcb6016047e019d1abec1c7652 0x8589427373D6D84E98730D7795D8f6f8731FDA16
2021-02-25 16:03:51 +03:00
```
2021-12-07 20:14:30 +03:00
2022-02-27 01:32:37 +03:00
### (Optional) Creating Deposit Notes & Invoices offline
2023-09-08 00:29:17 +03:00
2022-02-27 01:32:37 +03:00
One of the main features of tornado-cli is that it supports creating deposit notes & invoices inside the offline computing environment.
After the private-key like notes are backed up somewhere safe, you can copy the created deposit invoices and use them to create new deposit transaction on online environment.
2024-04-24 20:26:02 +03:00
#### To create deposit notes with `create (createDeposit)` command.
2022-02-27 01:32:39 +03:00
```bash
2024-04-24 20:26:02 +03:00
$ yarn createDeposit < chainId > < currency > < amount >
2022-02-27 01:32:39 +03:00
```
To find out chainId value for your network, refer to https://chainlist.org/.
##### Example:
2022-02-27 01:32:37 +03:00
```bash
2024-04-24 20:26:02 +03:00
$ yarn createDeposit 1 ETH 0.1
====================================================================
_____ _ ____ _ ___
|_ _|__ _ __ _ __ __ _ __ | | ___ / ___ | | |_ _|
| |/ _ \| '__| '_ \ / _` |/ _ ` |/ _ \ | | | | | |
| | (_) | | | | | | (_| | (_| | (_) | | |___| |___ | |
|_|\___/|_| |_| |_|\__,_|\__,_|\___/ \____|_____|___|
====================================================================
New deposit: {
"currency": "eth",
"amount": "0.1",
"netId": 1,
"nullifier": "211996166335523441594778881807923807770971048532637197153927747977918013739",
"secret": "443763519478082043322725320022481467938478224697448315688237911974763852521",
"note": "tornado-eth-0.1-1-0x2be1c7f1d7cc77e96e394b108ddc2bf2b25b8c2158ebb92b6cc347d74efc77e9723c6b6ac0654e00588f7ec8177e8a7dc47bc3b00fe75c7d094dc24729fb",
"noteHex": "0x2be1c7f1d7cc77e96e394b108ddc2bf2b25b8c2158ebb92b6cc347d74efc77e9723c6b6ac0654e00588f7ec8177e8a7dc47bc3b00fe75c7d094dc24729fb",
"invoice": "tornadoInvoice-eth-0.1-1-0x24d26c7d0381dc34941b6fe9e0d622c7efadc0bfdc9d3f7e8dcb1e490e6ce9ea",
"commitmentHex": "0x24d26c7d0381dc34941b6fe9e0d622c7efadc0bfdc9d3f7e8dcb1e490e6ce9ea",
"nullifierHex": "0x0e3ec1a269e2e143bc8b2dfca40975bc8f5af2754917cd1f839e499162b28324"
}
Transaction Data: {
"to": "0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b",
"value": "100000000000000000",
"data": "0x13d98d1300000000000000000000000012d66f87a04a9e220743712ce6d9bb1b5616b8fc24d26c7d0381dc34941b6fe9e0d622c7efadc0bfdc9d3f7e8dcb1e490e6ce9ea00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000"
}
Done in 4.33s.
2022-02-27 01:32:37 +03:00
```
2022-02-27 01:32:39 +03:00
#### To create corresponding deposit transaction with `depositInvoice` command.
Creating deposit transaction with `depositInvoice` only requires valid deposit note created by `createNote` command, so that the deposit note could be stored without exposed anywhere.
```bash
2024-04-24 20:26:02 +03:00
$ node cli.js depositInvoice < invoice >
2022-02-27 01:32:39 +03:00
```
2024-04-24 20:26:02 +03:00
Parameter `--rpc-url <rpc url>` is optional, if you don't provide it, default RPC (corresponding to note chain) will be used.
2023-05-16 15:43:37 +03:00
2022-02-27 01:32:39 +03:00
##### Example:
2022-02-27 01:32:37 +03:00
```bash
2024-04-24 20:26:02 +03:00
yarn depositInvoice tornadoInvoice-eth-0.1-1-0x24d26c7d0381dc34941b6fe9e0d622c7efadc0bfdc9d3f7e8dcb1e490e6ce9ea
2022-02-27 01:32:37 +03:00
```
2023-05-10 19:05:15 +03:00
### List of rpc & relayers for withdrawal
2021-12-19 12:28:56 +03:00
2024-04-24 20:26:02 +03:00
Refer https://chainlist.org for a full list of available public RPC URLs.
Note that most of the RPC would censor sanctionded pool contracts.
So either you can use the default RPC or find yourself a suitable one.
For the list of avaiable relayers, use the `yarn relayers 1` command.