Skip to content

Commit

Permalink
Deploy rewards to Athens2
Browse files Browse the repository at this point in the history
  • Loading branch information
andresaiello committed Jun 30, 2023
1 parent 47d5bcf commit cde6d2e
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 77 deletions.
114 changes: 114 additions & 0 deletions packages/zevm-app-contracts/scripts/add-reward.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { BigNumber } from "@ethersproject/bignumber";
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { getChainId, isNetworkName, NetworkName } from "@zetachain/addresses";
import { parseEther } from "ethers/lib/utils";
import { ethers, network } from "hardhat";

import { SYSTEM_CONTRACT } from "../../zevm-example-contracts/scripts/systemConstants";
import {
ERC20__factory,
RewardDistributor__factory,
RewardDistributorFactory,
RewardDistributorFactory__factory,
SystemContract,
SystemContract__factory
} from "../typechain-types";
import { FACTORY_CONTRACT } from "./deploy";

const networkName = network.name;
const REWARD_DURATION = BigNumber.from("604800").mul(8); // 1 week * 8
const REWARDS_AMOUNT = parseEther("500");

const getZRC20Address = async (systemContract: SystemContract, network: NetworkName) => {
const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network));
return tokenAddress;
};

const deployRewardByNetwork = async (
deployer: SignerWithAddress,
systemContract: SystemContract,
networkName: NetworkName,
rewardDistributorFactory: RewardDistributorFactory
) => {
const tokenAddress = await getZRC20Address(systemContract, networkName);
const zetaTokenAddress = await systemContract.wZetaContractAddress();

const tx = await rewardDistributorFactory.createTokenIncentive(
deployer.address,
deployer.address,
zetaTokenAddress,
// @dev: now we send both tokens so contract calculate internaly LP address
zetaTokenAddress,
tokenAddress
);

const receipt = await tx.wait();

const event = receipt.events?.find(e => e.event === "RewardDistributorCreated");

const { rewardDistributorContract: rewardDistributorContractAddress } = event?.args as any;

console.log("RewardDistributor deployed to:", rewardDistributorContractAddress);

return rewardDistributorContractAddress;
};

const addReward = async (
deployer: SignerWithAddress,
systemContract: SystemContract,
rewardDistributorContractAddress: string
) => {
const zetaTokenAddress = await systemContract.wZetaContractAddress();

const rewardDistributorContract = await RewardDistributor__factory.connect(
rewardDistributorContractAddress,
deployer
);

const ZETA = ERC20__factory.connect(zetaTokenAddress, deployer);
await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT.mul(2));
await rewardDistributorContract.setRewardsDuration(REWARD_DURATION);
await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT);

console.log("Reward added to:", rewardDistributorContract.address);
};

async function main() {
const [deployer] = await ethers.getSigners();
if (!isNetworkName(networkName)) throw new Error("Invalid network name");
const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer);

const rewardDistributorFactory = RewardDistributorFactory__factory.connect(FACTORY_CONTRACT, deployer);
let rewardContractAddress = "";
// @dev: you can write your own address here to add reward to an existing contract
// rewardContractAddress = "0x0dee8b6e2d2035a798b67c68d47f941718a62263";
rewardContractAddress = await deployRewardByNetwork(deployer, systemContract, "goerli", rewardDistributorFactory);
await addReward(deployer, systemContract, rewardContractAddress);

rewardContractAddress = await deployRewardByNetwork(
deployer,
systemContract,
"bsc-testnet",
rewardDistributorFactory
);
await addReward(deployer, systemContract, rewardContractAddress);
rewardContractAddress = await deployRewardByNetwork(
deployer,
systemContract,
"bitcoin-test",
rewardDistributorFactory
);
await addReward(deployer, systemContract, rewardContractAddress);
rewardContractAddress = await deployRewardByNetwork(
deployer,
systemContract,
"polygon-mumbai",
rewardDistributorFactory
);
await addReward(deployer, systemContract, rewardContractAddress);
}

