@venusprotocol/isolated-pools 1.2.0-dev.2 → 1.2.0-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/deployments/bscmainnet/PoolLens.json +14 -14
  2. package/deployments/bscmainnet/RewardsDistributorImpl.json +1545 -0
  3. package/deployments/bscmainnet/RewardsDistributor_BSW_DeFi.json +1270 -0
  4. package/deployments/bscmainnet/RewardsDistributor_BSW_DeFi_Proxy.json +277 -0
  5. package/deployments/bscmainnet/RewardsDistributor_BTT_Tron.json +1270 -0
  6. package/deployments/bscmainnet/RewardsDistributor_BTT_Tron_Proxy.json +277 -0
  7. package/deployments/bscmainnet/RewardsDistributor_FLOKI_GameFi.json +1270 -0
  8. package/deployments/bscmainnet/RewardsDistributor_FLOKI_GameFi_Proxy.json +277 -0
  9. package/deployments/bscmainnet/RewardsDistributor_HAY_Stablecoins.json +1270 -0
  10. package/deployments/bscmainnet/RewardsDistributor_HAY_Stablecoins_Proxy.json +277 -0
  11. package/deployments/bscmainnet/RewardsDistributor_RACA_GameFi.json +1270 -0
  12. package/deployments/bscmainnet/RewardsDistributor_RACA_GameFi_Proxy.json +277 -0
  13. package/deployments/bscmainnet/RewardsDistributor_SD_LiquidStakedBNB.json +1270 -0
  14. package/deployments/bscmainnet/RewardsDistributor_SD_LiquidStakedBNB_Proxy.json +277 -0
  15. package/deployments/bscmainnet/RewardsDistributor_TRX_Tron.json +1270 -0
  16. package/deployments/bscmainnet/RewardsDistributor_TRX_Tron_Proxy.json +277 -0
  17. package/deployments/bscmainnet/RewardsDistributor_USDD_Tron.json +1270 -0
  18. package/deployments/bscmainnet/RewardsDistributor_USDD_Tron_Proxy.json +277 -0
  19. package/deployments/bscmainnet/RewardsDistributor_WIN_Tron.json +1270 -0
  20. package/deployments/bscmainnet/RewardsDistributor_WIN_Tron_Proxy.json +277 -0
  21. package/deployments/bscmainnet/RewardsDistributor_ankrBNB_LiquidStakedBNB.json +1270 -0
  22. package/deployments/bscmainnet/RewardsDistributor_ankrBNB_LiquidStakedBNB_Proxy.json +277 -0
  23. package/deployments/bscmainnet/RewardsDistributor_stkBNB_LiquidStakedBNB.json +1270 -0
  24. package/deployments/bscmainnet/RewardsDistributor_stkBNB_LiquidStakedBNB_Proxy.json +277 -0
  25. package/deployments/bscmainnet/solcInputs/014ac95d16ca74a5ed2395721633a333.json +207 -0
  26. package/deployments/bscmainnet.json +18301 -10483
  27. package/deployments/bsctestnet/MockSD.json +450 -0
  28. package/deployments/bsctestnet/PoolLens.json +14 -14
  29. package/deployments/bsctestnet/RewardsDistributorImpl.json +1545 -0
  30. package/deployments/bsctestnet/RewardsDistributor_BSW_DeFi.json +1270 -0
  31. package/deployments/bsctestnet/RewardsDistributor_BSW_DeFi_Proxy.json +277 -0
  32. package/deployments/bsctestnet/RewardsDistributor_BTT_Tron.json +1270 -0
  33. package/deployments/bsctestnet/RewardsDistributor_BTT_Tron_Proxy.json +277 -0
  34. package/deployments/bsctestnet/RewardsDistributor_FLOKI_GameFi.json +1270 -0
  35. package/deployments/bsctestnet/RewardsDistributor_FLOKI_GameFi_Proxy.json +277 -0
  36. package/deployments/bsctestnet/RewardsDistributor_RACA_GameFi.json +1270 -0
  37. package/deployments/bsctestnet/RewardsDistributor_RACA_GameFi_Proxy.json +277 -0
  38. package/deployments/bsctestnet/RewardsDistributor_SD_LiquidStakedBNB.json +1270 -0
  39. package/deployments/bsctestnet/RewardsDistributor_SD_LiquidStakedBNB_Proxy.json +277 -0
  40. package/deployments/bsctestnet/RewardsDistributor_TRX_Tron.json +1270 -0
  41. package/deployments/bsctestnet/RewardsDistributor_TRX_Tron_Proxy.json +277 -0
  42. package/deployments/bsctestnet/RewardsDistributor_USDD_Tron.json +1270 -0
  43. package/deployments/bsctestnet/RewardsDistributor_USDD_Tron_Proxy.json +277 -0
  44. package/deployments/bsctestnet/RewardsDistributor_WIN_Tron.json +1270 -0
  45. package/deployments/bsctestnet/RewardsDistributor_WIN_Tron_Proxy.json +277 -0
  46. package/deployments/bsctestnet/RewardsDistributor_ankrBNB_LiquidStakedBNB.json +1270 -0
  47. package/deployments/bsctestnet/RewardsDistributor_ankrBNB_LiquidStakedBNB_Proxy.json +277 -0
  48. package/deployments/bsctestnet/RewardsDistributor_stkBNB_LiquidStakedBNB.json +1270 -0
  49. package/deployments/bsctestnet/RewardsDistributor_stkBNB_LiquidStakedBNB_Proxy.json +277 -0
  50. package/deployments/bsctestnet/solcInputs/014ac95d16ca74a5ed2395721633a333.json +207 -0
  51. package/deployments/bsctestnet/solcInputs/863d7b2c0abdf05a4c8e289ad842b1db.json +207 -0
  52. package/deployments/bsctestnet.json +15993 -1881
  53. package/dist/deploy/001-deploy-mock-tokens.js +2 -1
  54. package/dist/deploy/010-deploy-reward-distributors.js +7 -0
  55. package/dist/deploy/011-initial-liquidity.js +31 -14
  56. package/dist/deploy/013-vip-based-config.js +53 -48
  57. package/dist/helpers/deploymentConfig.js +160 -7
  58. package/package.json +1 -1
