Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewards strat deploy #39

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 56 additions & 5 deletions deployment/katanaDeployment.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ require('@nomiclabs/hardhat-ethers');
const inquirer = require('inquirer');
const fs = require('fs');
const path = require('path');
const configPath = path.join(__dirname, './katana_input.json');
const configPath = path.join(__dirname, './katana_mainnet_input.json');
const configParams = JSON.parse(fs.readFileSync(configPath, 'utf8'));

let gasPrice;
Expand All @@ -19,11 +19,14 @@ async function fetchNextGasPrice(BN, message) {
gasPrice = new BN.from(gasPrice).mul(new BN.from(10).pow(new BN.from(9)));
}

async function verifyContract(hre, contractAddress, ctorArgs) {
await hre.run('verify:verify', {
async function verifyContract(hre, contractAddress, ctorArgs, contract) {
let args = {
address: contractAddress,
constructorArguments: ctorArgs,
});
constructorArguments: ctorArgs
};

if (contract != undefined) args.contract = contract;
await hre.run('verify:verify', args);
}

let kncAddress;
Expand All @@ -41,6 +44,7 @@ task('deployGovInfra', 'deploys staking, governance, voting power strategy and e
const BN = ethers.BigNumber;
const [deployer] = await ethers.getSigners();
deployerAddress = await deployer.getAddress();
console.log(`deployer: ${deployerAddress}`);

// contract deployment
await fetchNextGasPrice(BN, 'staking deployment');
Expand Down Expand Up @@ -98,15 +102,46 @@ task('deployGovInfra', 'deploys staking, governance, voting power strategy and e
await votingPowerStrategy.deployed();
console.log(`votingPowerStrategy address: ${votingPowerStrategy.address}`);

await fetchNextGasPrice(BN, 'treasury pool deployment');
const TreasuryPool = await ethers.getContractFactory('TreasuryPool');
const treasuryPool = await TreasuryPool.deploy(deployerAddress, [], {gasPrice: gasPrice});
await treasuryPool.deployed();
console.log(`treasury pool address: ${treasuryPool.address}`);

await fetchNextGasPrice(BN, 'reward distribution deployment');
const RewardDist = await ethers.getContractFactory('RewardsDistributor');
const rewardDist = await RewardDist.deploy(daoOperator, {gasPrice: gasPrice});
await rewardDist.deployed();
console.log(`reward distribution address: ${rewardDist.address}`);

await fetchNextGasPrice(BN, 'reward pool deployment');
const RewardPool = await ethers.getContractFactory('RewardPool');
const rewardPool = await RewardPool.deploy(longExecutor.address, [rewardDist.address], {gasPrice: gasPrice});
await rewardPool.deployed();
console.log(`reward pool address: ${rewardPool.address}`);

await fetchNextGasPrice(BN, 'liquidation strategy deployment');
const LiqStrat = await ethers.getContractFactory('NoSwappingLiquidationStrategy');
const liqStrat = await LiqStrat.deploy(longExecutor.address, treasuryPool.address, rewardPool.address, {gasPrice: gasPrice});
await liqStrat.deployed();
console.log(`liquidation strategy address: ${liqStrat.address}`);

// export addresses
exportAddresses({
staking: kyberStaking.address,
governance: kyberGovernance.address,
shortExecutor: shortExecutor.address,
longExecutor: longExecutor.address,
votingPowerStrategy: votingPowerStrategy.address,
treasury: treasuryPool.address,
rewardDistribution: rewardDist.address,
rewardPool: rewardPool.address,
noSwapLiqStrategy: liqStrat.address
});

await fetchNextGasPrice(BN, 'approve liq strat in treasury pool');
await treasuryPool.authorizeStrategies([liqStrat.address], {gasPrice: gasPrice});

// set executors and voting power strategy in governance
await fetchNextGasPrice(BN, 'authorizing executors in governance');
await kyberGovernance.authorizeExecutors([shortExecutor.address, longExecutor.address], {gasPrice: gasPrice});
Expand All @@ -122,6 +157,8 @@ task('deployGovInfra', 'deploys staking, governance, voting power strategy and e
await kyberStaking.transferAdminQuickly(longExecutor.address, {gasPrice: gasPrice});
await fetchNextGasPrice(BN, 'transferring governance admin to long executor');
await kyberGovernance.transferAdminQuickly(longExecutor.address, {gasPrice: gasPrice});
await fetchNextGasPrice(BN, 'transferring treasury admin to long executor');
await treasuryPool.transferAdminQuickly(longExecutor.address, {gasPrice: gasPrice});

console.log('verify contracts...');
// verify addresses
Expand Down Expand Up @@ -150,6 +187,20 @@ task('deployGovInfra', 'deploys staking, governance, voting power strategy and e
longExecutorConfig.minimumQuorum,
]);
await verifyContract(hre, votingPowerStrategy.address, [kyberGovernance.address, kyberStaking.address]);
await verifyContract(
hre,
treasuryPool.address,
[deployerAddress, []],
"contracts/treasury/TreasuryPool.sol:TreasuryPool"
);
await verifyContract(hre, rewardDist.address, [daoOperator]);
await verifyContract(
hre,
rewardPool.address,
[longExecutor.address, [rewardDist.address]],
"contracts/reward/RewardPool.sol:RewardPool"
);
await verifyContract(hre, liqStrat.address, [longExecutor.address, treasuryPool.address, rewardPool.address]);
console.log('setup completed');
process.exit(0);
}
Expand Down
27 changes: 27 additions & 0 deletions deployment/katana_mainnet_input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"knc": "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202",
"epochPeriod": 1209600,
"starttime": 1619507227,
"shortExecutor": {
"delay": 43200,
"gracePeriod": 345600,
"minimumDelay": 3600,
"maximumDelay": 86400,
"minVoteDuration": 345600,
"maxVotingOptions": 8,
"voteDifferential": 1,
"minimumQuorum": 400
},
"longExecutor": {
"delay": 604800,
"gracePeriod": 604800,
"minimumDelay": 86400,
"maximumDelay": 1209600,
"minVoteDuration": 604800,
"maxVotingOptions": 8,
"voteDifferential": 400,
"minimumQuorum": 1500
},
"daoOperator": "0xe6a7338cba0a1070adfb22c07115299605454713",
"outputFilename": "katana_mainnet_deployment.json"
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@
"minimumQuorum": 400
},
"daoOperator": "0xddf05698718ba8ed1c9aba198d38a825a64d69e2",
"outputFilename": "katana_ropsten_deployment.json"
}
"outputFilename": "katana_testnet_deployment.json"
}
8 changes: 4 additions & 4 deletions test/rewardDistributor.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ let maxIncrease = precisionUnits.div(new BN(5));
contract('RewardsDistributor', function (accounts) {
before('one time init', async () => {
admin = accounts[1];
tokenAmount = precisionUnits.mul(new BN(100000000));
tokenAmount = precisionUnits.mul(new BN(100000000000));
knc = await Token.new('Kyber Network Crystal', 'KNC', tokenAmount);
usdc = await Token.new('USD Coin', 'USDC', tokenAmount);
wbtc = await Token.new('Wrapped Bitcoin', 'WBTC', tokenAmount);
Expand All @@ -61,9 +61,9 @@ contract('RewardsDistributor', function (accounts) {
rewardsDistributor = await RewardsDistributor.new(admin);
await treasury.authorizeStrategies([rewardsDistributor.address], {from: admin});

// send 5M of each token and 1000 eth to treasury
tokenAmount = precisionUnits.mul(new BN(5000000));
ethAmount = precisionUnits.mul(new BN(1000));
// send 100M of each token and 2000 eth to treasury
tokenAmount = precisionUnits.mul(new BN(100000000));
ethAmount = precisionUnits.mul(new BN(2000));
await Promise.all(
tokens.map(async (token, index) => {
await token.transfer(treasury.address, tokenAmount);
Expand Down