优化staking相关合约发布流程

This commit is contained in:
CounterFire2023 2024-08-28 18:07:24 +08:00
parent a59dc4771b
commit 53fbcb9ead
10 changed files with 157 additions and 137 deletions

View File

@ -51,7 +51,9 @@ const mint = {
const staking = {
cec: '0xe34c5ea0c3083d11a735dc0609533b92130319f5',
// stake cec时, 每质押一个cec, 每年可获得的收益
rewardPerSecond: BigInt(1.5 * 10 ** 18) / BigInt(365 * 24 * 60 * 60)
rewardPerSecond: BigInt(1.5 * 10 ** 18) / BigInt(365 * 24 * 60 * 60),
// esCEC 转化为cec的时间
vestingDuration: BigInt(365 * 24 * 60 * 60)
}
var config = {

View File

@ -1,123 +1,101 @@
import {HardhatRuntimeEnvironment} from "hardhat/types";
import {DeployFunction} from "hardhat-deploy/types";
import {updateArray} from "../scripts/utils";
import {updateArray, deplayOne} 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 {cec, rewardPerSecond, vestingDuration} = 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({
const esCEC = await deplayOne({
hre,
name: "esCEC",
type: "erc20",
json: "assets/contracts/EsToken.json",
address: esCEC.address,
network: hre.network.name,
contractName: "EsToken",
args: [tokenName, tokenSymbol],
verify: true,
});
// 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({
const stakedCecTracker = await deplayOne({
hre,
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,
contractName: "RewardTracker",
args: ["Staked CEC", "sCEC"],
verify: true,
});
console.log("==RewardDistributor addr=", stakedCecDistributor.address);
updateArray({
const stakedCecDistributor = await deplayOne({
hre,
name: "stakedCecDistributor",
type: "logic",
json: "assets/contracts/RewardDistributor.json",
address: stakedCecDistributor.address,
network: hre.network.name,
contractName: "RewardDistributor",
args: [esCEC.address, stakedCecTracker.address],
verify: true,
});
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({
const vester = await deplayOne({
hre,
name: "vester",
type: "logic",
json: "assets/contracts/Vester.json",
address: vester.address,
network: hre.network.name,
contractName: "Vester",
args: ["Vested CEC", "veCEC", vestingDuration, esCEC.address, ZeroAddress, cec, stakedCecTracker.address, true],
verify: true,
});
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({
const rewardRouter = await deplayOne({
hre,
name: "rewardRouter",
type: "logic",
json: "assets/contracts/RewardRouter.json",
address: rewardRouter.address,
network: hre.network.name,
contractName: "RewardRouter",
args: [cec, esCEC.address, 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 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)
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方法
await esCECContract.setMinter(vester.address, true)
tx = await esCECContract.setMinter(vester.address, true);
await tx.wait();
console.log("==esCECContract setMinter");
// 设定esCEC不能公开转账
await esCECContract.setInPrivateTransferMode(true)
tx = await esCECContract.setInPrivateTransferMode(true);
await tx.wait();
console.log("==esCECContract setInPrivateTransferMode");
// 添加转账白名单
await esCECContract.setHandler(stakedCecTracker.address, true)
tx = await esCECContract.setHandler(stakedCecTracker.address, true);
await tx.wait();
console.log("==esCECContract setHandler");
};
deployNFTClaim.tags = ["Staking"];

View File

@ -1,5 +1,5 @@
{
"address": "0x68Db28B700B2AC2A5034A5c8bD70c1Ffc3E587DD",
"address": "0x2824Dc12495f86349430099939282b48aeDD6036",
"abi": [
{
"inputs": [
@ -450,18 +450,18 @@
"type": "function"
}
],
"transactionHash": "0x0fd4619d427ed6f49903687918d6ad7812f56da708a76793387bbfa19f8358d4",
"transactionHash": "0x794009fab84f1226c6050bc4f42883823309b0901aed47f16d4fc55fa2faafa6",
"receipt": {
"to": null,
"from": "0x50A8e60041A206AcaA5F844a1104896224be6F39",
"contractAddress": "0x68Db28B700B2AC2A5034A5c8bD70c1Ffc3E587DD",
"contractAddress": "0x2824Dc12495f86349430099939282b48aeDD6036",
"transactionIndex": 0,
"gasUsed": "993001",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x014958e22e0f6346035a83ae94f432df43c8d6ee7d018a3632ac2fb2bb5cea8d",
"transactionHash": "0x0fd4619d427ed6f49903687918d6ad7812f56da708a76793387bbfa19f8358d4",
"blockHash": "0xd8f84018634952a81dad4926dc625fccfc1fd45db1734d789c321633563fd87f",
"transactionHash": "0x794009fab84f1226c6050bc4f42883823309b0901aed47f16d4fc55fa2faafa6",
"logs": [],
"blockNumber": 43369439,
"blockNumber": 43372868,
"cumulativeGasUsed": "993001",
"status": 1,
"byzantium": true

View File

@ -1,5 +1,5 @@
{
"address": "0x96d38E8e6470871F756F1a2e9dF614BCebd57AE8",
"address": "0xb60c7312F56da4303CE3bf27124f1850dBe1D0E5",
"abi": [
{
"inputs": [
@ -228,25 +228,25 @@
"type": "function"
}
],
"transactionHash": "0xa82811369839dc96cebffba5d35701466fd1ef0b88fc0d2c6e77f80fbde2ff56",
"transactionHash": "0x596a9d19bedfedcfd6dda6a255bc4135f2cbe06cdab77e4f4938d807f3ef44f2",
"receipt": {
"to": null,
"from": "0x50A8e60041A206AcaA5F844a1104896224be6F39",
"contractAddress": "0x96d38E8e6470871F756F1a2e9dF614BCebd57AE8",
"transactionIndex": 1,
"gasUsed": "701310",
"contractAddress": "0xb60c7312F56da4303CE3bf27124f1850dBe1D0E5",
"transactionIndex": 0,
"gasUsed": "701322",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x10e660e6adb766ae3f77b4432d1785945edf2a52e3b3a4017d79bf71424f9f68",
"transactionHash": "0xa82811369839dc96cebffba5d35701466fd1ef0b88fc0d2c6e77f80fbde2ff56",
"blockHash": "0x5a2b3f6b05be2d0fdaa97847f0b0eea06edcee180f00c410115c8d4d4c804006",
"transactionHash": "0x596a9d19bedfedcfd6dda6a255bc4135f2cbe06cdab77e4f4938d807f3ef44f2",
"logs": [],
"blockNumber": 43369449,
"cumulativeGasUsed": "1019909",
"blockNumber": 43372886,
"cumulativeGasUsed": "701322",
"status": 1,
"byzantium": true
},
"args": [
"0x68Db28B700B2AC2A5034A5c8bD70c1Ffc3E587DD",
"0xC28165d2db25De1B258Db835d3557Dee044b1C3a"
"0x2824Dc12495f86349430099939282b48aeDD6036",
"0xEA374dC9f94E7A3A2eE8C0C910954cE15E2C469E"
],
"numDeployments": 1,
"solcInputHash": "35d1d20dc9b7194768908e34f12939fd",

View File

@ -1,5 +1,5 @@
{
"address": "0x932956063849FceE07d60D9daee94eC0651810bc",
"address": "0xa57131c08c7E13abAB9Dd95721d456E1C2895b64",
"abi": [
{
"inputs": [
@ -309,27 +309,27 @@
"type": "function"
}
],
"transactionHash": "0x7c7d7e75476ac867461da171c840455ff2344fc52bbe973330e8c7aeffa61fde",
"transactionHash": "0xbfd9d91bbb9fcab5fa4a74295add8b2f56efd4d7d5ffddc1b4d81424eddc7fd5",
"receipt": {
"to": null,
"from": "0x50A8e60041A206AcaA5F844a1104896224be6F39",
"contractAddress": "0x932956063849FceE07d60D9daee94eC0651810bc",
"transactionIndex": 0,
"gasUsed": "917182",
"contractAddress": "0xa57131c08c7E13abAB9Dd95721d456E1C2895b64",
"transactionIndex": 1,
"gasUsed": "917194",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x7207c45d25062cc41ff0db8166b0993e289d8bb9537518c0ab4b741f42a7378c",
"transactionHash": "0x7c7d7e75476ac867461da171c840455ff2344fc52bbe973330e8c7aeffa61fde",
"blockHash": "0x3afb034c849912ab31f616b05e81a1efaa4aae6bea09c9861ab06bb4f74765b4",
"transactionHash": "0xbfd9d91bbb9fcab5fa4a74295add8b2f56efd4d7d5ffddc1b4d81424eddc7fd5",
"logs": [],
"blockNumber": 43369456,
"cumulativeGasUsed": "917182",
"blockNumber": 43372903,
"cumulativeGasUsed": "938194",
"status": 1,
"byzantium": true
},
"args": [
"0xe34c5ea0c3083d11a735dc0609533b92130319f5",
"0x68Db28B700B2AC2A5034A5c8bD70c1Ffc3E587DD",
"0xC28165d2db25De1B258Db835d3557Dee044b1C3a",
"0x10F883D6e26fBb56Ab20466502BFD9017a1ea144"
"0x2824Dc12495f86349430099939282b48aeDD6036",
"0xEA374dC9f94E7A3A2eE8C0C910954cE15E2C469E",
"0xF7AaF4b166E11146F4D44c91B2a3818Ada13CdFB"
],
"numDeployments": 1,
"solcInputHash": "35d1d20dc9b7194768908e34f12939fd",

View File

@ -1,5 +1,5 @@
{
"address": "0xC28165d2db25De1B258Db835d3557Dee044b1C3a",
"address": "0xEA374dC9f94E7A3A2eE8C0C910954cE15E2C469E",
"abi": [
{
"inputs": [
@ -911,18 +911,18 @@
"type": "function"
}
],
"transactionHash": "0xd29e8e0c69a5b2155fe93564b0a7b1ea9b05c3afcb89fc8cf60a8ceaa817997e",
"transactionHash": "0x37734d5e7d8f812e142289230cc59cd0a21f2606c67438e5c68e0a6bb615487f",
"receipt": {
"to": null,
"from": "0x50A8e60041A206AcaA5F844a1104896224be6F39",
"contractAddress": "0xC28165d2db25De1B258Db835d3557Dee044b1C3a",
"contractAddress": "0xEA374dC9f94E7A3A2eE8C0C910954cE15E2C469E",
"transactionIndex": 0,
"gasUsed": "2088810",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0xa0fa1b307dc52cfa8cffbfbf30ce2bd37a840750bfb85b115ef2320beea7a690",
"transactionHash": "0xd29e8e0c69a5b2155fe93564b0a7b1ea9b05c3afcb89fc8cf60a8ceaa817997e",
"blockHash": "0x678035ac2dbb8af0e9b57d676056e4f566d67c9d847e2b4653c528ba4d98d543",
"transactionHash": "0x37734d5e7d8f812e142289230cc59cd0a21f2606c67438e5c68e0a6bb615487f",
"logs": [],
"blockNumber": 43369446,
"blockNumber": 43372875,
"cumulativeGasUsed": "2088810",
"status": 1,
"byzantium": true

View File

@ -1,5 +1,5 @@
{
"address": "0x10F883D6e26fBb56Ab20466502BFD9017a1ea144",
"address": "0xF7AaF4b166E11146F4D44c91B2a3818Ada13CdFB",
"abi": [
{
"inputs": [
@ -937,31 +937,31 @@
"type": "function"
}
],
"transactionHash": "0x3d72e4119c6285d8b9c370d40df23728a91b88fe8b1ba500e00bb24ea87637b2",
"transactionHash": "0x450133cf5830d1a0f3a051964f9f01615f9c602660f9c6beeeab108d5b4853f4",
"receipt": {
"to": null,
"from": "0x50A8e60041A206AcaA5F844a1104896224be6F39",
"contractAddress": "0x10F883D6e26fBb56Ab20466502BFD9017a1ea144",
"contractAddress": "0xF7AaF4b166E11146F4D44c91B2a3818Ada13CdFB",
"transactionIndex": 0,
"gasUsed": "1763188",
"gasUsed": "1803252",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x9aef7f491be0a18042505cf640ef6c216ddff3964d5eaf263c05eb4c14994f3f",
"transactionHash": "0x3d72e4119c6285d8b9c370d40df23728a91b88fe8b1ba500e00bb24ea87637b2",
"blockHash": "0xbcd61437d0b157cd8ccfb5aa1456c22a1e6aadebb4a7d7d81fc412307252b3a4",
"transactionHash": "0x450133cf5830d1a0f3a051964f9f01615f9c602660f9c6beeeab108d5b4853f4",
"logs": [],
"blockNumber": 43369453,
"cumulativeGasUsed": "1763188",
"blockNumber": 43372895,
"cumulativeGasUsed": "1803252",
"status": 1,
"byzantium": true
},
"args": [
"Vested CEC",
"veCEC",
31536000,
"0x68Db28B700B2AC2A5034A5c8bD70c1Ffc3E587DD",
"31536000",
"0x2824Dc12495f86349430099939282b48aeDD6036",
"0x0000000000000000000000000000000000000000",
"0xe34c5ea0c3083d11a735dc0609533b92130319f5",
"0x0000000000000000000000000000000000000000",
false
"0xEA374dC9f94E7A3A2eE8C0C910954cE15E2C469E",
true
],
"numDeployments": 1,
"solcInputHash": "35d1d20dc9b7194768908e34f12939fd",

View File

@ -59,6 +59,7 @@ const config: HardhatUserConfig = {
bsc_test: {
url: process.env.BSC_TEST_URL || "",
accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
gasPrice: 10000000000,
},
arb_sepolia: {
url: process.env.ARBITRUM_TEST_URL || "",

View File

@ -39,30 +39,30 @@
"name": "esCEC",
"type": "erc20",
"json": "assets/contracts/EsToken.json",
"address": "0x68Db28B700B2AC2A5034A5c8bD70c1Ffc3E587DD"
"address": "0x2824Dc12495f86349430099939282b48aeDD6036"
},
{
"name": "stakedCecTracker",
"type": "logic",
"json": "assets/contracts/RewardTracker.json",
"address": "0xC28165d2db25De1B258Db835d3557Dee044b1C3a"
"address": "0xEA374dC9f94E7A3A2eE8C0C910954cE15E2C469E"
},
{
"name": "stakedCecDistributor",
"type": "logic",
"json": "assets/contracts/RewardDistributor.json",
"address": "0x96d38E8e6470871F756F1a2e9dF614BCebd57AE8"
"address": "0xb60c7312F56da4303CE3bf27124f1850dBe1D0E5"
},
{
"name": "vester",
"type": "logic",
"json": "assets/contracts/Vester.json",
"address": "0x10F883D6e26fBb56Ab20466502BFD9017a1ea144"
"address": "0xF7AaF4b166E11146F4D44c91B2a3818Ada13CdFB"
},
{
"name": "rewardRouter",
"type": "logic",
"json": "assets/contracts/RewardRouter.json",
"address": "0x932956063849FceE07d60D9daee94eC0651810bc"
"address": "0xa57131c08c7E13abAB9Dd95721d456E1C2895b64"
}
]

View File

@ -27,3 +27,42 @@ export const loadData = function ({ network }: { network: string }) {
const filename = `./out/${network}_${env}.json`;
return read(filename, "json");
};
export const verifyContract = async function ({ hre, name, address, args }:
{ hre: any, name: string, address: string, args: any[] }) {
try {
await hre.run("verify:verify", {
address,
constructorArguments: args,
});
} catch (e) {
console.log(`==verify ${name} failed`, e);
}
}
export const deplayOne = async function ({ hre, name, type, contractName, args, verify }:
{ hre: any, name: string, type: string, contractName: string, args: any[], verify: boolean }) {
const provider = hre.ethers.provider;
const from = await (await provider.getSigner()).getAddress();
const contract = await hre.deployments.deploy(contractName, {
from,
args,
log: true,
});
console.log(`==${name} addr=`, contract.address);
updateArray({
name,
type,
json: `assets/contracts/${contractName}.json`,
address: contract.address,
network: hre.network.name,
});
if (!verify) {
return contract;
}
// Wait for 5 blocks
let currentBlock = await hre.ethers.provider.getBlockNumber();
while (currentBlock + 5 > (await hre.ethers.provider.getBlockNumber())) {}
await verifyContract({ hre, name, address: contract.address, args });
return contract;
}