@gearbox-protocol/sdk 9.14.1 → 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 (231) 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/esm/permissionless/bindings/address-provider.js +27 -0
  79. package/dist/esm/permissionless/bindings/base-contract.js +151 -0
  80. package/dist/esm/permissionless/bindings/bytecode-repository.js +508 -0
  81. package/dist/esm/permissionless/bindings/compressors/index.js +2 -0
  82. package/dist/esm/permissionless/bindings/compressors/token-compressor.js +89 -0
  83. package/dist/esm/permissionless/bindings/compressors/withdrawal-compressor.js +38 -0
  84. package/dist/esm/permissionless/bindings/cross-chain-multisig.js +336 -0
  85. package/dist/esm/permissionless/bindings/factory/abstract-factory.js +28 -0
  86. package/dist/esm/permissionless/bindings/factory/credit-factory.js +177 -0
  87. package/dist/esm/permissionless/bindings/factory/pool-factory.js +45 -0
  88. package/dist/esm/permissionless/bindings/factory/price-oracle-factory.js +23 -0
  89. package/dist/esm/permissionless/bindings/governance/batches-chain.js +17 -0
  90. package/dist/esm/permissionless/bindings/governance/governor.js +224 -0
  91. package/dist/esm/permissionless/bindings/governance/index.js +3 -0
  92. package/dist/esm/permissionless/bindings/governance/timelock.js +80 -0
  93. package/dist/esm/permissionless/bindings/governance/types.js +0 -0
  94. package/dist/esm/permissionless/bindings/index.js +14 -0
  95. package/dist/esm/permissionless/bindings/instance-manager.js +223 -0
  96. package/dist/esm/permissionless/bindings/market-configurator-factory.js +51 -0
  97. package/dist/esm/permissionless/bindings/market-configurator.js +765 -0
  98. package/dist/esm/permissionless/bindings/price-feed-store.js +376 -0
  99. package/dist/esm/permissionless/bindings/pricefeeds/balancer-stable.js +39 -0
  100. package/dist/esm/permissionless/bindings/pricefeeds/balancer-weighted.js +39 -0
  101. package/dist/esm/permissionless/bindings/pricefeeds/bounded.js +23 -0
  102. package/dist/esm/permissionless/bindings/pricefeeds/composite.js +19 -0
  103. package/dist/esm/permissionless/bindings/pricefeeds/constant.js +18 -0
  104. package/dist/esm/permissionless/bindings/pricefeeds/curve-crypto.js +43 -0
  105. package/dist/esm/permissionless/bindings/pricefeeds/curve-stable.js +43 -0
  106. package/dist/esm/permissionless/bindings/pricefeeds/curve-twap.js +46 -0
  107. package/dist/esm/permissionless/bindings/pricefeeds/curve-usd.js +26 -0
  108. package/dist/esm/permissionless/bindings/pricefeeds/erc4626.js +48 -0
  109. package/dist/esm/permissionless/bindings/pricefeeds/external.js +14 -0
  110. package/dist/esm/permissionless/bindings/pricefeeds/index.js +39 -0
  111. package/dist/esm/permissionless/bindings/pricefeeds/kodiak.js +26 -0
  112. package/dist/esm/permissionless/bindings/pricefeeds/mellow-lrt.js +98 -0
  113. package/dist/esm/permissionless/bindings/pricefeeds/pendle-pt-twap.js +27 -0
  114. package/dist/esm/permissionless/bindings/pricefeeds/pyth.js +41 -0
  115. package/dist/esm/permissionless/bindings/pricefeeds/redstone.js +57 -0
  116. package/dist/esm/permissionless/bindings/pricefeeds/wsteth.js +39 -0
  117. package/dist/esm/permissionless/bindings/pricefeeds/zero.js +9 -0
  118. package/dist/esm/permissionless/bindings/router/index.js +1 -0
  119. package/dist/esm/permissionless/bindings/router/routing-manager.js +36 -0
  120. package/dist/esm/permissionless/bindings/treasury-splitter.js +36 -0
  121. package/dist/esm/permissionless/bindings/types.js +0 -0
  122. package/dist/esm/permissionless/chains/archive-transport.js +250 -0
  123. package/dist/esm/permissionless/core/auditor.js +0 -0
  124. package/dist/esm/permissionless/core/bytecode.js +0 -0
  125. package/dist/esm/permissionless/core/index.js +6 -0
  126. package/dist/esm/permissionless/core/pricefeed-builder.js +0 -0
  127. package/dist/esm/permissionless/core/pricefeed.js +0 -0
  128. package/dist/esm/permissionless/core/proposal.js +0 -0
  129. package/dist/esm/permissionless/core/raw-tx.js +14 -0
  130. package/dist/esm/permissionless/deployment/addresses.js +11 -0
  131. package/dist/esm/permissionless/deployment/mainnet.js +27 -0
  132. package/dist/esm/permissionless/index.js +6 -0
  133. package/dist/esm/permissionless/package.json +1 -0
  134. package/dist/esm/permissionless/plugins/index.js +20 -0
  135. package/dist/esm/permissionless/plugins/irm/constructor-params-abi.js +52 -0
  136. package/dist/esm/permissionless/plugins/loss-policies/constructor-params-abi.js +50 -0
  137. package/dist/esm/permissionless/plugins/rate-keepers/constructor-params-abi.js +59 -0
  138. package/dist/esm/permissionless/utils/abi-decoder.js +50 -0
  139. package/dist/esm/permissionless/utils/abi-encoder.js +65 -0
  140. package/dist/esm/permissionless/utils/block-utils.js +31 -0
  141. package/dist/esm/permissionless/utils/create2.js +85 -0
  142. package/dist/esm/permissionless/utils/format.js +67 -0
  143. package/dist/esm/permissionless/utils/governance/batch.js +87 -0
  144. package/dist/esm/permissionless/utils/governance/index.js +3 -0
  145. package/dist/esm/permissionless/utils/governance/timelock-txs.js +20 -0
  146. package/dist/esm/permissionless/utils/governance/types.js +0 -0
  147. package/dist/esm/permissionless/utils/index.js +9 -0
  148. package/dist/esm/permissionless/utils/literals.js +16 -0
  149. package/dist/esm/permissionless/utils/price-update/get-price-feeds.js +65 -0
  150. package/dist/esm/permissionless/utils/price-update/get-price-update-tx.js +65 -0
  151. package/dist/esm/permissionless/utils/price-update/get-prices.js +103 -0
  152. package/dist/esm/permissionless/utils/price-update/get-updatable-feeds.js +31 -0
  153. package/dist/esm/permissionless/utils/price-update/index.js +4 -0
  154. package/dist/esm/permissionless/utils/signature.js +11 -0
  155. package/dist/types/permissionless/bindings/address-provider.d.ts +259 -0
  156. package/dist/types/permissionless/bindings/base-contract.d.ts +23 -0
  157. package/dist/types/permissionless/bindings/bytecode-repository.d.ts +1352 -0
  158. package/dist/types/permissionless/bindings/compressors/index.d.ts +2 -0
  159. package/dist/types/permissionless/bindings/compressors/token-compressor.d.ts +118 -0
  160. package/dist/types/permissionless/bindings/compressors/withdrawal-compressor.d.ts +331 -0
  161. package/dist/types/permissionless/bindings/cross-chain-multisig.d.ts +835 -0
  162. package/dist/types/permissionless/bindings/factory/abstract-factory.d.ts +17 -0
  163. package/dist/types/permissionless/bindings/factory/credit-factory.d.ts +224 -0
  164. package/dist/types/permissionless/bindings/factory/pool-factory.d.ts +86 -0
  165. package/dist/types/permissionless/bindings/factory/price-oracle-factory.d.ts +38 -0
  166. package/dist/types/permissionless/bindings/governance/batches-chain.d.ts +39 -0
  167. package/dist/types/permissionless/bindings/governance/governor.d.ts +615 -0
  168. package/dist/types/permissionless/bindings/governance/index.d.ts +3 -0
  169. package/dist/types/permissionless/bindings/governance/timelock.d.ts +10 -0
  170. package/dist/types/permissionless/bindings/governance/types.d.ts +42 -0
  171. package/dist/types/permissionless/bindings/index.d.ts +14 -0
  172. package/dist/types/permissionless/bindings/instance-manager.d.ts +361 -0
  173. package/dist/types/permissionless/bindings/market-configurator-factory.d.ts +244 -0
  174. package/dist/types/permissionless/bindings/market-configurator.d.ts +1656 -0
  175. package/dist/types/permissionless/bindings/price-feed-store.d.ts +605 -0
  176. package/dist/types/permissionless/bindings/pricefeeds/balancer-stable.d.ts +2 -0
  177. package/dist/types/permissionless/bindings/pricefeeds/balancer-weighted.d.ts +2 -0
  178. package/dist/types/permissionless/bindings/pricefeeds/bounded.d.ts +2 -0
  179. package/dist/types/permissionless/bindings/pricefeeds/composite.d.ts +2 -0
  180. package/dist/types/permissionless/bindings/pricefeeds/constant.d.ts +2 -0
  181. package/dist/types/permissionless/bindings/pricefeeds/curve-crypto.d.ts +2 -0
  182. package/dist/types/permissionless/bindings/pricefeeds/curve-stable.d.ts +2 -0
  183. package/dist/types/permissionless/bindings/pricefeeds/curve-twap.d.ts +2 -0
  184. package/dist/types/permissionless/bindings/pricefeeds/curve-usd.d.ts +2 -0
  185. package/dist/types/permissionless/bindings/pricefeeds/erc4626.d.ts +2 -0
  186. package/dist/types/permissionless/bindings/pricefeeds/external.d.ts +2 -0
  187. package/dist/types/permissionless/bindings/pricefeeds/index.d.ts +2 -0
  188. package/dist/types/permissionless/bindings/pricefeeds/kodiak.d.ts +2 -0
  189. package/dist/types/permissionless/bindings/pricefeeds/mellow-lrt.d.ts +2 -0
  190. package/dist/types/permissionless/bindings/pricefeeds/pendle-pt-twap.d.ts +2 -0
  191. package/dist/types/permissionless/bindings/pricefeeds/pyth.d.ts +2 -0
  192. package/dist/types/permissionless/bindings/pricefeeds/redstone.d.ts +2 -0
  193. package/dist/types/permissionless/bindings/pricefeeds/wsteth.d.ts +2 -0
  194. package/dist/types/permissionless/bindings/pricefeeds/zero.d.ts +2 -0
  195. package/dist/types/permissionless/bindings/router/index.d.ts +1 -0
  196. package/dist/types/permissionless/bindings/router/routing-manager.d.ts +502 -0
  197. package/dist/types/permissionless/bindings/treasury-splitter.d.ts +21 -0
  198. package/dist/types/permissionless/bindings/types.d.ts +65 -0
  199. package/dist/types/permissionless/chains/archive-transport.d.ts +49 -0
  200. package/dist/types/permissionless/core/auditor.d.ts +7 -0
  201. package/dist/types/permissionless/core/bytecode.d.ts +46 -0
  202. package/dist/types/permissionless/core/index.d.ts +6 -0
  203. package/dist/types/permissionless/core/pricefeed-builder.d.ts +59 -0
  204. package/dist/types/permissionless/core/pricefeed.d.ts +10 -0
  205. package/dist/types/permissionless/core/proposal.d.ts +33 -0
  206. package/dist/types/permissionless/core/raw-tx.d.ts +4 -0
  207. package/dist/types/permissionless/deployment/addresses.d.ts +7 -0
  208. package/dist/types/permissionless/deployment/mainnet.d.ts +10 -0
  209. package/dist/types/permissionless/index.d.ts +6 -0
  210. package/dist/types/permissionless/plugins/index.d.ts +3 -0
  211. package/dist/types/permissionless/plugins/irm/constructor-params-abi.d.ts +63 -0
  212. package/dist/types/permissionless/plugins/loss-policies/constructor-params-abi.d.ts +48 -0
  213. package/dist/types/permissionless/plugins/rate-keepers/constructor-params-abi.d.ts +55 -0
  214. package/dist/types/permissionless/utils/abi-decoder.d.ts +13 -0
  215. package/dist/types/permissionless/utils/abi-encoder.d.ts +7 -0
  216. package/dist/types/permissionless/utils/block-utils.d.ts +8 -0
  217. package/dist/types/permissionless/utils/create2.d.ts +17 -0
  218. package/dist/types/permissionless/utils/format.d.ts +7 -0
  219. package/dist/types/permissionless/utils/governance/batch.d.ts +17 -0
  220. package/dist/types/permissionless/utils/governance/index.d.ts +3 -0
  221. package/dist/types/permissionless/utils/governance/timelock-txs.d.ts +2 -0
  222. package/dist/types/permissionless/utils/governance/types.d.ts +16 -0
  223. package/dist/types/permissionless/utils/index.d.ts +9 -0
  224. package/dist/types/permissionless/utils/literals.d.ts +7 -0
  225. package/dist/types/permissionless/utils/price-update/get-price-feeds.d.ts +8 -0
  226. package/dist/types/permissionless/utils/price-update/get-price-update-tx.d.ts +9 -0
  227. package/dist/types/permissionless/utils/price-update/get-prices.d.ts +6 -0
  228. package/dist/types/permissionless/utils/price-update/get-updatable-feeds.d.ts +8 -0
  229. package/dist/types/permissionless/utils/price-update/index.d.ts +4 -0
  230. package/dist/types/permissionless/utils/signature.d.ts +2 -0
  231. package/package.json +11 -1
