@venusprotocol/isolated-pools 3.8.0-dev.3 → 3.8.0-dev.5

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 (44) hide show
  1. package/deployments/arbitrumone/TwoKinks_base0bps_slope1500bps_kink8000bps_slope29000bps_base20bps_kink29000bps_jump30000bps.json +552 -0
  2. package/deployments/arbitrumone.json +352 -0
  3. package/deployments/arbitrumone_addresses.json +1 -0
  4. package/deployments/bscmainnet/JumpRateModelV2_base0bps_slope2000bps_jump25000bps_kink8000bps.json +608 -0
  5. package/deployments/bscmainnet/JumpRateModelV2_base200bps_slope2000bps_jump25000bps_kink8000bps.json +608 -0
  6. package/deployments/bscmainnet.json +825 -105
  7. package/deployments/bscmainnet_addresses.json +2 -0
  8. package/deployments/ethereum/JumpRateModelV2_base0bps_slope1750bps_jump25000bps_kink8000bps.json +608 -0
  9. package/deployments/ethereum/JumpRateModelV2_base0bps_slope2000bps_jump25000bps_kink8000bps.json +608 -0
  10. package/deployments/ethereum/TwoKinks_base0bps_slope1500bps_kink8000bps_slope29000bps_base20bps_kink29000bps_jump30000bps.json +552 -0
  11. package/deployments/ethereum.json +2011 -939
  12. package/deployments/ethereum_addresses.json +3 -0
  13. package/deployments/zksyncmainnet/JumpRateModelV2_base0bps_slope687bps_jump25000bps_kink8000bps.json +668 -0
  14. package/deployments/zksyncmainnet/TwoKinks_base0bps_slope1500bps_kink8000bps_slope29000bps_base20bps_kink29000bps_jump30000bps.json +651 -0
  15. package/deployments/zksyncmainnet/VToken_vwUSDM_Core.json +317 -0
  16. package/deployments/zksyncmainnet/solcInputs/7ee56954f4157666c7d07cfa8db6f8de.json +445 -0
  17. package/deployments/zksyncmainnet/solcInputs/c84b0f085ad65b3aa38a5f0d3790c387.json +448 -0
  18. package/deployments/zksyncmainnet.json +1243 -457
  19. package/deployments/zksyncmainnet_addresses.json +4 -1
  20. package/deployments/zksyncsepolia/JumpRateModelV2_base0bps_slope687bps_jump25000bps_kink8000bps.json +668 -0
  21. package/deployments/zksyncsepolia/MockUSDM.json +519 -0
  22. package/deployments/zksyncsepolia/MockwUSDM.json +576 -0
  23. package/deployments/zksyncsepolia/VToken_vwUSDM_Core.json +317 -0
  24. package/deployments/zksyncsepolia/solcInputs/c84b0f085ad65b3aa38a5f0d3790c387.json +448 -0
  25. package/deployments/zksyncsepolia.json +1160 -89
  26. package/deployments/zksyncsepolia_addresses.json +5 -1
  27. package/dist/deploy/001-deploy-mock-tokens.js +3 -2
  28. package/dist/deploy/009-deploy-vtokens.js +47 -3
  29. package/dist/deploy/019-deploy-ir-models.js +36 -2
  30. package/dist/deployments/arbitrumone.json +352 -0
  31. package/dist/deployments/bscmainnet.json +825 -105
  32. package/dist/deployments/ethereum.json +2011 -939
  33. package/dist/deployments/zksyncmainnet.json +1243 -457
  34. package/dist/deployments/zksyncsepolia.json +1160 -89
  35. package/dist/hardhat.config.js +7 -0
  36. package/dist/helpers/deploymentConfig.d.ts +6 -1
  37. package/dist/helpers/deploymentConfig.js +125 -38
  38. package/dist/helpers/deploymentUtils.d.ts +2 -0
  39. package/dist/helpers/deploymentUtils.js +6 -1
  40. package/dist/typechain/factories/IVToken__factory.d.ts +5 -1
  41. package/dist/typechain/factories/IVToken__factory.js +201 -1
  42. package/package.json +1 -1
  43. package/typechain/IVToken.d.ts +341 -4
  44. package/typechain/factories/IVToken__factory.ts +201 -1
@@ -8,13 +8,16 @@
8
8
  "DefaultProxyAdmin": "0x18E44f588a4DcF2F7145d35A5C226e129040b6D3",
9
9
  "JumpRateModelV2_base0bps_slope1500bps_jump25000bps_kink4500bps": "0xb130560618698D9A1e5184De02Dc940080f3159F",
