|
1 | 1 | import { BigNumber } from "@ethersproject/bignumber"; |
2 | | -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; |
3 | | -import { isProtocolNetworkName, ZetaProtocolNetwork } from "@zetachain/protocol-contracts"; |
| 2 | +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; |
4 | 3 | import { parseEther } from "ethers/lib/utils"; |
5 | 4 | import { ethers, network } from "hardhat"; |
6 | 5 |
|
7 | | -import { |
8 | | - ERC20__factory, |
9 | | - RewardDistributor__factory, |
10 | | - RewardDistributorFactory, |
11 | | - RewardDistributorFactory__factory, |
12 | | - SystemContract, |
13 | | - SystemContract__factory, |
14 | | -} from "../../typechain-types"; |
15 | | -import { getChainId, getSystemContractAddress, getZEVMAppAddress } from "../address.helpers"; |
| 6 | +import { SystemContract__factory } from "../../typechain-types"; |
| 7 | +import { getSystemContractAddress } from "../address.helpers"; |
| 8 | +import { addReward } from "./helpers"; |
16 | 9 |
|
17 | | -const SYSTEM_CONTRACT = getSystemContractAddress(); |
18 | | - |
19 | | -const networkName = network.name; |
20 | 10 | const REWARD_DURATION = BigNumber.from("604800").mul(8); // 1 week * 8 |
21 | 11 | const REWARDS_AMOUNT = parseEther("500"); |
| 12 | +const REWARD_CONTRACT_ADDRESS = "0x0dee8b6e2d2035a798b67c68d47f941718a62263"; //@dev: change this to the address of the reward contract |
22 | 13 |
|
23 | | -const getZRC20Address = async (systemContract: SystemContract, network: ZetaProtocolNetwork) => { |
24 | | - const tokenAddress = await systemContract.gasCoinZRC20ByChainId(getChainId(network)); |
25 | | - return tokenAddress; |
26 | | -}; |
27 | | - |
28 | | -const deployRewardByNetwork = async ( |
29 | | - deployer: SignerWithAddress, |
30 | | - systemContract: SystemContract, |
31 | | - networkName: ZetaProtocolNetwork, |
32 | | - rewardDistributorFactory: RewardDistributorFactory |
33 | | -) => { |
34 | | - const tokenAddress = await getZRC20Address(systemContract, networkName); |
35 | | - const zetaTokenAddress = await systemContract.wZetaContractAddress(); |
36 | | - |
37 | | - const tx = await rewardDistributorFactory.createTokenIncentive( |
38 | | - deployer.address, |
39 | | - deployer.address, |
40 | | - zetaTokenAddress, |
41 | | - // @dev: now we send both tokens so contract calculate internaly LP address |
42 | | - zetaTokenAddress, |
43 | | - tokenAddress |
44 | | - ); |
45 | | - |
46 | | - const receipt = await tx.wait(); |
47 | | - |
48 | | - const event = receipt.events?.find((e) => e.event === "RewardDistributorCreated"); |
49 | | - |
50 | | - const { rewardDistributorContract: rewardDistributorContractAddress } = event?.args as any; |
51 | | - |
52 | | - console.log("RewardDistributor deployed to:", rewardDistributorContractAddress); |
53 | | - |
54 | | - return rewardDistributorContractAddress; |
55 | | -}; |
56 | | - |
57 | | -const addReward = async ( |
58 | | - deployer: SignerWithAddress, |
59 | | - systemContract: SystemContract, |
60 | | - rewardDistributorContractAddress: string |
61 | | -) => { |
62 | | - const zetaTokenAddress = await systemContract.wZetaContractAddress(); |
63 | | - |
64 | | - const rewardDistributorContract = await RewardDistributor__factory.connect( |
65 | | - rewardDistributorContractAddress, |
66 | | - deployer |
67 | | - ); |
68 | | - |
69 | | - const ZETA = ERC20__factory.connect(zetaTokenAddress, deployer); |
70 | | - const tx = await ZETA.transfer(rewardDistributorContract.address, REWARDS_AMOUNT.mul(1)); |
71 | | - await tx.wait(); |
72 | | - await rewardDistributorContract.setRewardsDuration(REWARD_DURATION); |
73 | | - await rewardDistributorContract.notifyRewardAmount(REWARDS_AMOUNT); |
74 | | - |
75 | | - console.log("Reward added to:", rewardDistributorContract.address); |
76 | | -}; |
77 | | - |
78 | | -async function main() { |
| 14 | +const main = async () => { |
79 | 15 | const [deployer] = await ethers.getSigners(); |
80 | | - if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); |
81 | | - const systemContract = await SystemContract__factory.connect(SYSTEM_CONTRACT, deployer); |
| 16 | + const networkName = network.name; |
82 | 17 |
|
83 | | - const factoryContractAddress = getZEVMAppAddress("rewardDistributorFactory"); |
| 18 | + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); |
84 | 19 |
|
85 | | - const rewardDistributorFactory = RewardDistributorFactory__factory.connect(factoryContractAddress, deployer); |
86 | | - let rewardContractAddress = ""; |
87 | | - // @dev: you can write your own address here to add reward to an existing contract |
88 | | - // rewardContractAddress = "0x0dee8b6e2d2035a798b67c68d47f941718a62263"; |
89 | | - rewardContractAddress = await deployRewardByNetwork( |
90 | | - deployer, |
91 | | - systemContract, |
92 | | - "goerli_testnet", |
93 | | - rewardDistributorFactory |
94 | | - ); |
95 | | - await addReward(deployer, systemContract, rewardContractAddress); |
| 20 | + const systemContractAddress = getSystemContractAddress(); |
| 21 | + const systemContract = await SystemContract__factory.connect(systemContractAddress, deployer); |
96 | 22 |
|
97 | | - rewardContractAddress = await deployRewardByNetwork( |
98 | | - deployer, |
99 | | - systemContract, |
100 | | - "bsc_testnet", |
101 | | - rewardDistributorFactory |
102 | | - ); |
103 | | - await addReward(deployer, systemContract, rewardContractAddress); |
104 | | - rewardContractAddress = await deployRewardByNetwork( |
105 | | - deployer, |
106 | | - systemContract, |
107 | | - "btc_testnet", |
108 | | - rewardDistributorFactory |
109 | | - ); |
110 | | - await addReward(deployer, systemContract, rewardContractAddress); |
111 | | - rewardContractAddress = await deployRewardByNetwork( |
112 | | - deployer, |
113 | | - systemContract, |
114 | | - "mumbai_testnet", |
115 | | - rewardDistributorFactory |
116 | | - ); |
117 | | - await addReward(deployer, systemContract, rewardContractAddress); |
118 | | -} |
| 23 | + await addReward(deployer, systemContract, REWARD_CONTRACT_ADDRESS, REWARD_DURATION, REWARDS_AMOUNT); |
| 24 | +}; |
119 | 25 |
|
120 | 26 | main().catch((error) => { |
121 | 27 | console.error(error); |
|
0 commit comments