Tornado Cash relayer software
Go to file
2023-08-21 10:17:00 -07:00
.github/workflows added discord notification (#86) 2022-02-16 10:37:24 +01:00
abis fix: prices oracle 2021-06-19 23:05:38 +03:00
cache fix: initializing mining tree 2021-10-09 03:15:56 +10:00
keys update key 2020-12-18 03:32:38 +03:00
monitoring fix: lint 2022-01-19 22:11:00 +10:00
src decrease minimumBalance & disable treeWatcher by default 2023-03-26 11:21:24 +00:00
test add test for isKnownContract validation 2022-05-25 19:21:03 +10:00
.dockerignore fix timeouts under high load in nginx and express, fix redis persistence 2019-12-13 19:32:09 +07:00
.editorconfig watcher 2020-05-08 20:29:31 +03:00
.env.example Change default withdraw fee to 0.4% on mainnet 2023-07-12 10:14:05 -07:00
.eslintrc.json prettier + tidy 2020-10-02 13:26:05 +03:00
.gitignore fix: gas limit for cDAI 2021-05-31 19:22:22 +03:00
.prettierignore prettier + tidy 2020-10-02 13:26:05 +03:00
.prettierrc prettier + tidy 2020-10-02 13:26:05 +03:00
app.js write errors with positive score 2022-05-25 19:21:03 +10:00
docker-compose.yml Add volumes and redis ports to run local relayer correctly 2023-08-21 10:17:00 -07:00
Dockerfile Bump node to 14 2023-07-12 10:36:31 -07:00
package.json Add build command to create docker image for mainnet relayer locally from source 2023-07-12 12:56:11 -07:00
README.md Add build command to create docker image for mainnet relayer locally from source 2023-07-12 12:56:11 -07:00
tornado-stream.conf nginx template ddos mitigation 2023-03-26 21:50:17 +00:00
tornado.conf nginx template ddos mitigation 2023-03-26 21:50:17 +00:00
yarn.lock Add concurrently to allow run local relayer on Windows & start redis in docker before running relayer software 2023-07-12 10:36:16 -07:00

Relayer for Tornado Cash Build Status Docker Image Version (latest semver)

*Tornado Cash was sanctioned by the US Treasury on 08/08/2022, this makes it illegal for US citizens to interact with Tornado Cash and all of it's associated deployed smart contracts. Please understand the laws where you live and take all necessary steps to protect and anonymize yourself.

*It is recommended to run your Relayer on a VPS instance (Virtual Private Server). Ensure SSH configuration is enabled for security, you can find information about SSH keygen and management here.

The following instructions are for Ubuntu 22.10, other operating systems may vary. These instructions include automated SSL configuration with LetsEncrypt.

PREREQUISITES

  1. Update core dependencies
  • sudo apt-get update
  1. Install docker-compose
  • curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose
  1. Install Docker
  • curl -fsSL https://get.docker.com -o get-docker.sh && chmod +x get-docker.sh && ./get-docker.sh
  1. Install git
  • sudo apt-get install git-all
  1. Install nginx
  • sudo apt install nginx
  1. Stop apache2 instance (enabled by default)
  • sudo systemctl stop apache2

FIREWALL CONFIGURATION

* Warning: Failure to configure SSH as the first UFW rule, will lock you out of the instance

  1. Make sure UFW is installed by running apt update and apt install ufw
  2. Allow SSH in the first position in UFW by running ufw insert 1 allow ssh*
  3. Allow HTTP, and HTTPS by running ufw allow https/tcp/http
  4. Finalize changes and enable firewall ufw enable

DEPLOYMENT

  1. Clone the repository and enter the directory
  • git clone https://git.tornado.ws/tornadocash/classic-relayer -b mainnet-v4 && cd classic-relayer
  1. Clone the example environment file .env.example to configure for the preferred network - cp .env.example .env , then fill .env file.
  • Set PRIVATE_KEY for your relayer address (remove the 0x from your private key)
  • Set VIRTUAL_HOST and LETSENCRYPT_HOST to your domain address
    • add a A record DNS record with the value assigned to your instance IP address to configure the domain
  • Set RELAYER_FEE to what you would like to charge as your fee (remember 0.3% is deducted from your staked relayer balance)
  • Set RPC_URL to a non-censoring RPC endpoint (You can run your own, or use a free option)
  • Set ORACLE_RPC_URL to an Ethereum native RPC endpoint
  1. Uncomment the env_file lines (remove # ) for the associated network services in docker-compose.yml
  2. Build and deploy the docker source by specifying the network through:
  • npm run build
  • docker-compose up -d
  1. Visit your domain address and check the /status endpoint and ensure there is no errors in the status field

NGINX REVERSE PROXY

  1. Copy the pre-modified nginx policy as your default policy
  • cp tornado.conf /etc/nginx/sites-available/default
  1. Append the default nginx configuration to include streams
  • echo "stream { map_hash_bucket_size 128; map_hash_max_size 128; include /etc/nginx/conf.d/streams/*.conf; }" >> /etc/nginx/nginx.conf
  1. Create the stream configuration
  • mkdir /etc/nginx/conf.d/streams && cp tornado-stream.conf /etc/nginx/conf.d/streams/tornado-stream.conf
  1. Start nginx to make sure the configuration is correct
  • sudo systemctl restart nginx
  1. Stop nginx
  • sudo systemctl stop nginx

Run locally

  1. npm i
  2. cp .env.example .env
  3. Modify .env as needed
  4. npm run start
  5. Go to http://127.0.0.1:8000
  6. In order to execute withdraw request, you can run following command
curl -X POST -H 'content-type:application/json' --data '<input data>' http://127.0.0.1:8000/relay

Relayer should return a transaction hash.

Note. If you want to change contracts' addresses go to config.js file.

Input data example

{
  "proof": "0x0f8cb4c2ca9cbb23a5f21475773e19e39d3470436d7296f25c8730d19d88fcef2986ec694ad094f4c5fff79a4e5043bd553df20b23108bc023ec3670718143c20cc49c6d9798e1ae831fd32a878b96ff8897728f9b7963f0d5a4b5574426ac6203b2456d360b8e825d8f5731970bf1fc1b95b9713e3b24203667ecdd5939c2e40dec48f9e51d9cc8dc2f7f3916f0e9e31519c7df2bea8c51a195eb0f57beea4924cb846deaa78cdcbe361a6c310638af6f6157317bc27d74746bfaa2e1f8d2e9088fd10fa62100740874cdffdd6feb15c95c5a303f6bc226d5e51619c5b825471a17ddfeb05b250c0802261f7d05cf29a39a72c13e200e5bc721b0e4c50d55e6",
  "args": [
    "0x1579d41e5290ab5bcec9a7df16705e49b5c0b869095299196c19c5e14462c9e3",
    "0x0cf7f49c5b35c48b9e1d43713e0b46a75977e3d10521e9ac1e4c3cd5e3da1c5d",
    "0x03ebd0748aa4d1457cf479cce56309641e0a98f5",
    "0xbd4369dc854c5d5b79fe25492e3a3cfcb5d02da5",
    "0x000000000000000000000000000000000000000000000000058d15e176280000",
    "0x0000000000000000000000000000000000000000000000000000000000000000"
  ],
  "contract": "0xA27E34Ad97F171846bAf21399c370c9CE6129e0D"
}

Disclaimer:

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.