10
10
  "JumpRateModelV2_base0bps_slope350bps_jump25000bps_kink8000bps": "0x8138db52D03bb2740207AB7c0dc188AC6B3C3500",
11
+ "JumpRateModelV2_base0bps_slope687bps_jump25000bps_kink8000bps": "0xCD6f2137182affDA1883135C3351D556721B81dE",
11
12
  "JumpRateModelV2_base0bps_slope875bps_jump25000bps_kink8000bps": "0x5454be0683eDeceD065D9A4Bd9F376a0396cDCd9",
12
13
  "JumpRateModelV2_base0bps_slope875bps_jump8000bps_kink8000bps": "0x782D1BA04d28dbbf1Ff664B62993f69cd6225466",
13
14
  "MockUSDC.e": "0xF98780C8a0843829f98e624d83C3FfDDf43BE984",
14
15
  "MockUSDC": "0x512F8b4a3c466a30e8c9BAC9c64638dd710968c2",
16
+ "MockUSDM": "0x5d5334dBa9C727eD81b549b6106aE37Ea137076D",
15
17
  "MockUSDT": "0x9Bf62C9C6AaB7AB8e01271f0d7A401306579709B",
16
18
  "MockWBTC": "0xeF891B3FA37FfD83Ce8cC7b682E4CADBD8fFc6F0",
17
19
  "MockZK": "0x8A2E9048F5d658E88D6eD89DdD1F3B5cA0250B9F",
20
+ "MockwUSDM": "0x0b3C8fB109f144f6296bF4Ac52F191181bEa003a",
18
21
  "NativeTokenGateway_vWETH_Core": "0xC2bc5881f2c1ee08a1f0fee65Fbf2BB4C4DD81e9",
19
22
  "PoolLens": "0x214Ed51c798EE53f0be79d810E9Fc91662FDE243",
20
23
  "PoolRegistry": "0x1401404e6279BB8C06E5E3999eCA3e2008B46A76",
@@ -30,6 +33,7 @@
30
33
  "VToken_vUSDT_Core": "0x7Bfd185eF8380a72027bF65bFEEAb0242b147778",
31
34
  "VToken_vWBTC_Core": "0x9c2379ed8ab06B44328487f61873C7c44BD6E87D",
32
35
  "VToken_vWETH_Core": "0x31eb7305f9fE281027028D0ba0d7f57ddA836d49",
33
- "VToken_vZK_Core": "0x92f4BD794303c0BD0791B350Be5531DB38414f47"
36
+ "VToken_vZK_Core": "0x92f4BD794303c0BD0791B350Be5531DB38414f47",
37
+ "VToken_vwUSDM_Core": "0x63abcB1f579dB71b4b8A1E182adbA2F131b75681"
34
38
  }
