62 lines
2.0 KiB
Solidity
62 lines
2.0 KiB
Solidity
// 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);
|
|
}
|
|
}
|