contracts-imtbl/deploy/8_deploy_staking.ts
2024-08-28 15:44:11 +08:00

126 lines
3.9 KiB
TypeScript

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;