@@ -14,7 +14,8 @@ const func = async function (hre) {
14
14
  contract: "MockToken",
15
15
  args: [token.name, token.symbol, token.decimals],
16
16
  log: true,
17
- autoMine: true, // speed up deployment on local network (ganache, hardhat), no effect on live networks
17
+ autoMine: true,
18
+ skipIfAlreadyDeployed: true,
18
19
  });
19
20
  }
20
21
  }
@@ -12,6 +12,12 @@ const func = async function (hre) {
12
12
  const accessControlAddress = await (0, deploymentUtils_1.toAddress)(preconfiguredAddresses.AccessControlManager || "AccessControlManager", hre);
13
13
  const proxyOwnerAddress = await (0, deploymentUtils_1.toAddress)(preconfiguredAddresses.NormalTimelock || "account:deployer", hre);
14
14
  const pools = await (0, deploymentUtils_1.getUnregisteredRewardsDistributors)(poolConfig, hre);
15
+ await deploy("RewardsDistributorImpl", {
16
+ contract: "RewardsDistributor",
17
+ from: deployer,
18
+ autoMine: true,
19
+ log: true,
20
+ });
15
21
  for (const pool of pools) {
16
22
  const rewards = pool.rewards;
17
23
  if (!rewards)
@@ -27,6 +33,7 @@ const func = async function (hre) {
27
33
  from: deployer,
28
34
  contract: "RewardsDistributor",
29
35
  proxy: {
36
+ implementationName: `RewardsDistributorImpl`,
30
37
  owner: proxyOwnerAddress,
31
38
  proxyContract: "OpenZeppelinTransparentProxy",
32
39
  execute: {
@@ -1,19 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ethers_1 = require("ethers");
3
4
  const deploymentConfig_1 = require("../helpers/deploymentConfig");
4
5
  const deploymentUtils_1 = require("../helpers/deploymentUtils");
6
+ const sumAmounts = async (tokens) => {
7
+ const amounts = {};
8
+ for (const { symbol, amount } of tokens) {
9
+ amounts[symbol] = amount.add(amounts[symbol] || 0);
10
+ }
11
+ return amounts;
12
+ };
5
13
  const faucetTokens = async (deploymentConfig, hre) => {
6
14
  const { poolConfig, tokensConfig } = deploymentConfig;
7
15
  const unregisteredVTokens = await (0, deploymentUtils_1.getUnregisteredVTokens)(poolConfig, hre);
8
16
  const vTokenConfigs = unregisteredVTokens.map((p) => p.vtokens).flat();
9
- for (const vTokenConfig of vTokenConfigs) {
10
- const token = (0, deploymentConfig_1.getTokenConfig)(vTokenConfig.asset, tokensConfig);
11
- if (!token.isMock && !token.faucetInitialLiquidity) {
12
- continue;
13
- }
14
- const tokenContract = await (0, deploymentUtils_1.getUnderlyingMock)(token.symbol);
15
- console.log(`Minting ${vTokenConfig.initialSupply} mock ${token.symbol} to owner`);
16
- const tx = await tokenContract.faucet(vTokenConfig.initialSupply);
17
+ const assetsToFaucet = vTokenConfigs
18
+ .map((v) => (0, deploymentConfig_1.getTokenConfig)(v.asset, tokensConfig))
19
+ .filter((token) => token.isMock || token.faucetInitialLiquidity)
20
+ .map((token) => token.symbol);
21
+ const vTokensToFaucet = vTokenConfigs.filter((v) => assetsToFaucet.includes(v.asset));
22
+ const amounts = vTokensToFaucet.map((token) => ({
23
+ symbol: token.asset,
24
+ amount: ethers_1.BigNumber.from(token.initialSupply),
25
+ }));
26
+ const totalAmounts = await sumAmounts(amounts);
27
+ for (const [symbol, amount] of Object.entries(totalAmounts)) {
28
+ const tokenContract = await (0, deploymentUtils_1.getUnderlyingMock)(symbol);
29
+ console.log(`Minting ${amount} mock ${symbol} to owner`);
30
+ const tx = await tokenContract.faucet(amount, { gasLimit: 5000000 });
17
31
  await tx.wait(1);
18
32
  }
19
33
  };
@@ -24,12 +38,15 @@ const approveTimelock = async (deploymentConfig, hre) => {
24
38
  const { poolConfig, tokensConfig, preconfiguredAddresses } = deploymentConfig;
25
39
  const unregisteredVTokens = await (0, deploymentUtils_1.getUnregisteredVTokens)(poolConfig, hre);
26
40
  const vTokenConfigs = unregisteredVTokens.map((p) => p.vtokens).flat();
27
- for (const vTokenConfig of vTokenConfigs) {
28
- const { asset, initialSupply } = vTokenConfig;
29
- const token = (0, deploymentConfig_1.getTokenConfig)(asset, tokensConfig);
30
- const tokenContract = await (0, deploymentUtils_1.getUnderlyingToken)(token.symbol, tokensConfig);
31
- console.log(`Approving ${initialSupply} ${token.symbol} to Timelock`);
32
- const tx = await tokenContract.approve(preconfiguredAddresses.NormalTimelock, initialSupply);
41
+ const amounts = vTokenConfigs.map((token) => ({
42
+ symbol: token.asset,
43
+ amount: ethers_1.BigNumber.from(token.initialSupply),
44
+ }));
45
+ const totalAmounts = await sumAmounts(amounts);
46
+ for (const [symbol, amount] of Object.entries(totalAmounts)) {
47
+ const tokenContract = await (0, deploymentUtils_1.getUnderlyingToken)(symbol, tokensConfig);
48
+ console.log(`Approving ${amount} ${symbol} to Timelock`);
49
+ const tx = await tokenContract.approve(preconfiguredAddresses.NormalTimelock, amount, { gasLimit: 5000000 });
33
50
  await tx.wait(1);
34
51
  }
35
52
  };
@@ -4,13 +4,6 @@ const utils_1 = require("ethers/lib/utils");
4
4
  const hardhat_1 = require("hardhat");
5
5
  const deploymentConfig_1 = require("../helpers/deploymentConfig");
6
6
  const deploymentUtils_1 = require("../helpers/deploymentUtils");
7
- const toProposalActions = (commands) => {
8
- const targets = commands.map(c => c.contract);
9
- const values = commands.map(c => c.value);
10
- const signatures = commands.map(c => c.signature);
11
- const calldatas = commands.map(c => hardhat_1.ethers.utils.defaultAbiCoder.encode(c.argTypes, c.parameters));
12
- return { targets, values, signatures, calldatas };
13
- };
14
7
  const addRewardsDistributor = async (rewardsDistributor, pool, rewardConfig) => {
15
8
  const comptroller = await hardhat_1.ethers.getContract(`Comptroller_${pool.id}`);
16
9
  console.log(`Adding a command to add ${rewardConfig.asset} rewards distributor to Comptroller_${pool.id}`);
@@ -41,14 +34,14 @@ const setRewardSpeed = async (pool, rewardsDistributor, rewardConfig) => {
41
34
  value: 0,
42
35
  };
43
36
  };
44
- const configureRewards = async (unregisteredRewardDistributors, hre) => {
37
+ const configureRewards = async (unregisteredRewardDistributors, owner, hre) => {
45
38
  const commands = await Promise.all(unregisteredRewardDistributors.map(async (pool) => {
46
39
  const rewards = pool.rewards || [];
47
40
  const poolCommands = await Promise.all(rewards.map(async (rewardConfig) => {
48
41
  const contractName = `RewardsDistributor_${rewardConfig.asset}_${pool.id}`;
49
42
  const rewardsDistributor = await hardhat_1.ethers.getContract(contractName);
50
43
  return [
51
- ...(await acceptOwnership(contractName, hre)),
44
+ ...(await acceptOwnership(contractName, owner, hre)),
52
45
  await addRewardsDistributor(rewardsDistributor, pool, rewardConfig),
53
46
  await setRewardSpeed(pool, rewardsDistributor, rewardConfig),
54
47
  ];
@@ -57,15 +50,20 @@ const configureRewards = async (unregisteredRewardDistributors, hre) => {
57
50
  }));
58
51
  return commands.flat();
59
52
  };
60
- const acceptOwnership = async (contractName, hre) => {
53
+ const acceptOwnership = async (contractName, targetOwner, hre) => {
61
54
  if (!hre.network.live) {
62
55
  return [];
63
56
  }
57
+ const abi = ["function owner() view returns (address)"];
58
+ const deployment = await hre.deployments.get(contractName);
59
+ const contract = await hardhat_1.ethers.getContractAt(abi, deployment.address);
60
+ if ((await contract.owner()) === targetOwner) {
61
+ return [];
62
+ }
64
63
  console.log(`Adding a command to accept the admin rights over ${contractName}`);
65
- const contract = await hardhat_1.ethers.getContract(contractName);
66
64
  return [
67
65
  {
68
- contract: contract.address,
66
+ contract: deployment.address,
69
67
  signature: "acceptOwnership()",
70
68
  argTypes: [],
71
69
  parameters: [],
@@ -100,12 +98,12 @@ const addPool = (poolRegistry, comptroller, pool) => {
100
98
  value: 0,
101
99
  };
102
100
  };
103
- const addPools = async (unregisteredPools, hre) => {
101
+ const addPools = async (unregisteredPools, poolsOwner, hre) => {
104
102
  const poolRegistry = await hardhat_1.ethers.getContract("PoolRegistry");
105
103
  const commands = await Promise.all(unregisteredPools.map(async (pool) => {
106
104
  const comptroller = await hardhat_1.ethers.getContract(`Comptroller_${pool.id}`);
107
105
  return [
108
- ...(await acceptOwnership(`Comptroller_${pool.id}`, hre)),
106
+ ...(await acceptOwnership(`Comptroller_${pool.id}`, poolsOwner, hre)),
109
107
  await setOracle(comptroller, pool),
110
108
  addPool(poolRegistry, comptroller, pool),
111
109
  ];
@@ -135,7 +133,7 @@ const transferInitialLiquidity = async (vTokenConfig, deploymentConfig, hre) =>
135
133
  return [
136
134
  {
137
135
  contract: preconfiguredAddresses.VTreasury,
138
- signature: "withdrawTreasuryBep20(address,uint256,address)",
136
+ signature: "withdrawTreasuryBEP20(address,uint256,address)",
139
137
  argTypes: ["address", "uint256", "address"],
140
138
  parameters: [tokenContract.address, initialSupply, preconfiguredAddresses.NormalTimelock],
141
139
  value: 0,
@@ -149,8 +147,15 @@ const approvePoolRegistry = async (poolRegistry, vTokenConfig, deploymentConfig)
149
147
  const { asset, initialSupply } = vTokenConfig;
150
148
  const token = (0, deploymentConfig_1.getTokenConfig)(asset, tokensConfig);
151
149
  const tokenContract = await (0, deploymentUtils_1.getUnderlyingToken)(token.symbol, tokensConfig);
152
- console.log(`Adding a command to approve ${initialSupply} ${token.symbol} to PoolRegistry`);
150
+ console.log(`Adding commands to approve ${initialSupply} ${token.symbol} to PoolRegistry`);
153
151
  return [
152
+ {
153
+ contract: tokenContract.address,
154
+ signature: "approve(address,uint256)",
155
+ argTypes: ["address", "uint256"],
156
+ parameters: [poolRegistry.address, 0],
157
+ value: 0,
158
+ },
154
159
  {
155
160
  contract: tokenContract.address,
156
161
  signature: "approve(address,uint256)",
@@ -191,21 +196,38 @@ const addMarkets = async (unregisteredVTokens, deploymentConfig, hre) => {
191
196
  }));
192
197
  return poolCommands.flat();
193
198
  };
199
+ const makeRole = (mainnetBehavior, targetContract, method) => {
200
+ if (mainnetBehavior && targetContract === hardhat_1.ethers.constants.AddressZero) {
201
+ return hardhat_1.ethers.utils.keccak256(hardhat_1.ethers.utils.solidityPack(["bytes32", "string"], [hardhat_1.ethers.constants.HashZero, method]));
202
+ }
203
+ return hardhat_1.ethers.utils.keccak256(hardhat_1.ethers.utils.solidityPack(["address", "string"], [targetContract, method]));
204
+ };
205
+ const hasPermission = async (accessControl, targetContract, method, caller, hre) => {
206
+ const role = makeRole(hre.network.name === "bscmainnet", targetContract, method);
207
+ return accessControl.hasRole(role, caller);
208
+ };
194
209
  const configureAccessControls = async (deploymentConfig, hre) => {
195
210
  const { accessControlConfig, preconfiguredAddresses } = deploymentConfig;
196
- const accessControlManager = await (0, deploymentUtils_1.toAddress)(preconfiguredAddresses.AccessControlManager || "AccessControlManager", hre);
197
- return await Promise.all(accessControlConfig.map(async (entry) => {
211
+ const accessControlManagerAddress = await (0, deploymentUtils_1.toAddress)(preconfiguredAddresses.AccessControlManager || "AccessControlManager", hre);
212
+ const accessControlManager = await hardhat_1.ethers.getContractAt("AccessControlManager", accessControlManagerAddress);
213
+ const commands = await Promise.all(accessControlConfig.map(async (entry) => {
198
214
  const { caller, target, method } = entry;
199
215
  const callerAddress = await (0, deploymentUtils_1.toAddress)(caller, hre);
200
216
  const targetAddress = await (0, deploymentUtils_1.toAddress)(target, hre);
201
- return {
202
- contract: accessControlManager,
203
- signature: "giveCallPermission(address,string,address)",
204
- argTypes: ["address", "string", "address"],
205
- parameters: [targetAddress, method, callerAddress],
206
- value: 0,
207
- };
217
+ if (await hasPermission(accessControlManager, targetAddress, method, callerAddress, hre)) {
218
+ return [];
219
+ }
220
+ return [
221
+ {
222
+ contract: accessControlManagerAddress,
223
+ signature: "giveCallPermission(address,string,address)",
224
+ argTypes: ["address", "string", "address"],
225
+ parameters: [targetAddress, method, callerAddress],
226
+ value: 0,
227
+ },
228
+ ];
208
229
  }));
230
+ return commands.flat();
209
231
  };
210
232
  const logCommand = (prefix, command) => {
211
233
  const valueStr = command.value == 0 ? "" : "{ value: " + (0, utils_1.parseEther)(command.value.toString()) + " }";
@@ -237,34 +259,17 @@ const func = async function (hre) {
237
259
  const unregisteredPools = await (0, deploymentUtils_1.getUnregisteredPools)(poolConfig, hre);
238
260
  const unregisteredVTokens = await (0, deploymentUtils_1.getUnregisteredVTokens)(poolConfig, hre);
239
261
  const unregisteredRewardsDistributors = await (0, deploymentUtils_1.getUnregisteredRewardsDistributors)(poolConfig, hre);
262
+ const owner = preconfiguredAddresses.NormalTimelock || deployer;
240
263
  const commands = [
241
264
  ...(await configureAccessControls(deploymentConfig, hre)),
242
- ...(await acceptOwnership("PoolRegistry", hre)),
243
- ...(await addPools(unregisteredPools, hre)),
265
+ ...(await acceptOwnership("PoolRegistry", owner, hre)),
266
+ ...(await addPools(unregisteredPools, owner, hre)),
244
267
  ...(await addMarkets(unregisteredVTokens, deploymentConfig, hre)),
245
- ...(await configureRewards(unregisteredRewardsDistributors, hre)),
268
+ ...(await configureRewards(unregisteredRewardsDistributors, owner, hre)),
246
269
  ];
247
- const proposalActions = toProposalActions(commands);
248
- console.log("targets", proposalActions.targets);
249
- console.log("signatures", proposalActions.signatures);
250
- console.log("calldatas", proposalActions.calldatas);
251
- console.log("values", proposalActions.values);
252
270
  if (hre.network.live) {
253
- const governorBravo = await hardhat_1.ethers.getContractAt("GovernorBravoDelegate", preconfiguredAddresses.GovernorBravo);
254
- const NORMAL_VIP = 0;
255
- const meta = {
256
- version: "v2",
257
- title: "Isolated lending, phase 1",
258
- description: ``,
259
- forDescription: "I agree that Venus Protocol should proceed with IL Phase 1",
260
- againstDescription: "I do not think that Venus Protocol should proceed with IL Phase 1",
261
- abstainDescription: "I am indifferent to whether Venus Protocol proceeds with IL Phase 1",
262
- };
263
- const signer = await hardhat_1.ethers.getSigner(deployer);
264
- const tx = await governorBravo
265
- .connect(signer)
266
- .propose(proposalActions.targets, proposalActions.values, proposalActions.signatures, proposalActions.calldatas, JSON.stringify(meta), NORMAL_VIP);
267
- await tx.wait();
271
+ console.log("Please propose a VIP with the following commands:");
272
+ console.log(JSON.stringify(commands.map(c => ({ target: c.contract, signature: c.signature, params: c.parameters, value: c.value }))));
268
273
  }
269
274
  else {
270
275
  await executeCommands(commands, hre);
@@ -574,6 +574,13 @@ exports.globalConfig = {
574
574
  decimals: 18,
575
575
  tokenAddress: "0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd",
576
576
  },
577
+ {
578
+ isMock: true,
579
+ name: "Stader (Wormhole)",
580
+ symbol: "SD",
581
+ decimals: 18,
582
+ tokenAddress: hardhat_1.ethers.constants.AddressZero,
583
+ },
577
584
  ],
578
585
  poolConfig: [
579
586
  {
@@ -639,8 +646,8 @@ exports.globalConfig = {
639
646
  {
640
647
  asset: "HAY",
641
648
  markets: ["HAY"],
642
- supplySpeeds: ["1736111111111111"],
643
- borrowSpeeds: ["1736111111111111"], // 1500 HAY over 30 days
649
+ supplySpeeds: ["1860119047619047"],
650
+ borrowSpeeds: ["1860119047619047"], // 1500 HAY over 28 days (806400 blocks)
644
651
  },
645
652
  ],
646
653
  },
@@ -754,6 +761,14 @@ exports.globalConfig = {
754
761
  vTokenReceiver: "0xAE1c38847Fb90A13a2a1D7E5552cCD80c62C6508",
755
762
  },
756
763
  ],
764
+ rewards: [
765
+ {
766
+ asset: "BSW",
767
+ markets: ["BSW"],
768
+ supplySpeeds: ["16753472222222222"],
769
+ borrowSpeeds: ["16753472222222222"], // 14475 BSW over 30 days (864000 blocks)
770
+ },
771
+ ],
757
772
  },
758
773
  {
759
774
  id: "GameFi",
@@ -831,6 +846,20 @@ exports.globalConfig = {
831
846
  vTokenReceiver: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
832
847
  },
833
848
  ],
849
+ rewards: [
850
+ {
851
+ asset: "FLOKI",
852
+ markets: ["FLOKI"],
853
+ supplySpeeds: ["230305570295138888888"],
854
+ borrowSpeeds: ["230305570295138888888"], // 198984012.735 FLOKI over 30 days (864000 blocks), 18 decimals on testnet
855
+ },
856
+ {
857
+ asset: "RACA",
858
+ markets: ["RACA"],
859
+ supplySpeeds: ["6076388888888888888"],
860
+ borrowSpeeds: ["6076388888888888888"], // 5250000 RACA over 30 days (864000 blocks)
861
+ },
862
+ ],
834
863
  },
835
864
  {
836
865
  id: "LiquidStakedBNB",
@@ -942,6 +971,26 @@ exports.globalConfig = {
942
971
  vTokenReceiver: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
943
972
  },
944
973
  ],
974
+ rewards: [
975
+ {
976
+ asset: "ankrBNB",
977
+ markets: ["ankrBNB"],
978
+ supplySpeeds: ["26620370370370"],
979
+ borrowSpeeds: ["26620370370370"], // 23 ankrBNB over 30 days (864000 blocks)
980
+ },
981
+ {
982
+ asset: "stkBNB",
983
+ markets: ["stkBNB"],
984
+ supplySpeeds: ["4629629629629"],
985
+ borrowSpeeds: ["1504629629629"], // 1.3 stkBNB over 30 days (864000 blocks)
986
+ },
987
+ {
988
+ asset: "SD",
989
+ markets: ["BNBx"],
990
+ supplySpeeds: ["3703703703703703"],
991
+ borrowSpeeds: ["3703703703703703"], // 3200 SD over 30 days (864000 blocks)
992
+ },
993
+ ],
945
994
  },
946
995
  {
947
996
  id: "Tron",
@@ -1053,6 +1102,32 @@ exports.globalConfig = {
1053
1102
  vTokenReceiver: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
1054
1103
  },
1055
1104
  ],
1105
+ rewards: [
1106
+ {
1107
+ asset: "BTT",
1108
+ markets: ["BTT"],
1109
+ supplySpeeds: ["19969071901620370370370"],
1110
+ borrowSpeeds: ["19969071901620370370370"], // 17253278123 BTT over 30 days (864000 blocks)
1111
+ },
1112
+ {
1113
+ asset: "WIN",
1114
+ markets: ["WIN"],
1115
+ supplySpeeds: ["24805131365740740740"],
1116
+ borrowSpeeds: ["24805131365740740740"], // 21431633.5 WIN over 30 days (864000 blocks)
1117
+ },
1118
+ {
1119
+ asset: "TRX",
1120
+ markets: ["TRX"],
1121
+ supplySpeeds: ["45461"],
1122
+ borrowSpeeds: ["45461"], // 39278.5 TRX over 30 days (864000 blocks)
1123
+ },
1124
+ {
1125
+ asset: "USDD",
1126
+ markets: ["USDD"],
1127
+ supplySpeeds: ["14467592592592592"],
1128
+ borrowSpeeds: ["14467592592592592"], // 12500 USDD over 30 days (864000 blocks)
1129
+ },
1130
+ ],
1056
1131
  },
1057
1132
  ],
1058
1133
  accessControlConfig: [
@@ -1191,6 +1266,13 @@ exports.globalConfig = {
1191
1266
  decimals: 18,
1192
1267
  tokenAddress: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
1193
1268
  },
1269
+ {
1270
+ isMock: false,
1271
+ name: "Stader (Wormhole)",
1272
+ symbol: "SD",
1273
+ decimals: 18,
1274
+ tokenAddress: "0x3BC5AC0dFdC871B365d159f728dd1B9A0B5481E8",
1275
+ },
1194
1276
  ],
1195
1277
  poolConfig: [
1196
1278
  {
@@ -1252,7 +1334,14 @@ exports.globalConfig = {
1252
1334
  vTokenReceiver: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
1253
1335
  },
1254
1336
  ],
1255
- rewards: [],
1337
+ rewards: [
1338
+ {
1339
+ asset: "HAY",
1340
+ markets: ["HAY"],
1341
+ supplySpeeds: ["1860119047619047"],
1342
+ borrowSpeeds: ["1860119047619047"], // 1500 HAY over 28 days (806400 blocks)
1343
+ },
1344
+ ],
1256
1345
  },
1257
1346
  {
1258
1347
  id: "DeFi",
@@ -1364,7 +1453,14 @@ exports.globalConfig = {
1364
1453
  vTokenReceiver: "0xAE1c38847Fb90A13a2a1D7E5552cCD80c62C6508",
1365
1454
  },
1366
1455
  ],
1367
- rewards: [],
1456
+ rewards: [
1457
+ {
1458
+ asset: "BSW",
1459
+ markets: ["BSW"],
1460
+ supplySpeeds: ["16753472222222222"],
1461
+ borrowSpeeds: ["16753472222222222"], // 14475 BSW over 30 days (864000 blocks)
1462
+ },
1463
+ ],
1368
1464
  },
1369
1465
  {
1370
1466
  id: "GameFi",
@@ -1442,7 +1538,20 @@ exports.globalConfig = {
1442
1538
  vTokenReceiver: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
1443
1539
  },
1444
1540
  ],
1445
- rewards: [],
1541
+ rewards: [
1542
+ {
1543
+ asset: "FLOKI",
1544
+ markets: ["FLOKI"],
1545
+ supplySpeeds: ["230305570295"],
1546
+ borrowSpeeds: ["230305570295"], // 198984012.735 FLOKI over 30 days (864000 blocks)
1547
+ },
1548
+ {
1549
+ asset: "RACA",
1550
+ markets: ["RACA"],
1551
+ supplySpeeds: ["6076388888888888888"],
1552
+ borrowSpeeds: ["6076388888888888888"], // 5250000 RACA over 30 days (864000 blocks)
1553
+ },
1554
+ ],
1446
1555
  },
1447
1556
  {
1448
1557
  id: "LiquidStakedBNB",
@@ -1554,7 +1663,26 @@ exports.globalConfig = {
1554
1663
  vTokenReceiver: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
1555
1664
  },
1556
1665
  ],
1557
- rewards: [],
1666
+ rewards: [
1667
+ {
1668
+ asset: "ankrBNB",
1669
+ markets: ["ankrBNB"],
1670
+ supplySpeeds: ["26620370370370"],
1671
+ borrowSpeeds: ["26620370370370"], // 23 ankrBNB over 30 days (864000 blocks)
1672
+ },
1673
+ {
1674
+ asset: "stkBNB",
1675
+ markets: ["stkBNB"],
1676
+ supplySpeeds: ["4629629629629"],
1677
+ borrowSpeeds: ["1504629629629"], // 1.3 stkBNB over 30 days (864000 blocks)
1678
+ },
1679
+ {
1680
+ asset: "SD",
1681
+ markets: ["BNBx"],
1682
+ supplySpeeds: ["3703703703703703"],
1683
+ borrowSpeeds: ["3703703703703703"], // 3200 SD over 30 days (864000 blocks)
1684
+ },
1685
+ ],
1558
1686
  },
1559
1687
  {
1560
1688
  id: "Tron",
@@ -1666,7 +1794,32 @@ exports.globalConfig = {
1666
1794
  vTokenReceiver: "0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296",
1667
1795
  },
1668
1796
  ],
1669
- rewards: [],
1797
+ rewards: [
1798
+ {
1799
+ asset: "BTT",
1800
+ markets: ["BTT"],
1801
+ supplySpeeds: ["19969071901620370370370"],
1802
+ borrowSpeeds: ["19969071901620370370370"], // 17253278123 BTT over 30 days (864000 blocks)
1803
+ },
1804
+ {
1805
+ asset: "WIN",
1806
+ markets: ["WIN"],
1807
+ supplySpeeds: ["24805131365740740740"],
1808
+ borrowSpeeds: ["24805131365740740740"], // 21431633.5 WIN over 30 days (864000 blocks)
1809
+ },
1810
+ {
1811
+ asset: "TRX",
1812
+ markets: ["TRX"],
1813
+ supplySpeeds: ["45461"],
1814
+ borrowSpeeds: ["45461"], // 39278.5 TRX over 30 days (864000 blocks)
1815
+ },
1816
+ {
1817
+ asset: "USDD",
1818
+ markets: ["USDD"],
1819
+ supplySpeeds: ["14467592592592592"],
1820
+ borrowSpeeds: ["14467592592592592"], // 12500 USDD over 30 days (864000 blocks)
1821
+ },
1822
+ ],
1670
1823
  },
1671
1824
  ],
1672
1825
  accessControlConfig: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@venusprotocol/isolated-pools",
3
- "version": "1.2.0-dev.2",
3
+ "version": "1.2.0-dev.4",
4
4
  "description": "",
5
5
  "files": [
6
6
  "artifacts",