重新发布测试合约

This commit is contained in:
CounterFire2023 2024-09-10 20:42:29 +08:00
parent accb37616e
commit 7eaafeb998
12 changed files with 101 additions and 196 deletions

View File

@ -49,7 +49,7 @@ const mint = {
}
const staking = {
cec: '0xe34c5ea0c3083d11a735dc0609533b92130319f5',
cec: '0xfa1223747bae6d519580c53Cbb9C11a45b13c6b7',
// stake cec时, 每质押一个cec, 每年可获得的收益
// rewardPerSecond: BigInt(1.5 * 10 ** 18) / BigInt(365 * 24 * 60 * 60),
rewardPerSecond: BigInt(1.5 * 10 ** 18) / BigInt(24 * 60 * 60),

View File

@ -13,17 +13,15 @@ contract RewardRouter is ReentrancyGuard, Governable {
using SafeERC20 for IERC20;
address public cec;
address public esCec;
address public stakedCecTracker;
address public cecVester;
event StakeCec(address account, address token, uint256 amount);
event UnstakeCec(address account, address token, uint256 amount);
event StakeCec(address indexed account, address indexed token, uint256 amount);
event UnstakeCec(address indexed account, address indexed token, uint256 amount);
constructor(address _cec, address _esCec, address _stakedCecTracker, address _cecVester) {
constructor(address _cec, address _stakedCecTracker, address _cecVester) {
cec = _cec;
esCec = _esCec;
stakedCecTracker = _stakedCecTracker;
cecVester = _cecVester;
}
@ -37,37 +35,24 @@ contract RewardRouter is ReentrancyGuard, Governable {
address[] memory _accounts,
uint256[] memory _amounts
) external nonReentrant onlyGov {
address _cec = cec;
for (uint256 i = 0; i < _accounts.length; i++) {
_stakeCec(msg.sender, _accounts[i], _cec, _amounts[i]);
_stakeCec(msg.sender, _accounts[i], cec, _amounts[i]);
}
}
function stakeCecForAccount(address _account, uint256 _amount) external nonReentrant onlyGov {
_stakeCec(msg.sender, _account, cec, _amount);
}
function stakeCec(uint256 _amount) external nonReentrant {
_stakeCec(msg.sender, msg.sender, cec, _amount);
}
function stakeEsCec(uint256 _amount) external nonReentrant {
_stakeCec(msg.sender, msg.sender, esCec, _amount);
}
function unstakeCec(uint256 _amount) external nonReentrant {
// check if the user has staked CEC in the vester
if (IVester(cecVester).needCheckStake()) {
if (cecVester != address(0) && IVester(cecVester).needCheckStake()) {
IVester(cecVester).updateVesting(msg.sender);
require(IERC20(cecVester).balanceOf(msg.sender) + _amount <= IRewardTracker(stakedCecTracker).depositBalances(msg.sender, cec), "RewardRouter: insufficient CEC balance");
}
_unstakeCec(msg.sender, cec, _amount);
}
function unstakeEsCec(uint256 _amount) external nonReentrant {
_unstakeCec(msg.sender, esCec, _amount);
}
function claim() external nonReentrant {
address account = msg.sender;
IRewardTracker(stakedCecTracker).claimForAccount(account, account);

View File

@ -37,9 +37,9 @@ contract Vester is IVester, IERC20, ReentrancyGuard, Governable {
mapping(address handler => bool status) public isHandler;
event Claim(address receiver, uint256 amount);
event Deposit(address account, uint256 amount);
event Withdraw(address account, uint256 claimedAmount, uint256 balance);
event Claim(address indexed receiver, uint256 amount);
event Deposit(address indexed account, uint256 amount);
event Withdraw(address indexed account, uint256 claimedAmount, uint256 balance);
event PairTransfer(address indexed from, address indexed to, uint256 value);
event DurationUpdated(uint256 duration);

View File

@ -44,7 +44,7 @@ const deployNFTClaim: DeployFunction = async function (hre: HardhatRuntimeEnviro
name: "stakedCecRouter",
type: "logic",
contractName: "RewardRouter",
args: [cec, esCEC.address, stakedCecTracker.address, vester.address],
args: [cec, stakedCecTracker.address, vester.address],
verify: true,
});
@ -84,6 +84,8 @@ const deployNFTClaim: DeployFunction = async function (hre: HardhatRuntimeEnviro
// 添加转账白名单
tx = await esCECContract.setHandler(stakedCecTracker.address, true);
await tx.wait();
tx = await esCECContract.setHandler(stakedCecDistributor.address, true);
await tx.wait();
console.log("==esCECContract setHandler");
};

View File

@ -38,7 +38,7 @@ const deployNFTClaim: DeployFunction = async function (hre: HardhatRuntimeEnviro
name: "stakedEsCecRouter",
type: "logic",
contractName: "RewardRouter",
args: [cec, esCEC.address, stakedCecTracker.address, vester.address],
args: [esCEC.address, stakedCecTracker.address, ZeroAddress],
verify: true,
});
@ -70,6 +70,8 @@ const deployNFTClaim: DeployFunction = async function (hre: HardhatRuntimeEnviro
// 添加转账白名单
tx = await esCECContract.setHandler(stakedCecTracker.address, true);
await tx.wait();
tx = await esCECContract.setHandler(stakedCecDistributor.address, true);
await tx.wait();
console.log("==esCECContract setHandler");
};

View File

@ -1,5 +1,5 @@
{
"address": "0x994dE61dD536B22F7e3BDB77aa3ef55AeC938bFD",
"address": "0x6Ee091c2c242470f4f6D3d55604e1a66c6FF4ff5",
"abi": [
{
"inputs": [
@ -228,25 +228,25 @@
"type": "function"
}
],
"transactionHash": "0x081dc0abf2e8590307b39e4ef8e2a8aed469466345b0d1d78d2917de9dbe2b9c",
"transactionHash": "0x1866ed319cc55027199bf9717360c72d46f00f40539e1acbf170e11ba5a73e66",
"receipt": {
"to": null,
"from": "0x50A8e60041A206AcaA5F844a1104896224be6F39",
"contractAddress": "0x994dE61dD536B22F7e3BDB77aa3ef55AeC938bFD",
"contractAddress": "0x6Ee091c2c242470f4f6D3d55604e1a66c6FF4ff5",
"transactionIndex": 0,
"gasUsed": "701322",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x7fdbc380e3e22876b42772e7f4c71e640869956134aafc53790bdb8ed1349bfb",
"transactionHash": "0x081dc0abf2e8590307b39e4ef8e2a8aed469466345b0d1d78d2917de9dbe2b9c",
"blockHash": "0x527c062b4f3437d116d4c119d1d417b8098322f322a22d7712b995eaae7b91ab",
"transactionHash": "0x1866ed319cc55027199bf9717360c72d46f00f40539e1acbf170e11ba5a73e66",
"logs": [],
"blockNumber": 43744733,
"blockNumber": 43749949,
"cumulativeGasUsed": "701322",
"status": 1,
"byzantium": true
},
"args": [
"0x1FbA3F84e62163069050f1156b73C008722136A3",
"0x880aC8D394141a700855a349D865FA54227d302e"
"0x30cd668d0f280C404aD504bFf5d7a3Bf535f2A92"
],
"numDeployments": 1,
"solcInputHash": "a5e022d74144abf232f7640cae906d26",

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{
"address": "0x880aC8D394141a700855a349D865FA54227d302e",
"address": "0x30cd668d0f280C404aD504bFf5d7a3Bf535f2A92",
"abi": [
{
"inputs": [
@ -887,19 +887,19 @@
"type": "function"
}
],
"transactionHash": "0x355deaa1ebf244eb7e570e6d74d7985a031136cd6f677ffad8f626ea048cdc85",
"transactionHash": "0xba731d4c49c985b23393bf18746aa5b67e85f44c60fe33ae887b29c00f45f57b",
"receipt": {
"to": null,
"from": "0x50A8e60041A206AcaA5F844a1104896224be6F39",
"contractAddress": "0x880aC8D394141a700855a349D865FA54227d302e",
"transactionIndex": 218,
"contractAddress": "0x30cd668d0f280C404aD504bFf5d7a3Bf535f2A92",
"transactionIndex": 0,
"gasUsed": "2079969",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0xbcd9e47aa2bfc72e35ec5202c4f519ed1428d4f5648e8c78cf15997119c03d09",
"transactionHash": "0x355deaa1ebf244eb7e570e6d74d7985a031136cd6f677ffad8f626ea048cdc85",
"blockHash": "0x1ef036875c2463f3b29d3a7b0794dd5340e13f7bcc78773179a6ab49917d8176",
"transactionHash": "0xba731d4c49c985b23393bf18746aa5b67e85f44c60fe33ae887b29c00f45f57b",
"logs": [],
"blockNumber": 43744727,
"cumulativeGasUsed": "8409697",
"blockNumber": 43749942,
"cumulativeGasUsed": "2079969",
"status": 1,
"byzantium": true
},

View File

@ -45,42 +45,42 @@
"name": "stakedCecTracker",
"type": "logic",
"json": "assets/contracts/RewardTracker.json",
"address": "0x18B41FbA9E096bc3E0A1F6aa92617B819Df6A602"
"address": "0x7554e677fF63212264db26dc743c67C277f219d2"
},
{
"name": "stakedCecDistributor",
"type": "logic",
"json": "assets/contracts/RewardDistributor.json",
"address": "0xA4f4452b4B91C27B84275ebcfBCca1c277FFA15b"
"address": "0x53153a177F4483b53b3f732Ff63eeB48c6FE89E5"
},
{
"name": "vester",
"type": "logic",
"json": "assets/contracts/Vester.json",
"address": "0x01DeA050C23e19eC6A547f3824A9407DB9027f78"
"address": "0xeD00165aBA9efaCcE9e07705e474e0EE1Bb35328"
},
{
"name": "stakedCecRouter",
"type": "logic",
"json": "assets/contracts/RewardRouter.json",
"address": "0xE9AFdA5939023a7B4104931030a32CFAC99f4af8"
"address": "0x576c3D53c6d4A19471E216c06945d41EC39f6014"
},
{
"name": "stakedEsCecTracker",
"type": "logic",
"json": "assets/contracts/RewardTracker.json",
"address": "0x9679DE719eCe856Fe40E1f68C5ed48b344181035"
"address": "0x30cd668d0f280C404aD504bFf5d7a3Bf535f2A92"
},
{
"name": "stakedEsCecDistributor",
"type": "logic",
"json": "assets/contracts/RewardDistributor.json",
"address": "0x11440cE5a7d6a1e6fa1e9fd790EBa93476F0DeA0"
"address": "0x6Ee091c2c242470f4f6D3d55604e1a66c6FF4ff5"
},
{
"name": "stakedEsCecRouter",
"type": "logic",
"json": "assets/contracts/RewardRouter.json",
"address": "0x2B656F1c485913577461e06bbf5adC999BC7743B"
"address": "0x19934736a578527cF725a33201445166Cbb62e52"
}
]

View File

@ -1 +1 @@
["constructor(address,address,address,address)","event StakeCec(address,address,uint256)","event UnstakeCec(address,address,uint256)","function batchStakeCecForAccount(address[],uint256[])","function cec() view returns (address)","function cecVester() view returns (address)","function claim()","function esCec() view returns (address)","function gov() view returns (address)","function handleRewards(bool,bool,bool,bool)","function setGov(address)","function stakeCec(uint256)","function stakeCecForAccount(address,uint256)","function stakeEsCec(uint256)","function stakedCecTracker() view returns (address)","function unstakeCec(uint256)","function unstakeEsCec(uint256)","function withdrawToken(address,address,uint256)"]
["constructor(address,address,address)","event StakeCec(address indexed,address indexed,uint256)","event UnstakeCec(address indexed,address indexed,uint256)","function batchStakeCecForAccount(address[],uint256[])","function cec() view returns (address)","function cecVester() view returns (address)","function claim()","function gov() view returns (address)","function setGov(address)","function stakeCec(uint256)","function stakedCecTracker() view returns (address)","function unstakeCec(uint256)","function withdrawToken(address,address,uint256)"]

View File

@ -70,7 +70,6 @@ describe('RewardRouter', function() {
const RewardRouter = await hre.ethers.getContractFactory("RewardRouter");
const rewardRouter = await RewardRouter.deploy(
cec.target,
esCec.target,
stakedCecTracker.target,
vester.target,
);
@ -103,12 +102,12 @@ describe('RewardRouter', function() {
// @ts-ignore
await cec.connect(user0).approve(stakedCecTracker.target, expandDecimals(1000, 18))
// @ts-ignore
await expect(rewardRouter.connect(user0).stakeCecForAccount(user1.address, expandDecimals(1000, 18)))
await expect(rewardRouter.connect(user0).batchStakeCecForAccount([user1.address], [expandDecimals(1000, 18)]))
.to.be.revertedWith("Governable: forbidden")
await rewardRouter.setGov(user0.address)
// @ts-ignore
await rewardRouter.connect(user0).stakeCecForAccount(user1.address, expandDecimals(800, 18))
await rewardRouter.connect(user0).batchStakeCecForAccount([user1.address], [expandDecimals(800, 18)])
expect(await cec.balanceOf(user0.address)).eq(expandDecimals(700, 18))
await cec.mint(user1.address, expandDecimals(200, 18))
@ -142,18 +141,18 @@ describe('RewardRouter', function() {
// await timelock.processMint(esCec.target, tokenManager.address, expandDecimals(500, 18))
// await esCec.connect(tokenManager).transferFrom(tokenManager.address, user2.address, expandDecimals(500, 18))
await esCec.mint(user2.address, expandDecimals(500, 18))
await cec.mint(user2.address, expandDecimals(500, 18))
// @ts-ignore
await esCec.connect(user2).approve(stakedCecTracker.target, expandDecimals(500, 18))
await cec.connect(user2).approve(stakedCecTracker.target, expandDecimals(500, 18))
// @ts-ignore
await rewardRouter.connect(user2).stakeEsCec(expandDecimals(500, 18))
await rewardRouter.connect(user2).stakeCec(expandDecimals(500, 18))
expect(await stakedCecTracker.stakedAmounts(user0.address)).eq(0)
expect(await stakedCecTracker.depositBalances(user0.address, cec.target)).eq(0)
expect(await stakedCecTracker.stakedAmounts(user1.address)).eq(expandDecimals(1000, 18))
expect(await stakedCecTracker.depositBalances(user1.address, cec.target)).eq(expandDecimals(1000, 18))
expect(await stakedCecTracker.stakedAmounts(user2.address)).eq(expandDecimals(500, 18))
expect(await stakedCecTracker.depositBalances(user2.address, esCec.target)).eq(expandDecimals(500, 18))
expect(await stakedCecTracker.depositBalances(user2.address, cec.target)).eq(expandDecimals(500, 18))
@ -170,7 +169,7 @@ describe('RewardRouter', function() {
expect(await esCec.balanceOf(user1.address)).eq(0)
// @ts-ignore
await rewardRouter.connect(user1).claimEsCec()
await rewardRouter.connect(user1).claim()
expect(await esCec.balanceOf(user1.address)).gt(expandDecimals(8, 18))
expect(await esCec.balanceOf(user1.address)).lt(expandDecimals(9, 18))
@ -178,7 +177,7 @@ describe('RewardRouter', function() {
expect(await esCec.balanceOf(user2.address)).eq(0)
// @ts-ignore
await rewardRouter.connect(user2).claimEsCec()
await rewardRouter.connect(user2).claim()
expect(await esCec.balanceOf(user2.address)).gt(expandDecimals(2, 18))
expect(await esCec.balanceOf(user2.address)).lt(expandDecimals(5, 18))
@ -192,44 +191,44 @@ describe('RewardRouter', function() {
await increaseTime(provider, Number(secondsOneDay))
await mineBlock(provider)
await showLog('claim cec 2day', stakedCecTracker, esCec, user1.address)
// @ts-ignore
await rewardRouter.connect(user1).stakeEsCec(await esCec.balanceOf(user1.address))
// // @ts-ignore
// await rewardRouter.connect(user1).stakeCec(await esCec.balanceOf(user1.address))
await showLog('compound', stakedCecTracker, esCec, user1.address)
expect(await stakedCecTracker.stakedAmounts(user1.address)).gt(expandDecimals(1008, 18))
expect(await stakedCecTracker.stakedAmounts(user1.address)).lt(expandDecimals(1009, 18))
expect(await stakedCecTracker.depositBalances(user1.address, cec.target)).eq(expandDecimals(1000, 18))
expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).gt(expandDecimals(8, 18))
expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).lt(expandDecimals(9, 18))
// await showLog('compound', stakedCecTracker, esCec, user1.address)
// expect(await stakedCecTracker.stakedAmounts(user1.address)).gt(expandDecimals(1008, 18))
// expect(await stakedCecTracker.stakedAmounts(user1.address)).lt(expandDecimals(1009, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, cec.target)).eq(expandDecimals(1000, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).gt(expandDecimals(8, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).lt(expandDecimals(9, 18))
expect(await cec.balanceOf(user1.address)).eq(0)
// @ts-ignore
await rewardRouter.connect(user1).unstakeCec(expandDecimals(300, 18))
expect(await cec.balanceOf(user1.address)).eq(expandDecimals(300, 18))
// expect(await cec.balanceOf(user1.address)).eq(0)
// // @ts-ignore
// await rewardRouter.connect(user1).unstakeCec(expandDecimals(300, 18))
// expect(await cec.balanceOf(user1.address)).eq(expandDecimals(300, 18))
expect(await stakedCecTracker.stakedAmounts(user1.address)).gt(expandDecimals(708, 18))
expect(await stakedCecTracker.stakedAmounts(user1.address)).lt(expandDecimals(709, 18))
expect(await stakedCecTracker.depositBalances(user1.address, cec.target)).eq(expandDecimals(700, 18))
expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).gt(expandDecimals(8, 18))
expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).lt(expandDecimals(9, 18))
// expect(await stakedCecTracker.stakedAmounts(user1.address)).gt(expandDecimals(708, 18))
// expect(await stakedCecTracker.stakedAmounts(user1.address)).lt(expandDecimals(709, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, cec.target)).eq(expandDecimals(700, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).gt(expandDecimals(8, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).lt(expandDecimals(9, 18))
const esCecBalance1 = await esCec.balanceOf(user1.address)
const esCecUnstakeBalance1 = await stakedCecTracker.depositBalances(user1.address, esCec.target)
// @ts-ignore
await rewardRouter.connect(user1).unstakeEsCec(esCecUnstakeBalance1)
expect(await esCec.balanceOf(user1.address)).eq(esCecBalance1 + esCecUnstakeBalance1)
// const esCecBalance1 = await esCec.balanceOf(user1.address)
// const esCecUnstakeBalance1 = await stakedCecTracker.depositBalances(user1.address, esCec.target)
// // @ts-ignore
// await rewardRouter.connect(user1).unstakeCec(esCecUnstakeBalance1)
// expect(await esCec.balanceOf(user1.address)).eq(esCecBalance1 + esCecUnstakeBalance1)
expect(await stakedCecTracker.stakedAmounts(user1.address)).eq(expandDecimals(700, 18))
expect(await stakedCecTracker.depositBalances(user1.address, cec.target)).eq(expandDecimals(700, 18))
expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).eq(0)
// expect(await stakedCecTracker.stakedAmounts(user1.address)).eq(expandDecimals(700, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, cec.target)).eq(expandDecimals(700, 18))
// expect(await stakedCecTracker.depositBalances(user1.address, esCec.target)).eq(0)
// @ts-ignore
await expect(rewardRouter.connect(user1).unstakeEsCec(expandDecimals(1, 18)))
.to.be.revertedWith("RewardTracker: _amount exceeds depositBalance")
// // @ts-ignore
// await expect(rewardRouter.connect(user1).unstakeCec(expandDecimals(1, 18)))
// .to.be.revertedWith("RewardTracker: _amount exceeds depositBalance")
})
})
})