[Proposal] Relayer Registry: Setting Parameters after Audit

[Proposal] Relayer Registry: Setting Parameters after Audit

Hello everyone, hope you are all doing great!

I know what you are thinking, what? another proposal … Well, Tornados don’t stop spinning that easily & neither do we :tornado:

The thing is … this is not just any proposal, this one might even make you smile: it’s the proposal that concludes numerous forum posts, multiple heated debates, -not one but- two Snapshots, many hours of coding from a community member, as well as months of audits, analysis & fixes. We don’t get to reach a finish line of such a long marathon that often! :checkered_flag:

Aaaand after the effort, the comfort!
The community is finally able, if the proposal is voted for, to safely implement a decentralized relayer network to the protocol, allowing at the same time our beloved governance token to gain another utility.

:ballot_box: For the protocol to make such a groundbreaking advancement, it will only take a YES vote on the forthcoming proposal. :ballot_box:
You can, of course, also specify your disapproval to this proposal by voting NO. It is always important to point out that every vote is sacred!

Quick Summary of Events

The implementation of a relayer registry has been brought up to the community’s attention last August in this forum post. Since, a proposal for this relayer registry has been coded by a community member, @CommunityDev13337, then audited after a conclusive Snapshot.

Few months later, the undergoing audit is finally over & reports are on. You can pour yourself a cup of tea/coffee/energy drink/glass of wine/pint of beer (no judgments here) & read all about it on this pdf.

For curious minds, the proposal source code repository can be found here: https://github.com/Rezan-vm/tornado-relayer-registry

Proposal Overview

  1. Anyone can become a relayer (and it will only take 300 TORN to be added on the preferred list) :handshake:

  2. Minimum stake is governed by the Governance :globe_with_meridians:

  3. Each Pool has its own fee % which is also set by the Governance :moneybag:

  4. On every withdrawal via relayer, the relayer has to pay the Tornado Pool fee in TORN. The fee is deducted from his staked balance :money_with_wings:

  5. All collected fees are stored into StakingReward contract :bank:

  6. Any TORN holder can lock their TORN into Governance contract like they were before, but earning fees proportionately to their stake :money_mouth_face:

Parameters (for you, geeks)

  1. minStakeAmount - minimum stake can be changed by the Governance using setMinStakeAmount function of RelayerRegistry contract (300 TORN for now).

  2. protocolFeePercentage - the fee the protocol takes from relayer, it should be multiplied by PROTOCOL_FEE_DIVIDER from FeeManager.sol (10000 for now, so 1% is inserted as 100). It can be changed by the Governance using setProtocolFee function of InstanceRegistry contract (0.3% for now).

  3. updateFeeTimeLimit - update fee time limit for instance fee updating, in secs. It can be changed by the Governance using setUpdateFeeTimeLimit function of FeeManager contract (2 days).

I would like to specifically thank our fellow @Rezan who agreed to push the proposal for a governance vote in few days.

However, in order to suggest this proposal, all parameters above need to be determined & agreed on, especially the protocol fee percentage that will have an important impact on the TORN utility. The community is needed to do so.

What do you advocate these parameters to be?


To conclude, many of us (myself included, guilty as charged :raising_hand_woman:t2: ) think that it would be beneficial for the protocol to move towards a more decentralized system with an automated relayers registry.

Relayers-in-the-making will have to stake a certain fixed amount of TORN in order to effectively becoming relayers & TORN holders will receive a share of fees for transactions made through these relayers.

This proposal would bring even more decentralization to the protocol (tbh, I will always lean torwards more decentralization - the “D” in DAO doesn’t stand for “decentralization” for nothing). Besides, it finally brings some utility to our carrefully kept TORNs.

Thank you in advance for your opinion & feedback and we are looking forward to hearing back from you -especially on the parameter levels. They are at the heart of this proposal. :green_heart::sparkles:

Take care!


The proposal has been deployed on mainnet:

It consist of several contracts, the tornadoRouter:

Proxy of feeManagerContract

and its implementation

Proxy of relayerRegistryContract

and its implementation

Proxy of stakingContract

and its implementation

Proxy of instanceRegistryContract

and its implementation

I will push the proposal on-chain by the end of the weekend.


TORN finally has a usage scenario, a very good proposal.

After the Relayer pay the Tornado Pool fee in TORN.Then the balance of the Relayer is less than 300 TORN, do Relayer need to make up the 300 TORN immediately? Otherwise the Relayer is unavailable?
And who pays the gas for the transaction?


The proposal is live, let’s vote!

View the proposal code on Etherscan:


Nice work TC team! Glad to see this is finally coming together!

