docs/book/general/guides/relayer.md

123 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# How to become a relayer?
Following the execution of [proposal #10](https://etherscan.io/address/0xEC2412368be52107Fa549c3fb78DE1e3e6bF18EB#code), anyone can become a relayer for Tornado Cash users.
{% hint style="success" %}
The first condition to be included on the Tornado Cash UI is to lock a min. of `2000 TORN`\*. To remain listed, it is needed to keep enough TORN locked to be able to pay back the transaction fee to the staking contract.
{% endhint %}
\*_This minimum stake can be changed by a governance vote at any time._
Relayers form an essential & necessary part of the Tornado Cash ecosystem. Their use guarantees privacy as they solve the “fee payment dilemma” : how to pay fees for token withdrawals from a pool while maintaining anonymity?
Therefore, relayers act as third parties and manage the entire withdrawal. They pay for transaction fees by deducting them directly from the transferred amount. They also charge an additional fee for their services.
Since the implementation of the [relayer registry proposal](https://etherscan.io/address/0xEC2412368be52107Fa549c3fb78DE1e3e6bF18EB#code), lockers in the Governance contract collect a fee directly from the relayers staked balance through the `TornadoStakingRewards` contract for each withdrawal. This fee percentage may vary from one pool to another and is also subject to change through on-chain governance.
Currently, it is fixed at `0.3%` . Some pools remain without fees, either because the instance is too small to assign a fee (0.1 ETH, 100 DAI/USDT, 1000 DAI/USDT), or because there is not enough liquidity on Uni v3 (all cDAI instances).
## How to become a relayer?
Anyone can become a relayer for the protocol in **6 simple steps** through the relayer registry user interface [relayers-network.tornadocash.eth](https://app.ens.domains/name/relayers-network.tornadocash.eth/details).
### 1. Disclaimer
Before you commit to sharing part of your journey with Tornado Cash users as a relayer, you need to understand & accept all potential risks of being a relayer for the protocol (see section 6).
#### 1. The `relayer-selection system` (how a relayer is chosen by frontends)
The formula for designating a relayer is as follows:
* The list of all registered relayers is retrieved from the Relayer Registry smart contract.
* For each relayer, calculate a score based on its staked TORN and its fee. The higher the stake, the higher the score is; the higher the fee, the lower the score is. For Ethereum mainnet, the formula used to calculate the score is `stake * [1 - 25*(fee-0.33)^2]`; for sidechains, the formula is `stake * [1 - 11.89*(fee-0.01)^2]`.
* Then randomly pick a relayer, weighted by its calculated score.
### 2. Set up relayer
The first concrete step is to run the Tornado Cash Relayer software for Ethereum Mainnet on your computer. All steps are outlined in the protocol's github. To complete this task successfully, you will have to carefully follow [these instructions](https://git.tornado.ws/tornadocash/classic-relayer).
Once completed, you will need to insert your url in the input box.
![](<../../.gitbook/assets/set-relayer-link.png>)
{% hint style="warning" %}
It is strongly recommended that you use your own RPC nodes. Instructions on how to run full nodes can be found [here](https://github.com/feshchenkod/rpc-nodes).
{% endhint %}
### 3. Set Up ENS Subdomain
The next steps entail:
* Creating an [ENS domain](https://ens.domains/) for your relayer.
* Unwrap domain in settings on app.ens.domains or by calling [this function](https://etherscan.io/address/0xD4416b13d2b3a9aBae7AcD5D6C2BbDBE25686401#writeContract#F23).
* Setting up its mainnet subdomain.
* Adding a TXT record with the Relayer URL to the mainnet subdomain according to this specific format:
#### **Ethereum relayers (Mandatory)**
| TXT record |
| ----------------------- |
| mainnet-tornado.xxx.eth |
| goerli-tornado.xxx.eth |
#### **Sidechains relayers (Optional)**
You also have the option to add subdomains with their corresponding TXT records to support chains other than Ethereum. Sidechains relayers use a different version of the Relayer software. The complete requirements with instructions are found [here](https://github.com/tornadocash/tornado-relayer/blob/light/README.md).
| TXT record |
| ------------------------- |
| bsc-tornado.xxx.eth |
| gnosis-tornado.xxx.eth |
| polygon-tornado.xxx.eth |
| optimism-tornado.xxx.eth |
| arbitrum-tornado.xxx.eth |
| avalanche-tornado.xxx.eth |
#### **Nova relayer (Optional)**
Tornado Cash Nova uses its own version of the software. If you wish to become a relayer for Tornado Cash Nova, you will find instructions to follow [here](https://github.com/tornadocash/tornado-pool-relayer#deploy-with-docker-compose).
| TXT record |
| ------------------- |
| gnosis-nova.xxx.eth |
![](../../.gitbook/assets/check-relayer-ens-subdomains.png)
### **4. Set up workers**
Workers are the addresses that will allow your relayer to send ZK-proofs to users. By default, the first worker is the ENS domain owner's address.
To ensure an extra level of security, we advise you to set up more than one worker.
Only the mainnet requires you to register workers. All other networks do not require the use of registered workers.
![](../../.gitbook/assets/set-up-relayer-workers.png)
### 5. Stake
With the implementation of a decentralized relayer registry, a staking condition has been introduced as a requirement to become listed on Tornado Cash UI. Keep in mind **staking TORN is now necessary to be added to the recommended list of relayers.**
The minimum staked amount is currently set by Tornado Cash governance at **`2000 TORN`**. This threshold can be changed by Tornado Cash governance at any time.
When a relayer is used in the Tornado Cash pool, a small amount of TORN is automatically collected from this staked balance by the `StakingReward` contract. This element is essential to keep in mind as relayers will need to keep enough TORN locked (\~`500 TORN` at the moment in June 2023) to be able to pay back the transaction fee to the staking contract.
The collected fees are subsequently distributed among DAO members with locked TORN tokens. TORN are usually locked to participate in on-chain governance (submitting & voting on proposals). You can find more information both on the _[Staking documentation page](../general/token/staking.md)_.
{% hint style="warning" %}
Your staked TORN amount is not claimable, and it is non-refundable
{% endhint %}
![](../../.gitbook/assets/relayer-stake-permit.png)
### 6. Slashing (nullification risk)
Similarly to how Ethereum validators are slashed if they behave in a way which Ethereum defines as malicious behaviour, so too are relayers slashed (nullified) if they attempt to game the `relayer-selection system`.
In future, the selection mechanism will be redesigned to remove the need for nullifications.
### 7. Final verification and registration
Last but not least, we advise you to **double-check all information** displayed in the summary before registering.
![](../../.gitbook/assets/register-relayer-summary.png)