contracts-imtbl/deploy/8_2_deploy_staking_cec.ts
2024-09-11 16:38:38 +08:00

97 lines
3.5 KiB
TypeScript

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;