@@ -0,0 +1,85 @@
1
+ import { formatAbiItem } from "abitype";
2
+ import {
3
+ getCreate2Address,
4
+ stringToHex
5
+ } from "viem";
6
+ const PUBLIC_CREATE2_FACTORY = "0x4e59b44847b379578588920ca78fbf26c0b4956c";
7
+ function handleSalt(salt) {
8
+ if (salt.slice(0, 2) !== "0x" || salt.length !== 66) {
9
+ salt = stringToHex(salt, { size: 32 });
10
+ }
11
+ return salt;
12
+ }
13
+ async function deployUsingPublicCreate2(sponsor, bytecode, salt) {
14
+ const callData = `${handleSalt(salt)}${bytecode.replace("0x", "")}`;
15
+ const hash = await sponsor.sendTransaction({
16
+ to: PUBLIC_CREATE2_FACTORY,
17
+ data: callData,
18
+ account: sponsor.account,
19
+ chain: sponsor.chain
20
+ });
21
+ return hash;
22
+ }
23
+ async function getCreate2AddressPublicFactory(salt, bytecode) {
24
+ return getCreate2Address({
25
+ from: PUBLIC_CREATE2_FACTORY,
26
+ salt: handleSalt(salt),
27
+ bytecode
28
+ });
29
+ }
30
+ function createCreate2DeployRawTx(bytecode, salt) {
31
+ const callData = `${handleSalt(salt)}${bytecode.replace("0x", "")}`;
32
+ const deterministicDeployerAbi = [
33
+ {
34
+ payable: true,
35
+ stateMutability: "payable",
36
+ type: "fallback"
37
+ }
38
+ ];
39
+ const signature = formatAbiItem(deterministicDeployerAbi[0]);
40
+ const contractMethod = {
41
+ name: "fallback",
42
+ inputs: [],
43
+ payable: true
44
+ };
45
+ const rawTx = {
46
+ to: PUBLIC_CREATE2_FACTORY,
47
+ value: "0",
48
+ signature,
49
+ callData,
50
+ contractMethod,
51
+ contractInputsValues: {},
52
+ description: ""
53
+ };
54
+ return rawTx;
55
+ }
56
+ function getCreate2DeploymentAddress(bytecode, salt) {
57
+ return getCreate2Address({
58
+ from: PUBLIC_CREATE2_FACTORY,
59
+ salt: handleSalt(salt),
60
+ bytecode
61
+ });
62
+ }
63
+ async function checkCreate2Deployment(client, bytecode, salt) {
64
+ const address = getCreate2DeploymentAddress(bytecode, salt);
65
+ const code = await client.getCode({ address });
66
+ return code !== void 0;
67
+ }
68
+ async function checkCreate2DeploymentAddress(client, bytecode, salt) {
69
+ const address = getCreate2DeploymentAddress(bytecode, salt);
70
+ const code = await client.getCode({ address });
71
+ if (code !== void 0) {
72
+ return [true, address];
73
+ }
74
+ return [false, address];
75
+ }
76
+ export {
77
+ PUBLIC_CREATE2_FACTORY,
78
+ checkCreate2Deployment,
79
+ checkCreate2DeploymentAddress,
80
+ createCreate2DeployRawTx,
81
+ deployUsingPublicCreate2,
82
+ getCreate2AddressPublicFactory,
83
+ getCreate2DeploymentAddress,
84
+ handleSalt
85
+ };
@@ -0,0 +1,67 @@
1
+ import { json_parse } from "../../sdk/utils/index.js";
2
+ function formatBytecodeSize(size) {
3
+ return `${(size / 1024).toFixed(2)} KB`;
4
+ }
5
+ function formatBytecodeVersion(version) {
6
+ if (version === 0) return "-";
7
+ const major = Math.floor(version / 100);
8
+ const minor = Math.floor(version % 100 / 10);
9
+ const patch = version % 10;
10
+ return `v${major}.${minor}.${patch}`;
11
+ }
12
+ function formatTimestamp(timestamp) {
13
+ return new Date(timestamp * 1e3).toLocaleString("en-GB", {
14
+ dateStyle: "short",
15
+ timeStyle: "short"
16
+ });
17
+ }
18
+ function shortenHash(hash, chars = 4) {
19
+ if (!hash) return "";
20
+ const start = hash.slice(0, chars + 2);
21
+ const end = hash.slice(-chars);
22
+ return `${start}...${end}`;
23
+ }
24
+ function convertPercent(percent) {
25
+ return Math.floor(percent * 100);
26
+ }
27
+ function significantTrunc(x) {
28
+ if (x === 0) return "0";
29
+ if (x >= 1) return x.toFixed(0);
30
+ const str = x.toPrecision(2);
31
+ if (str.includes("e")) {
32
+ const value = Number(str);
33
+ return value.toFixed(20).replace(/\.?0+$/, "");
34
+ }
35
+ return str.replace(/\.?0+$/, "");
36
+ }
37
+ function deepJsonParse(value) {
38
+ if (typeof value === "string") {
39
+ try {
40
+ const parsed = json_parse(value);
41
+ if (parsed === value) return value;
42
+ return deepJsonParse(parsed);
43
+ } catch {
44
+ return value;
45
+ }
46
+ }
47
+ if (Array.isArray(value)) {
48
+ return value.map(deepJsonParse);
49
+ }
50
+ if (typeof value === "object" && value !== null) {
51
+ const result = {};
52
+ for (const [k, v] of Object.entries(value)) {
53
+ result[k] = deepJsonParse(v);
54
+ }
55
+ return result;
56
+ }
57
+ return value;
58
+ }
59
+ export {
60
+ convertPercent,
61
+ deepJsonParse,
62
+ formatBytecodeSize,
63
+ formatBytecodeVersion,
64
+ formatTimestamp,
65
+ shortenHash,
66
+ significantTrunc
67
+ };
@@ -0,0 +1,87 @@
1
+ import { keccak256, toBytes } from "viem";
2
+ function convertRawTxToSafeMultisigTx(tx) {
3
+ const { to, value, contractMethod, contractInputsValues } = tx;
4
+ return {
5
+ to,
6
+ value: `${value}`,
7
+ data: tx.callData,
8
+ contractMethod,
9
+ contractInputsValues: Object.entries(contractInputsValues).reduce(
10
+ (acc, [key, value2]) => {
11
+ acc[key] = typeof value2 === "object" ? JSON.stringify(
12
+ value2,
13
+ (_, v) => typeof v === "bigint" ? v.toString() : v
14
+ ) : `${value2}`;
15
+ return acc;
16
+ },
17
+ {}
18
+ )
19
+ };
20
+ }
21
+ function stringifyReplacer(_, value) {
22
+ return value === void 0 ? null : `${value}`;
23
+ }
24
+ function serializeJSONObject(json) {
25
+ if (Array.isArray(json)) {
26
+ return `[${json.map((el) => serializeJSONObject(el)).join(",")}]`;
27
+ }
28
+ if (typeof json === "object" && json !== null) {
29
+ let acc = "";
30
+ const keys = Object.keys(json).sort();
31
+ acc += `{${JSON.stringify(keys, stringifyReplacer)}`;
32
+ for (const key of keys) {
33
+ acc += `${serializeJSONObject(json[key])},`;
34
+ }
35
+ return `${acc}}`;
36
+ }
37
+ return `${JSON.stringify(json, stringifyReplacer)}`;
38
+ }
39
+ function calculateChecksum(multisigBatch) {
40
+ const serialized = serializeJSONObject({
41
+ ...multisigBatch,
42
+ meta: { ...multisigBatch.meta, name: null }
43
+ });
44
+ return keccak256(toBytes(serialized));
45
+ }
46
+ function getSafeBatch(args) {
47
+ const { chainId, safeAddress, name, txs: transactions } = args;
48
+ const batchInfo = {
49
+ version: "1.0",
50
+ chainId: `${chainId}`,
51
+ createdAt: Date.now(),
52
+ safeAddress,
53
+ meta: {
54
+ name,
55
+ description: name,
56
+ txBuilderVersion: "1.16.0",
57
+ createdFromSafeAddress: safeAddress,
58
+ createdFromOwnerAddress: ""
59
+ },
60
+ transactions
61
+ };
62
+ const batch = {
63
+ ...batchInfo,
64
+ meta: {
65
+ ...batchInfo.meta,
66
+ checksum: calculateChecksum(batchInfo)
67
+ }
68
+ };
69
+ return batch;
70
+ }
71
+ function getSafeBatches(args) {
72
+ const { batches, name } = args;
73
+ return batches.map((txs, index) => {
74
+ const batchName = `${name}-#${index}`;
75
+ return getSafeBatch({
76
+ ...args,
77
+ name: batchName,
78
+ txs
79
+ });
80
+ });
81
+ }
82
+ export {
83
+ calculateChecksum,
84
+ convertRawTxToSafeMultisigTx,
85
+ getSafeBatch,
86
+ getSafeBatches
87
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./batch";
2
+ export * from "./timelock-txs";
3
+ export * from "./types";
@@ -0,0 +1,20 @@
1
+ import { governorAbi } from "../../../abi/governance/governor.js";
2
+ import { createRawTx } from "../../../sdk/utils/index.js";
3
+ import { convertRawTxToSafeMultisigTx } from "./batch";
4
+ function convertQueueBatchToExecuteTx(queueBatch) {
5
+ const executionBatch = queueBatch.filter((tx) => tx.contractMethod.name === "queueTransaction").map((tx) => ({
6
+ ...tx.contractInputsValues,
7
+ value: BigInt(tx.contractInputsValues.value),
8
+ eta: BigInt(tx.contractInputsValues.eta)
9
+ }));
10
+ return convertRawTxToSafeMultisigTx(
11
+ createRawTx(queueBatch[0].to, {
12
+ functionName: "executeBatch",
13
+ args: [executionBatch],
14
+ abi: governorAbi
15
+ })
16
+ );
17
+ }
18
+ export {
19
+ convertQueueBatchToExecuteTx
20
+ };
@@ -0,0 +1,9 @@
1
+ export * from "./abi-decoder";
2
+ export * from "./abi-encoder";
3
+ export * from "./block-utils";
4
+ export * from "./create2";
5
+ export * from "./format";
6
+ export * from "./governance";
7
+ export * from "./literals";
8
+ export * from "./price-update";
9
+ export * from "./signature";
@@ -0,0 +1,16 @@
1
+ const CROSS_CHAIN_GOVERNANCE = "CROSS_CHAIN_GOVERNANCE";
2
+ const BYTECODE_REPOSITORY = "BYTECODE_REPOSITORY";
3
+ const INSTANCE_MANAGER = "INSTANCE_MANAGER";
4
+ const TOKEN_COMPRESSOR = "GLOBAL::TOKEN_COMPRESSOR";
5
+ const CROSS_CHAIN_MULTISIG = "CROSS_CHAIN_MULTISIG";
6
+ const PRICE_FEED_STORE = "PRICE_FEED_STORE";
7
+ const MARKET_CONFIGURATOR_FACTORY = "MARKET_CONFIGURATOR_FACTORY";
8
+ export {
9
+ BYTECODE_REPOSITORY,
10
+ CROSS_CHAIN_GOVERNANCE,
11
+ CROSS_CHAIN_MULTISIG,
12
+ INSTANCE_MANAGER,
13
+ MARKET_CONFIGURATOR_FACTORY,
14
+ PRICE_FEED_STORE,
15
+ TOKEN_COMPRESSOR
16
+ };
@@ -0,0 +1,65 @@
1
+ import { AP_PRICE_FEED_COMPRESSOR } from "../../../sdk/constants/index.js";
2
+ import { GearboxSDK } from "../../../sdk/index.js";
3
+ import { AddressProviderContract } from "../../bindings";
4
+ import { Addresses } from "../../deployment/addresses";
5
+ import { deepJsonParse } from "../format";
6
+ import { getUpdatablePriceFeeds } from "./get-updatable-feeds";
7
+ function getCallTouchedPriceFeeds(parsedCall) {
8
+ const priceFeeds = [];
9
+ const deepParsedArgs = deepJsonParse(parsedCall.args);
10
+ function searchForPriceFeeds(obj) {
11
+ if (obj === null || obj === void 0) {
12
+ return;
13
+ }
14
+ if (Array.isArray(obj)) {
15
+ obj.forEach((item) => {
16
+ searchForPriceFeeds(item);
17
+ });
18
+ return;
19
+ }
20
+ if (typeof obj === "object") {
21
+ for (const [key, value] of Object.entries(obj)) {
22
+ if (key === "priceFeed" || key === "underlyingPriceFeed") {
23
+ priceFeeds.push(value);
24
+ }
25
+ searchForPriceFeeds(value);
26
+ }
27
+ }
28
+ }
29
+ searchForPriceFeeds(deepParsedArgs);
30
+ return priceFeeds;
31
+ }
32
+ function getCallsTouchedPriceFeeds(parsedCalls) {
33
+ return parsedCalls.flatMap((call) => getCallTouchedPriceFeeds(call));
34
+ }
35
+ async function getCallsTouchedUpdatablePriceFeeds({
36
+ parsedCalls,
37
+ client
38
+ }) {
39
+ const addressProvider = new AddressProviderContract(
40
+ Addresses.ADDRESS_PROVIDER,
41
+ client
42
+ );
43
+ const pfCompressor = await addressProvider.getAddressOrRevert(
44
+ AP_PRICE_FEED_COMPRESSOR,
45
+ 310n
46
+ );
47
+ const sdk = await GearboxSDK.attach({
48
+ rpcURLs: [client.transport.url],
49
+ marketConfigurators: []
50
+ });
51
+ const touchedFeeds = parsedCalls.flatMap(
52
+ (call) => getCallTouchedPriceFeeds(call)
53
+ );
54
+ return (await getUpdatablePriceFeeds({
55
+ sdk,
56
+ client,
57
+ pfCompressor,
58
+ priceFeeds: touchedFeeds
59
+ })).map((feed) => feed.address);
60
+ }
61
+ export {
62
+ getCallTouchedPriceFeeds,
63
+ getCallsTouchedPriceFeeds,
64
+ getCallsTouchedUpdatablePriceFeeds
65
+ };
@@ -0,0 +1,65 @@
1
+ import {
2
+ decodeFunctionData,
3
+ multicall3Abi,
4
+ parseAbi
5
+ } from "viem";
6
+ import {
7
+ GearboxSDK
8
+ } from "../../../sdk/index.js";
9
+ import { createRawTx } from "../../../sdk/utils/index.js";
10
+ import { PriceFeedStoreContract } from "../../bindings";
11
+ import { Addresses } from "../../deployment/addresses";
12
+ function getUpdateCalldata(tx) {
13
+ const data = decodeFunctionData({
14
+ abi: parseAbi(["function updatePrice(bytes calldata data) external"]),
15
+ data: tx.raw.callData
16
+ });
17
+ return {
18
+ priceFeed: tx.raw.to,
19
+ data: data.args[0]
20
+ };
21
+ }
22
+ async function getPriceUpdateTx({
23
+ client,
24
+ priceFeeds,
25
+ useMulticall3 = false
26
+ }) {
27
+ const pfStore = new PriceFeedStoreContract(
28
+ Addresses.PRICE_FEED_STORE,
29
+ client
30
+ );
31
+ const sdk = await GearboxSDK.attach({
32
+ rpcURLs: [client.transport.url],
33
+ marketConfigurators: []
34
+ });
35
+ const updateTxs = await sdk.priceFeeds.generateExternalPriceFeedsUpdateTxs(priceFeeds);
36
+ if (useMulticall3) {
37
+ const multicallCalls = updateTxs.txs.map((tx) => ({
38
+ target: tx.raw.to,
39
+ allowFailure: false,
40
+ callData: tx.raw.callData
41
+ }));
42
+ if (multicallCalls.length === 0) {
43
+ return void 0;
44
+ }
45
+ const multicall3Address = client.chain?.contracts?.multicall3?.address;
46
+ if (!multicall3Address) {
47
+ throw new Error("Multicall3 address not found");
48
+ }
49
+ const multicallTx = createRawTx(multicall3Address, {
50
+ abi: multicall3Abi,
51
+ functionName: "aggregate3",
52
+ args: [multicallCalls]
53
+ });
54
+ return multicallTx;
55
+ }
56
+ const priceUpdates = updateTxs.txs.map((tx) => getUpdateCalldata(tx));
57
+ if (priceUpdates.length === 0) {
58
+ return void 0;
59
+ }
60
+ return pfStore.updatePrices(priceUpdates);
61
+ }
62
+ export {
63
+ getPriceUpdateTx,
64
+ getUpdateCalldata
65
+ };
@@ -0,0 +1,103 @@
1
+ import {
2
+ multicall3Abi
3
+ } from "viem";
4
+ import { GearboxSDK } from "../../../sdk/index.js";
5
+ import {
6
+ simulateMulticall
7
+ } from "../../../sdk/utils/viem/index.js";
8
+ const latestRoundDataAbi = [
9
+ {
10
+ inputs: [],
11
+ name: "latestRoundData",
12
+ outputs: [
13
+ { name: "roundId", type: "uint80" },
14
+ { name: "answer", type: "int256" },
15
+ { name: "startedAt", type: "uint256" },
16
+ { name: "updatedAt", type: "uint256" },
17
+ { name: "answeredInRound", type: "uint80" }
18
+ ],
19
+ stateMutability: "view",
20
+ type: "function"
21
+ }
22
+ ];
23
+ function getLatestRoundDataCall(priceFeed) {
24
+ return {
25
+ address: priceFeed,
26
+ abi: latestRoundDataAbi,
27
+ functionName: "latestRoundData",
28
+ args: []
29
+ };
30
+ }
31
+ async function getPricesChunk({
32
+ client,
33
+ priceFeeds,
34
+ sdk
35
+ }) {
36
+ const updateCall = priceFeeds.map(
37
+ (priceFeed) => getLatestRoundDataCall(priceFeed)
38
+ );
39
+ const updateTxs = await sdk.priceFeeds.generateExternalPriceFeedsUpdateTxs(priceFeeds);
40
+ const multicallCalls = updateTxs.txs.map((tx) => ({
41
+ target: tx.raw.to,
42
+ allowFailure: true,
43
+ callData: tx.raw.callData
44
+ }));
45
+ const multicall3Address = client.chain?.contracts?.multicall3?.address;
46
+ if (!multicall3Address) {
47
+ throw new Error("Multicall3 address not found");
48
+ }
49
+ const multicallResult = await simulateMulticall(client, {
50
+ contracts: [
51
+ {
52
+ address: multicall3Address,
53
+ // @ts-expect-error
54
+ abi: multicall3Abi,
55
+ // @ts-expect-error
56
+ functionName: "aggregate3",
57
+ args: [multicallCalls]
58
+ },
59
+ ...updateCall
60
+ ],
61
+ allowFailure: true
62
+ });
63
+ const prices = multicallResult.results.slice(1).map((result) => {
64
+ if (result.status === "failure") {
65
+ return null;
66
+ }
67
+ return result.result[1];
68
+ });
69
+ const priceEntries = priceFeeds.map(
70
+ (priceFeed, index) => [
71
+ priceFeed,
72
+ prices[index] ?? null
73
+ ]
74
+ );
75
+ return Object.fromEntries(priceEntries);
76
+ }
77
+ async function getPrices({
78
+ client,
79
+ priceFeeds,
80
+ chunkSize = 10
81
+ }) {
82
+ const sdk = await GearboxSDK.attach({
83
+ rpcURLs: [client.transport.url],
84
+ marketConfigurators: [],
85
+ redstone: {
86
+ ignoreMissingFeeds: true
87
+ }
88
+ });
89
+ const chunks = [];
90
+ for (let i = 0; i < priceFeeds.length; i += chunkSize) {
91
+ chunks.push(priceFeeds.slice(i, i + chunkSize));
92
+ }
93
+ const results = await Promise.all(
94
+ chunks.map((chunk) => getPricesChunk({ client, priceFeeds: chunk, sdk }))
95
+ );
96
+ return results.reduce(
97
+ (acc, result) => ({ ...acc, ...result }),
98
+ {}
99
+ );
100
+ }
101
+ export {
102
+ getPrices
103
+ };
@@ -0,0 +1,31 @@
1
+ import { getContract } from "viem";
2
+ import { priceFeedCompressorAbi } from "../../../abi/compressors/priceFeedCompressor.js";
3
+ import {
4
+ PythPriceFeed,
5
+ RedstonePriceFeedContract
6
+ } from "../../../sdk/index.js";
7
+ import { bytes32ToString } from "../../../sdk/utils/index.js";
8
+ async function getUpdatablePriceFeeds(args) {
9
+ const { sdk, client, pfCompressor, priceFeeds } = args;
10
+ const priceFeedCompressor = getContract({
11
+ address: pfCompressor,
12
+ abi: priceFeedCompressorAbi,
13
+ client
14
+ });
15
+ const updatablePriceFeeds = (await priceFeedCompressor.read.loadPriceFeedTree([
16
+ priceFeeds
17
+ ])).filter(
18
+ (data) => ["PRICE_FEED::PYTH", "PRICE_FEED::REDSTONE"].includes(
19
+ bytes32ToString(data.baseParams.contractType)
20
+ )
21
+ ).map((data) => {
22
+ if (bytes32ToString(data.baseParams.contractType) === "PRICE_FEED::PYTH") {
23
+ return new PythPriceFeed(sdk, data);
24
+ }
25
+ return new RedstonePriceFeedContract(sdk, data);
26
+ });
27
+ return updatablePriceFeeds;
28
+ }
29
+ export {
30
+ getUpdatablePriceFeeds
31
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./get-price-feeds";
2
+ export * from "./get-price-update-tx";
3
+ export * from "./get-prices";
4
+ export * from "./get-updatable-feeds";
@@ -0,0 +1,11 @@
1
+ function normalizeSignature(signature) {
2
+ const sig = signature.startsWith("0x") ? signature.slice(2) : signature;
3
+ let v = parseInt(sig.slice(128, 130), 16);
4
+ if (v === 0 || v === 1) {
5
+ v += 27;
6
+ }
7
+ return `0x${sig.slice(0, 128)}${v.toString(16)}`;
8
+ }
9
+ export {
10
+ normalizeSignature
11
+ };