mirror of
https://github.com/tornadocash/tornado-governance
synced 2024-02-02 14:53:55 +01:00
add gov v3
This commit is contained in:
parent
1b50b703c2
commit
74b6021aa7
@ -1,5 +1,7 @@
|
|||||||
# Tornado Governance Changes
|
# Tornado Governance Changes
|
||||||
|
|
||||||
|
Governance proposal [repo]().
|
||||||
|
|
||||||
## Governance Vault Upgrade (GovernanceVaultUpgrade.sol)
|
## Governance Vault Upgrade (GovernanceVaultUpgrade.sol)
|
||||||
|
|
||||||
`GovernanceVaultUpgrade` is the first major upgrade to tornado governance. This upgrade introduces new logic which is used to communicate with `TornVault` from the governance contract. The motivation behind this upgrade:
|
`GovernanceVaultUpgrade` is the first major upgrade to tornado governance. This upgrade introduces new logic which is used to communicate with `TornVault` from the governance contract. The motivation behind this upgrade:
|
||||||
|
61
contracts/v3-relayer-registry/GovernanceStakingUpgrade.sol
Normal file
61
contracts/v3-relayer-registry/GovernanceStakingUpgrade.sol
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
pragma solidity ^0.6.12;
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
|
import { GovernanceGasUpgrade } from "../v2-vault-and-gas/GovernanceGasUpgrade.sol";
|
||||||
|
import { ITornadoStakingRewards } from "./interfaces/ITornadoStakingRewards.sol";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @notice The Governance staking upgrade. Adds modifier to any un/lock operation to update rewards
|
||||||
|
* @dev CONTRACT RISKS:
|
||||||
|
* - if updateRewards reverts (should not happen due to try/catch) locks/unlocks could be blocked
|
||||||
|
* - generally inherits risks from former governance upgrades
|
||||||
|
*/
|
||||||
|
contract GovernanceStakingUpgrade is GovernanceGasUpgrade {
|
||||||
|
ITornadoStakingRewards public immutable Staking;
|
||||||
|
|
||||||
|
event RewardUpdateSuccessful(address indexed account);
|
||||||
|
event RewardUpdateFailed(address indexed account, bytes indexed errorData);
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
address stakingRewardsAddress,
|
||||||
|
address gasCompLogic,
|
||||||
|
address userVaultAddress
|
||||||
|
) public GovernanceGasUpgrade(gasCompLogic, userVaultAddress) {
|
||||||
|
Staking = ITornadoStakingRewards(stakingRewardsAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @notice This modifier should make a call to Staking to update the rewards for account without impacting logic on revert
|
||||||
|
* @dev try / catch block to handle reverts
|
||||||
|
* @param account Account to update rewards for.
|
||||||
|
* */
|
||||||
|
modifier updateRewards(address account) {
|
||||||
|
try Staking.updateRewardsOnLockedBalanceChange(account, lockedBalance[account]) {
|
||||||
|
emit RewardUpdateSuccessful(account);
|
||||||
|
} catch (bytes memory errorData) {
|
||||||
|
emit RewardUpdateFailed(account, errorData);
|
||||||
|
}
|
||||||
|
_;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lock(
|
||||||
|
address owner,
|
||||||
|
uint256 amount,
|
||||||
|
uint256 deadline,
|
||||||
|
uint8 v,
|
||||||
|
bytes32 r,
|
||||||
|
bytes32 s
|
||||||
|
) public virtual override updateRewards(owner) {
|
||||||
|
super.lock(owner, amount, deadline, v, r, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function lockWithApproval(uint256 amount) public virtual override updateRewards(msg.sender) {
|
||||||
|
super.lockWithApproval(amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
function unlock(uint256 amount) public virtual override updateRewards(msg.sender) {
|
||||||
|
super.unlock(amount);
|
||||||
|
}
|
||||||
|
}
|
14
contracts/v3-relayer-registry/ProposalChanges.md
Normal file
14
contracts/v3-relayer-registry/ProposalChanges.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Tornado Relayer Registry
|
||||||
|
|
||||||
|
Governance proposal [repo](https://github.com/Rezan-vm/tornado-relayer-registry).
|
||||||
|
|
||||||
|
Governance upgrade which includes a registry for relayer registration and staking mechanisms for the TORN token.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
1. Anyone can become a relayer by staking TORN into Registry contract.
|
||||||
|
2. Minimum stake is governed by the Governance.
|
||||||
|
3. Each Pool has its own fee % which is also set by the Governance.
|
||||||
|
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.
|
||||||
|
5. All collected fees are stored into StakingReward contract.
|
||||||
|
6. Any TORN holder can stake their TORN into Governance contract like they were before, but earning fees proportionately to their stake.
|
@ -0,0 +1,7 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
pragma solidity ^0.6.12;
|
||||||
|
|
||||||
|
interface ITornadoStakingRewards {
|
||||||
|
function updateRewardsOnLockedBalanceChange(address account, uint256 amountLockedBeforehand) external;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user