diff --git a/contracts/timelock/base/BaseToken.sol b/contracts/timelock/base/BaseToken.sol index c54ccc2..66ed562 100644 --- a/contracts/timelock/base/BaseToken.sol +++ b/contracts/timelock/base/BaseToken.sol @@ -1,15 +1,21 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.24; +pragma solidity 0.8.20; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; import "@openzeppelin/contracts/utils/math/SafeCast.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import "../../libs/TokenSaver.sol"; -abstract contract BaseToken is ERC20Votes, AccessControl, TokenSaver { +abstract contract BaseToken is + ERC20Permit, + ERC20Votes, + AccessControl, + TokenSaver +{ using SafeERC20 for IERC20; using SafeCast for uint256; using SafeCast for int256; @@ -31,15 +37,32 @@ abstract contract BaseToken is ERC20Votes, AccessControl, TokenSaver { } } - constructor( string memory _name, string memory _symbol, address _depositToken ) ERC20Permit(_name) ERC20(_name, _symbol) { - require(_depositToken != address(0), "BasePool.constructor: Deposit token must be set"); + require( + _depositToken != address(0), + "BasePool.constructor: Deposit token must be set" + ); depositToken = IERC20(_depositToken); - _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); + _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); } -} \ No newline at end of file + // The following functions are overrides required by Solidity. + + function _update( + address from, + address to, + uint256 value + ) internal override(ERC20, ERC20Votes) { + super._update(from, to, value); + } + + function nonces( + address owner + ) public view override(ERC20Permit, Nonces) returns (uint256) { + return super.nonces(owner); + } +} diff --git a/scripts/arguments/stakingArguments.js b/scripts/arguments/stakingArguments.js new file mode 100644 index 0000000..63d2249 --- /dev/null +++ b/scripts/arguments/stakingArguments.js @@ -0,0 +1,8 @@ +module.exports = [ + 'Staked VIRTUAL', + 'VAI', + process.env.BRIDGED_TOKEN, + 100000000000, // maxBonus + 1000, // maxLockDuration + [1, 1] // curve +]; \ No newline at end of file diff --git a/scripts/deployTimeLock.ts b/scripts/deployTimeLock.ts new file mode 100644 index 0000000..2b2d4bd --- /dev/null +++ b/scripts/deployTimeLock.ts @@ -0,0 +1,17 @@ +import { ethers } from "hardhat"; +const deployArguments = require("./arguments/stakingArguments"); + +(async () => { + try { + const contract = await ethers.deployContract( + "TimeLockStaking", + deployArguments + ); + + await contract.waitForDeployment(); + + console.log(`Staking Contract deployed to ${contract.target}`); + } catch (e) { + console.log(e); + } +})();