@venusprotocol/venus-protocol 9.8.0-dev.6 → 9.8.0-dev.7

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 (88) hide show
  1. package/deploy/002-interest-rate-model.ts +59 -83
  2. package/deploy/007-deploy-mock-tokens.ts +4 -3
  3. package/deploy/011-deploy-markets.ts +21 -37
  4. package/deploy/999-checks/001-check-rate-models.ts +183 -0
  5. package/deployments/bscmainnet.json +429 -429
  6. package/deployments/bscmainnet_addresses.json +29 -29
  7. package/deployments/bsctestnet.json +413 -413
  8. package/deployments/bsctestnet_addresses.json +14 -14
  9. package/dist/deploy/002-interest-rate-model.js +61 -78
  10. package/dist/deploy/007-deploy-mock-tokens.js +4 -2
  11. package/dist/deploy/011-deploy-markets.js +18 -35
  12. package/dist/deploy/999-checks/001-check-rate-models.d.ts +3 -0
  13. package/dist/deploy/999-checks/001-check-rate-models.js +107 -0
  14. package/dist/deployments/bscmainnet.json +429 -429
  15. package/dist/deployments/bsctestnet.json +413 -413
  16. package/dist/hardhat.config.js +2 -0
  17. package/dist/helpers/chains.d.ts +38 -0
  18. package/dist/helpers/chains.js +76 -0
  19. package/dist/helpers/deploymentConfig.d.ts +3 -29
  20. package/dist/helpers/deploymentConfig.js +1 -530
  21. package/dist/helpers/markets/bscmainnet.d.ts +653 -0
  22. package/dist/helpers/markets/bscmainnet.js +691 -0
  23. package/dist/helpers/markets/bsctestnet.d.ts +529 -0
  24. package/dist/helpers/markets/bsctestnet.js +561 -0
  25. package/dist/helpers/markets/hardhat.d.ts +65 -0
  26. package/dist/helpers/markets/hardhat.js +70 -0
  27. package/dist/helpers/markets/index.d.ts +122 -0
  28. package/dist/helpers/markets/index.js +94 -0
  29. package/dist/helpers/markets/types.d.ts +60 -0
  30. package/dist/helpers/markets/types.js +2 -0
  31. package/dist/helpers/rateModelHelpers.d.ts +4 -0
  32. package/dist/helpers/rateModelHelpers.js +35 -0
  33. package/dist/helpers/tokens/bscmainnet.d.ts +253 -0
  34. package/dist/helpers/tokens/bscmainnet.js +258 -0
  35. package/dist/helpers/tokens/bsctestnet.d.ts +204 -0
  36. package/dist/helpers/tokens/bsctestnet.js +209 -0
  37. package/dist/helpers/tokens/common/indexBySymbol.d.ts +6 -0
  38. package/dist/helpers/tokens/common/indexBySymbol.js +8 -0
  39. package/dist/helpers/tokens/hardhat.d.ts +27 -0
  40. package/dist/helpers/tokens/hardhat.js +30 -0
  41. package/dist/helpers/tokens/index.d.ts +1498 -0
  42. package/dist/helpers/tokens/index.js +38 -0
  43. package/dist/helpers/tokens/types.d.ts +12 -0
  44. package/dist/helpers/tokens/types.js +2 -0
  45. package/package.json +1 -1
  46. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope10000bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope10000bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  47. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope10000bps_jump50000bps_kink8000bps.json → JumpRateModel_base0bps_slope10000bps_jump50000bps_kink8000bps_bpy10512000.json} +0 -0
  48. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope1000bps_jump20000bps_kink7500bps.json → JumpRateModel_base0bps_slope1000bps_jump20000bps_kink7500bps_bpy10512000.json} +0 -0
  49. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope1000bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope1000bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  50. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope1000bps_jump50000bps_kink8000bps.json → JumpRateModel_base0bps_slope1000bps_jump50000bps_kink8000bps_bpy10512000.json} +0 -0
  51. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope1250bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope1250bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  52. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope1250bps_jump50000bps_kink8000bps.json → JumpRateModel_base0bps_slope1250bps_jump50000bps_kink8000bps_bpy10512000.json} +0 -0
  53. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope1500bps_jump30000bps_kink6000bps.json → JumpRateModel_base0bps_slope1500bps_jump30000bps_kink6000bps_bpy10512000.json} +0 -0
  54. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope1750bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope1750bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  55. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope2000bps_jump30000bps_kink5000bps.json → JumpRateModel_base0bps_slope2000bps_jump30000bps_kink5000bps_bpy10512000.json} +0 -0
  56. /package/deployments/bscmainnet/{InterestRateModelVETH.json → JumpRateModel_base0bps_slope300bps_jump45000bps_kink9000bps_bpy10512000.json} +0 -0
  57. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope687bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope687bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  58. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope750bps_jump50000bps_kink8000bps.json → JumpRateModel_base0bps_slope750bps_jump50000bps_kink8000bps_bpy10512000.json} +0 -0
  59. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope750bps_jump5000bps_kink8000bps.json → JumpRateModel_base0bps_slope750bps_jump5000bps_kink8000bps_bpy10512000.json} +0 -0
  60. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope875bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope875bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  61. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope875bps_jump50000bps_kink8000bps.json → JumpRateModel_base0bps_slope875bps_jump50000bps_kink8000bps_bpy10512000.json} +0 -0
  62. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope900bps_jump20000bps_kink5000bps.json → JumpRateModel_base0bps_slope900bps_jump20000bps_kink5000bps_bpy10512000.json} +0 -0
  63. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope900bps_jump20000bps_kink7500bps.json → JumpRateModel_base0bps_slope900bps_jump20000bps_kink7500bps_bpy10512000.json} +0 -0
  64. /package/deployments/bscmainnet/{JumpRateModel_base0bps_slope900bps_jump35000bps_kink4500bps.json → JumpRateModel_base0bps_slope900bps_jump35000bps_kink4500bps_bpy10512000.json} +0 -0
  65. /package/deployments/bscmainnet/{JumpRateModel_base200bps_slope10000bps_jump30000bps_kink100bps.json → JumpRateModel_base200bps_slope10000bps_jump30000bps_kink100bps_bpy10512000.json} +0 -0
  66. /package/deployments/bscmainnet/{JumpRateModel_base200bps_slope1200bps_jump30000bps_kink6000bps.json → JumpRateModel_base200bps_slope1200bps_jump30000bps_kink6000bps_bpy10512000.json} +0 -0
  67. /package/deployments/bscmainnet/{JumpRateModel_base200bps_slope1500bps_jump30000bps_kink6000bps.json → JumpRateModel_base200bps_slope1500bps_jump30000bps_kink6000bps_bpy10512000.json} +0 -0
  68. /package/deployments/bscmainnet/{JumpRateModel_base200bps_slope2000bps_jump30000bps_kink5000bps.json → JumpRateModel_base200bps_slope2000bps_jump30000bps_kink5000bps_bpy10512000.json} +0 -0
  69. /package/deployments/bscmainnet/{JumpRateModel_base5000bps_slope3000bps_jump30000bps_kink6000bps.json → JumpRateModel_base5000bps_slope3000bps_jump30000bps_kink6000bps_bpy10512000.json} +0 -0
  70. /package/deployments/bscmainnet/{TwoKinks_base0bps_slope1500bps_kink8000bps_slope29000bps_base20bps_kink29000bps_jump30000bps.json → TwoKinks_base0bps_slope1500bps_kink8000bps_slope29000bps_base20bps_kink29000bps_jump30000bps_bpy10512000.json} +0 -0
  71. /package/deployments/bscmainnet/{InterestRateModelVBNB.json → TwoKinks_base0bps_slope350bps_kink8000bps_slope217500bps_base20bps_kink29000bps_jump30000bps_bpy10512000.json} +0 -0
  72. /package/deployments/bscmainnet/{WhitePaperInterestRateModel_base0bps_slope0bps.json → WhitePaperInterestRateModel_base0bps_slope0bps_bpy10512000.json} +0 -0
  73. /package/deployments/bscmainnet/{WhitePaperInterestRateModel_base0bps_slope24000bps.json → WhitePaperInterestRateModel_base0bps_slope24000bps_bpy10512000.json} +0 -0
  74. /package/deployments/bscmainnet/{WhitePaperInterestRateModel_base2629bps_slope30000bps.json → WhitePaperInterestRateModel_base2629bps_slope30000bps_bpy10512000.json} +0 -0
  75. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope1000bps_jump20000bps_kink7500bps.json → JumpRateModel_base0bps_slope1000bps_jump20000bps_kink7500bps_bpy10512000.json} +0 -0
  76. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope1000bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope1000bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  77. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope2000bps_jump30000bps_kink5000bps.json → JumpRateModel_base0bps_slope2000bps_jump30000bps_kink5000bps_bpy10512000.json} +0 -0
  78. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope500bps_jump10900bps_kink8000bps.json → JumpRateModel_base0bps_slope500bps_jump10900bps_kink8000bps_bpy10512000.json} +0 -0
  79. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope500bps_jump5000bps_kink8000bps.json → JumpRateModel_base0bps_slope500bps_jump5000bps_kink8000bps_bpy10512000.json} +0 -0
  80. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope687bps_jump25000bps_kink8000bps.json → JumpRateModel_base0bps_slope687bps_jump25000bps_kink8000bps_bpy10512000.json} +0 -0
  81. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope750bps_jump5000bps_kink8000bps.json → JumpRateModel_base0bps_slope750bps_jump5000bps_kink8000bps_bpy10512000.json} +0 -0
  82. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope900bps_jump20000bps_kink5000bps.json → JumpRateModel_base0bps_slope900bps_jump20000bps_kink5000bps_bpy10512000.json} +0 -0
  83. /package/deployments/bsctestnet/{JumpRateModel_base0bps_slope900bps_jump35000bps_kink4500bps.json → JumpRateModel_base0bps_slope900bps_jump35000bps_kink4500bps_bpy10512000.json} +0 -0
  84. /package/deployments/bsctestnet/{JumpRateModel_base200bps_slope1500bps_jump30000bps_kink6000bps.json → JumpRateModel_base200bps_slope1500bps_jump30000bps_kink6000bps_bpy10512000.json} +0 -0
  85. /package/deployments/bsctestnet/{JumpRateModel_base200bps_slope2000bps_jump30000bps_kink5000bps.json → JumpRateModel_base200bps_slope2000bps_jump30000bps_kink5000bps_bpy10512000.json} +0 -0
  86. /package/deployments/bsctestnet/{InterestRateModelVBNB.json → TwoKinks_base0bps_slope350bps_kink8000bps_slope217500bps_base20bps_kink29000bps_jump30000bps_bpy10512000.json} +0 -0
  87. /package/deployments/bsctestnet/{WhitePaperInterestRateModel_base0bps_slope10000bps.json → WhitePaperInterestRateModel_base0bps_slope10000bps_bpy10512000.json} +0 -0
  88. /package/deployments/bsctestnet/{WhitepaperInterestRateModel.json → WhitePaperInterestRateModel_base200bps_slope1000bps_bpy10512000.json} +0 -0
