import {HardhatRuntimeEnvironment} from "hardhat/types"; import {DeployFunction} from "hardhat-deploy/types"; import {updateArray} from "../scripts/utils"; import {ZeroAddress} from "ethers"; const secondsPerYear = 365 * 24 * 60 * 60; const deployNFTClaim: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const provider = hre.ethers.provider; const from = await (await provider.getSigner()).getAddress(); const config = require(`../config/config_${hre.network.name}`); const {mallFeeAddress, paymentTokens, verifier} = config.market; const {cec, rewardPerSecond} = config.staking; const tokenName = "Escrowed CEC"; const tokenSymbol = "esCEC"; const esCEC = await hre.deployments.deploy("EsToken", { from, args: [tokenName, tokenSymbol], log: true, }); console.log("==EsToken addr=", esCEC.address); updateArray({ name: "esCEC", type: "erc20", json: "assets/contracts/EsToken.json", address: esCEC.address, network: hre.network.name, }); // verify the contract try { await hre.run("verify:verify", { address: esCEC.address, constructorArguments: [tokenName, tokenSymbol], }); } catch (e) { console.log("==verify failed", e); } const stakedCecTracker = await hre.deployments.deploy("RewardTracker", { from, args: ["Staked CEC", "sCEC"], log: true, }); console.log("==RewardTracker addr=", stakedCecTracker.address); updateArray({ name: "stakedCecTracker", type: "logic", json: "assets/contracts/RewardTracker.json", address: stakedCecTracker.address, network: hre.network.name, }); const stakedCecDistributor = await hre.deployments.deploy("RewardDistributor", { from, args: [esCEC.address, stakedCecTracker.address], log: true, }); console.log("==RewardDistributor addr=", stakedCecDistributor.address); updateArray({ name: "stakedCecDistributor", type: "logic", json: "assets/contracts/RewardDistributor.json", address: stakedCecDistributor.address, network: hre.network.name, }); const vester = await hre.deployments.deploy("Vester", { from, args: ["Vested CEC", "veCEC", secondsPerYear, esCEC.address, ZeroAddress, cec, ZeroAddress, false], log: true, }); console.log("==Vester addr=", vester.address); updateArray({ name: "vester", type: "logic", json: "assets/contracts/Vester.json", address: vester.address, network: hre.network.name, }); const rewardRouter = await hre.deployments.deploy("RewardRouter", { from, args: [cec, esCEC.address, stakedCecTracker.address, vester.address,], log: true, }); console.log("==RewardRouter addr=", rewardRouter.address); updateArray({ name: "rewardRouter", type: "logic", json: "assets/contracts/RewardRouter.json", address: rewardRouter.address, network: hre.network.name, }); const stakedCecTrackerContract = await hre.ethers.getContractAt("RewardTracker", stakedCecTracker.address); const stakedCecDistributorContract = await hre.ethers.getContractAt("RewardDistributor", stakedCecDistributor.address); const esCECContract = await hre.ethers.getContractAt("EsToken", esCEC.address); await stakedCecTrackerContract.initialize([cec, esCEC.address], stakedCecDistributor.address); await stakedCecTrackerContract.setInPrivateTransferMode(true) await stakedCecTrackerContract.setInPrivateStakingMode(true) await stakedCecDistributorContract.updateLastDistributionTime(); await stakedCecDistributorContract.setTokensPerInterval(rewardPerSecond); await stakedCecTrackerContract.setHandler(rewardRouter.address, true) // 为了能调用burn方法 await esCECContract.setMinter(vester.address, true) // 设定esCEC不能公开转账 await esCECContract.setInPrivateTransferMode(true) // 添加转账白名单 await esCECContract.setHandler(stakedCecTracker.address, true) }; deployNFTClaim.tags = ["Staking"]; export default deployNFTClaim;