diff --git a/packages/zevm-app-contracts/scripts/add-reward.ts b/packages/zevm-app-contracts/scripts/add-reward.ts new file mode 100644 index 00000000..bde66ff2 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/add-reward.ts @@ -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); +}); diff --git a/packages/zevm-app-contracts/scripts/deploy.ts b/packages/zevm-app-contracts/scripts/deploy.ts index 06d1f2b4..19166f3b 100644 --- a/packages/zevm-app-contracts/scripts/deploy.ts +++ b/packages/zevm-app-contracts/scripts/deploy.ts @@ -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(); @@ -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 => { diff --git a/packages/zevm-app-contracts/scripts/readRewardsData.ts b/packages/zevm-app-contracts/scripts/read-rewards-data.ts similarity index 91% rename from packages/zevm-app-contracts/scripts/readRewardsData.ts rename to packages/zevm-app-contracts/scripts/read-rewards-data.ts index bfb04de0..b7fe2975 100644 --- a/packages/zevm-app-contracts/scripts/readRewardsData.ts +++ b/packages/zevm-app-contracts/scripts/read-rewards-data.ts @@ -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);