@@ -8,18 +8,17 @@
8
8
  "ComptrollerLens": "0x350d56985A269C148648207E4Cea9f87656E762a",
9
9
  "DefaultProxyAdmin": "0x7877ffd62649b6a1557b55d4c20fcbab17344c91",
10
10
  "ETH": "0x98f7A83361F7Ac8765CcEBAB1425da6b341958a7",
11
- "InterestRateModelVBNB": "0x46D9269a8Db9623ac2baAB305B119a39BAfd8668",
12
- "JumpRateModel_base0bps_slope1000bps_jump20000bps_kink7500bps": "0xebb0B3Ca7c4095b1392C75e96f8Dc565c9047FAa",
13
- "JumpRateModel_base0bps_slope1000bps_jump25000bps_kink8000bps": "0x4348FC0CBD4ab6E46311ef90ba706169e50fC804",
14
- "JumpRateModel_base0bps_slope2000bps_jump30000bps_kink5000bps": "0x40e5d89ca4FED67F4C48A4eA5fe40bC1a1af1726",
15
- "JumpRateModel_base0bps_slope500bps_jump10900bps_kink8000bps": "0xB200dBd23cff696Cf2E95C0FbccDd3AF7814c00F",
16
- "JumpRateModel_base0bps_slope500bps_jump5000bps_kink8000bps": "0xfB14Dd85A26e41E4fD62b3B142b17f279c7Bb8B0",
17
- "JumpRateModel_base0bps_slope687bps_jump25000bps_kink8000bps": "0xf59B7f2733a549dCF82b804d69d9c6a38985B90B",
18
- "JumpRateModel_base0bps_slope750bps_jump5000bps_kink8000bps": "0x37bD1aFb1E9965FB9a229f85f71f8bEB5afdA91C",
19
- "JumpRateModel_base0bps_slope900bps_jump20000bps_kink5000bps": "0x12b88631a2033c0e9afA36b295cdFCf49493E89e",
20
- "JumpRateModel_base0bps_slope900bps_jump35000bps_kink4500bps": "0xBbA0DEC733d5217A14B934710Cf07F070BA6c01e",
21
- "JumpRateModel_base200bps_slope1500bps_jump30000bps_kink6000bps": "0xf334E44BA510079833EcC8eb00fD5Bd26d8048F5",
22
- "JumpRateModel_base200bps_slope2000bps_jump30000bps_kink5000bps": "0xF1A8B40CA68d08EFfa31a16a83f4fd9b5c174872",
11
+ "JumpRateModel_base0bps_slope1000bps_jump20000bps_kink7500bps_bpy10512000": "0xebb0B3Ca7c4095b1392C75e96f8Dc565c9047FAa",
12
+ "JumpRateModel_base0bps_slope1000bps_jump25000bps_kink8000bps_bpy10512000": "0x4348FC0CBD4ab6E46311ef90ba706169e50fC804",
13
+ "JumpRateModel_base0bps_slope2000bps_jump30000bps_kink5000bps_bpy10512000": "0x40e5d89ca4FED67F4C48A4eA5fe40bC1a1af1726",
14
+ "JumpRateModel_base0bps_slope500bps_jump10900bps_kink8000bps_bpy10512000": "0xB200dBd23cff696Cf2E95C0FbccDd3AF7814c00F",
15
+ "JumpRateModel_base0bps_slope500bps_jump5000bps_kink8000bps_bpy10512000": "0xfB14Dd85A26e41E4fD62b3B142b17f279c7Bb8B0",
16
+ "JumpRateModel_base0bps_slope687bps_jump25000bps_kink8000bps_bpy10512000": "0xf59B7f2733a549dCF82b804d69d9c6a38985B90B",
17
+ "JumpRateModel_base0bps_slope750bps_jump5000bps_kink8000bps_bpy10512000": "0x37bD1aFb1E9965FB9a229f85f71f8bEB5afdA91C",
18
+ "JumpRateModel_base0bps_slope900bps_jump20000bps_kink5000bps_bpy10512000": "0x12b88631a2033c0e9afA36b295cdFCf49493E89e",
19
+ "JumpRateModel_base0bps_slope900bps_jump35000bps_kink4500bps_bpy10512000": "0xBbA0DEC733d5217A14B934710Cf07F070BA6c01e",
20
+ "JumpRateModel_base200bps_slope1500bps_jump30000bps_kink6000bps_bpy10512000": "0xf334E44BA510079833EcC8eb00fD5Bd26d8048F5",
21
+ "JumpRateModel_base200bps_slope2000bps_jump30000bps_kink5000bps_bpy10512000": "0xF1A8B40CA68d08EFfa31a16a83f4fd9b5c174872",
23
22
  "LTC": "0x969F147B6b8D81f86175de33206A4FD43dF17913",
