@gearbox-protocol/sdk 9.14.0 → 9.15.0

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 (233) hide show
  1. package/dist/cjs/permissionless/bindings/address-provider.js +51 -0
  2. package/dist/cjs/permissionless/bindings/base-contract.js +173 -0
  3. package/dist/cjs/permissionless/bindings/bytecode-repository.js +526 -0
  4. package/dist/cjs/permissionless/bindings/compressors/index.js +24 -0
  5. package/dist/cjs/permissionless/bindings/compressors/token-compressor.js +110 -0
  6. package/dist/cjs/permissionless/bindings/compressors/withdrawal-compressor.js +60 -0
  7. package/dist/cjs/permissionless/bindings/cross-chain-multisig.js +355 -0
  8. package/dist/cjs/permissionless/bindings/factory/abstract-factory.js +52 -0
  9. package/dist/cjs/permissionless/bindings/factory/credit-factory.js +197 -0
  10. package/dist/cjs/permissionless/bindings/factory/pool-factory.js +69 -0
  11. package/dist/cjs/permissionless/bindings/factory/price-oracle-factory.js +47 -0
  12. package/dist/cjs/permissionless/bindings/governance/batches-chain.js +41 -0
  13. package/dist/cjs/permissionless/bindings/governance/governor.js +243 -0
  14. package/dist/cjs/permissionless/bindings/governance/index.js +26 -0
  15. package/dist/cjs/permissionless/bindings/governance/timelock.js +104 -0
  16. package/dist/cjs/permissionless/bindings/governance/types.js +16 -0
  17. package/dist/cjs/permissionless/bindings/index.js +48 -0
  18. package/dist/cjs/permissionless/bindings/instance-manager.js +244 -0
  19. package/dist/cjs/permissionless/bindings/market-configurator-factory.js +75 -0
  20. package/dist/cjs/permissionless/bindings/market-configurator.js +771 -0
  21. package/dist/cjs/permissionless/bindings/price-feed-store.js +395 -0
  22. package/dist/cjs/permissionless/bindings/pricefeeds/balancer-stable.js +63 -0
  23. package/dist/cjs/permissionless/bindings/pricefeeds/balancer-weighted.js +63 -0
  24. package/dist/cjs/permissionless/bindings/pricefeeds/bounded.js +47 -0
  25. package/dist/cjs/permissionless/bindings/pricefeeds/composite.js +43 -0
  26. package/dist/cjs/permissionless/bindings/pricefeeds/constant.js +42 -0
  27. package/dist/cjs/permissionless/bindings/pricefeeds/curve-crypto.js +67 -0
  28. package/dist/cjs/permissionless/bindings/pricefeeds/curve-stable.js +67 -0
  29. package/dist/cjs/permissionless/bindings/pricefeeds/curve-twap.js +70 -0
  30. package/dist/cjs/permissionless/bindings/pricefeeds/curve-usd.js +50 -0
  31. package/dist/cjs/permissionless/bindings/pricefeeds/erc4626.js +72 -0
  32. package/dist/cjs/permissionless/bindings/pricefeeds/external.js +38 -0
  33. package/dist/cjs/permissionless/bindings/pricefeeds/index.js +63 -0
  34. package/dist/cjs/permissionless/bindings/pricefeeds/kodiak.js +50 -0
  35. package/dist/cjs/permissionless/bindings/pricefeeds/mellow-lrt.js +122 -0
  36. package/dist/cjs/permissionless/bindings/pricefeeds/pendle-pt-twap.js +51 -0
  37. package/dist/cjs/permissionless/bindings/pricefeeds/pyth.js +65 -0
  38. package/dist/cjs/permissionless/bindings/pricefeeds/redstone.js +81 -0
  39. package/dist/cjs/permissionless/bindings/pricefeeds/wsteth.js +63 -0
  40. package/dist/cjs/permissionless/bindings/pricefeeds/zero.js +33 -0
  41. package/dist/cjs/permissionless/bindings/router/index.js +22 -0
  42. package/dist/cjs/permissionless/bindings/router/routing-manager.js +58 -0
  43. package/dist/cjs/permissionless/bindings/treasury-splitter.js +60 -0
  44. package/dist/cjs/permissionless/bindings/types.js +16 -0
  45. package/dist/cjs/permissionless/chains/archive-transport.js +274 -0
  46. package/dist/cjs/permissionless/core/auditor.js +16 -0
  47. package/dist/cjs/permissionless/core/bytecode.js +16 -0
  48. package/dist/cjs/permissionless/core/index.js +32 -0
  49. package/dist/cjs/permissionless/core/pricefeed-builder.js +16 -0
  50. package/dist/cjs/permissionless/core/pricefeed.js +16 -0
  51. package/dist/cjs/permissionless/core/proposal.js +16 -0
  52. package/dist/cjs/permissionless/core/raw-tx.js +38 -0
  53. package/dist/cjs/permissionless/deployment/addresses.js +35 -0
  54. package/dist/cjs/permissionless/deployment/mainnet.js +54 -0
  55. package/dist/cjs/permissionless/index.js +32 -0
  56. package/dist/cjs/permissionless/package.json +1 -0
  57. package/dist/cjs/permissionless/plugins/index.js +40 -0
  58. package/dist/cjs/permissionless/plugins/irm/constructor-params-abi.js +81 -0
  59. package/dist/cjs/permissionless/plugins/loss-policies/constructor-params-abi.js +79 -0
  60. package/dist/cjs/permissionless/plugins/rate-keepers/constructor-params-abi.js +89 -0
  61. package/dist/cjs/permissionless/utils/abi-decoder.js +72 -0
  62. package/dist/cjs/permissionless/utils/abi-encoder.js +89 -0
  63. package/dist/cjs/permissionless/utils/block-utils.js +55 -0
  64. package/dist/cjs/permissionless/utils/create2.js +113 -0
  65. package/dist/cjs/permissionless/utils/format.js +97 -0
  66. package/dist/cjs/permissionless/utils/governance/batch.js +114 -0
  67. package/dist/cjs/permissionless/utils/governance/index.js +26 -0
  68. package/dist/cjs/permissionless/utils/governance/timelock-txs.js +44 -0
  69. package/dist/cjs/permissionless/utils/governance/types.js +16 -0
  70. package/dist/cjs/permissionless/utils/index.js +38 -0
  71. package/dist/cjs/permissionless/utils/literals.js +46 -0
  72. package/dist/cjs/permissionless/utils/price-update/get-price-feeds.js +91 -0
  73. package/dist/cjs/permissionless/utils/price-update/get-price-update-tx.js +84 -0
  74. package/dist/cjs/permissionless/utils/price-update/get-prices.js +123 -0
  75. package/dist/cjs/permissionless/utils/price-update/get-updatable-feeds.js +52 -0
  76. package/dist/cjs/permissionless/utils/price-update/index.js +28 -0
  77. package/dist/cjs/permissionless/utils/signature.js +35 -0
  78. package/dist/cjs/sdk/GearboxSDK.js +5 -1
  79. package/dist/esm/permissionless/bindings/address-provider.js +27 -0
  80. package/dist/esm/permissionless/bindings/base-contract.js +151 -0
  81. package/dist/esm/permissionless/bindings/bytecode-repository.js +508 -0
  82. package/dist/esm/permissionless/bindings/compressors/index.js +2 -0
  83. package/dist/esm/permissionless/bindings/compressors/token-compressor.js +89 -0
  84. package/dist/esm/permissionless/bindings/compressors/withdrawal-compressor.js +38 -0
  85. package/dist/esm/permissionless/bindings/cross-chain-multisig.js +336 -0
  86. package/dist/esm/permissionless/bindings/factory/abstract-factory.js +28 -0
  87. package/dist/esm/permissionless/bindings/factory/credit-factory.js +177 -0
  88. package/dist/esm/permissionless/bindings/factory/pool-factory.js +45 -0
  89. package/dist/esm/permissionless/bindings/factory/price-oracle-factory.js +23 -0
  90. package/dist/esm/permissionless/bindings/governance/batches-chain.js +17 -0
  91. package/dist/esm/permissionless/bindings/governance/governor.js +224 -0
  92. package/dist/esm/permissionless/bindings/governance/index.js +3 -0
  93. package/dist/esm/permissionless/bindings/governance/timelock.js +80 -0
  94. package/dist/esm/permissionless/bindings/governance/types.js +0 -0
  95. package/dist/esm/permissionless/bindings/index.js +14 -0
  96. package/dist/esm/permissionless/bindings/instance-manager.js +223 -0
  97. package/dist/esm/permissionless/bindings/market-configurator-factory.js +51 -0
  98. package/dist/esm/permissionless/bindings/market-configurator.js +765 -0
  99. package/dist/esm/permissionless/bindings/price-feed-store.js +376 -0
  100. package/dist/esm/permissionless/bindings/pricefeeds/balancer-stable.js +39 -0
  101. package/dist/esm/permissionless/bindings/pricefeeds/balancer-weighted.js +39 -0
  102. package/dist/esm/permissionless/bindings/pricefeeds/bounded.js +23 -0
  103. package/dist/esm/permissionless/bindings/pricefeeds/composite.js +19 -0
  104. package/dist/esm/permissionless/bindings/pricefeeds/constant.js +18 -0
  105. package/dist/esm/permissionless/bindings/pricefeeds/curve-crypto.js +43 -0
  106. package/dist/esm/permissionless/bindings/pricefeeds/curve-stable.js +43 -0
  107. package/dist/esm/permissionless/bindings/pricefeeds/curve-twap.js +46 -0
  108. package/dist/esm/permissionless/bindings/pricefeeds/curve-usd.js +26 -0
  109. package/dist/esm/permissionless/bindings/pricefeeds/erc4626.js +48 -0
  110. package/dist/esm/permissionless/bindings/pricefeeds/external.js +14 -0
  111. package/dist/esm/permissionless/bindings/pricefeeds/index.js +39 -0
  112. package/dist/esm/permissionless/bindings/pricefeeds/kodiak.js +26 -0
  113. package/dist/esm/permissionless/bindings/pricefeeds/mellow-lrt.js +98 -0
  114. package/dist/esm/permissionless/bindings/pricefeeds/pendle-pt-twap.js +27 -0
  115. package/dist/esm/permissionless/bindings/pricefeeds/pyth.js +41 -0
  116. package/dist/esm/permissionless/bindings/pricefeeds/redstone.js +57 -0
  117. package/dist/esm/permissionless/bindings/pricefeeds/wsteth.js +39 -0
  118. package/dist/esm/permissionless/bindings/pricefeeds/zero.js +9 -0
  119. package/dist/esm/permissionless/bindings/router/index.js +1 -0
  120. package/dist/esm/permissionless/bindings/router/routing-manager.js +36 -0
  121. package/dist/esm/permissionless/bindings/treasury-splitter.js +36 -0
  122. package/dist/esm/permissionless/bindings/types.js +0 -0
  123. package/dist/esm/permissionless/chains/archive-transport.js +250 -0
  124. package/dist/esm/permissionless/core/auditor.js +0 -0
  125. package/dist/esm/permissionless/core/bytecode.js +0 -0
  126. package/dist/esm/permissionless/core/index.js +6 -0
  127. package/dist/esm/permissionless/core/pricefeed-builder.js +0 -0
  128. package/dist/esm/permissionless/core/pricefeed.js +0 -0
  129. package/dist/esm/permissionless/core/proposal.js +0 -0
  130. package/dist/esm/permissionless/core/raw-tx.js +14 -0
  131. package/dist/esm/permissionless/deployment/addresses.js +11 -0
  132. package/dist/esm/permissionless/deployment/mainnet.js +27 -0
  133. package/dist/esm/permissionless/index.js +6 -0
  134. package/dist/esm/permissionless/package.json +1 -0
  135. package/dist/esm/permissionless/plugins/index.js +20 -0
  136. package/dist/esm/permissionless/plugins/irm/constructor-params-abi.js +52 -0
  137. package/dist/esm/permissionless/plugins/loss-policies/constructor-params-abi.js +50 -0
  138. package/dist/esm/permissionless/plugins/rate-keepers/constructor-params-abi.js +59 -0
  139. package/dist/esm/permissionless/utils/abi-decoder.js +50 -0
  140. package/dist/esm/permissionless/utils/abi-encoder.js +65 -0
  141. package/dist/esm/permissionless/utils/block-utils.js +31 -0
  142. package/dist/esm/permissionless/utils/create2.js +85 -0
  143. package/dist/esm/permissionless/utils/format.js +67 -0
  144. package/dist/esm/permissionless/utils/governance/batch.js +87 -0
  145. package/dist/esm/permissionless/utils/governance/index.js +3 -0
  146. package/dist/esm/permissionless/utils/governance/timelock-txs.js +20 -0
  147. package/dist/esm/permissionless/utils/governance/types.js +0 -0
  148. package/dist/esm/permissionless/utils/index.js +9 -0
  149. package/dist/esm/permissionless/utils/literals.js +16 -0
  150. package/dist/esm/permissionless/utils/price-update/get-price-feeds.js +65 -0
  151. package/dist/esm/permissionless/utils/price-update/get-price-update-tx.js +65 -0
  152. package/dist/esm/permissionless/utils/price-update/get-prices.js +103 -0
  153. package/dist/esm/permissionless/utils/price-update/get-updatable-feeds.js +31 -0
  154. package/dist/esm/permissionless/utils/price-update/index.js +4 -0
  155. package/dist/esm/permissionless/utils/signature.js +11 -0
  156. package/dist/esm/sdk/GearboxSDK.js +5 -1
  157. package/dist/types/permissionless/bindings/address-provider.d.ts +259 -0
  158. package/dist/types/permissionless/bindings/base-contract.d.ts +23 -0
  159. package/dist/types/permissionless/bindings/bytecode-repository.d.ts +1352 -0
  160. package/dist/types/permissionless/bindings/compressors/index.d.ts +2 -0
  161. package/dist/types/permissionless/bindings/compressors/token-compressor.d.ts +118 -0
  162. package/dist/types/permissionless/bindings/compressors/withdrawal-compressor.d.ts +331 -0
  163. package/dist/types/permissionless/bindings/cross-chain-multisig.d.ts +835 -0
  164. package/dist/types/permissionless/bindings/factory/abstract-factory.d.ts +17 -0
  165. package/dist/types/permissionless/bindings/factory/credit-factory.d.ts +224 -0
  166. package/dist/types/permissionless/bindings/factory/pool-factory.d.ts +86 -0
  167. package/dist/types/permissionless/bindings/factory/price-oracle-factory.d.ts +38 -0
  168. package/dist/types/permissionless/bindings/governance/batches-chain.d.ts +39 -0
  169. package/dist/types/permissionless/bindings/governance/governor.d.ts +615 -0
  170. package/dist/types/permissionless/bindings/governance/index.d.ts +3 -0
  171. package/dist/types/permissionless/bindings/governance/timelock.d.ts +10 -0
  172. package/dist/types/permissionless/bindings/governance/types.d.ts +42 -0
  173. package/dist/types/permissionless/bindings/index.d.ts +14 -0
  174. package/dist/types/permissionless/bindings/instance-manager.d.ts +361 -0
  175. package/dist/types/permissionless/bindings/market-configurator-factory.d.ts +244 -0
  176. package/dist/types/permissionless/bindings/market-configurator.d.ts +1656 -0
  177. package/dist/types/permissionless/bindings/price-feed-store.d.ts +605 -0
  178. package/dist/types/permissionless/bindings/pricefeeds/balancer-stable.d.ts +2 -0
  179. package/dist/types/permissionless/bindings/pricefeeds/balancer-weighted.d.ts +2 -0
  180. package/dist/types/permissionless/bindings/pricefeeds/bounded.d.ts +2 -0
  181. package/dist/types/permissionless/bindings/pricefeeds/composite.d.ts +2 -0
  182. package/dist/types/permissionless/bindings/pricefeeds/constant.d.ts +2 -0
  183. package/dist/types/permissionless/bindings/pricefeeds/curve-crypto.d.ts +2 -0
  184. package/dist/types/permissionless/bindings/pricefeeds/curve-stable.d.ts +2 -0
  185. package/dist/types/permissionless/bindings/pricefeeds/curve-twap.d.ts +2 -0
  186. package/dist/types/permissionless/bindings/pricefeeds/curve-usd.d.ts +2 -0
  187. package/dist/types/permissionless/bindings/pricefeeds/erc4626.d.ts +2 -0
  188. package/dist/types/permissionless/bindings/pricefeeds/external.d.ts +2 -0
  189. package/dist/types/permissionless/bindings/pricefeeds/index.d.ts +2 -0
  190. package/dist/types/permissionless/bindings/pricefeeds/kodiak.d.ts +2 -0
  191. package/dist/types/permissionless/bindings/pricefeeds/mellow-lrt.d.ts +2 -0
  192. package/dist/types/permissionless/bindings/pricefeeds/pendle-pt-twap.d.ts +2 -0
  193. package/dist/types/permissionless/bindings/pricefeeds/pyth.d.ts +2 -0
  194. package/dist/types/permissionless/bindings/pricefeeds/redstone.d.ts +2 -0
  195. package/dist/types/permissionless/bindings/pricefeeds/wsteth.d.ts +2 -0
  196. package/dist/types/permissionless/bindings/pricefeeds/zero.d.ts +2 -0
  197. package/dist/types/permissionless/bindings/router/index.d.ts +1 -0
  198. package/dist/types/permissionless/bindings/router/routing-manager.d.ts +502 -0
  199. package/dist/types/permissionless/bindings/treasury-splitter.d.ts +21 -0
  200. package/dist/types/permissionless/bindings/types.d.ts +65 -0
  201. package/dist/types/permissionless/chains/archive-transport.d.ts +49 -0
  202. package/dist/types/permissionless/core/auditor.d.ts +7 -0
  203. package/dist/types/permissionless/core/bytecode.d.ts +46 -0
  204. package/dist/types/permissionless/core/index.d.ts +6 -0
  205. package/dist/types/permissionless/core/pricefeed-builder.d.ts +59 -0
  206. package/dist/types/permissionless/core/pricefeed.d.ts +10 -0
  207. package/dist/types/permissionless/core/proposal.d.ts +33 -0
  208. package/dist/types/permissionless/core/raw-tx.d.ts +4 -0
  209. package/dist/types/permissionless/deployment/addresses.d.ts +7 -0
  210. package/dist/types/permissionless/deployment/mainnet.d.ts +10 -0
  211. package/dist/types/permissionless/index.d.ts +6 -0
  212. package/dist/types/permissionless/plugins/index.d.ts +3 -0
  213. package/dist/types/permissionless/plugins/irm/constructor-params-abi.d.ts +63 -0
  214. package/dist/types/permissionless/plugins/loss-policies/constructor-params-abi.d.ts +48 -0
  215. package/dist/types/permissionless/plugins/rate-keepers/constructor-params-abi.d.ts +55 -0
  216. package/dist/types/permissionless/utils/abi-decoder.d.ts +13 -0
  217. package/dist/types/permissionless/utils/abi-encoder.d.ts +7 -0
  218. package/dist/types/permissionless/utils/block-utils.d.ts +8 -0
  219. package/dist/types/permissionless/utils/create2.d.ts +17 -0
  220. package/dist/types/permissionless/utils/format.d.ts +7 -0
  221. package/dist/types/permissionless/utils/governance/batch.d.ts +17 -0
  222. package/dist/types/permissionless/utils/governance/index.d.ts +3 -0
  223. package/dist/types/permissionless/utils/governance/timelock-txs.d.ts +2 -0
  224. package/dist/types/permissionless/utils/governance/types.d.ts +16 -0
  225. package/dist/types/permissionless/utils/index.d.ts +9 -0
  226. package/dist/types/permissionless/utils/literals.d.ts +7 -0
  227. package/dist/types/permissionless/utils/price-update/get-price-feeds.d.ts +8 -0
  228. package/dist/types/permissionless/utils/price-update/get-price-update-tx.d.ts +9 -0
  229. package/dist/types/permissionless/utils/price-update/get-prices.d.ts +6 -0
  230. package/dist/types/permissionless/utils/price-update/get-updatable-feeds.d.ts +8 -0
  231. package/dist/types/permissionless/utils/price-update/index.d.ts +4 -0
  232. package/dist/types/permissionless/utils/signature.d.ts +2 -0
  233. package/package.json +11 -1