I have a question for the parameter though. Currently protocolFeePercentage is set to 10000, which mean 100% fee will be taken from the relayer. In this case, does it mean people will actually lose money (i.e. they need to pay for the server and other services for running a relayer) for being a relayer?

1 Like

Looks like it’s a mistake in forum post. Currently deployed contracts have protocolFeePercentage set to 30, which is 0.3%


Very exciting stuff. @Rezan or anyone else, please correct me if I’m mistaken on any of these points, but just to make a few clarifications:

  1. In response to @gamefi - given that each relay tx will deplete a portion of the relayers’ staked principle, relayers would indeed need to top up their stakeAmount with >300 TORN in order to remain active. With the current (i) ETH & TORN prices, (ii) avg tx volume per relayer, and (iii) number of active relayers, this might cost the avg relayer an estimated 60-100 TORN per day. Which is definitely a pretty significant velocity to maintain for relayers, and will likely result in higher stakeAmounts - probably closer to 1,000 TORN, topping up more than a few times a month

  2. The cheapest relayer fees (paid by users) are currently 0.1%. So if relayers will be required to pay an additional overhead of 0.3% per tx as an initial protocolFeePercentage, then we might assume these “base cost” relayers will likely increase their fee 0.4% (paid by users). So this will increase the cost per relayer for end users (slightly)

  3. It also appears that TORN staked by relayers for the purposes of covering the minStakeAmount to pay the protocolFeePercentage will not be available to participate in governance. The two operations are mutually exclusive. The benefit is that relayers might generally be “whales” and preventing them from voting too heavily allows for more of the community to have their voice heard. The risk is that the overlap between relayers and active community members might be high and this might reduce the voice of some of the most active members

All in all I’m very pleased to see that a distribution of rewards will be made to available to active DAO participants. It’s a very tricky balance to strike in terms of creating a model that’s fair, and generally this structure seems pretty fair.

My only concern is the velocity of TORN (given the current minStakeAmount and protocolFeePercentage) might actually be a bit of a high barrier to entry for new relayers, which might inhibit decentralization. However, having the option to decentralize is better than the centralized, curated list of relayers we have now.

Full Disclosure (as always): I operate the torn.eth relayer. Additionally, I am currently withholding my TORN vote on this proposal for now (will edit if this changes)


Another perspective that is worth exploring further are the larger economic incentives which this proposal generates, specifically on the price of TORN:

  • As relayers experience continued and increased tx velocity, they will need to purchase greater volumes of TORN
  • The more TORN that is purchased by relayers, the more TORN is distributed to active TORN holders (who participate in governance)
  • The more TORN that is distributed, the higher participants’ APY
  • The higher the APY, the lower the risk to purchase more TORN (and again the greater the demand to purchase larger volumes of TORN)

I don’t post in memes often, but if my super serious technical analysis is correct here, then I think the resulting economic impact on the price of TORN is likely moon. If not mars.


Thanks for the reply.
I checked the smart contract code, the Relayer registration requires at least 300 TORN, once the registration is successful, it seems that it cannot be exited? 300 TORN permanently locked?

You are right. Once a relayer register and lock his 300 TORN, it cannot be withdrawn.

Is it working now, how to stake my torn, and has it been audited

Audited yes. Link given on this first post proposal written by @ayefda.

Yes it is working.
Read our last article & docs for more information on staking & relayer registry:




Hey @ethdev, you’re mentioning APY, but is there a reliable way to estimate what that is % wise? Is protocol taking 0.3% of relayer fees, which are then distributed proportionately between all locked TORN holders?

Correct. Protocol is taking 0.3% fees and distributing rewards to governance stakers. So APY would be calculated using total amount staked / volume of fees

There’s already a dashboard for it on Dune Analytics.

Awesome, thank you for an elaborate reply. Can’t believe I missed that Dune dashboard.

You are right. Once a relayer register and lock his 300 TORN, it cannot be withdrawn.

Are there plans to change this in the future? With 300 locked I’m getting very few withdrawals, so I’ve effectively lost access to these and have no way of getting them out for staking or anything else.

None of the documentation mentioned that this stake is non-reversible, by the way.

Anyone can make a governance proposal to update this amount.

It is mentioned on How to become a relayer? - tornado.cash :

“Your staked TORN amount is not claimable, and it is non-refundable.”

Thanks, though acquiring 1000 TORN to make a proposal to possibly get back 300 at some indeterminate point in the future doesn’t seem wise.

I realize I got myself into this situation but I would have expected to see the “non-refundable” notice while actually registering the relayer. At least consider adding it there so that someone else doesn’t end up in this situation - the minimum amount of 300 TORN isn’t enough to actually get relays today so it’s completely wasted.

It is already written there, please DYOR. Written on docs and on relayer registry.

I will ask the team to put it in BOLD police.