24
23
  "Liquidator": "0x55AEABa76ecf144031Ef64E222166eb28Cb4865F",
25
24
  "Liquidator_Implementation": "0x83372155dd4a4306af82795d5a27d40188ed1f3b",
@@ -56,6 +55,7 @@
56
55
  "SwapRouterStableCoins": "0x6cE131c2321e25d7b4C63283b75DB160Ce3Fb710",
57
56
  "SwapRouterTronFamily": "0x51Fd03aD1132e8cb5a5a793528c9F4ec918667d4",
58
57
  "TUSD": "0xB32171ecD878607FFc4F8FC0bCcE6852BB3149E0",
58
+ "TwoKinks_base0bps_slope350bps_kink8000bps_slope217500bps_base20bps_kink29000bps_jump30000bps_bpy10512000": "0x46D9269a8Db9623ac2baAB305B119a39BAfd8668",
59
59
  "USDC": "0x16227D60f7a0e586C66B005219dfc887D13C9531",
60
60
  "USDT": "0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c",
61
61
  "Unitroller": "0x94d1820b2D1c7c7452A163983Dc888CEC546b77D",
@@ -85,8 +85,8 @@
85
85
  "VenusLens": "0x068b437aCD9F4668f77Aa24e2B715a41D4a9a599",
86
86
  "WBETH": "0xf9F98365566F4D55234f24b99caA1AfBE6428D44",
