126 lines
3.9 KiB
TypeScript
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;
|