import {HardhatRuntimeEnvironment} from "hardhat/types"; import {DeployFunction} from "hardhat-deploy/types"; import {deplayOne, loadData} from "../scripts/utils"; import {ZeroAddress} from "ethers"; import { assert } from "chai"; const deployNFTClaim: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const config = require(`../config/config_${hre.network.name}`); const {cec, rewardPerSecond, vestingDuration} = config.staking; const datas = loadData({ network: hre.network.name }); const esCEC = datas.find((item: any) => item.name === "esCEC"); assert(esCEC, "esCEC not found"); const stakedCecTracker = await deplayOne({ hre, name: "stakedCecTracker", type: "logic", contractName: "RewardTracker", args: ["Staked CEC", "sCEC"], verify: true, }); const stakedCecDistributor = await deplayOne({ hre, name: "stakedCecDistributor", type: "logic", contractName: "RewardDistributor", args: [esCEC.address, stakedCecTracker.address], verify: true, }); const vester = await deplayOne({ hre, name: "vester", type: "logic", contractName: "Vester", args: ["Vested CEC", "veCEC", vestingDuration, esCEC.address, ZeroAddress, cec, stakedCecTracker.address, true], verify: true, }); const rewardRouter = await deplayOne({ hre, name: "stakedCecRouter", type: "logic", contractName: "RewardRouter", args: [cec, stakedCecTracker.address, vester.address], verify: true, }); 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); let tx = await stakedCecTrackerContract.initialize([cec, esCEC.address], stakedCecDistributor.address); await tx.wait(); console.log("==stakedCecTrackerContract initialized"); tx = await stakedCecTrackerContract.setInPrivateTransferMode(true); await tx.wait(); console.log("==stakedCecTrackerContract setInPrivateTransferMode"); tx = await stakedCecTrackerContract.setInPrivateStakingMode(true); await tx.wait(); console.log("==stakedCecTrackerContract setInPrivateStakingMode"); tx = await stakedCecDistributorContract.updateLastDistributionTime(); await tx.wait(); console.log("==stakedCecDistributorContract updateLastDistributionTime"); tx = await stakedCecDistributorContract.setTokensPerInterval(rewardPerSecond); await tx.wait(); console.log("==stakedCecDistributorContract setTokensPerInterval"); tx = await stakedCecTrackerContract.setHandler(rewardRouter.address, true); await tx.wait(); console.log("==stakedCecTrackerContract setHandler"); // 为了能调用burn方法 tx = await esCECContract.setMinter(vester.address, true); await tx.wait(); console.log("==esCECContract setMinter"); // 设定esCEC不能公开转账 tx = await esCECContract.setInPrivateTransferMode(true); await tx.wait(); console.log("==esCECContract setInPrivateTransferMode"); // 添加转账白名单 tx = await esCECContract.setHandler(stakedCecTracker.address, true); await tx.wait(); tx = await esCECContract.setHandler(stakedCecDistributor.address, true); await tx.wait(); tx = await esCECContract.setHandler(vester.address, true); await tx.wait(); console.log("==esCECContract setHandler"); }; deployNFTClaim.tags = ["StakingCEC"]; export default deployNFTClaim;