87
87
  "WBNB": "0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd",
88
- "WhitePaperInterestRateModel_base0bps_slope10000bps": "0x562639bbbf595806d910d6bD82d215ac18604A12",
89
- "WhitepaperInterestRateModel": "0xdE9beC5102ee897a2c934321309517dD6c0106F4",
88
+ "WhitePaperInterestRateModel_base0bps_slope10000bps_bpy10512000": "0x562639bbbf595806d910d6bD82d215ac18604A12",
89
+ "WhitePaperInterestRateModel_base200bps_slope1000bps_bpy10512000": "0xdE9beC5102ee897a2c934321309517dD6c0106F4",
90
90
  "XRP": "0x3022A32fdAdB4f02281E8Fab33e0A6811237aab0",
91
91
  "XVS": "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff",
92
92
  "XVSStore": "0x7B4dba3b320E7D421A213e1a73bB9858bb6839F8",
@@ -1,14 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const ethers_1 = require("ethers");
4
- const utils_1 = require("ethers/lib/utils");
5
- const mantissaToBps = (num) => {
6
- return ethers_1.BigNumber.from(num).div((0, utils_1.parseUnits)("1", 14)).toString();
7
- };
3
+ const chains_1 = require("../helpers/chains");
4
+ const deploymentConfig_1 = require("../helpers/deploymentConfig");
5
+ const markets_1 = require("../helpers/markets");
6
+ const rateModelHelpers_1 = require("../helpers/rateModelHelpers");
8
7
  const func = async function (hre) {
9
8
  const { deployments, getNamedAccounts, network } = hre;
10
9
  const { deploy } = deployments;
10
+ const chain = (0, chains_1.assertBlockBasedChain)(hre.network.name);
11
11
  const { deployer } = await getNamedAccounts();
12
+ // Keeping this hardcoded since 003-deploy-VBep20 (used in subgraph tests) depends on it
12
13
  if (!network.live) {
13
14
  await deploy("InterestRateModelVUSDC", {
14
15
  contract: "JumpRateModel",
@@ -25,80 +26,62 @@ const func = async function (hre) {
25
26
  args: [0, "40000000000000000", "1080000000000000000", "700000000000000000"],
26
27
  });
27
28
  }
28
- if (network.name === "bscmainnet") {
29
- await deploy("InterestRateModelVETH", {
30
- contract: "JumpRateModel",
31
- from: deployer,
32
- log: true,
33
- autoMine: true,
34
- args: [0, (0, utils_1.parseUnits)("0.03", 18), (0, utils_1.parseUnits)("4.5", 18), (0, utils_1.parseUnits)("0.9", 18)],
35
- });
36
- let baseRatePerYear = (0, utils_1.parseUnits)("0", 18);
37
- let multiplierPerYear = (0, utils_1.parseUnits)("0.175", 18);
38
- let jumpMultiplierPerYear = (0, utils_1.parseUnits)("2.5", 18);
39
- let kink = (0, utils_1.parseUnits)("0.8", 18);
40
- const [b, m, j, k] = [baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink].map(mantissaToBps);
41
- let rateModelName = `JumpRateModel_base${b}bps_slope${m}bps_jump${j}bps_kink${k}bps`;
42
- await deploy(rateModelName, {
43
- contract: "JumpRateModel",
44
- from: deployer,
45
- log: true,
46
- autoMine: true,
47
- args: [baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink],
48
- skipIfAlreadyDeployed: true,
49
- });
50
- baseRatePerYear = (0, utils_1.parseUnits)("0", 18);
51
- multiplierPerYear = (0, utils_1.parseUnits)("0.15", 18);
52
- jumpMultiplierPerYear = (0, utils_1.parseUnits)("3", 18);
53
- kink = (0, utils_1.parseUnits)("0.8", 18);
54
- const baseRatePerYear2 = (0, utils_1.parseUnits)("0", 18);
55
- const multiplierPerYear2 = (0, utils_1.parseUnits)("0.9", 18);
56
- const kink2_ = (0, utils_1.parseUnits)("0.9", 18);
57
- const [b1, m1, k1, m2, b2, k2, j2] = [
58
- baseRatePerYear,
59
- multiplierPerYear,
60
- kink,
61
- multiplierPerYear2,
62
- baseRatePerYear2,
63
- kink2_,
64
- jumpMultiplierPerYear,
65
- ].map(mantissaToBps);
66
- rateModelName = `TwoKinks_base${b1}bps_slope${m1}bps_kink${k1}bps_slope2${m2}bps_base2${b2}bps_kink2${k2}bps_jump${j2}bps`;
67
- await deploy(rateModelName, {
68
- contract: "TwoKinksInterestRateModel",
69
- from: deployer,
70
- log: true,
71
- autoMine: true,
72
- args: [
73
- baseRatePerYear,
74
- multiplierPerYear,
75
- kink,
76
- multiplierPerYear2,
77
- baseRatePerYear2,
78
- kink2_,
79
- jumpMultiplierPerYear,
80
- ],
81
- skipIfAlreadyDeployed: true,
82
- });
83
- }
84
- if (network.name === "bscmainnet" || network.name === "bsctestnet") {
85
- await deploy("InterestRateModelVBNB", {
86
- contract: "TwoKinksInterestRateModel",
87
- from: deployer,
88
- log: true,
89
- autoMine: true,
90
- args: [
91
- (0, utils_1.parseUnits)("0", 18),
92
- (0, utils_1.parseUnits)("0.035", 18),
93
- (0, utils_1.parseUnits)("0.8", 18),
94
- (0, utils_1.parseUnits)("1.75", 18),
95
- (0, utils_1.parseUnits)("0", 18),
96
- (0, utils_1.parseUnits)("0.9", 18),
97
- (0, utils_1.parseUnits)("3", 18), // jump multiplier
98
- ],
99
- });
29
+ const marketsConfig = markets_1.markets[chain];
30
+ const blocksPerYear = chains_1.blocksPerYear[chain];
31
+ for (const market of marketsConfig) {
32
+ const { interestRateModel, symbol } = market;
33
+ const rateModelName = (0, rateModelHelpers_1.getRateModelName)(interestRateModel, blocksPerYear);
34
+ console.log(`Deploying interest rate model ${rateModelName} for ${symbol}`);
35
+ if (interestRateModel.model === "whitepaper") {
36
+ await deploy(rateModelName, {
37
+ from: deployer,
38
+ contract: "WhitePaperInterestRateModel",
39
+ args: [
40
+ interestRateModel.baseRatePerYear,
41
+ interestRateModel.multiplierPerYear,
42
+ //blocksPerYear
43
+ ],
44
+ log: true,
45
+ autoMine: true,
46
+ skipIfAlreadyDeployed: true,
47
+ });
48
+ }
49
+ else if (interestRateModel.model === "jump") {
50
+ await deploy(rateModelName, {
51
+ from: deployer,
52
+ contract: "JumpRateModel",
53
+ args: [
54
+ interestRateModel.baseRatePerYear,
55
+ interestRateModel.multiplierPerYear,
56
+ interestRateModel.jumpMultiplierPerYear,
57
+ interestRateModel.kink,
58
+ //blocksPerYear
59
+ ],
60
+ log: true,
61
+ autoMine: true,
62
+ skipIfAlreadyDeployed: true,
63
+ });
64
+ }
65
+ else if (interestRateModel.model === "two-kinks") {
66
+ await deploy(rateModelName, {
67
+ contract: "TwoKinksInterestRateModel",
68
+ from: deployer,
69
+ args: [
70
+ interestRateModel.baseRatePerYear,
71
+ interestRateModel.multiplierPerYear,
72
+ interestRateModel.kink,
73
+ interestRateModel.multiplierPerYear2,
74
+ interestRateModel.baseRatePerYear2,
75
+ interestRateModel.kink2,
76
+ interestRateModel.jumpMultiplierPerYear,
77
+ ],
78
+ log: true,
79
+ autoMine: true,
80
+ skipIfAlreadyDeployed: true,
81
+ });
82
+ }
100
83
  }
101
84
  };
102
85
  func.tags = ["InterestRateModel"];
103
- func.skip = async (hre) => hre.network.name !== "hardhat" && hre.network.name !== "bscmainnet" && hre.network.name !== "bsctestnet";
86
+ func.skip = (0, deploymentConfig_1.skipRemoteNetworks)();
104
87
  exports.default = func;
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const deploymentConfig_1 = require("../helpers/deploymentConfig");
3
+ const chains_1 = require("../helpers/chains");
4
+ const tokens_1 = require("../helpers/tokens");
4
5
  const func = async function (hre) {
5
6
  const { deployments, getNamedAccounts } = hre;
6
7
  const { deploy } = deployments;
7
8
  const { deployer } = await getNamedAccounts();
8
- const { tokensConfig } = await (0, deploymentConfig_1.getConfig)(hre.network.name);
9
+ const chain = (0, chains_1.assertKnownChain)(hre.network.name);
10
+ const tokensConfig = Object.values(tokens_1.tokens[chain]);
9
11
  for (const token of tokensConfig) {
10
12
  if (token.isMock) {
11
13
  const contractName = `Mock${token.symbol}`;
@@ -1,57 +1,40 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const ethers_1 = require("ethers");
4
3
  const utils_1 = require("ethers/lib/utils");
5
4
  const hardhat_1 = require("hardhat");
6
5
  const hardhat_2 = require("hardhat");
6
+ const chains_1 = require("../helpers/chains");
7
7
  const deploymentConfig_1 = require("../helpers/deploymentConfig");
8
- const mantissaToBps = (num) => {
9
- return ethers_1.BigNumber.from(num).div((0, utils_1.parseUnits)("1", 14)).toString();
10
- };
8
+ const markets_1 = require("../helpers/markets");
9
+ const rateModelHelpers_1 = require("../helpers/rateModelHelpers");
11
10
  const VTOKEN_DECIMALS = 8;
12
11
  const EMPTY_BYTES_ARRAY = "0x";
13
12
  const func = async function (hre) {
14
13
  const { deployments, getNamedAccounts } = hre;
15
14
  const { deploy } = deployments;
16
15
  const { deployer } = await getNamedAccounts();
17
- const { tokensConfig, marketsConfig } = await (0, deploymentConfig_1.getConfig)(hre.network.name);
16
+ const chain = (0, chains_1.assertBlockBasedChain)(hre.network.name);
17
+ const marketsConfig = markets_1.markets[chain];
18
+ const blocksPerYear = chains_1.blocksPerYear[chain];
18
19
  const comptrollerDeployment = await deployments.get("Unitroller");
19
20
  console.log(`Got deployment of Unitroller with address: ${comptrollerDeployment.address}`);
20
21
  for (const market of marketsConfig) {
21
- const { name, asset, symbol, rateModel, baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_ } = market;
22
- const token = (0, deploymentConfig_1.getTokenConfig)(asset, tokensConfig);
23
- let tokenContract;
24
- if (token.isMock) {
25
- tokenContract = await hardhat_1.ethers.getContract(`Mock${token.symbol}`);
22
+ const { name, asset, symbol, interestRateModel } = market;
23
+ // Short-circuit to avoid extra requests to the node if vToken already exists
24
+ const deployment = await deployments.getOrNull(symbol);
25
+ if (deployment !== null && deployment !== undefined) {
26
+ console.log(`Skipping ${symbol} deployment: found at ${deployment.address}`);
27
+ continue;
26
28
  }
27
- else {
28
- tokenContract = await hardhat_1.ethers.getContractAt("@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", token.tokenAddress);
29
- }
30
- let rateModelAddress;
31
- if (rateModel === deploymentConfig_1.InterestRateModels.JumpRate.toString()) {
32
- const [b, m, j, k] = [baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_].map(mantissaToBps);
33
- const rateModelName = `JumpRateModel_base${b}bps_slope${m}bps_jump${j}bps_kink${k}bps`;
34
- console.log(`Deploying interest rate model ${rateModelName}`);
35
- const result = await deploy(rateModelName, {
36
- from: deployer,
37
- contract: "JumpRateModel",
38
- args: [baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_],
39
- log: true,
40
- });
41
- rateModelAddress = result.address;
29
+ let tokenContract;
30
+ if (asset.isMock) {
31
+ tokenContract = await hardhat_1.ethers.getContract(`Mock${asset.symbol}`);
42
32
  }
43
33
  else {
44
- const [b, m] = [baseRatePerYear, multiplierPerYear].map(mantissaToBps);
45
- const rateModelName = `WhitePaperInterestRateModel_base${b}bps_slope${m}bps`;
46
- console.log(`Deploying interest rate model ${rateModelName}`);
47
- const result = await deploy(rateModelName, {
48
- from: deployer,
49
- contract: "WhitePaperInterestRateModel",
50
- args: [baseRatePerYear, multiplierPerYear],
51
- log: true,
52
- });
53
- rateModelAddress = result.address;
34
+ tokenContract = await hardhat_1.ethers.getContractAt("@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", asset.tokenAddress);
54
35
  }
36
+ const rateModelName = (0, rateModelHelpers_1.getRateModelName)(interestRateModel, blocksPerYear);
37
+ const rateModelAddress = (await deployments.get(rateModelName)).address;
55
38
  const underlyingDecimals = Number(await tokenContract.decimals());
56
39
  const normalTimelock = await hardhat_1.ethers.getContract("NormalTimelock");
57
40
  const vBep20DelegateDeployment = await deploy("VBep20Delegate", { from: deployer, skipIfAlreadyDeployed: true });
@@ -0,0 +1,3 @@
1
+ import { DeployFunction } from "hardhat-deploy/types";
2
+ declare const func: DeployFunction;
3
+ export default func;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ethers_1 = require("ethers");
4
+ const hardhat_1 = require("hardhat");
5
+ const chains_1 = require("../../helpers/chains");
6
+ const markets_1 = require("../../helpers/markets");
7
+ const rateModelHelpers_1 = require("../../helpers/rateModelHelpers");
8
+ const expectEqual = (msg, a, b) => {
9
+ if (!a.eq(b)) {
10
+ throw new Error(`Expected ${a.toString()} == ${b.toString()}\n${msg}`);
11
+ }
12
+ };
13
+ const checkBlocksPerYear = async (rateModel, name, expected) => {
14
+ try {
15
+ expectEqual(`Checking blocksPerYear for ${name} at ${rateModel.address}`, await rateModel.blocksPerYear(), ethers_1.BigNumber.from(expected));
16
+ }
17
+ catch (err) {
18
+ console.warn(`Could not get blocks per year for rate model at ${rateModel.address}, assuming ${expected}`);
19
+ }
20
+ };
21
+ const checkWpRateModel = async (rateModelAddress, params, blocksPerYear) => {
22
+ const name = (0, rateModelHelpers_1.getRateModelName)(params, blocksPerYear);
23
+ const rateModel = await hardhat_1.ethers.getContractAt("WhitePaperInterestRateModel", rateModelAddress);
24
+ await checkBlocksPerYear(rateModel, name, blocksPerYear);
25
+ expectEqual(`Checking baseRatePerBlock for ${name} at ${rateModelAddress}`, await rateModel.baseRatePerBlock(), params.baseRatePerYear.div(blocksPerYear));
26
+ expectEqual(`Checking multiplierPerBlock for ${name} at ${rateModelAddress}`, await rateModel.multiplierPerBlock(), params.multiplierPerYear.div(blocksPerYear));
27
+ };
28
+ const checkJumpRateModel = async (rateModelAddress, params, blocksPerYear) => {
29
+ const name = (0, rateModelHelpers_1.getRateModelName)(params, blocksPerYear);
30
+ const rateModel = await hardhat_1.ethers.getContractAt("JumpRateModel", rateModelAddress);
31
+ await checkBlocksPerYear(rateModel, name, blocksPerYear);
32
+ expectEqual(`Checking baseRatePerBlock for ${name} at ${rateModelAddress}`, await rateModel.baseRatePerBlock(), params.baseRatePerYear.div(blocksPerYear));
33
+ expectEqual(`Checking multiplierPerBlock for ${name} at ${rateModelAddress}`, await rateModel.multiplierPerBlock(), params.multiplierPerYear.div(blocksPerYear));
34
+ expectEqual(`Checking jumpMultiplierPerBlock for ${name} at ${rateModelAddress}`, await rateModel.jumpMultiplierPerBlock(), params.jumpMultiplierPerYear.div(blocksPerYear));
35
+ expectEqual(`Checking kink for ${name} at ${rateModelAddress}`, await rateModel.kink(), params.kink);
36
+ };
37
+ const checkTwoKinksRateModel = async (rateModelAddress, params, blocksPerYear) => {
38
+ const name = (0, rateModelHelpers_1.getRateModelName)(params, blocksPerYear);
39
+ const rateModel = await hardhat_1.ethers.getContractAt("TwoKinksInterestRateModel", rateModelAddress);
40
+ try {
41
+ expectEqual(`Checking blocksPerYear for ${name} at ${rateModel.address}`, await rateModel.BLOCKS_PER_YEAR(), ethers_1.BigNumber.from(blocksPerYear));
42
+ }
43
+ catch (err) {
44
+ console.warn(`Could not get blocks per year for rate model at ${rateModel.address}, assuming ${blocksPerYear}`);
45
+ }
46
+ expectEqual(`Checking BASE_RATE_PER_BLOCK for ${name} at ${rateModelAddress}`, await rateModel.BASE_RATE_PER_BLOCK(), params.baseRatePerYear.div(blocksPerYear));
47
+ expectEqual(`Checking MULTIPLIER_PER_BLOCK for ${name} at ${rateModelAddress}`, await rateModel.MULTIPLIER_PER_BLOCK(), params.multiplierPerYear.div(blocksPerYear));
48
+ expectEqual(`${name}.KINK_1`, await rateModel.KINK_1(), params.kink);
49
+ expectEqual(`Checking BASE_RATE_2_PER_BLOCK for ${name} at ${rateModelAddress}`, await rateModel.BASE_RATE_2_PER_BLOCK(), params.baseRatePerYear2.div(blocksPerYear));
50
+ expectEqual(`Checking MULTIPLIER_2_PER_BLOCK for ${name} at ${rateModelAddress}`, await rateModel.MULTIPLIER_2_PER_BLOCK(), params.multiplierPerYear2.div(blocksPerYear));
51
+ expectEqual(`${name}.KINK_2`, await rateModel.KINK_2(), params.kink2);
52
+ expectEqual(`Checking JUMP_MULTIPLIER_PER_BLOCK for ${name} at ${rateModelAddress}`, await rateModel.JUMP_MULTIPLIER_PER_BLOCK(), params.jumpMultiplierPerYear.div(blocksPerYear));
53
+ };
54
+ const checkRateModel = (rateModelAddress, params, blocksPerYear) => {
55
+ switch (params.model) {
56
+ case "whitepaper":
57
+ return checkWpRateModel(rateModelAddress, params, blocksPerYear);
58
+ case "jump":
59
+ return checkJumpRateModel(rateModelAddress, params, blocksPerYear);
60
+ case "two-kinks":
61
+ return checkTwoKinksRateModel(rateModelAddress, params, blocksPerYear);
62
+ }
63
+ };
64
+ const test = async (message, check) => {
65
+ try {
66
+ await check();
67
+ console.log(`✅ ${message}`);
68
+ }
69
+ catch (err) {
70
+ console.log(`❌ Failure: ${message}`);
71
+ console.error(err);
72
+ }
73
+ };
74
+ const func = async function (hre) {
75
+ const { deployments } = hre;
76
+ const chain = (0, chains_1.assertBlockBasedChain)(hre.network.name);
77
+ const marketsConfig = markets_1.markets[chain];
78
+ const blocksPerYear = chains_1.blocksPerYear[chain];
79
+ for (const vTokenConfig of marketsConfig) {
80
+ const { symbol, interestRateModel } = vTokenConfig;
81
+ console.log(`Checking interest rate model of ${symbol}`);
82
+ const vTokenAddress = (await deployments.get(`${symbol}`)).address;
83
+ const vToken = await hardhat_1.ethers.getContractAt("VToken", vTokenAddress);
84
+ const rateModelAddress = await vToken.interestRateModel();
85
+ const name = (0, rateModelHelpers_1.getRateModelName)(interestRateModel, blocksPerYear);
86
+ await test(`Rate model at ${rateModelAddress} should be ${name}`, () => checkRateModel(rateModelAddress, interestRateModel, blocksPerYear));
87
+ const deployment = await deployments.getOrNull(name);
88
+ await test(`Deployment for ${name} exists`, () => {
89
+ if (!deployment)
90
+ throw new Error(`Deployment for ${name} not found`);
91
+ });
92
+ if (!deployment) {
93
+ continue;
94
+ }
95
+ if (deployment.address === rateModelAddress) {
96
+ console.log(`✅ Deployment address matches the rate model address`);
97
+ }
98
+ else {
99
+ console.warn(`⚠️ Deployment at ${deployment.address} does not match ${rateModelAddress}`);
100
+ await test(`Rate model at ${deployment.address} should still be ${name}`, () => checkRateModel(deployment.address, interestRateModel, blocksPerYear));
101
+ }
102
+ console.log(`-----------------------------------------`);
103
+ }
104
+ };
105
+ func.tags = ["CheckIRMs"];
106
+ func.skip = async (hre) => !hre.network.live;
107
+ exports.default = func;