@@ -0,0 +1,765 @@
1
+ import {
2
+ decodeAbiParameters,
3
+ encodeAbiParameters,
4
+ encodeFunctionData,
5
+ erc20Abi,
6
+ erc4626Abi,
7
+ hexToString,
8
+ keccak256,
9
+ parseAbi,
10
+ stringToHex,
11
+ toBytes
12
+ } from "viem";
13
+ import {
14
+ creditFacadeParamsAbi,
15
+ creditManagerParamsAbi
16
+ } from "../../abi/310/configure/creditSuiteParams.js";
17
+ import { iMarketConfiguratorV310Abi } from "../../abi/310/generated.js";
18
+ import { json_stringify } from "../../sdk/utils/index.js";
19
+ import {
20
+ parseIrmDeployParams,
21
+ parseLossPolicyDeployParams,
22
+ parseRateKeeperDeployParams
23
+ } from "../plugins";
24
+ import { convertPercent } from "../utils";
25
+ import { handleSalt } from "../utils/create2";
26
+ import { AddressProviderContract, BaseContract } from ".";
27
+ import { CreditFactory } from "./factory/credit-factory";
28
+ import { PoolFactory } from "./factory/pool-factory";
29
+ import { PriceOracleFactory } from "./factory/price-oracle-factory";
30
+ const abi = iMarketConfiguratorV310Abi;
31
+ class MarketConfiguratorContract extends BaseContract {
32
+ creditFactory;
33
+ poolFactory;
34
+ priceOracleFactory;
35
+ constructor(address, client) {
36
+ super(abi, address, client, "MarketConfigurator");
37
+ this.creditFactory = new CreditFactory();
38
+ this.poolFactory = new PoolFactory();
39
+ this.priceOracleFactory = new PriceOracleFactory();
40
+ }
41
+ async getAddressProvider() {
42
+ const addressProvider = await this.contract.read.addressProvider();
43
+ return new AddressProviderContract(addressProvider, this.client);
44
+ }
45
+ //
46
+ // MARKET CONFIG
47
+ //
48
+ async previewCreateMarket(params) {
49
+ return this.contract.read.previewCreateMarket([
50
+ BigInt(params.minorVersion),
51
+ params.underlying,
52
+ params.name,
53
+ params.symbol
54
+ ]);
55
+ }
56
+ async createMarket(params) {
57
+ const pool = await this.contract.read.previewCreateMarket([
58
+ BigInt(params.minorVersion),
59
+ params.underlying,
60
+ params.name,
61
+ params.symbol
62
+ ]);
63
+ const tx = this.createRawTx({
64
+ functionName: "createMarket",
65
+ args: [
66
+ BigInt(params.minorVersion),
67
+ params.underlying,
68
+ params.name,
69
+ params.symbol,
70
+ params.interestRateModelParams,
71
+ params.rateKeeperParams,
72
+ params.lossPolicyParams,
73
+ params.underlyingPriceFeed
74
+ ]
75
+ });
76
+ return {
77
+ tx,
78
+ pool
79
+ };
80
+ }
81
+ addAsset(pool, args) {
82
+ return this.createRawTx({
83
+ functionName: "addToken",
84
+ args: [pool, args.token, args.priceFeed]
85
+ });
86
+ }
87
+ //
88
+ // PRICE ORACLE CONFIG
89
+ //
90
+ configurePriceOracle(pool, config) {
91
+ return this.createRawTx({
92
+ functionName: "configurePriceOracle",
93
+ args: [pool, config]
94
+ });
95
+ }
96
+ setPriceFeed(pool, params) {
97
+ return this.configurePriceOracle(
98
+ pool,
99
+ this.priceOracleFactory.setPriceFeed(params)
100
+ );
101
+ }
102
+ setReservePriceFeed(pool, params) {
103
+ return this.configurePriceOracle(
104
+ pool,
105
+ this.priceOracleFactory.setReservePriceFeed(params)
106
+ );
107
+ }
108
+ //
109
+ // POOL CONFIG
110
+ //
111
+ configurePool(pool, calldata) {
112
+ return this.createRawTx({
113
+ functionName: "configurePool",
114
+ args: [pool, calldata]
115
+ });
116
+ }
117
+ setTokenLimit(pool, params) {
118
+ return this.configurePool(pool, this.poolFactory.setTokenLimit(params));
119
+ }
120
+ setTokenQuotaIncreaseFee(pool, params) {
121
+ return this.configurePool(
122
+ pool,
123
+ this.poolFactory.setTokenQuotaIncreaseFee(params)
124
+ );
125
+ }
126
+ setTotalDebtLimit(pool, params) {
127
+ return this.configurePool(pool, this.poolFactory.setTotalDebtLimit(params));
128
+ }
129
+ setCreditManagerDebtLimit(pool, args) {
130
+ return this.configurePool(
131
+ pool,
132
+ this.poolFactory.setCreditManagerDebtLimit(args)
133
+ );
134
+ }
135
+ /// INTEREST RATE MODEL CONFIG
136
+ updateInterestRateModel(pool, args) {
137
+ return this.createRawTx({
138
+ functionName: "updateInterestRateModel",
139
+ args: [pool, args.deployParams]
140
+ });
141
+ }
142
+ //
143
+ // CREDIT MANAGER CONFIG
144
+ //
145
+ async createCreditSuite(marketInfo, args) {
146
+ const addressProvider = await this.contract.read.addressProvider();
147
+ const creditSuiteParams = encodeAbiParameters(
148
+ [
149
+ {
150
+ type: "tuple",
151
+ components: [
152
+ { type: "uint8", name: "maxEnabledTokens" },
153
+ { type: "uint16", name: "feeInterest" },
154
+ { type: "uint16", name: "feeLiquidation" },
155
+ { type: "uint16", name: "liquidationPremium" },
156
+ { type: "uint16", name: "feeLiquidationExpired" },
157
+ { type: "uint16", name: "liquidationPremiumExpired" },
158
+ { type: "uint128", name: "minDebt" },
159
+ { type: "uint128", name: "maxDebt" },
160
+ { type: "string", name: "name" },
161
+ {
162
+ type: "tuple",
163
+ name: "accountFactoryParams",
164
+ components: [
165
+ {
166
+ type: "bytes32",
167
+ name: "postfix"
168
+ },
169
+ {
170
+ type: "bytes32",
171
+ name: "salt"
172
+ },
173
+ {
174
+ type: "bytes",
175
+ name: "constructorParams"
176
+ }
177
+ ]
178
+ }
179
+ ]
180
+ },
181
+ {
182
+ type: "tuple",
183
+ name: "creditFacadeParams",
184
+ components: [
185
+ { type: "address", name: "degenNFT" },
186
+ { type: "bool", name: "isExpirable" },
187
+ { type: "bool", name: "migrateBotList" }
188
+ ]
189
+ }
190
+ ],
191
+ [
192
+ {
193
+ maxEnabledTokens: args.params.maxEnabledTokens,
194
+ feeInterest: convertPercent(args.params.feeInterest),
195
+ feeLiquidation: convertPercent(args.params.feeLiquidation),
196
+ liquidationPremium: convertPercent(args.params.feeLiquidationPremium),
197
+ feeLiquidationExpired: convertPercent(
198
+ args.params.feeLiquidationExpired
199
+ ),
200
+ liquidationPremiumExpired: convertPercent(
201
+ args.params.feeLiquidationPremiumExpired
202
+ ),
203
+ minDebt: args.params.minDebt,
204
+ maxDebt: args.params.maxDebt,
205
+ name: args.params.name,
206
+ accountFactoryParams: {
207
+ postfix: stringToHex(args.params.accountFactoryType, { size: 32 }),
208
+ salt: args.params.accountFactorySalt ? handleSalt(args.params.accountFactorySalt) : handleSalt(
209
+ keccak256(toBytes(marketInfo.name + args.params.name))
210
+ ),
211
+ constructorParams: encodeAbiParameters(
212
+ [{ type: "address" }],
213
+ [addressProvider]
214
+ )
215
+ }
216
+ },
217
+ {
218
+ degenNFT: args.params.whitelistPolicy,
219
+ isExpirable: args.params.isExpired,
220
+ migrateBotList: false
221
+ }
222
+ ]
223
+ );
224
+ const creditManagerAddress = await this.contract.read.previewCreateCreditSuite([
225
+ BigInt(marketInfo.minorVersion),
226
+ BigInt(args.params.minorVersion),
227
+ marketInfo.underlyingAsset,
228
+ marketInfo.name,
229
+ marketInfo.symbol,
230
+ creditSuiteParams
231
+ ]);
232
+ const tx = this.createRawTx({
233
+ functionName: "createCreditSuite",
234
+ args: [
235
+ BigInt(args.params.minorVersion),
236
+ marketInfo.pool,
237
+ creditSuiteParams
238
+ ]
239
+ });
240
+ return {
241
+ tx,
242
+ creditManager: creditManagerAddress
243
+ };
244
+ }
245
+ configureCreditManager(creditManager, calldata) {
246
+ return this.createRawTx({
247
+ functionName: "configureCreditSuite",
248
+ args: [creditManager, calldata]
249
+ });
250
+ }
251
+ configureAdapterFor(creditManager, targetContract, data) {
252
+ return this.configureCreditManager(
253
+ creditManager,
254
+ this.creditFactory.configureAdapterFor(targetContract, data)
255
+ );
256
+ }
257
+ addCollateralToken(creditManager, args) {
258
+ return this.configureCreditManager(
259
+ creditManager,
260
+ this.creditFactory.addCollateralToken(args)
261
+ );
262
+ }
263
+ setFees(params) {
264
+ return this.configureCreditManager(
265
+ params.creditManager,
266
+ this.creditFactory.setFees(params)
267
+ );
268
+ }
269
+ rampLiquidationThreshold(creditManager, args) {
270
+ return this.configureCreditManager(
271
+ creditManager,
272
+ this.creditFactory.rampLiquidationThreshold(args)
273
+ );
274
+ }
275
+ forbidToken(params) {
276
+ return this.configureCreditManager(
277
+ params.creditManager,
278
+ this.creditFactory.forbidToken(params.token)
279
+ );
280
+ }
281
+ allowToken(params) {
282
+ return this.configureCreditManager(
283
+ params.creditManager,
284
+ this.creditFactory.allowToken(params.token)
285
+ );
286
+ }
287
+ setExpirationDate(params) {
288
+ return this.configureCreditManager(
289
+ params.creditManager,
290
+ this.creditFactory.setExpirationDate(params)
291
+ );
292
+ }
293
+ pauseCreditManager(params) {
294
+ return this.configureCreditManager(
295
+ params.creditManager,
296
+ this.creditFactory.pause()
297
+ );
298
+ }
299
+ unpauseCreditManager(params) {
300
+ return this.configureCreditManager(
301
+ params.creditManager,
302
+ this.creditFactory.unpause()
303
+ );
304
+ }
305
+ forbidAdapter(params) {
306
+ return this.configureCreditManager(
307
+ params.creditManager,
308
+ this.creditFactory.forbidAdapter(params.target)
309
+ );
310
+ }
311
+ //
312
+ // RATE KEEPER CONFIG
313
+ //
314
+ async updateRateKeeper(pool, args) {
315
+ return this.createRawTx({
316
+ functionName: "updateRateKeeper",
317
+ args: [pool, args.deployParams]
318
+ });
319
+ }
320
+ configureRateKeeper(pool, calldata) {
321
+ return this.createRawTx({
322
+ functionName: "configureRateKeeper",
323
+ args: [pool, calldata]
324
+ });
325
+ }
326
+ //
327
+ // LOSS POLICY CONFIG
328
+ //
329
+ configureLossPolicy(pool, calldata) {
330
+ return this.createRawTx({
331
+ functionName: "configureLossPolicy",
332
+ args: [pool, calldata]
333
+ });
334
+ }
335
+ updateLossPolicy(pool, deployParams) {
336
+ return this.createRawTx({
337
+ functionName: "updateLossPolicy",
338
+ args: [pool, deployParams]
339
+ });
340
+ }
341
+ enableLossPolicy(pool) {
342
+ return this.createRawTx({
343
+ functionName: "configureLossPolicy",
344
+ args: [
345
+ pool,
346
+ encodeFunctionData({
347
+ abi: parseAbi(["function enable() external"]),
348
+ functionName: "enable"
349
+ })
350
+ ]
351
+ });
352
+ }
353
+ disableLossPolicy(pool) {
354
+ return this.createRawTx({
355
+ functionName: "configureLossPolicy",
356
+ args: [
357
+ pool,
358
+ encodeFunctionData({
359
+ abi: parseAbi(["function disable() external"]),
360
+ functionName: "disable"
361
+ })
362
+ ]
363
+ });
364
+ }
365
+ //
366
+ // ROLES
367
+ //
368
+ async treasury() {
369
+ return await this.contract.read.treasury();
370
+ }
371
+ async admins() {
372
+ const [admin, emergencyAdmin, treasury, acl] = await Promise.all([
373
+ this.contract.read.admin(),
374
+ this.contract.read.emergencyAdmin(),
375
+ this.contract.read.treasury(),
376
+ this.contract.read.acl()
377
+ ]);
378
+ const results = await this.client.multicall({
379
+ allowFailure: false,
380
+ contracts: [
381
+ {
382
+ address: acl,
383
+ abi: parseAbi([
384
+ "function getRoleHolders(bytes32) view returns (address[])"
385
+ ]),
386
+ functionName: "getRoleHolders",
387
+ args: [stringToHex("PAUSABLE_ADMIN", { size: 32 })]
388
+ },
389
+ {
390
+ address: acl,
391
+ abi: parseAbi([
392
+ "function getRoleHolders(bytes32) view returns (address[])"
393
+ ]),
394
+ functionName: "getRoleHolders",
395
+ args: [stringToHex("UNPAUSABLE_ADMIN", { size: 32 })]
396
+ }
397
+ ]
398
+ });
399
+ return {
400
+ admin,
401
+ emergencyAdmin,
402
+ treasury,
403
+ pausableAdmins: [...results[0]],
404
+ unpausableAdmins: [...results[1]]
405
+ };
406
+ }
407
+ async multipause() {
408
+ const acl = await this.contract.read.acl();
409
+ const pausableAdmins = await this.client.readContract({
410
+ address: acl,
411
+ abi: parseAbi([
412
+ "function getRoleHolders(bytes32) view returns (address[])"
413
+ ]),
414
+ functionName: "getRoleHolders",
415
+ args: [stringToHex("PAUSABLE_ADMIN", { size: 32 })]
416
+ });
417
+ try {
418
+ const result = await this.client.multicall({
419
+ allowFailure: true,
420
+ contracts: pausableAdmins.map((admin) => ({
421
+ address: admin,
422
+ abi: parseAbi(["function contractType() view returns (bytes32)"]),
423
+ functionName: "contractType"
424
+ }))
425
+ });
426
+ const pause = result.map((r, i) => ({
427
+ ...r,
428
+ address: pausableAdmins[i]
429
+ })).find(({ status, result: result2 }) => {
430
+ try {
431
+ return status === "success" && hexToString(result2, { size: 32 }) === "MULTI_PAUSE";
432
+ } catch {
433
+ return false;
434
+ }
435
+ });
436
+ return pause?.address;
437
+ } catch {
438
+ return void 0;
439
+ }
440
+ }
441
+ grantRole(role, address) {
442
+ return this.createRawTx({
443
+ functionName: "grantRole",
444
+ args: [stringToHex(role, { size: 32 }), address]
445
+ });
446
+ }
447
+ //
448
+ // SYNC
449
+ //
450
+ async syncSetEmergencyAdmin(fromBlock, toBlock) {
451
+ const events = await this.getEvents(
452
+ "SetEmergencyAdmin",
453
+ fromBlock,
454
+ toBlock
455
+ );
456
+ return (events || []).map((event) => ({
457
+ emergencyAdmin: event.args.newEmergencyAdmin,
458
+ atBlock: Number(event.blockNumber)
459
+ })).filter((event) => event.emergencyAdmin !== void 0);
460
+ }
461
+ async syncMarkets({
462
+ fromBlock,
463
+ toBlock
464
+ }) {
465
+ const events = await this.getEvents("CreateMarket", fromBlock, toBlock);
466
+ const chainId = await this.client.getChainId();
467
+ const markets = [];
468
+ for (const event of events) {
469
+ const pool = event.args.pool;
470
+ const [underlyingAsset, name, symbol] = await Promise.all([
471
+ this.client.readContract({
472
+ address: pool,
473
+ abi: erc4626Abi,
474
+ functionName: "asset"
475
+ }),
476
+ this.client.readContract({
477
+ address: pool,
478
+ abi: erc20Abi,
479
+ functionName: "name"
480
+ }),
481
+ this.client.readContract({
482
+ address: pool,
483
+ abi: erc20Abi,
484
+ functionName: "symbol"
485
+ })
486
+ ]);
487
+ markets.push({
488
+ address: pool,
489
+ underlyingAsset,
490
+ name,
491
+ symbol,
492
+ isDeployed: true
493
+ });
494
+ }
495
+ return markets;
496
+ }
497
+ parseFunctionParams(params) {
498
+ const { functionName, args } = params;
499
+ switch (functionName) {
500
+ case "createMarket": {
501
+ const [
502
+ minorVersion,
503
+ underlying,
504
+ name,
505
+ symbol,
506
+ interestRateModelParams,
507
+ rateKeeperParams,
508
+ lossPolicyParams,
509
+ underlyingPriceFeed
510
+ ] = args;
511
+ const irmParsedPostfix = hexToString(
512
+ interestRateModelParams.postfix
513
+ ).replace(/\0/g, "");
514
+ const irmParsedParams = parseIrmDeployParams(
515
+ irmParsedPostfix,
516
+ Number(minorVersion),
517
+ interestRateModelParams.constructorParams
518
+ );
519
+ const rateKeeperParsedPostfix = hexToString(
520
+ rateKeeperParams.postfix
521
+ ).replace(/\0/g, "");
522
+ const rateKeeperParsedParams = parseRateKeeperDeployParams(
523
+ rateKeeperParsedPostfix,
524
+ Number(minorVersion),
525
+ rateKeeperParams.constructorParams
526
+ );
527
+ const lossPolicyParsedPostfix = hexToString(
528
+ lossPolicyParams.postfix
529
+ ).replace(/\0/g, "");
530
+ const lossPolicyParsedParams = parseLossPolicyDeployParams(
531
+ lossPolicyParsedPostfix,
532
+ Number(minorVersion),
533
+ lossPolicyParams.constructorParams
534
+ );
535
+ return {
536
+ chainId: 0,
537
+ target: this.address,
538
+ label: this.name,
539
+ functionName,
540
+ args: {
541
+ minorVersion: minorVersion.toString(),
542
+ underlying,
543
+ name,
544
+ symbol,
545
+ interestRateModelParams: json_stringify({
546
+ postfix: irmParsedPostfix,
547
+ salt: interestRateModelParams.salt,
548
+ constructorParams: irmParsedParams
549
+ }),
550
+ rateKeeperParams: json_stringify({
551
+ postfix: rateKeeperParsedPostfix,
552
+ salt: rateKeeperParams.salt,
553
+ constructorParams: rateKeeperParsedParams
554
+ }),
555
+ lossPolicyParams: json_stringify({
556
+ postfix: lossPolicyParsedPostfix,
557
+ salt: lossPolicyParams.salt,
558
+ constructorParams: lossPolicyParsedParams
559
+ }),
560
+ underlyingPriceFeed
561
+ }
562
+ };
563
+ }
564
+ case "createCreditSuite": {
565
+ const [minorVersion, pool, creditSuiteParams] = args;
566
+ const decoded = decodeAbiParameters(
567
+ [creditManagerParamsAbi, creditFacadeParamsAbi],
568
+ creditSuiteParams
569
+ );
570
+ const accountFactoryParams = decoded[0].accountFactoryParams;
571
+ return {
572
+ chainId: 0,
573
+ target: this.address,
574
+ label: this.name,
575
+ functionName,
576
+ args: {
577
+ minorVersion: minorVersion.toString(),
578
+ pool,
579
+ creditSuiteParams: json_stringify({
580
+ ...decoded[0],
581
+ minDebt: decoded[0].minDebt.toString(),
582
+ maxDebt: decoded[0].maxDebt.toString(),
583
+ accountFactoryParams: {
584
+ postfix: hexToString(accountFactoryParams.postfix).replace(
585
+ /\0/g,
586
+ ""
587
+ ),
588
+ salt: accountFactoryParams.salt,
589
+ // TODO: tmp solution, move AccountFactory decoding to plugins
590
+ constructorParams: {
591
+ addressProvider: decodeAbiParameters(
592
+ [{ type: "address" }],
593
+ accountFactoryParams.constructorParams
594
+ )[0]
595
+ }
596
+ }
597
+ })
598
+ }
599
+ };
600
+ }
601
+ case "configurePriceOracle": {
602
+ const [pool, config] = args;
603
+ const decoded = this.priceOracleFactory.decodeConfig(config);
604
+ if (decoded) {
605
+ return {
606
+ chainId: 0,
607
+ target: this.address,
608
+ label: this.name,
609
+ functionName,
610
+ args: {
611
+ pool,
612
+ data: json_stringify(decoded)
613
+ }
614
+ };
615
+ }
616
+ return {
617
+ chainId: 0,
618
+ target: this.address,
619
+ label: this.name,
620
+ functionName,
621
+ args: {
622
+ pool,
623
+ config
624
+ }
625
+ };
626
+ }
627
+ case "configurePool": {
628
+ const [pool, calldata] = args;
629
+ const decoded = this.poolFactory.decodeConfig(calldata);
630
+ if (decoded) {
631
+ return {
632
+ chainId: 0,
633
+ target: this.address,
634
+ label: this.name,
635
+ functionName,
636
+ args: {
637
+ pool,
638
+ data: json_stringify(decoded)
639
+ }
640
+ };
641
+ }
642
+ return {
643
+ chainId: 0,
644
+ target: this.address,
645
+ label: this.name,
646
+ functionName,
647
+ args: {
648
+ pool,
649
+ calldata
650
+ }
651
+ };
652
+ }
653
+ case "configureCreditSuite": {
654
+ const [creditManager, calldata] = args;
655
+ const decoded = this.creditFactory.decodeConfig(calldata);
656
+ if (decoded) {
657
+ return {
658
+ chainId: 0,
659
+ target: this.address,
660
+ label: this.name,
661
+ functionName,
662
+ args: {
663
+ creditManager,
664
+ data: json_stringify(decoded)
665
+ }
666
+ };
667
+ }
668
+ return {
669
+ chainId: 0,
670
+ target: this.address,
671
+ label: this.name,
672
+ functionName,
673
+ args: {
674
+ creditManager,
675
+ calldata
676
+ }
677
+ };
678
+ }
679
+ case "updateInterestRateModel": {
680
+ const [pool, deployParams] = args;
681
+ return {
682
+ chainId: 0,
683
+ target: this.address,
684
+ label: this.name,
685
+ functionName,
686
+ args: {
687
+ pool,
688
+ deployParams: json_stringify(deployParams)
689
+ }
690
+ };
691
+ }
692
+ case "updateRateKeeper": {
693
+ const [pool, deployParams] = args;
694
+ return {
695
+ chainId: 0,
696
+ target: this.address,
697
+ label: this.name,
698
+ functionName,
699
+ args: {
700
+ pool,
701
+ deployParams: json_stringify(deployParams)
702
+ }
703
+ };
704
+ }
705
+ case "updateLossPolicy": {
706
+ const [pool, deployParams] = args;
707
+ return {
708
+ chainId: 0,
709
+ target: this.address,
710
+ label: this.name,
711
+ functionName,
712
+ args: {
713
+ pool,
714
+ deployParams: json_stringify(deployParams)
715
+ }
716
+ };
717
+ }
718
+ case "grantRole": {
719
+ const [role, address] = args;
720
+ return {
721
+ chainId: 0,
722
+ target: this.address,
723
+ label: this.name,
724
+ functionName,
725
+ args: {
726
+ address,
727
+ role: hexToString(role, { size: 32 })
728
+ }
729
+ };
730
+ }
731
+ default:
732
+ return void 0;
733
+ }
734
+ }
735
+ //
736
+ // EMERGENCY CONFIG
737
+ //
738
+ emergencyConfigurePool(pool, calldata) {
739
+ return this.createRawTx({
740
+ functionName: "emergencyConfigurePool",
741
+ args: [pool, calldata]
742
+ });
743
+ }
744
+ emergencyConfigureCreditSuite(creditManager, calldata) {
745
+ return this.createRawTx({
746
+ functionName: "emergencyConfigureCreditSuite",
747
+ args: [creditManager, calldata]
748
+ });
749
+ }
750
+ emergencyConfigurePriceOracle(pool, calldata) {
751
+ return this.createRawTx({
752
+ functionName: "emergencyConfigurePriceOracle",
753
+ args: [pool, calldata]
754
+ });
755
+ }
756
+ emergencyConfigureLossPolicy(pool, calldata) {
757
+ return this.createRawTx({
758
+ functionName: "emergencyConfigureLossPolicy",
759
+ args: [pool, calldata]
760
+ });
761
+ }
762
+ }
763
+ export {
764
+ MarketConfiguratorContract
765
+ };