35
39
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const deploymentConfig_1 = require("../helpers/deploymentConfig");
4
+ const deploymentUtils_1 = require("../helpers/deploymentUtils");
4
5
  const func = async function (hre) {
5
6
  const { deployments, getNamedAccounts } = hre;
6
7
  const { deploy } = deployments;
@@ -11,7 +12,7 @@ const func = async function (hre) {
11
12
  const contractName = `Mock${token.symbol}`;
12
13
  await deploy(contractName, {
13
14
  from: deployer,
14
- contract: "MockToken",
15
+ contract: token.standard === "ERC-4626" ? "MockERC4626Token" : "MockToken",
15
16
  args: [token.name, token.symbol, token.decimals],
16
17
  log: true,
17
18
  autoMine: true,
@@ -21,5 +22,5 @@ const func = async function (hre) {
21
22
  }
22
23
  };
23
24
  func.tags = ["MockTokens"];
24
- func.skip = async (hre) => hre.network.live;
25
+ func.skip = (0, deploymentUtils_1.skipMainnets)();
25
26
  exports.default = func;
@@ -23,7 +23,16 @@ const func = async function (hre) {
23
23
  const { isTimeBased, blocksPerYear } = (0, deploymentUtils_1.getBlockOrTimestampBasedDeploymentInfo)(hre.network.name);
24
24
  const maxBorrowRateMantissa = (0, deploymentConfig_1.getMaxBorrowRateMantissa)(hre.network.name);
25
25
  await (0, _001_source_timelocks_1.default)(hre);
26
+ const timelock = await (0, deploymentUtils_1.toAddress)(preconfiguredAddresses.NormalTimelock || "NormalTimelock");
26
27
  const accessControlManagerAddress = await (0, deploymentUtils_1.toAddress)(preconfiguredAddresses.AccessControlManager || "AccessControlManager");
28
+ let vTokenOwner = timelock;
29
+ if (!vTokenOwner || !hre.network.live) {
30
+ console.warn("Using deployer as vToken owner");
31
+ vTokenOwner = deployer;
32
+ }
33
+ else {
34
+ console.warn("Using timelock as vToken owner");
35
+ }
27
36
  console.log("Is Time based", isTimeBased);
28
37
  // VToken Beacon
29
38
  const vTokenImpl = await deploy("VTokenImpl", {
@@ -47,7 +56,7 @@ const func = async function (hre) {
47
56
  const comptrollerProxy = await hardhat_1.ethers.getContract(`Comptroller_${pool.id}`);
48
57
  // Deploy Markets
49
58
  for (const vtoken of pool.vtokens) {
50
- const { name, asset, symbol, rateModel, baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_, reserveFactor, } = vtoken;
59
+ const { name, asset, symbol, rateModel, baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_, reserveFactor, multiplierPerYear2, baseRatePerYear2, kink2_, } = vtoken;
51
60
  const token = (0, deploymentConfig_1.getTokenConfig)(asset, tokensConfig);
52
61
  let tokenContract;
53
62
  if (token.isMock) {
@@ -78,7 +87,7 @@ const func = async function (hre) {
78
87
  });
79
88
  rateModelAddress = result.address;
80
89
  }
81
- else {
90
+ else if (rateModel === deploymentConfig_2.InterestRateModels.WhitePaper.toString()) {
82
91
  const [b, m] = [baseRatePerYear, multiplierPerYear].map(mantissaToBps);
83
92
  const rateModelName = `WhitePaperInterestRateModel_base${b}bps_slope${m}bps`;
84
93
  const result = await deploy(rateModelName, {
@@ -91,6 +100,41 @@ const func = async function (hre) {
91
100
  });
92
101
  rateModelAddress = result.address;
93
102
  }
103
+ else {
104
+ if (!multiplierPerYear2 || !baseRatePerYear2 || !kink2_) {
105
+ throw new Error(`Invalid IR model parameters for ${rateModel}`);
106
+ }
107
+ const [b, m, k, m2, b2, k2, j] = [
108
+ baseRatePerYear,
109
+ multiplierPerYear,
110
+ kink_,
111
+ multiplierPerYear2,
112
+ baseRatePerYear2,
113
+ kink2_,
114
+ jumpMultiplierPerYear,
115
+ ].map(mantissaToBps);
116
+ const rateModelName = `TwoKinks_base${b}bps_slope${m}bps_kink${k}bps_slope2${m2}bps_base2${b2}bps_kink2${k2}bps_jump${j}bps`;
117
+ console.log(`Deploying interest rate model ${rateModelName}`);
118
+ const result = await deploy(rateModelName, {
119
+ from: deployer,
120
+ contract: "TwoKinksInterestRateModel",
121
+ args: [
122
+ baseRatePerYear,
123
+ multiplierPerYear,
124
+ kink_,
125
+ multiplierPerYear2,
126
+ baseRatePerYear2,
127
+ kink2_,
128
+ jumpMultiplierPerYear,
129
+ isTimeBased,
130
+ blocksPerYear,
131
+ ],
132
+ log: true,
133
+ autoMine: true,
134
+ skipIfAlreadyDeployed: true,
135
+ });
136
+ rateModelAddress = result.address;
137
+ }
94
138
  const VToken = await hardhat_1.ethers.getContractFactory("VToken");
95
139
  const underlyingDecimals = Number(await tokenContract.decimals());
96
140
  const vTokenDecimals = 8;
@@ -116,7 +160,7 @@ const func = async function (hre) {
116
160
  name,
117
161
  symbol,
118
162
  vTokenDecimals,
119
- preconfiguredAddresses.NormalTimelock || deployer,
163
+ vTokenOwner,
120
164
  accessControlManagerAddress,
121
165
  [utils_2.AddressOne, protocolShareReserveAddress],
122
166
  reserveFactor,
@@ -18,7 +18,7 @@ const func = async function (hre) {
18
18
  for (const pool of poolConfig) {
19
19
  // Deploy IR Models
20
20
  for (const vtoken of pool.vtokens) {
21
- const { rateModel, baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_ } = vtoken;
21
+ const { rateModel, baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_, kink2_, multiplierPerYear2, baseRatePerYear2, } = vtoken;
22
22
  if (rateModel === deploymentConfig_2.InterestRateModels.JumpRate.toString()) {
23
23
  const [b, m, j, k] = [baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_].map(mantissaToBps);
24
24
  const rateModelName = `JumpRateModelV2_base${b}bps_slope${m}bps_jump${j}bps_kink${k}bps`;
@@ -39,7 +39,7 @@ const func = async function (hre) {
39
39
  skipIfAlreadyDeployed: true,
40
40
  });
41
41
  }
42
- else {
42
+ else if (rateModel === deploymentConfig_2.InterestRateModels.WhitePaper.toString()) {
43
43
  const [b, m] = [baseRatePerYear, multiplierPerYear].map(mantissaToBps);
44
44
  const rateModelName = `WhitePaperInterestRateModel_base${b}bps_slope${m}bps`;
45
45
  await deploy(rateModelName, {
@@ -51,6 +51,40 @@ const func = async function (hre) {
51
51
  skipIfAlreadyDeployed: true,
52
52
  });
53
53
  }
54
+ else {
55
+ if (!multiplierPerYear2 || !baseRatePerYear2 || !kink2_) {
56
+ throw new Error(`Invalid IR model parameters for ${rateModel}`);
57
+ }
58
+ const [b, m, k, m2, b2, k2, j] = [
59
+ baseRatePerYear,
60
+ multiplierPerYear,
61
+ kink_,
62
+ multiplierPerYear2,
63
+ baseRatePerYear2,
64
+ kink2_,
65
+ jumpMultiplierPerYear,
66
+ ].map(mantissaToBps);
67
+ const rateModelName = `TwoKinks_base${b}bps_slope${m}bps_kink${k}bps_slope2${m2}bps_base2${b2}bps_kink2${k2}bps_jump${j}bps`;
68
+ console.log(`Deploying interest rate model ${rateModelName}`);
69
+ await deploy(rateModelName, {
70
+ from: deployer,
71
+ contract: "TwoKinksInterestRateModel",
72
+ args: [
73
+ baseRatePerYear,
74
+ multiplierPerYear,
75
+ kink_,
76
+ multiplierPerYear2,
77
+ baseRatePerYear2,
78
+ kink2_,
79
+ jumpMultiplierPerYear,
80
+ isTimeBased,
81
+ blocksPerYear,
82
+ ],
83
+ log: true,
84
+ autoMine: true,
85
+ skipIfAlreadyDeployed: true,
86
+ });
87
+ }
54
88
  console.log(`-----------------------------------------`);
55
89
  }
56
90
  }
@@ -12654,6 +12654,358 @@
12654
12654
  }
12655
12655
  ]
12656
12656
  },
12657
+ "TwoKinks_base0bps_slope1500bps_kink8000bps_slope29000bps_base20bps_kink29000bps_jump30000bps": {
12658
+ "address": "0x8fd05f11a175A9b7E6dDcA8Ee2713E2c7f94c011",
12659
+ "abi": [
12660
+ {
12661
+ "inputs": [
12662
+ {
12663
+ "internalType": "int256",
12664
+ "name": "baseRatePerYear_",
12665
+ "type": "int256"
12666
+ },
12667
+ {
12668
+ "internalType": "int256",
12669
+ "name": "multiplierPerYear_",
12670
+ "type": "int256"
12671
+ },
12672
+ {
12673
+ "internalType": "int256",
12674
+ "name": "kink1_",
12675
+ "type": "int256"
12676
+ },
12677
+ {
12678
+ "internalType": "int256",
12679
+ "name": "multiplier2PerYear_",
12680
+ "type": "int256"
12681
+ },
12682
+ {
12683
+ "internalType": "int256",
12684
+ "name": "baseRate2PerYear_",
12685
+ "type": "int256"
12686
+ },
12687
+ {
12688
+ "internalType": "int256",
12689
+ "name": "kink2_",
12690
+ "type": "int256"
12691
+ },
12692
+ {
12693
+ "internalType": "int256",
12694
+ "name": "jumpMultiplierPerYear_",
12695
+ "type": "int256"
12696
+ },
12697
+ {
12698
+ "internalType": "bool",
12699
+ "name": "timeBased_",
12700
+ "type": "bool"
12701
+ },
12702
+ {
12703
+ "internalType": "uint256",
12704
+ "name": "blocksPerYear_",
12705
+ "type": "uint256"
12706
+ }
12707
+ ],
12708
+ "stateMutability": "nonpayable",
12709
+ "type": "constructor"
12710
+ },
12711
+ {
12712
+ "inputs": [],
12713
+ "name": "InvalidBlocksPerYear",
12714
+ "type": "error"
12715
+ },
12716
+ {
12717
+ "inputs": [],
12718
+ "name": "InvalidKink",
12719
+ "type": "error"
12720
+ },
12721
+ {
12722
+ "inputs": [],
12723
+ "name": "InvalidTimeBasedConfiguration",
12724
+ "type": "error"
12725
+ },
12726
+ {
12727
+ "inputs": [],
12728
+ "name": "NegativeValueNotAllowed",
12729
+ "type": "error"
12730
+ },
12731
+ {
12732
+ "inputs": [],
12733
+ "name": "BASE_RATE_2_PER_BLOCK_OR_SECOND",
12734
+ "outputs": [
12735
+ {
12736
+ "internalType": "int256",
12737
+ "name": "",
12738
+ "type": "int256"
12739
+ }
12740
+ ],
12741
+ "stateMutability": "view",
12742
+ "type": "function"
12743
+ },
12744
+ {
12745
+ "inputs": [],
12746
+ "name": "BASE_RATE_PER_BLOCK_OR_SECOND",
12747
+ "outputs": [
12748
+ {
12749
+ "internalType": "int256",
12750
+ "name": "",
12751
+ "type": "int256"
12752
+ }
12753
+ ],
12754
+ "stateMutability": "view",
12755
+ "type": "function"
12756
+ },
12757
+ {
12758
+ "inputs": [],
12759
+ "name": "JUMP_MULTIPLIER_PER_BLOCK_OR_SECOND",
12760
+ "outputs": [
12761
+ {
12762
+ "internalType": "int256",
12763
+ "name": "",
12764
+ "type": "int256"
12765
+ }
12766
+ ],
12767
+ "stateMutability": "view",
12768
+ "type": "function"
12769
+ },
12770
+ {
12771
+ "inputs": [],
12772
+ "name": "KINK_1",
12773
+ "outputs": [
12774
+ {
12775
+ "internalType": "int256",
12776
+ "name": "",
12777
+ "type": "int256"
12778
+ }
12779
+ ],
12780
+ "stateMutability": "view",
12781
+ "type": "function"
12782
+ },
12783
+ {
12784
+ "inputs": [],
12785
+ "name": "KINK_2",
12786
+ "outputs": [
12787
+ {
12788
+ "internalType": "int256",
12789
+ "name": "",
12790
+ "type": "int256"
12791
+ }
12792
+ ],
12793
+ "stateMutability": "view",
12794
+ "type": "function"
12795
+ },
12796
+ {
12797
+ "inputs": [],
12798
+ "name": "MULTIPLIER_2_PER_BLOCK_OR_SECOND",
12799
+ "outputs": [
12800
+ {
12801
+ "internalType": "int256",
12802
+ "name": "",
12803
+ "type": "int256"
12804
+ }
12805
+ ],
12806
+ "stateMutability": "view",
12807
+ "type": "function"
12808
+ },
12809
+ {
12810
+ "inputs": [],
12811
+ "name": "MULTIPLIER_PER_BLOCK_OR_SECOND",
12812
+ "outputs": [
12813
+ {
12814
+ "internalType": "int256",
12815
+ "name": "",
12816
+ "type": "int256"
12817
+ }
12818
+ ],
12819
+ "stateMutability": "view",
12820
+ "type": "function"
12821
+ },
12822
+ {
12823
+ "inputs": [],
12824
+ "name": "RATE_1",
12825
+ "outputs": [
12826
+ {
12827
+ "internalType": "int256",
12828
+ "name": "",
12829
+ "type": "int256"
12830
+ }
12831
+ ],
12832
+ "stateMutability": "view",
12833
+ "type": "function"
12834
+ },
12835
+ {
12836
+ "inputs": [],
12837
+ "name": "RATE_2",
12838
+ "outputs": [
12839
+ {
12840
+ "internalType": "int256",
12841
+ "name": "",
12842
+ "type": "int256"
12843
+ }
12844
+ ],
12845
+ "stateMutability": "view",
12846
+ "type": "function"
12847
+ },
12848
+ {
12849
+ "inputs": [],
12850
+ "name": "blocksOrSecondsPerYear",
12851
+ "outputs": [
12852
+ {
12853
+ "internalType": "uint256",
12854
+ "name": "",
12855
+ "type": "uint256"
12856
+ }
12857
+ ],
12858
+ "stateMutability": "view",
12859
+ "type": "function"
12860
+ },
12861
+ {
12862
+ "inputs": [],
12863
+ "name": "getBlockNumberOrTimestamp",
12864
+ "outputs": [
12865
+ {
12866
+ "internalType": "uint256",
12867
+ "name": "",
12868
+ "type": "uint256"
12869
+ }
12870
+ ],
12871
+ "stateMutability": "view",
12872
+ "type": "function"
12873
+ },
12874
+ {
12875
+ "inputs": [
12876
+ {
12877
+ "internalType": "uint256",
12878
+ "name": "cash",
12879
+ "type": "uint256"
12880
+ },
12881
+ {
12882
+ "internalType": "uint256",
12883
+ "name": "borrows",
12884
+ "type": "uint256"
12885
+ },
12886
+ {
12887
+ "internalType": "uint256",
12888
+ "name": "reserves",
12889
+ "type": "uint256"
12890
+ },
12891
+ {
12892
+ "internalType": "uint256",
12893
+ "name": "badDebt",
12894
+ "type": "uint256"
12895
+ }
12896
+ ],
12897
+ "name": "getBorrowRate",
12898
+ "outputs": [
12899
+ {
12900
+ "internalType": "uint256",
12901
+ "name": "",
12902
+ "type": "uint256"
12903
+ }
12904
+ ],
12905
+ "stateMutability": "view",
12906
+ "type": "function"
12907
+ },
12908
+ {
12909
+ "inputs": [
12910
+ {
12911
+ "internalType": "uint256",
12912
+ "name": "cash",
12913
+ "type": "uint256"
12914
+ },
12915
+ {
12916
+ "internalType": "uint256",
12917
+ "name": "borrows",
12918
+ "type": "uint256"
12919
+ },
12920
+ {
12921
+ "internalType": "uint256",
12922
+ "name": "reserves",
12923
+ "type": "uint256"
12924
+ },
12925
+ {
12926
+ "internalType": "uint256",
12927
+ "name": "reserveFactorMantissa",
12928
+ "type": "uint256"
12929
+ },
12930
+ {
12931
+ "internalType": "uint256",
12932
+ "name": "badDebt",
12933
+ "type": "uint256"
12934
+ }
12935
+ ],
12936
+ "name": "getSupplyRate",
12937
+ "outputs": [
12938
+ {
12939
+ "internalType": "uint256",
12940
+ "name": "",
12941
+ "type": "uint256"
12942
+ }
12943
+ ],
12944
+ "stateMutability": "view",
12945
+ "type": "function"
12946
+ },
12947
+ {
12948
+ "inputs": [],
12949
+ "name": "isInterestRateModel",
12950
+ "outputs": [
12951
+ {
12952
+ "internalType": "bool",
12953
+ "name": "",
12954
+ "type": "bool"
12955
+ }
12956
+ ],
12957
+ "stateMutability": "pure",
12958
+ "type": "function"
12959
+ },
12960
+ {
12961
+ "inputs": [],
12962
+ "name": "isTimeBased",
12963
+ "outputs": [
12964
+ {
12965
+ "internalType": "bool",
12966
+ "name": "",
12967
+ "type": "bool"
12968
+ }
12969
+ ],
12970
+ "stateMutability": "view",
12971
+ "type": "function"
12972
+ },
12973
+ {
12974
+ "inputs": [
12975
+ {
12976
+ "internalType": "uint256",
12977
+ "name": "cash",
12978
+ "type": "uint256"
12979
+ },
12980
+ {
12981
+ "internalType": "uint256",
12982
+ "name": "borrows",
12983
+ "type": "uint256"
12984
+ },
12985
+ {
12986
+ "internalType": "uint256",
12987
+ "name": "reserves",
12988
+ "type": "uint256"
12989
+ },
12990
+ {
12991
+ "internalType": "uint256",
12992
+ "name": "badDebt",
12993
+ "type": "uint256"
12994
+ }
12995
+ ],
12996
+ "name": "utilizationRate",
12997
+ "outputs": [
12998
+ {
12999
+ "internalType": "uint256",
13000
+ "name": "",
13001
+ "type": "uint256"
13002
+ }
13003
+ ],
13004
+ "stateMutability": "pure",
13005
+ "type": "function"
13006
+ }
13007
+ ]
13008
+ },
12657
13009
  "VTokenBeacon": {
12658
13010
  "address": "0xE9381D8CA7006c12Ae9eB97890575E705996fa66",
12659
13011
  "abi": [