main().catch(error => {
console.error(error);
process.exit(1);
});
76 changes: 4 additions & 72 deletions packages/zevm-app-contracts/scripts/deploy.ts
Original file line number Diff line number Diff line change
@@ -1,80 +1,14 @@
import { BigNumber } from "@ethersproject/bignumber";
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { getChainId, isNetworkName, NetworkName } from "@zetachain/addresses";
import { parseEther } from "ethers/lib/utils";
import { isNetworkName } from "@zetachain/addresses";
import { ethers, network } from "hardhat";

import {
ERC20__factory,
RewardDistributor__factory,
RewardDistributorFactory,
RewardDistributorFactory__factory,
SystemContract,
SystemContract__factory
} from "../typechain-types";
import { SYSTEM_CONTRACT } from "../../zevm-example-contracts/scripts/systemConstants";
import { RewardDistributorFactory__factory, SystemContract__factory } from "../typechain-types";

const networkName = network.name;
const REWARD_DURATION = BigNumber.from("604800"); // 1 week
const REWARDS_AMOUNT = parseEther("10");

//@todo: this is here because need to import address pkg but this pkg will be move to new repo,
// so will refactor when it will be done

export const SYSTEM_CONTRACT = "0x239e96c8f17C85c30100AC26F635Ea15f23E9c67";

interface Pair {
TokenA: string;
TokenB: string;
}

export const sortPair = (token1: string, token2: string): Pair => {
if (token1 < token2) {
return { TokenA: token1, TokenB: token2 };
}
return { TokenA: token2, TokenB: token1 };
};

const getZRC20Address = async (systemContract: SystemContract, network: NetworkName) => {
const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network));
return tokenAddress;
};

const deployRewardByNetwork = async (
deployer: SignerWithAddress,
systemContract: SystemContract,
networkName: NetworkName,
rewardDistributorFactory: RewardDistributorFactory
) => {
const tokenAddress = await getZRC20Address(systemContract, networkName);
const zetaTokenAddress = await systemContract.wZetaContractAddress();

const tx = await rewardDistributorFactory.createTokenIncentive(
deployer.address,
deployer.address,
zetaTokenAddress,
// @dev: now we send both tokens so contract calculate internaly LP address
zetaTokenAddress,
tokenAddress
);

const receipt = await tx.wait();

const event = receipt.events?.find(e => e.event === "RewardDistributorCreated");

const { rewardDistributorContract: rewardDistributorContractAddress } = event?.args as any;

const rewardDistributorContract = await RewardDistributor__factory.connect(
rewardDistributorContractAddress,
deployer
);

const ZETA = ERC20__factory.connect(zetaTokenAddress, deployer);
await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT);
await rewardDistributorContract.setRewardsDuration(REWARD_DURATION);
await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT);

console.log("RewardDistributor deployed to:", rewardDistributorContract.address);
};
export const FACTORY_CONTRACT = "0xf05Bc79b88026fbC32221926308405C2Bf919f2E";

async function main() {
const [deployer] = await ethers.getSigners();
Expand All @@ -89,8 +23,6 @@ async function main() {
const rewardDistributorFactory = await RewardDistributorFactoryFactory.deploy(zetaTokenAddress, SYSTEM_CONTRACT);
await rewardDistributorFactory.deployed();
console.log("RewardDistributorFactory deployed to:", rewardDistributorFactory.address);

await deployRewardByNetwork(deployer, systemContract, "goerli", rewardDistributorFactory);
}

main().catch(error => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@ import { isNetworkName } from "@zetachain/addresses";
import { ethers, network } from "hardhat";

import { RewardDistributor__factory, RewardDistributorFactory__factory } from "../typechain-types";
import { FACTORY_CONTRACT } from "./deploy";

const networkName = network.name;

//@todo: this is here because need to import address pkg but this pkg will be move to new repo,
// so will refactor when it will be done

export const FACTORY_CONTRACT = "0xf05Bc79b88026fbC32221926308405C2Bf919f2E";

const readRewardData = async (rewardContractAddress: string) => {
const [deployer] = await ethers.getSigners();
const rewardDistributorContract = await RewardDistributor__factory.connect(rewardContractAddress, deployer);
Expand Down

0 comments on commit cde6d2e

Please sign in to comment.