mirror of
https://github.com/tornadocash/tornado-pool-factory
synced 2024-02-02 15:04:08 +01:00
use onlyGovernance instead of onlyOwner
This commit is contained in:
parent
189c33cba1
commit
da2f8cbc73
@ -48,7 +48,7 @@ Check config.js for actual values.
|
|||||||
|
|
||||||
With `salt` = `0x0000000000000000000000000000000000000000000000000000000047941987` address must be:
|
With `salt` = `0x0000000000000000000000000000000000000000000000000000000047941987` address must be:
|
||||||
|
|
||||||
1. `InstanceFactory` - `0x7a6e627DC6F66617b4A74Be097A8f56c622fa24c`
|
1. `InstanceFactory` - `0xBb3bd4849F88E709Ea6e5dC8F2C4cDc5293a12d5`
|
||||||
|
|
||||||
Check addresses with current config:
|
Check addresses with current config:
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@ import { Address } from "@openzeppelin/contracts/utils/Address.sol";
|
|||||||
import "@openzeppelin/contracts/proxy/Clones.sol";
|
import "@openzeppelin/contracts/proxy/Clones.sol";
|
||||||
import "./ERC20TornadoCloneable.sol";
|
import "./ERC20TornadoCloneable.sol";
|
||||||
import "./AddInstanceProposal.sol";
|
import "./AddInstanceProposal.sol";
|
||||||
import "./interfaces/IGovernance.sol";
|
|
||||||
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
||||||
import { IERC20Permit } from "@openzeppelin/contracts/drafts/IERC20Permit.sol";
|
import { IERC20Permit } from "@openzeppelin/contracts/drafts/IERC20Permit.sol";
|
||||||
|
|
||||||
@ -33,6 +32,14 @@ contract InstanceFactory is Ownable {
|
|||||||
event NewInstanceCloneCreated(address indexed clone);
|
event NewInstanceCloneCreated(address indexed clone);
|
||||||
event NewGovernanceProposalCreated(address indexed proposal);
|
event NewGovernanceProposalCreated(address indexed proposal);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Throws if called by any account other than the Governance.
|
||||||
|
*/
|
||||||
|
modifier onlyGovernance() {
|
||||||
|
require(owner() == _msgSender(), "Caller is not the Governance");
|
||||||
|
_;
|
||||||
|
}
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
address _verifier,
|
address _verifier,
|
||||||
address _hasher,
|
address _hasher,
|
||||||
@ -56,7 +63,12 @@ contract InstanceFactory is Ownable {
|
|||||||
transferOwnership(_governance);
|
transferOwnership(_governance);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createInstanceClone(uint256 _denomination, address _token) external onlyOwner returns (address) {
|
/**
|
||||||
|
* @dev Throws if called by any account other than the Governance.
|
||||||
|
* @param _denomination denomination of new Tornado instance
|
||||||
|
* @param _token address of ERC20 token for a new instance
|
||||||
|
*/
|
||||||
|
function createInstanceClone(uint256 _denomination, address _token) external onlyGovernance returns (address) {
|
||||||
bytes32 salt = keccak256(abi.encodePacked(_denomination, _token));
|
bytes32 salt = keccak256(abi.encodePacked(_denomination, _token));
|
||||||
|
|
||||||
require(!implementation.predictDeterministicAddress(salt).isContract(), "Instance already exists");
|
require(!implementation.predictDeterministicAddress(salt).isContract(), "Instance already exists");
|
||||||
@ -73,6 +85,15 @@ contract InstanceFactory is Ownable {
|
|||||||
return implementation.predictDeterministicAddress(salt);
|
return implementation.predictDeterministicAddress(salt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Creates AddInstanceProposal with approve.
|
||||||
|
* @param _token address of ERC20 token for a new instance
|
||||||
|
* @param _uniswapPoolSwappingFee fee value of Uniswap instance which will be used for `TORN/token` price determination.
|
||||||
|
* `3000` means 0.3% fee Uniswap pool.
|
||||||
|
* @param _denominations list of denominations for each new instance
|
||||||
|
* @param _protocolFees list of protocol fees for each new instance.
|
||||||
|
* `100` means that instance withdrawal fee is 1% of denomination.
|
||||||
|
*/
|
||||||
function createProposalApprove(
|
function createProposalApprove(
|
||||||
address _token,
|
address _token,
|
||||||
uint24 _uniswapPoolSwappingFee,
|
uint24 _uniswapPoolSwappingFee,
|
||||||
@ -83,6 +104,15 @@ contract InstanceFactory is Ownable {
|
|||||||
return _createProposal(_token, _uniswapPoolSwappingFee, _denominations, _protocolFees);
|
return _createProposal(_token, _uniswapPoolSwappingFee, _denominations, _protocolFees);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dev Creates AddInstanceProposal with approve.
|
||||||
|
* @param _token address of ERC20 token for a new instance
|
||||||
|
* @param _uniswapPoolSwappingFee fee value of Uniswap instance which will be used for `TORN/token` price determination.
|
||||||
|
* `3000` means 0.3% fee Uniswap pool.
|
||||||
|
* @param _denominations list of denominations for each new instance
|
||||||
|
* @param _protocolFees list of protocol fees for each new instance.
|
||||||
|
* `100` means that instance withdrawal fee is 1% of denomination.
|
||||||
|
*/
|
||||||
function createProposalPermit(
|
function createProposalPermit(
|
||||||
address _token,
|
address _token,
|
||||||
uint24 _uniswapPoolSwappingFee,
|
uint24 _uniswapPoolSwappingFee,
|
||||||
@ -118,32 +148,32 @@ contract InstanceFactory is Ownable {
|
|||||||
return proposal;
|
return proposal;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setVerifier(address _verifier) external onlyOwner {
|
function setVerifier(address _verifier) external onlyGovernance {
|
||||||
verifier = _verifier;
|
verifier = _verifier;
|
||||||
emit NewVerifierSet(verifier);
|
emit NewVerifierSet(verifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setHasher(address _hasher) external onlyOwner {
|
function setHasher(address _hasher) external onlyGovernance {
|
||||||
hasher = _hasher;
|
hasher = _hasher;
|
||||||
emit NewHasherSet(hasher);
|
emit NewHasherSet(hasher);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setMerkleTreeHeight(uint32 _merkleTreeHeight) external onlyOwner {
|
function setMerkleTreeHeight(uint32 _merkleTreeHeight) external onlyGovernance {
|
||||||
merkleTreeHeight = _merkleTreeHeight;
|
merkleTreeHeight = _merkleTreeHeight;
|
||||||
emit NewTreeHeightSet(merkleTreeHeight);
|
emit NewTreeHeightSet(merkleTreeHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setCreationFee(uint256 _creationFee) external onlyOwner {
|
function setCreationFee(uint256 _creationFee) external onlyGovernance {
|
||||||
creationFee = _creationFee;
|
creationFee = _creationFee;
|
||||||
emit NewCreationFeeSet(_creationFee);
|
emit NewCreationFeeSet(_creationFee);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setImplementation(address _newImplementation) external onlyOwner {
|
function setImplementation(address _newImplementation) external onlyGovernance {
|
||||||
implementation = _newImplementation;
|
implementation = _newImplementation;
|
||||||
emit NewImplementationSet(implementation);
|
emit NewImplementationSet(implementation);
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateNewImplementation() external onlyOwner {
|
function generateNewImplementation() external onlyGovernance {
|
||||||
implementation = address(new ERC20TornadoCloneable(verifier, hasher));
|
implementation = address(new ERC20TornadoCloneable(verifier, hasher));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
pragma solidity 0.7.6;
|
|
||||||
|
|
||||||
interface IGovernance {
|
|
||||||
function propose(address target, string memory description) external returns (uint256);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user