@clober/v2-sdk 0.0.6 → 0.0.7-5.dev

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 (343) hide show
  1. package/README.md +12 -4
  2. package/dist/cjs/abis/core/book-manager-abi.js +112 -0
  3. package/dist/cjs/abis/core/book-manager-abi.js.map +1 -0
  4. package/dist/cjs/abis/core/book-viewer-abi.js +137 -5
  5. package/dist/cjs/abis/core/book-viewer-abi.js.map +1 -1
  6. package/dist/cjs/abis/core/controller-abi.js +29 -24
  7. package/dist/cjs/abis/core/controller-abi.js.map +1 -1
  8. package/dist/cjs/abis/rebalancer/minter-abi.js +230 -0
  9. package/dist/cjs/abis/rebalancer/minter-abi.js.map +1 -0
  10. package/dist/cjs/abis/rebalancer/mock-swap-abi.js +95 -0
  11. package/dist/cjs/abis/rebalancer/mock-swap-abi.js.map +1 -0
  12. package/dist/cjs/abis/rebalancer/operator-abi.js +375 -0
  13. package/dist/cjs/abis/rebalancer/operator-abi.js.map +1 -0
  14. package/dist/cjs/abis/rebalancer/rebalancer-abi.js +1367 -0
  15. package/dist/cjs/abis/rebalancer/rebalancer-abi.js.map +1 -0
  16. package/dist/cjs/abis/rebalancer/strategy-abi.js +780 -0
  17. package/dist/cjs/abis/rebalancer/strategy-abi.js.map +1 -0
  18. package/dist/cjs/apis/chart-logs.js +163 -0
  19. package/dist/cjs/apis/chart-logs.js.map +1 -0
  20. package/dist/cjs/apis/market.js +40 -21
  21. package/dist/cjs/apis/market.js.map +1 -1
  22. package/dist/cjs/apis/odos.js +100 -0
  23. package/dist/cjs/apis/odos.js.map +1 -0
  24. package/dist/cjs/apis/open-order.js +60 -28
  25. package/dist/cjs/apis/open-order.js.map +1 -1
  26. package/dist/cjs/apis/pool.js +79 -0
  27. package/dist/cjs/apis/pool.js.map +1 -0
  28. package/dist/cjs/apis/strategy.js +30 -0
  29. package/dist/cjs/apis/strategy.js.map +1 -0
  30. package/dist/cjs/approval.js +85 -31
  31. package/dist/cjs/approval.js.map +1 -1
  32. package/dist/cjs/call.js +837 -155
  33. package/dist/cjs/call.js.map +1 -1
  34. package/dist/cjs/constants/addresses.js +50 -1
  35. package/dist/cjs/constants/addresses.js.map +1 -1
  36. package/dist/cjs/constants/bera-bartio-chain.js +30 -0
  37. package/dist/cjs/constants/bera-bartio-chain.js.map +1 -0
  38. package/dist/cjs/constants/chain.js +18 -2
  39. package/dist/cjs/constants/chain.js.map +1 -1
  40. package/dist/cjs/constants/currency.js +56 -3
  41. package/dist/cjs/constants/currency.js.map +1 -1
  42. package/dist/cjs/constants/fee.js +17 -2
  43. package/dist/cjs/constants/fee.js.map +1 -1
  44. package/dist/cjs/constants/permit.js +14 -0
  45. package/dist/cjs/constants/permit.js.map +1 -0
  46. package/dist/cjs/constants/price.js +2 -1
  47. package/dist/cjs/constants/price.js.map +1 -1
  48. package/dist/cjs/constants/subgraph.js +35 -0
  49. package/dist/cjs/constants/subgraph.js.map +1 -0
  50. package/dist/cjs/constants/test-chain.js +50 -0
  51. package/dist/cjs/constants/test-chain.js.map +1 -0
  52. package/dist/cjs/constants/tick.js +6 -0
  53. package/dist/cjs/constants/tick.js.map +1 -0
  54. package/dist/cjs/index.js +1 -1
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/cjs/model/book.js +62 -35
  57. package/dist/cjs/model/book.js.map +1 -1
  58. package/dist/cjs/model/chart-log.js +3 -0
  59. package/dist/cjs/model/chart-log.js.map +1 -0
  60. package/dist/cjs/model/market.js +61 -26
  61. package/dist/cjs/model/market.js.map +1 -1
  62. package/dist/cjs/model/pool.js +240 -0
  63. package/dist/cjs/model/pool.js.map +1 -0
  64. package/dist/cjs/type.js +16 -1
  65. package/dist/cjs/type.js.map +1 -1
  66. package/dist/cjs/utils/allowance.js +39 -0
  67. package/dist/cjs/utils/allowance.js.map +1 -0
  68. package/dist/cjs/utils/approval.js +2 -3
  69. package/dist/cjs/utils/approval.js.map +1 -1
  70. package/dist/cjs/utils/bigint.js +13 -0
  71. package/dist/cjs/utils/bigint.js.map +1 -0
  72. package/dist/cjs/utils/book-id.js +7 -7
  73. package/dist/cjs/utils/book-id.js.map +1 -1
  74. package/dist/cjs/utils/build-transaction.js +9 -9
  75. package/dist/cjs/utils/build-transaction.js.map +1 -1
  76. package/dist/cjs/utils/currency.js +95 -11
  77. package/dist/cjs/utils/currency.js.map +1 -1
  78. package/dist/cjs/utils/market.js +1 -1
  79. package/dist/cjs/utils/market.js.map +1 -1
  80. package/dist/cjs/utils/math.js +3 -1
  81. package/dist/cjs/utils/math.js.map +1 -1
  82. package/dist/cjs/utils/open.js +35 -25
  83. package/dist/cjs/utils/open.js.map +1 -1
  84. package/dist/cjs/utils/order.js +115 -0
  85. package/dist/cjs/utils/order.js.map +1 -0
  86. package/dist/cjs/utils/pool-key.js +17 -0
  87. package/dist/cjs/utils/pool-key.js.map +1 -0
  88. package/dist/cjs/utils/pool.js +88 -0
  89. package/dist/cjs/utils/pool.js.map +1 -0
  90. package/dist/cjs/utils/prices.js +40 -5
  91. package/dist/cjs/utils/prices.js.map +1 -1
  92. package/dist/cjs/utils/tick.js +12 -1
  93. package/dist/cjs/utils/tick.js.map +1 -1
  94. package/dist/cjs/utils/unit-size.js +48 -0
  95. package/dist/cjs/utils/unit-size.js.map +1 -0
  96. package/dist/cjs/utils.js +16 -0
  97. package/dist/cjs/utils.js.map +1 -0
  98. package/dist/cjs/view.js +271 -40
  99. package/dist/cjs/view.js.map +1 -1
  100. package/dist/esm/abis/core/book-manager-abi.js +109 -0
  101. package/dist/esm/abis/core/book-manager-abi.js.map +1 -0
  102. package/dist/esm/abis/core/book-viewer-abi.js +137 -5
  103. package/dist/esm/abis/core/book-viewer-abi.js.map +1 -1
  104. package/dist/esm/abis/core/controller-abi.js +29 -24
  105. package/dist/esm/abis/core/controller-abi.js.map +1 -1
  106. package/dist/esm/abis/rebalancer/minter-abi.js +227 -0
  107. package/dist/esm/abis/rebalancer/minter-abi.js.map +1 -0
  108. package/dist/esm/abis/rebalancer/mock-swap-abi.js +92 -0
  109. package/dist/esm/abis/rebalancer/mock-swap-abi.js.map +1 -0
  110. package/dist/esm/abis/rebalancer/operator-abi.js +372 -0
  111. package/dist/esm/abis/rebalancer/operator-abi.js.map +1 -0
  112. package/dist/esm/abis/rebalancer/rebalancer-abi.js +1364 -0
  113. package/dist/esm/abis/rebalancer/rebalancer-abi.js.map +1 -0
  114. package/dist/esm/abis/rebalancer/strategy-abi.js +777 -0
  115. package/dist/esm/abis/rebalancer/strategy-abi.js.map +1 -0
  116. package/dist/esm/apis/chart-logs.js +159 -0
  117. package/dist/esm/apis/chart-logs.js.map +1 -0
  118. package/dist/esm/apis/market.js +41 -22
  119. package/dist/esm/apis/market.js.map +1 -1
  120. package/dist/esm/apis/odos.js +94 -0
  121. package/dist/esm/apis/odos.js.map +1 -0
  122. package/dist/esm/apis/open-order.js +61 -28
  123. package/dist/esm/apis/open-order.js.map +1 -1
  124. package/dist/esm/apis/pool.js +74 -0
  125. package/dist/esm/apis/pool.js.map +1 -0
  126. package/dist/esm/apis/strategy.js +26 -0
  127. package/dist/esm/apis/strategy.js.map +1 -0
  128. package/dist/esm/approval.js +122 -45
  129. package/dist/esm/approval.js.map +1 -1
  130. package/dist/esm/call.js +942 -270
  131. package/dist/esm/call.js.map +1 -1
  132. package/dist/esm/constants/addresses.js +51 -2
  133. package/dist/esm/constants/addresses.js.map +1 -1
  134. package/dist/esm/constants/bera-bartio-chain.js +27 -0
  135. package/dist/esm/constants/bera-bartio-chain.js.map +1 -0
  136. package/dist/esm/constants/chain.js +17 -2
  137. package/dist/esm/constants/chain.js.map +1 -1
  138. package/dist/esm/constants/currency.js +57 -2
  139. package/dist/esm/constants/currency.js.map +1 -1
  140. package/dist/esm/constants/fee.js +17 -2
  141. package/dist/esm/constants/fee.js.map +1 -1
  142. package/dist/esm/constants/permit.js +11 -0
  143. package/dist/esm/constants/permit.js.map +1 -0
  144. package/dist/esm/constants/price.js +1 -0
  145. package/dist/esm/constants/price.js.map +1 -1
  146. package/dist/esm/constants/subgraph.js +31 -0
  147. package/dist/esm/constants/subgraph.js.map +1 -0
  148. package/dist/esm/constants/test-chain.js +47 -0
  149. package/dist/esm/constants/test-chain.js.map +1 -0
  150. package/dist/esm/constants/tick.js +3 -0
  151. package/dist/esm/constants/tick.js.map +1 -0
  152. package/dist/esm/index.js +1 -1
  153. package/dist/esm/index.js.map +1 -1
  154. package/dist/esm/model/book.js +62 -35
  155. package/dist/esm/model/book.js.map +1 -1
  156. package/dist/esm/model/chart-log.js +2 -0
  157. package/dist/esm/model/chart-log.js.map +1 -0
  158. package/dist/esm/model/market.js +63 -28
  159. package/dist/esm/model/market.js.map +1 -1
  160. package/dist/esm/model/pool.js +237 -0
  161. package/dist/esm/model/pool.js.map +1 -0
  162. package/dist/esm/type.js +15 -0
  163. package/dist/esm/type.js.map +1 -1
  164. package/dist/esm/utils/allowance.js +35 -0
  165. package/dist/esm/utils/allowance.js.map +1 -0
  166. package/dist/esm/utils/approval.js +2 -3
  167. package/dist/esm/utils/approval.js.map +1 -1
  168. package/dist/esm/utils/bigint.js +7 -0
  169. package/dist/esm/utils/bigint.js.map +1 -0
  170. package/dist/esm/utils/book-id.js +7 -7
  171. package/dist/esm/utils/book-id.js.map +1 -1
  172. package/dist/esm/utils/build-transaction.js +9 -9
  173. package/dist/esm/utils/build-transaction.js.map +1 -1
  174. package/dist/esm/utils/currency.js +93 -10
  175. package/dist/esm/utils/currency.js.map +1 -1
  176. package/dist/esm/utils/market.js +1 -1
  177. package/dist/esm/utils/market.js.map +1 -1
  178. package/dist/esm/utils/math.js +1 -0
  179. package/dist/esm/utils/math.js.map +1 -1
  180. package/dist/esm/utils/open.js +33 -23
  181. package/dist/esm/utils/open.js.map +1 -1
  182. package/dist/esm/utils/order.js +110 -0
  183. package/dist/esm/utils/order.js.map +1 -0
  184. package/dist/esm/utils/pool-key.js +12 -0
  185. package/dist/esm/utils/pool-key.js.map +1 -0
  186. package/dist/esm/utils/pool.js +84 -0
  187. package/dist/esm/utils/pool.js.map +1 -0
  188. package/dist/esm/utils/prices.js +39 -5
  189. package/dist/esm/utils/prices.js.map +1 -1
  190. package/dist/esm/utils/tick.js +11 -1
  191. package/dist/esm/utils/tick.js.map +1 -1
  192. package/dist/esm/utils/unit-size.js +44 -0
  193. package/dist/esm/utils/unit-size.js.map +1 -0
  194. package/dist/esm/utils.js +4 -0
  195. package/dist/esm/utils.js.map +1 -0
  196. package/dist/esm/view.js +410 -79
  197. package/dist/esm/view.js.map +1 -1
  198. package/dist/tsconfig.build.tsbuildinfo +1 -1
  199. package/dist/types/abis/core/book-manager-abi.d.ts +82 -0
  200. package/dist/types/abis/core/book-manager-abi.d.ts.map +1 -0
  201. package/dist/types/abis/core/book-viewer-abi.d.ts +107 -5
  202. package/dist/types/abis/core/book-viewer-abi.d.ts.map +1 -1
  203. package/dist/types/abis/core/controller-abi.d.ts +23 -19
  204. package/dist/types/abis/core/controller-abi.d.ts.map +1 -1
  205. package/dist/types/abis/rebalancer/minter-abi.d.ts +174 -0
  206. package/dist/types/abis/rebalancer/minter-abi.d.ts.map +1 -0
  207. package/dist/types/abis/rebalancer/mock-swap-abi.d.ts +70 -0
  208. package/dist/types/abis/rebalancer/mock-swap-abi.d.ts.map +1 -0
  209. package/dist/types/abis/rebalancer/operator-abi.d.ts +287 -0
  210. package/dist/types/abis/rebalancer/operator-abi.d.ts.map +1 -0
  211. package/dist/types/abis/rebalancer/rebalancer-abi.d.ts +1056 -0
  212. package/dist/types/abis/rebalancer/rebalancer-abi.d.ts.map +1 -0
  213. package/dist/types/abis/rebalancer/strategy-abi.d.ts +602 -0
  214. package/dist/types/abis/rebalancer/strategy-abi.d.ts.map +1 -0
  215. package/dist/types/apis/chart-logs.d.ts +5 -0
  216. package/dist/types/apis/chart-logs.d.ts.map +1 -0
  217. package/dist/types/apis/market.d.ts +2 -1
  218. package/dist/types/apis/market.d.ts.map +1 -1
  219. package/dist/types/apis/odos.d.ts +28 -0
  220. package/dist/types/apis/odos.d.ts.map +1 -0
  221. package/dist/types/apis/open-order.d.ts +4 -2
  222. package/dist/types/apis/open-order.d.ts.map +1 -1
  223. package/dist/types/apis/pool.d.ts +12 -0
  224. package/dist/types/apis/pool.d.ts.map +1 -0
  225. package/dist/types/apis/strategy.d.ts +5 -0
  226. package/dist/types/apis/strategy.d.ts.map +1 -0
  227. package/dist/types/approval.d.ts +49 -17
  228. package/dist/types/approval.d.ts.map +1 -1
  229. package/dist/types/call.d.ts +311 -133
  230. package/dist/types/call.d.ts.map +1 -1
  231. package/dist/types/constants/addresses.d.ts +4 -0
  232. package/dist/types/constants/addresses.d.ts.map +1 -1
  233. package/dist/types/constants/bera-bartio-chain.d.ts +33 -0
  234. package/dist/types/constants/bera-bartio-chain.d.ts.map +1 -0
  235. package/dist/types/constants/chain.d.ts +7 -2
  236. package/dist/types/constants/chain.d.ts.map +1 -1
  237. package/dist/types/constants/currency.d.ts +6 -0
  238. package/dist/types/constants/currency.d.ts.map +1 -1
  239. package/dist/types/constants/fee.d.ts +7 -2
  240. package/dist/types/constants/fee.d.ts.map +1 -1
  241. package/dist/types/constants/permit.d.ts +10 -0
  242. package/dist/types/constants/permit.d.ts.map +1 -0
  243. package/dist/types/constants/price.d.ts +1 -0
  244. package/dist/types/constants/price.d.ts.map +1 -1
  245. package/dist/types/constants/subgraph.d.ts +5 -0
  246. package/dist/types/constants/subgraph.d.ts.map +1 -0
  247. package/dist/types/constants/test-chain.d.ts +4 -0
  248. package/dist/types/constants/test-chain.d.ts.map +1 -0
  249. package/dist/types/constants/tick.d.ts +3 -0
  250. package/dist/types/constants/tick.d.ts.map +1 -0
  251. package/dist/types/index.d.ts +1 -1
  252. package/dist/types/index.d.ts.map +1 -1
  253. package/dist/types/model/book.d.ts +25 -33
  254. package/dist/types/model/book.d.ts.map +1 -1
  255. package/dist/types/model/chart-log.d.ts +9 -0
  256. package/dist/types/model/chart-log.d.ts.map +1 -0
  257. package/dist/types/model/currency.d.ts +7 -0
  258. package/dist/types/model/currency.d.ts.map +1 -1
  259. package/dist/types/model/depth.d.ts +4 -3
  260. package/dist/types/model/depth.d.ts.map +1 -1
  261. package/dist/types/model/market.d.ts +24 -13
  262. package/dist/types/model/market.d.ts.map +1 -1
  263. package/dist/types/model/open-order.d.ts +20 -27
  264. package/dist/types/model/open-order.d.ts.map +1 -1
  265. package/dist/types/model/pool.d.ts +71 -0
  266. package/dist/types/model/pool.d.ts.map +1 -0
  267. package/dist/types/type.d.ts +112 -6
  268. package/dist/types/type.d.ts.map +1 -1
  269. package/dist/types/utils/allowance.d.ts +3 -0
  270. package/dist/types/utils/allowance.d.ts.map +1 -0
  271. package/dist/types/utils/approval.d.ts +2 -1
  272. package/dist/types/utils/approval.d.ts.map +1 -1
  273. package/dist/types/utils/bigint.d.ts +4 -0
  274. package/dist/types/utils/bigint.d.ts.map +1 -0
  275. package/dist/types/utils/book-id.d.ts +2 -1
  276. package/dist/types/utils/book-id.d.ts.map +1 -1
  277. package/dist/types/utils/build-transaction.d.ts +3 -3
  278. package/dist/types/utils/build-transaction.d.ts.map +1 -1
  279. package/dist/types/utils/currency.d.ts +5 -1
  280. package/dist/types/utils/currency.d.ts.map +1 -1
  281. package/dist/types/utils/math.d.ts +1 -0
  282. package/dist/types/utils/math.d.ts.map +1 -1
  283. package/dist/types/utils/open.d.ts +2 -1
  284. package/dist/types/utils/open.d.ts.map +1 -1
  285. package/dist/types/utils/order.d.ts +10 -0
  286. package/dist/types/utils/order.d.ts.map +1 -0
  287. package/dist/types/utils/pool-key.d.ts +3 -0
  288. package/dist/types/utils/pool-key.d.ts.map +1 -0
  289. package/dist/types/utils/pool.d.ts +11 -0
  290. package/dist/types/utils/pool.d.ts.map +1 -0
  291. package/dist/types/utils/prices.d.ts +13 -2
  292. package/dist/types/utils/prices.d.ts.map +1 -1
  293. package/dist/types/utils/tick.d.ts +1 -0
  294. package/dist/types/utils/tick.d.ts.map +1 -1
  295. package/dist/types/utils/unit-size.d.ts +5 -0
  296. package/dist/types/utils/unit-size.d.ts.map +1 -0
  297. package/dist/types/utils.d.ts +4 -0
  298. package/dist/types/utils.d.ts.map +1 -0
  299. package/dist/types/view.d.ts +309 -51
  300. package/dist/types/view.d.ts.map +1 -1
  301. package/package.json +3 -2
  302. package/dist/cjs/abis/core/params-abi.js +0 -62
  303. package/dist/cjs/abis/core/params-abi.js.map +0 -1
  304. package/dist/cjs/apis/subgraph.js +0 -26
  305. package/dist/cjs/apis/subgraph.js.map +0 -1
  306. package/dist/cjs/constants/client.js +0 -14
  307. package/dist/cjs/constants/client.js.map +0 -1
  308. package/dist/cjs/constants/subgraph-url.js +0 -8
  309. package/dist/cjs/constants/subgraph-url.js.map +0 -1
  310. package/dist/cjs/signature.js +0 -141
  311. package/dist/cjs/signature.js.map +0 -1
  312. package/dist/cjs/utils/decorator.js +0 -13
  313. package/dist/cjs/utils/decorator.js.map +0 -1
  314. package/dist/cjs/utils/unit.js +0 -34
  315. package/dist/cjs/utils/unit.js.map +0 -1
  316. package/dist/esm/abis/core/params-abi.js +0 -59
  317. package/dist/esm/abis/core/params-abi.js.map +0 -1
  318. package/dist/esm/apis/subgraph.js +0 -22
  319. package/dist/esm/apis/subgraph.js.map +0 -1
  320. package/dist/esm/constants/client.js +0 -10
  321. package/dist/esm/constants/client.js.map +0 -1
  322. package/dist/esm/constants/subgraph-url.js +0 -5
  323. package/dist/esm/constants/subgraph-url.js.map +0 -1
  324. package/dist/esm/signature.js +0 -171
  325. package/dist/esm/signature.js.map +0 -1
  326. package/dist/esm/utils/decorator.js +0 -9
  327. package/dist/esm/utils/decorator.js.map +0 -1
  328. package/dist/esm/utils/unit.js +0 -30
  329. package/dist/esm/utils/unit.js.map +0 -1
  330. package/dist/types/abis/core/params-abi.d.ts +0 -21
  331. package/dist/types/abis/core/params-abi.d.ts.map +0 -1
  332. package/dist/types/apis/subgraph.d.ts +0 -3
  333. package/dist/types/apis/subgraph.d.ts.map +0 -1
  334. package/dist/types/constants/client.d.ts +0 -5
  335. package/dist/types/constants/client.d.ts.map +0 -1
  336. package/dist/types/constants/subgraph-url.d.ts +0 -5
  337. package/dist/types/constants/subgraph-url.d.ts.map +0 -1
  338. package/dist/types/signature.d.ts +0 -44
  339. package/dist/types/signature.d.ts.map +0 -1
  340. package/dist/types/utils/decorator.d.ts +0 -6
  341. package/dist/types/utils/decorator.d.ts.map +0 -1
  342. package/dist/types/utils/unit.d.ts +0 -4
  343. package/dist/types/utils/unit.d.ts.map +0 -1
package/dist/cjs/call.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cancelOrders = exports.cancelOrder = exports.claimOrders = exports.claimOrder = exports.marketOrder = exports.limitOrder = exports.openMarket = void 0;
3
+ exports.resumePool = exports.pausePool = exports.setStrategyConfig = exports.adjustOrderPrice = exports.refillOrder = exports.removeLiquidity = exports.addLiquidity = exports.openPool = exports.cancelOrders = exports.cancelOrder = exports.claimOrders = exports.claimOrder = exports.marketOrder = exports.limitOrder = exports.openMarket = void 0;
4
4
  const viem_1 = require("viem");
5
5
  const chain_1 = require("./constants/chain");
6
- const unit_1 = require("./utils/unit");
6
+ const unit_size_1 = require("./utils/unit-size");
7
7
  const controller_abi_1 = require("./abis/core/controller-abi");
8
8
  const time_1 = require("./utils/time");
9
9
  const build_transaction_1 = require("./utils/build-transaction");
@@ -15,57 +15,89 @@ const tick_1 = require("./utils/tick");
15
15
  const view_1 = require("./view");
16
16
  const book_id_1 = require("./utils/book-id");
17
17
  const approval_1 = require("./utils/approval");
18
- const decorator_1 = require("./utils/decorator");
19
- exports.openMarket = (0, decorator_1.decorator)(async ({ chainId, inputToken, outputToken, }) => {
20
- const market = await (0, market_1.fetchMarket)(chainId, [inputToken, outputToken]);
18
+ const order_1 = require("./utils/order");
19
+ const bigint_1 = require("./utils/bigint");
20
+ const pool_1 = require("./apis/pool");
21
+ const rebalancer_abi_1 = require("./abis/rebalancer/rebalancer-abi");
22
+ const pool_2 = require("./utils/pool");
23
+ const odos_1 = require("./apis/odos");
24
+ const minter_abi_1 = require("./abis/rebalancer/minter-abi");
25
+ const permit_1 = require("./constants/permit");
26
+ const math_1 = require("./utils/math");
27
+ const pool_key_1 = require("./utils/pool-key");
28
+ const operator_abi_1 = require("./abis/rebalancer/operator-abi");
29
+ const strategy_abi_1 = require("./abis/rebalancer/strategy-abi");
30
+ const openMarket = async ({ chainId, userAddress, inputToken, outputToken, options, }) => {
31
+ const publicClient = (0, viem_1.createPublicClient)({
32
+ chain: chain_1.CHAIN_MAP[chainId],
33
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
34
+ });
35
+ const market = await (0, market_1.fetchMarket)(publicClient, chainId, [inputToken, outputToken], !!(options && options.useSubgraph));
21
36
  const isBid = (0, viem_1.isAddressEqual)(market.quote.address, inputToken);
22
- if ((isBid && !market.bidBookOpen) || (!isBid && !market.askBookOpen)) {
23
- const unit = await (0, unit_1.calculateUnit)(chainId, isBid ? market.quote : market.base);
24
- return (0, build_transaction_1.buildTransaction)(chainId, {
37
+ if ((isBid && !market.bidBook.isOpened) ||
38
+ (!isBid && !market.askBook.isOpened)) {
39
+ const unitSize = await (0, unit_size_1.calculateUnitSize)(publicClient, chainId, isBid ? market.quote : market.base);
40
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
41
+ chain: chain_1.CHAIN_MAP[chainId],
25
42
  address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
43
+ account: userAddress,
26
44
  abi: controller_abi_1.CONTROLLER_ABI,
27
45
  functionName: 'open',
28
46
  args: [
29
47
  [
30
48
  {
31
49
  key: {
32
- base: inputToken,
33
- unit,
34
- quote: outputToken,
35
- makerPolicy: fee_1.MAKER_DEFAULT_POLICY.value,
50
+ base: outputToken,
51
+ unitSize,
52
+ quote: inputToken,
53
+ makerPolicy: fee_1.MAKER_DEFAULT_POLICY[chainId].value,
36
54
  hooks: viem_1.zeroAddress,
37
- takerPolicy: fee_1.TAKER_DEFAULT_POLICY.value,
55
+ takerPolicy: fee_1.TAKER_DEFAULT_POLICY[chainId].value,
38
56
  },
39
57
  hookData: viem_1.zeroHash,
40
58
  },
41
59
  ],
42
60
  (0, time_1.getDeadlineTimestampInSeconds)(),
43
61
  ],
44
- });
62
+ }, options?.gasLimit);
45
63
  }
46
64
  return undefined;
47
- });
48
- exports.limitOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, inputToken, outputToken, amount, price, options, }) => {
49
- const market = await (0, market_1.fetchMarket)(chainId, [inputToken, outputToken]);
65
+ };
66
+ exports.openMarket = openMarket;
67
+ const limitOrder = async ({ chainId, userAddress, inputToken, outputToken, amount, price, options, }) => {
68
+ const [roundingUpMakeBid, roundingDownMakeAsk, roundingDownTakenBid, roundingUpTakenAsk,] = [
69
+ options?.roundingUpMakeBid ? options.roundingUpMakeBid : false,
70
+ options?.roundingDownMakeAsk ? options.roundingDownMakeAsk : false,
71
+ options?.roundingDownTakenBid ? options.roundingDownTakenBid : false,
72
+ options?.roundingUpTakenAsk ? options.roundingUpTakenAsk : false,
73
+ ];
74
+ const publicClient = (0, viem_1.createPublicClient)({
75
+ chain: chain_1.CHAIN_MAP[chainId],
76
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
77
+ });
78
+ const market = await (0, market_1.fetchMarket)(publicClient, chainId, [inputToken, outputToken], !!(options && options.useSubgraph));
50
79
  const isBid = (0, viem_1.isAddressEqual)(market.quote.address, inputToken);
51
- if ((isBid && !market.bidBookOpen) || (!isBid && !market.askBookOpen)) {
80
+ const [inputCurrency, outputCurrency] = isBid
81
+ ? [market.quote, market.base]
82
+ : [market.base, market.quote];
83
+ if ((isBid && !market.bidBook.isOpened) ||
84
+ (!isBid && !market.askBook.isOpened)) {
52
85
  throw new Error(`
53
86
  Open the market before placing a limit order.
54
87
  import { openMarket } from '@clober/v2-sdk'
55
88
 
56
- const transaction = await openMarket(
57
- ${chainId},
58
- '${inputToken}',
59
- '${outputToken}',
60
- )
89
+ const transaction = await openMarket({
90
+ chainId: ${chainId},
91
+ inputToken: '${inputToken}',
92
+ outputToken: '${outputToken}',
93
+ })
61
94
  `);
62
95
  }
63
- const rawPrice = (0, prices_1.parsePrice)(Number(price), market.quote.decimals, market.base.decimals);
64
- const tick = isBid ? (0, tick_1.fromPrice)(rawPrice) : (0, tick_1.fromPrice)((0, tick_1.invertPrice)(rawPrice));
96
+ const { roundingDownTick, roundingUpTick } = (0, prices_1.parsePrice)(Number(price), market.quote.decimals, market.base.decimals);
65
97
  const tokensToSettle = [inputToken, outputToken].filter((address) => !(0, viem_1.isAddressEqual)(address, viem_1.zeroAddress));
66
- const quoteAmount = (0, viem_1.parseUnits)(amount, isBid ? market.quote.decimals : market.base.decimals);
67
- const [unit, { spendAmount, bookId }] = await Promise.all([
68
- (0, unit_1.calculateUnit)(chainId, isBid ? market.quote : market.base),
98
+ const quoteAmount = (0, viem_1.parseUnits)(amount, inputCurrency.decimals);
99
+ const [unitSize, { takenAmount, spentAmount, bookId, events }] = await Promise.all([
100
+ (0, unit_size_1.calculateUnitSize)(publicClient, chainId, inputCurrency),
69
101
  (0, view_1.getExpectedOutput)({
70
102
  chainId,
71
103
  inputToken,
@@ -78,24 +110,21 @@ exports.limitOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, i
78
110
  }),
79
111
  ]);
80
112
  const isETH = (0, viem_1.isAddressEqual)(inputToken, viem_1.zeroAddress);
81
- const permitParamsList = options?.signature && !isETH
82
- ? [
83
- {
84
- token: inputToken,
85
- permitAmount: quoteAmount,
86
- signature: options.signature,
87
- },
88
- ]
89
- : [];
90
113
  const makeParam = {
91
- id: (0, book_id_1.toBookId)(inputToken, outputToken, unit),
92
- tick: Number(tick),
114
+ id: (0, book_id_1.toBookId)(chainId, inputToken, outputToken, unitSize),
115
+ tick: options?.makeTick
116
+ ? Number(options.makeTick)
117
+ : Number(isBid
118
+ ? roundingUpMakeBid
119
+ ? roundingUpTick
120
+ : roundingDownTick
121
+ : (0, tick_1.invertTick)(roundingDownMakeAsk ? roundingDownTick : roundingUpTick)),
93
122
  quoteAmount,
94
123
  hookData: viem_1.zeroHash,
95
124
  };
96
- if (options?.postOnly === true || spendAmount === '0') {
125
+ if (options?.postOnly === true || spentAmount === '0') {
97
126
  return {
98
- transaction: await (0, build_transaction_1.buildTransaction)(chainId, {
127
+ transaction: await (0, build_transaction_1.buildTransaction)(publicClient, {
99
128
  chain: chain_1.CHAIN_MAP[chainId],
100
129
  account: userAddress,
101
130
  address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
@@ -104,28 +133,38 @@ exports.limitOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, i
104
133
  args: [
105
134
  [makeParam],
106
135
  tokensToSettle,
107
- permitParamsList,
136
+ options?.erc20PermitParam ? [options.erc20PermitParam] : [],
108
137
  (0, time_1.getDeadlineTimestampInSeconds)(),
109
138
  ],
110
139
  value: isETH ? quoteAmount : 0n,
111
- }),
140
+ }, options?.gasLimit),
112
141
  result: {
113
142
  make: {
114
- amount: (0, viem_1.formatUnits)(quoteAmount, isBid ? market.quote.decimals : market.base.decimals),
115
- currency: isBid ? market.quote : market.base,
143
+ amount: (0, viem_1.formatUnits)(quoteAmount, inputCurrency.decimals),
144
+ currency: inputCurrency,
116
145
  direction: 'in',
146
+ price: (0, prices_1.formatPrice)(isBid
147
+ ? (0, tick_1.toPrice)(BigInt(makeParam.tick))
148
+ : (0, tick_1.toPrice)((0, tick_1.invertTick)(BigInt(makeParam.tick))), market.quote.decimals, market.base.decimals),
117
149
  },
118
- take: {
150
+ spent: {
119
151
  amount: '0',
120
- currency: isBid ? market.base : market.quote,
152
+ currency: inputCurrency,
153
+ direction: 'in',
154
+ events: [],
155
+ },
156
+ taken: {
157
+ amount: '0',
158
+ currency: outputCurrency,
121
159
  direction: 'out',
160
+ events: [],
122
161
  },
123
162
  },
124
163
  };
125
164
  }
126
165
  else {
127
166
  return {
128
- transaction: await (0, build_transaction_1.buildTransaction)(chainId, {
167
+ transaction: await (0, build_transaction_1.buildTransaction)(publicClient, {
129
168
  chain: chain_1.CHAIN_MAP[chainId],
130
169
  account: userAddress,
131
170
  address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
@@ -136,7 +175,15 @@ exports.limitOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, i
136
175
  {
137
176
  takeBookId: bookId,
138
177
  makeBookId: makeParam.id,
139
- limitPrice: isBid ? (0, tick_1.invertPrice)(rawPrice) : rawPrice,
178
+ limitPrice: options?.takeLimitTick
179
+ ? (0, tick_1.toPrice)(options.takeLimitTick)
180
+ : (0, tick_1.toPrice)(isBid
181
+ ? (0, tick_1.invertTick)(roundingUpTakenAsk
182
+ ? roundingUpTick
183
+ : roundingDownTick)
184
+ : roundingDownTakenBid
185
+ ? roundingDownTick
186
+ : roundingUpTick),
140
187
  tick: makeParam.tick,
141
188
  quoteAmount,
142
189
  takeHookData: viem_1.zeroHash,
@@ -144,30 +191,61 @@ exports.limitOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, i
144
191
  },
145
192
  ],
146
193
  tokensToSettle,
147
- permitParamsList,
194
+ options?.erc20PermitParam ? [options.erc20PermitParam] : [],
148
195
  (0, time_1.getDeadlineTimestampInSeconds)(),
149
196
  ],
150
197
  value: isETH ? quoteAmount : 0n,
151
- }),
198
+ }, options?.gasLimit),
152
199
  result: {
153
200
  make: {
154
- amount: (0, viem_1.formatUnits)(quoteAmount, isBid ? market.quote.decimals : market.base.decimals),
155
- currency: isBid ? market.quote : market.base,
201
+ amount: (0, viem_1.formatUnits)(quoteAmount - (0, viem_1.parseUnits)(spentAmount, inputCurrency.decimals), inputCurrency.decimals),
202
+ currency: inputCurrency,
203
+ direction: 'in',
204
+ price: (0, prices_1.formatPrice)(isBid
205
+ ? (0, tick_1.toPrice)(BigInt(makeParam.tick))
206
+ : (0, tick_1.toPrice)((0, tick_1.invertTick)(BigInt(makeParam.tick))), market.quote.decimals, market.base.decimals),
207
+ },
208
+ spent: {
209
+ amount: spentAmount,
210
+ currency: inputCurrency,
156
211
  direction: 'in',
212
+ events: events.map(({ price, spentAmount }) => ({
213
+ price,
214
+ amount: spentAmount,
215
+ })),
157
216
  },
158
- take: {
159
- amount: spendAmount,
160
- currency: isBid ? market.base : market.quote,
217
+ taken: {
218
+ amount: takenAmount,
219
+ currency: outputCurrency,
161
220
  direction: 'out',
221
+ events: events.map(({ price, takenAmount }) => ({
222
+ price,
223
+ amount: takenAmount,
224
+ })),
162
225
  },
163
226
  },
164
227
  };
165
228
  }
166
- });
167
- exports.marketOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, inputToken, outputToken, amount, options, }) => {
168
- const market = await (0, market_1.fetchMarket)(chainId, [inputToken, outputToken]);
169
- const isBid = (0, viem_1.isAddressEqual)(market.quote.address, inputToken);
170
- if ((isBid && !market.bidBookOpen) || (!isBid && !market.askBookOpen)) {
229
+ };
230
+ exports.limitOrder = limitOrder;
231
+ const marketOrder = async ({ chainId, userAddress, inputToken, outputToken, amountIn, amountOut, options, }) => {
232
+ if (!amountIn && !amountOut) {
233
+ throw new Error('Either amountIn or amountOut must be provided');
234
+ }
235
+ else if (amountIn && amountOut) {
236
+ throw new Error('Only one of amountIn or amountOut can be provided');
237
+ }
238
+ const publicClient = (0, viem_1.createPublicClient)({
239
+ chain: chain_1.CHAIN_MAP[chainId],
240
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
241
+ });
242
+ const market = await (0, market_1.fetchMarket)(publicClient, chainId, [inputToken, outputToken], !!(options && options.useSubgraph));
243
+ const isTakingBid = (0, viem_1.isAddressEqual)(market.base.address, inputToken);
244
+ const [inputCurrency, outputCurrency] = isTakingBid
245
+ ? [market.base, market.quote]
246
+ : [market.quote, market.base];
247
+ if ((isTakingBid && !market.bidBook.isOpened) ||
248
+ (!isTakingBid && !market.askBook.isOpened)) {
171
249
  throw new Error(`
172
250
  Open the market before placing a market order.
173
251
  import { openMarket } from '@clober/v2-sdk'
@@ -179,51 +257,135 @@ exports.marketOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress,
179
257
  )
180
258
  `);
181
259
  }
182
- const rawLimitPrice = (0, prices_1.parsePrice)(Number(options?.limitPrice ?? '0'), market.quote.decimals, market.base.decimals);
183
260
  const tokensToSettle = [inputToken, outputToken].filter((address) => !(0, viem_1.isAddressEqual)(address, viem_1.zeroAddress));
184
- const quoteAmount = (0, viem_1.parseUnits)(amount, isBid ? market.quote.decimals : market.base.decimals);
185
- const { bookId, takenAmount } = await (0, view_1.getExpectedOutput)({
186
- chainId,
187
- inputToken,
188
- outputToken,
189
- amountIn: amount,
190
- options: {
191
- ...options,
192
- },
193
- });
194
261
  const isETH = (0, viem_1.isAddressEqual)(inputToken, viem_1.zeroAddress);
195
- const permitParamsList = options?.signature && !isETH
196
- ? [
197
- {
198
- token: inputToken,
199
- permitAmount: quoteAmount,
200
- signature: options.signature,
262
+ if (amountIn && !amountOut) {
263
+ const { bookId, takenAmount, spentAmount, events } = await (0, view_1.getExpectedOutput)({
264
+ chainId,
265
+ inputToken,
266
+ outputToken,
267
+ amountIn,
268
+ options: {
269
+ ...options,
201
270
  },
202
- ]
203
- : [];
204
- return (0, build_transaction_1.buildTransaction)(chainId, {
205
- chain: chain_1.CHAIN_MAP[chainId],
206
- account: userAddress,
207
- address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
208
- abi: controller_abi_1.CONTROLLER_ABI,
209
- functionName: 'take',
210
- args: [
211
- [
212
- {
213
- id: bookId,
214
- limitPrice: isBid ? (0, tick_1.invertPrice)(rawLimitPrice) : rawLimitPrice,
215
- quoteAmount: takenAmount,
216
- hookData: viem_1.zeroHash,
271
+ });
272
+ const baseAmount = (0, viem_1.parseUnits)(amountIn, inputCurrency.decimals);
273
+ return {
274
+ transaction: await (0, build_transaction_1.buildTransaction)(publicClient, {
275
+ chain: chain_1.CHAIN_MAP[chainId],
276
+ account: userAddress,
277
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
278
+ abi: controller_abi_1.CONTROLLER_ABI,
279
+ functionName: 'spend',
280
+ args: [
281
+ [
282
+ {
283
+ id: bookId,
284
+ limitPrice: 0n,
285
+ baseAmount,
286
+ minQuoteAmount: options?.slippage
287
+ ? (0, bigint_1.applyPercent)((0, viem_1.parseUnits)(takenAmount, outputCurrency.decimals), 100 - options.slippage)
288
+ : 0n,
289
+ hookData: viem_1.zeroHash,
290
+ },
291
+ ],
292
+ tokensToSettle,
293
+ options?.erc20PermitParam ? [options.erc20PermitParam] : [],
294
+ (0, time_1.getDeadlineTimestampInSeconds)(),
295
+ ],
296
+ value: isETH ? baseAmount : 0n,
297
+ }, options?.gasLimit),
298
+ result: {
299
+ spent: {
300
+ amount: spentAmount,
301
+ currency: inputCurrency,
302
+ direction: 'in',
303
+ events: events.map(({ price, spentAmount }) => ({
304
+ price,
305
+ amount: spentAmount,
306
+ })),
217
307
  },
218
- ],
219
- tokensToSettle,
220
- permitParamsList,
221
- (0, time_1.getDeadlineTimestampInSeconds)(),
222
- ],
223
- value: isETH ? quoteAmount : 0n,
224
- });
225
- });
226
- exports.claimOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, id, options, }) => {
308
+ taken: {
309
+ amount: takenAmount,
310
+ currency: outputCurrency,
311
+ direction: 'out',
312
+ events: events.map(({ price, takenAmount }) => ({
313
+ price,
314
+ amount: takenAmount,
315
+ })),
316
+ },
317
+ },
318
+ };
319
+ }
320
+ else if (!amountIn && amountOut) {
321
+ const { bookId, spentAmount, takenAmount, events } = await (0, view_1.getExpectedInput)({
322
+ chainId,
323
+ inputToken,
324
+ outputToken,
325
+ amountOut,
326
+ options: {
327
+ ...options,
328
+ },
329
+ });
330
+ const quoteAmount = (0, viem_1.parseUnits)(amountOut, outputCurrency.decimals);
331
+ const baseAmount = (0, viem_1.parseUnits)(spentAmount, inputCurrency.decimals);
332
+ const maxBaseAmount = options?.erc20PermitParam?.permitAmount ??
333
+ (options?.slippage
334
+ ? (0, bigint_1.applyPercent)(baseAmount, 100 + options.slippage)
335
+ : isETH
336
+ ? baseAmount
337
+ : 2n ** 256n - 1n);
338
+ return {
339
+ transaction: await (0, build_transaction_1.buildTransaction)(publicClient, {
340
+ chain: chain_1.CHAIN_MAP[chainId],
341
+ account: userAddress,
342
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
343
+ abi: controller_abi_1.CONTROLLER_ABI,
344
+ functionName: 'take',
345
+ args: [
346
+ [
347
+ {
348
+ id: bookId,
349
+ limitPrice: 0n,
350
+ quoteAmount,
351
+ maxBaseAmount,
352
+ hookData: viem_1.zeroHash,
353
+ },
354
+ ],
355
+ tokensToSettle,
356
+ options?.erc20PermitParam ? [options.erc20PermitParam] : [],
357
+ (0, time_1.getDeadlineTimestampInSeconds)(),
358
+ ],
359
+ value: isETH ? maxBaseAmount : 0n,
360
+ }, options?.gasLimit),
361
+ result: {
362
+ spent: {
363
+ amount: spentAmount,
364
+ currency: inputCurrency,
365
+ direction: 'in',
366
+ events: events.map(({ price, spentAmount }) => ({
367
+ price,
368
+ amount: spentAmount,
369
+ })),
370
+ },
371
+ taken: {
372
+ amount: takenAmount,
373
+ currency: outputCurrency,
374
+ direction: 'out',
375
+ events: events.map(({ price, takenAmount }) => ({
376
+ price,
377
+ amount: takenAmount,
378
+ })),
379
+ },
380
+ },
381
+ };
382
+ }
383
+ else {
384
+ throw new Error('Either amountIn or amountOut must be provided');
385
+ }
386
+ };
387
+ exports.marketOrder = marketOrder;
388
+ const claimOrder = async ({ chainId, userAddress, id, options, }) => {
227
389
  const { transaction, result } = await (0, exports.claimOrders)({
228
390
  chainId,
229
391
  userAddress,
@@ -234,57 +396,60 @@ exports.claimOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, i
234
396
  transaction,
235
397
  result: result[0],
236
398
  };
237
- });
238
- exports.claimOrders = (0, decorator_1.decorator)(async ({ chainId, userAddress, ids, options, }) => {
239
- const isApprovedForAll = await (0, approval_1.fetchIsApprovedForAll)(chainId, userAddress);
399
+ };
400
+ exports.claimOrder = claimOrder;
401
+ const claimOrders = async ({ chainId, userAddress, ids, options, }) => {
402
+ const publicClient = (0, viem_1.createPublicClient)({
403
+ chain: chain_1.CHAIN_MAP[chainId],
404
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
405
+ });
406
+ const isApprovedForAll = await (0, approval_1.fetchIsApprovedForAll)(publicClient, chainId, userAddress);
240
407
  if (!isApprovedForAll) {
241
408
  throw new Error(`
242
409
  Set ApprovalForAll before calling this function.
243
410
  import { setApprovalOfOpenOrdersForAll } from '@clober/v2-sdk'
244
411
 
245
- const hash = await setApprovalOfOpenOrdersForAll(
246
- ${chainId},
247
- privateKeyToAccount('0x...')
248
- )
412
+ const hash = await setApprovalOfOpenOrdersForAll({
413
+ chainId: ${chainId},
414
+ walletClient, // use viem
415
+ })
249
416
  `);
250
417
  }
251
- const openOrders = (await (0, view_1.getOpenOrders)({ chainId, userAddress, options: { ...options } })).filter((order) => ids.includes(order.id));
252
- if (openOrders.length === 0) {
253
- throw new Error(`No claimable open orders found for ${userAddress}`);
254
- }
255
- const tokensToSettle = openOrders
256
- .map((order) => [
257
- order.outputCurrency.address,
258
- order.inputCurrency.address,
259
- ])
418
+ const orders = (await (0, order_1.fetchOnChainOrders)(publicClient, chainId, ids.map((id) => BigInt(id)), !!(options && options.useSubgraph))).filter((order) => (0, viem_1.isAddressEqual)(order.user, userAddress) && order.claimable.value !== '0');
419
+ const tokensToSettle = orders
420
+ .map((order) => [order.inputCurrency.address, order.outputCurrency.address])
260
421
  .flat()
261
422
  .filter((address, index, self) => self.findIndex((c) => (0, viem_1.isAddressEqual)(c, address)) === index)
262
423
  .filter((address) => !(0, viem_1.isAddressEqual)(address, viem_1.zeroAddress));
263
424
  return {
264
- transaction: await (0, build_transaction_1.buildTransaction)(chainId, {
425
+ transaction: await (0, build_transaction_1.buildTransaction)(publicClient, {
265
426
  chain: chain_1.CHAIN_MAP[chainId],
266
427
  account: userAddress,
267
428
  address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
268
429
  abi: controller_abi_1.CONTROLLER_ABI,
269
430
  functionName: 'claim',
270
431
  args: [
271
- openOrders.map((order) => ({
272
- id: BigInt(order.id),
432
+ orders.map(({ id }) => ({
433
+ id,
273
434
  hookData: viem_1.zeroHash,
274
435
  })),
275
436
  tokensToSettle,
276
437
  [],
277
438
  (0, time_1.getDeadlineTimestampInSeconds)(),
278
439
  ],
279
- }),
280
- result: openOrders.map((order) => ({
281
- currency: order.claimable.currency,
282
- amount: order.claimable.value,
283
- direction: 'out',
284
- })),
440
+ }, options?.gasLimit),
441
+ result: orders.reduce((acc, { claimable: { currency, value } }) => {
442
+ const index = acc.findIndex((c) => (0, viem_1.isAddressEqual)(c.currency.address, currency.address));
443
+ if (index === -1) {
444
+ return [...acc, { currency, amount: value, direction: 'out' }];
445
+ }
446
+ acc[index].amount = (Number(acc[index].amount) + Number(value)).toString();
447
+ return acc;
448
+ }, []),
285
449
  };
286
- });
287
- exports.cancelOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress, id, options, }) => {
450
+ };
451
+ exports.claimOrders = claimOrders;
452
+ const cancelOrder = async ({ chainId, userAddress, id, options, }) => {
288
453
  const { transaction, result } = await (0, exports.cancelOrders)({
289
454
  chainId,
290
455
  userAddress,
@@ -295,42 +460,41 @@ exports.cancelOrder = (0, decorator_1.decorator)(async ({ chainId, userAddress,
295
460
  transaction,
296
461
  result: result[0],
297
462
  };
298
- });
299
- exports.cancelOrders = (0, decorator_1.decorator)(async ({ chainId, userAddress, ids, options, }) => {
300
- const isApprovedForAll = await (0, approval_1.fetchIsApprovedForAll)(chainId, userAddress);
463
+ };
464
+ exports.cancelOrder = cancelOrder;
465
+ const cancelOrders = async ({ chainId, userAddress, ids, options, }) => {
466
+ const publicClient = (0, viem_1.createPublicClient)({
467
+ chain: chain_1.CHAIN_MAP[chainId],
468
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
469
+ });
470
+ const isApprovedForAll = await (0, approval_1.fetchIsApprovedForAll)(publicClient, chainId, userAddress);
301
471
  if (!isApprovedForAll) {
302
472
  throw new Error(`
303
473
  Set ApprovalForAll before calling this function.
304
474
  import { setApprovalOfOpenOrdersForAll } from '@clober/v2-sdk'
305
475
 
306
- const hash = await setApprovalOfOpenOrdersForAll(
307
- ${chainId},
308
- privateKeyToAccount('0x...')
309
- )
476
+ const hash = await setApprovalOfOpenOrdersForAll({
477
+ chainId: ${chainId},
478
+ walletClient, // use viem
479
+ })
310
480
  `);
311
481
  }
312
- const openOrders = (await (0, view_1.getOpenOrders)({ chainId, userAddress, options: { ...options } })).filter((order) => ids.includes(order.id) && order.claimable.value !== '0');
313
- if (openOrders.length === 0) {
314
- throw new Error(`No cancelable open orders found for ${userAddress}`);
315
- }
316
- const tokensToSettle = openOrders
317
- .map((order) => [
318
- order.outputCurrency.address,
319
- order.inputCurrency.address,
320
- ])
482
+ const orders = (await (0, order_1.fetchOnChainOrders)(publicClient, chainId, ids.map((id) => BigInt(id)), !!(options && options.useSubgraph))).filter((order) => (0, viem_1.isAddressEqual)(order.user, userAddress) && order.cancelable.value !== '0');
483
+ const tokensToSettle = orders
484
+ .map((order) => [order.inputCurrency.address, order.outputCurrency.address])
321
485
  .flat()
322
486
  .filter((address, index, self) => self.findIndex((c) => (0, viem_1.isAddressEqual)(c, address)) === index)
323
487
  .filter((address) => !(0, viem_1.isAddressEqual)(address, viem_1.zeroAddress));
324
488
  return {
325
- transaction: await (0, build_transaction_1.buildTransaction)(chainId, {
489
+ transaction: await (0, build_transaction_1.buildTransaction)(publicClient, {
326
490
  chain: chain_1.CHAIN_MAP[chainId],
327
491
  account: userAddress,
328
492
  address: addresses_1.CONTRACT_ADDRESSES[chainId].Controller,
329
493
  abi: controller_abi_1.CONTROLLER_ABI,
330
494
  functionName: 'cancel',
331
495
  args: [
332
- openOrders.map((order) => ({
333
- id: BigInt(order.id),
496
+ orders.map(({ id }) => ({
497
+ id,
334
498
  leftQuoteAmount: 0n,
335
499
  hookData: viem_1.zeroHash,
336
500
  })),
@@ -338,12 +502,530 @@ exports.cancelOrders = (0, decorator_1.decorator)(async ({ chainId, userAddress,
338
502
  [],
339
503
  (0, time_1.getDeadlineTimestampInSeconds)(),
340
504
  ],
341
- }),
342
- result: openOrders.map((order) => ({
343
- currency: order.cancelable.currency,
344
- amount: order.cancelable.value,
345
- direction: 'out',
346
- })),
505
+ }, options?.gasLimit),
506
+ result: orders.reduce((acc, { cancelable: { currency, value } }) => {
507
+ const index = acc.findIndex((c) => (0, viem_1.isAddressEqual)(c.currency.address, currency.address));
508
+ if (index === -1) {
509
+ return [...acc, { currency, amount: value, direction: 'out' }];
510
+ }
511
+ acc[index].amount = (Number(acc[index].amount) + Number(value)).toString();
512
+ return acc;
513
+ }, []),
514
+ };
515
+ };
516
+ exports.cancelOrders = cancelOrders;
517
+ const openPool = async ({ chainId, userAddress, tokenA, tokenB, salt, options, }) => {
518
+ const publicClient = (0, viem_1.createPublicClient)({
519
+ chain: chain_1.CHAIN_MAP[chainId],
520
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
521
+ });
522
+ const pool = await (0, pool_1.fetchPool)(publicClient, chainId, [tokenA, tokenB], salt, !!(options && options.useSubgraph));
523
+ if (!pool.isOpened) {
524
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
525
+ chain: chain_1.CHAIN_MAP[chainId],
526
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Rebalancer,
527
+ account: userAddress,
528
+ abi: rebalancer_abi_1.REBALANCER_ABI,
529
+ functionName: 'open',
530
+ args: [
531
+ {
532
+ base: pool.market.bidBook.base.address,
533
+ unitSize: pool.market.bidBook.unitSize,
534
+ quote: pool.market.bidBook.quote.address,
535
+ makerPolicy: fee_1.MAKER_DEFAULT_POLICY[chainId].value,
536
+ hooks: viem_1.zeroAddress,
537
+ takerPolicy: fee_1.TAKER_DEFAULT_POLICY[chainId].value,
538
+ },
539
+ {
540
+ base: pool.market.askBook.base.address,
541
+ unitSize: pool.market.askBook.unitSize,
542
+ quote: pool.market.askBook.quote.address,
543
+ makerPolicy: fee_1.MAKER_DEFAULT_POLICY[chainId].value,
544
+ hooks: viem_1.zeroAddress,
545
+ takerPolicy: fee_1.TAKER_DEFAULT_POLICY[chainId].value,
546
+ },
547
+ (0, pool_key_1.toBytes32)(salt),
548
+ addresses_1.CONTRACT_ADDRESSES[chainId].Strategy,
549
+ ],
550
+ }, options?.gasLimit);
551
+ }
552
+ return undefined;
553
+ };
554
+ exports.openPool = openPool;
555
+ const addLiquidity = async ({ chainId, userAddress, token0, token1, salt, amount0, amount1, options, }) => {
556
+ if ((0, viem_1.isAddressEqual)(token0, viem_1.zeroAddress) ||
557
+ (0, viem_1.isAddressEqual)(token1, viem_1.zeroAddress)) {
558
+ throw new Error('ETH is not supported for adding liquidity');
559
+ }
560
+ const publicClient = (0, viem_1.createPublicClient)({
561
+ chain: chain_1.CHAIN_MAP[chainId],
562
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
563
+ });
564
+ const pool = await (0, pool_1.fetchPool)(publicClient, chainId, [token0, token1], salt, !!(options && options.useSubgraph));
565
+ if (!pool.isOpened) {
566
+ throw new Error(`
567
+ Open the pool before adding liquidity.
568
+ import { openPool } from '@clober/v2-sdk'
569
+
570
+ const transaction = await openPool({
571
+ chainId: ${chainId},
572
+ tokenA: '${token0}',
573
+ tokenB: '${token1}',
574
+ salt: '0x0000000000000000000000000000000000000000000000000000000000000000',
575
+ })
576
+ `);
577
+ }
578
+ const [amountAOrigin, amountBOrigin] = (0, viem_1.isAddressEqual)(pool.currencyA.address, (0, viem_1.getAddress)(token0))
579
+ ? [
580
+ (0, viem_1.parseUnits)(amount0 ?? '0', pool.currencyA.decimals),
581
+ (0, viem_1.parseUnits)(amount1 ?? '0', pool.currencyB.decimals),
582
+ ]
583
+ : [
584
+ (0, viem_1.parseUnits)(amount1 ?? '0', pool.currencyA.decimals),
585
+ (0, viem_1.parseUnits)(amount0 ?? '0', pool.currencyB.decimals),
586
+ ];
587
+ let [amountA, amountB] = [amountAOrigin, amountBOrigin];
588
+ const tokenAPermitParams = (0, viem_1.isAddressEqual)(pool.currencyA.address, (0, viem_1.getAddress)(token0))
589
+ ? options?.token0PermitParams ?? permit_1.emptyERC20PermitParams
590
+ : options?.token1PermitParams ?? permit_1.emptyERC20PermitParams;
591
+ const tokenBPermitParams = (0, viem_1.isAddressEqual)(pool.currencyA.address, (0, viem_1.getAddress)(token0))
592
+ ? options?.token1PermitParams ?? permit_1.emptyERC20PermitParams
593
+ : options?.token0PermitParams ?? permit_1.emptyERC20PermitParams;
594
+ let disableSwap = !!(options && options.disableSwap);
595
+ if (pool.totalSupply === 0n ||
596
+ (pool.liquidityA === 0n && pool.liquidityB === 0n)) {
597
+ disableSwap = true;
598
+ }
599
+ const slippageLimitPercent = options?.slippage ?? 2;
600
+ const swapParams = {
601
+ inCurrency: viem_1.zeroAddress,
602
+ amount: 0n,
603
+ data: '0x',
604
+ };
605
+ if (!disableSwap) {
606
+ const currencyBPerCurrencyA = options?.testnetPrice
607
+ ? (0, viem_1.isAddressEqual)((0, view_1.getQuoteToken)({
608
+ chainId,
609
+ token0,
610
+ token1,
611
+ }), pool.currencyA.address)
612
+ ? 1 / Number(options.testnetPrice)
613
+ : Number(options.testnetPrice)
614
+ : undefined;
615
+ const swapAmountA = (0, viem_1.parseUnits)('1', pool.currencyA.decimals);
616
+ const { amountOut: swapAmountB } = await (0, odos_1.fetchQuote)({
617
+ chainId,
618
+ amountIn: swapAmountA,
619
+ tokenIn: pool.currencyA,
620
+ tokenOut: pool.currencyB,
621
+ slippageLimitPercent: 20,
622
+ userAddress: addresses_1.CONTRACT_ADDRESSES[chainId].Minter,
623
+ testnetPrice: currencyBPerCurrencyA,
624
+ });
625
+ const { deltaA, deltaB } = (0, pool_2.getIdealDelta)(amountA, amountB, pool.liquidityA, pool.liquidityB, swapAmountA, swapAmountB);
626
+ if (deltaA < 0n) {
627
+ swapParams.inCurrency = pool.currencyA.address;
628
+ swapParams.amount = -deltaA;
629
+ const { amountOut: actualDeltaB, data: calldata } = await (0, odos_1.fetchCallData)({
630
+ chainId,
631
+ amountIn: swapParams.amount,
632
+ tokenIn: pool.currencyA,
633
+ tokenOut: pool.currencyB,
634
+ slippageLimitPercent,
635
+ userAddress: addresses_1.CONTRACT_ADDRESSES[chainId].Minter,
636
+ testnetPrice: currencyBPerCurrencyA,
637
+ });
638
+ swapParams.data = calldata;
639
+ amountA += deltaA;
640
+ amountB += actualDeltaB;
641
+ }
642
+ else if (deltaB < 0n) {
643
+ swapParams.inCurrency = pool.currencyB.address;
644
+ swapParams.amount = -deltaB;
645
+ const { amountOut: actualDeltaA, data: calldata } = await (0, odos_1.fetchCallData)({
646
+ chainId,
647
+ amountIn: swapParams.amount,
648
+ tokenIn: pool.currencyB,
649
+ tokenOut: pool.currencyA,
650
+ slippageLimitPercent,
651
+ userAddress: addresses_1.CONTRACT_ADDRESSES[chainId].Minter,
652
+ testnetPrice: currencyBPerCurrencyA
653
+ ? 1 / currencyBPerCurrencyA
654
+ : undefined,
655
+ });
656
+ swapParams.data = calldata;
657
+ amountA += actualDeltaA;
658
+ amountB += deltaB;
659
+ }
660
+ }
661
+ const { mintAmount, inAmountA, inAmountB } = (0, pool_2.getExpectedMintResult)(pool.totalSupply, pool.liquidityA, pool.liquidityB, amountA, amountB, pool.currencyA, pool.currencyB);
662
+ if (mintAmount === 0n) {
663
+ return {
664
+ transaction: undefined,
665
+ result: {
666
+ currencyA: {
667
+ currency: pool.currencyA,
668
+ amount: '0',
669
+ direction: 'in',
670
+ },
671
+ currencyB: {
672
+ currency: pool.currencyB,
673
+ amount: '0',
674
+ direction: 'in',
675
+ },
676
+ lpCurrency: {
677
+ currency: pool.currencyLp,
678
+ amount: '0',
679
+ direction: 'out',
680
+ },
681
+ },
682
+ };
683
+ }
684
+ const minMintAmount = (0, bigint_1.applyPercent)(mintAmount, 100 - slippageLimitPercent);
685
+ const transaction = await (0, build_transaction_1.buildTransaction)(publicClient, {
686
+ chain: chain_1.CHAIN_MAP[chainId],
687
+ account: userAddress,
688
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Minter,
689
+ abi: minter_abi_1.MINTER_ABI,
690
+ functionName: 'mint',
691
+ args: [
692
+ pool.key,
693
+ amountAOrigin,
694
+ amountBOrigin,
695
+ minMintAmount,
696
+ {
697
+ permitAmount: tokenAPermitParams.permitAmount,
698
+ signature: tokenAPermitParams.signature,
699
+ },
700
+ {
701
+ permitAmount: tokenBPermitParams.permitAmount,
702
+ signature: tokenBPermitParams.signature,
703
+ },
704
+ swapParams,
705
+ ],
706
+ }, options?.gasLimit);
707
+ const currencyARefund = amountA - inAmountA;
708
+ const currencyBRefund = amountB - inAmountB;
709
+ const currencyAResultAmount = amountAOrigin - currencyARefund;
710
+ const currencyBResultAmount = amountBOrigin - currencyBRefund;
711
+ return {
712
+ transaction,
713
+ result: {
714
+ currencyA: {
715
+ currency: pool.currencyA,
716
+ amount: (0, viem_1.formatUnits)((0, math_1.abs)(currencyAResultAmount), pool.currencyA.decimals),
717
+ direction: currencyAResultAmount >= 0 ? 'in' : 'out',
718
+ },
719
+ currencyB: {
720
+ currency: pool.currencyB,
721
+ amount: (0, viem_1.formatUnits)((0, math_1.abs)(currencyBResultAmount), pool.currencyB.decimals),
722
+ direction: currencyBResultAmount >= 0 ? 'in' : 'out',
723
+ },
724
+ lpCurrency: {
725
+ currency: pool.currencyLp,
726
+ amount: (0, viem_1.formatUnits)(mintAmount, pool.currencyLp.decimals),
727
+ direction: 'out',
728
+ },
729
+ },
347
730
  };
348
- });
731
+ };
732
+ exports.addLiquidity = addLiquidity;
733
+ const removeLiquidity = async ({ chainId, userAddress, token0, token1, salt, amount, options, }) => {
734
+ const publicClient = (0, viem_1.createPublicClient)({
735
+ chain: chain_1.CHAIN_MAP[chainId],
736
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
737
+ });
738
+ const pool = await (0, pool_1.fetchPool)(publicClient, chainId, [token0, token1], salt, !!(options && options.useSubgraph));
739
+ if (!pool.isOpened) {
740
+ throw new Error(`
741
+ Open the pool before removing liquidity.
742
+ import { openPool } from '@clober/v2-sdk'
743
+
744
+ const transaction = await openPool({
745
+ chainId: ${chainId},
746
+ tokenA: '${token0}',
747
+ tokenB: '${token1}',
748
+ salt: '0x0000000000000000000000000000000000000000000000000000000000000000',
749
+ })
750
+ `);
751
+ }
752
+ const burnAmount = (0, viem_1.parseUnits)(amount, pool.currencyLp.decimals);
753
+ const slippageLimitPercent = options?.slippage ?? 2;
754
+ const withdrawAmountA = (burnAmount * pool.liquidityA) / pool.totalSupply;
755
+ const withdrawAmountB = (burnAmount * pool.liquidityB) / pool.totalSupply;
756
+ const minWithdrawAmountA = (0, bigint_1.applyPercent)(withdrawAmountA, 100 - slippageLimitPercent);
757
+ const minWithdrawAmountB = (0, bigint_1.applyPercent)(withdrawAmountB, 100 - slippageLimitPercent);
758
+ if (burnAmount === 0n) {
759
+ return {
760
+ transaction: undefined,
761
+ result: {
762
+ currencyA: {
763
+ currency: pool.currencyA,
764
+ amount: '0',
765
+ direction: 'out',
766
+ },
767
+ currencyB: {
768
+ currency: pool.currencyB,
769
+ amount: '0',
770
+ direction: 'out',
771
+ },
772
+ lpCurrency: {
773
+ currency: pool.currencyLp,
774
+ amount: '0',
775
+ direction: 'in',
776
+ },
777
+ },
778
+ };
779
+ }
780
+ const transaction = await (0, build_transaction_1.buildTransaction)(publicClient, {
781
+ chain: chain_1.CHAIN_MAP[chainId],
782
+ account: userAddress,
783
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Rebalancer,
784
+ abi: rebalancer_abi_1.REBALANCER_ABI,
785
+ functionName: 'burn',
786
+ args: [pool.key, burnAmount, minWithdrawAmountA, minWithdrawAmountB],
787
+ }, options?.gasLimit);
788
+ return {
789
+ transaction,
790
+ result: {
791
+ currencyA: {
792
+ currency: pool.currencyA,
793
+ amount: (0, viem_1.formatUnits)(withdrawAmountA, pool.currencyA.decimals),
794
+ direction: 'out',
795
+ },
796
+ currencyB: {
797
+ currency: pool.currencyB,
798
+ amount: (0, viem_1.formatUnits)(withdrawAmountB, pool.currencyB.decimals),
799
+ direction: 'out',
800
+ },
801
+ lpCurrency: {
802
+ currency: pool.currencyLp,
803
+ amount: amount,
804
+ direction: 'in',
805
+ },
806
+ },
807
+ };
808
+ };
809
+ exports.removeLiquidity = removeLiquidity;
810
+ const refillOrder = async ({ chainId, userAddress, token0, token1, salt, options, }) => {
811
+ const publicClient = (0, viem_1.createPublicClient)({
812
+ chain: chain_1.CHAIN_MAP[chainId],
813
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
814
+ });
815
+ const pool = options?.pool
816
+ ? options.pool
817
+ : (await (0, pool_1.fetchPool)(publicClient, chainId, [token0, token1], salt, !!(options && options.useSubgraph))).toJson();
818
+ if (!pool.isOpened) {
819
+ throw new Error(`
820
+ Open the pool before rebalancing pool.
821
+ import { openPool } from '@clober/v2-sdk'
822
+
823
+ const transaction = await openPool({
824
+ chainId: ${chainId},
825
+ tokenA: '${token0}',
826
+ tokenB: '${token1}',
827
+ salt: '0x0000000000000000000000000000000000000000000000000000000000000000',
828
+ })
829
+ `);
830
+ }
831
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
832
+ chain: chain_1.CHAIN_MAP[chainId],
833
+ account: userAddress,
834
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Rebalancer,
835
+ abi: rebalancer_abi_1.REBALANCER_ABI,
836
+ functionName: 'rebalance',
837
+ args: [pool.key],
838
+ }, options?.gasLimit, options?.gasPriceLimit);
839
+ };
840
+ exports.refillOrder = refillOrder;
841
+ const adjustOrderPrice = async ({ chainId, userAddress, token0, token1, salt, oraclePrice, bidPrice, askPrice, alpha, options, }) => {
842
+ if (Number(alpha) <= 0 || Number(alpha) > 1) {
843
+ throw new Error('Alpha value must be in the range (0, 1]');
844
+ }
845
+ if (Number(bidPrice) <= 0 || Number(askPrice) <= 0) {
846
+ throw new Error('Price must be greater than 0');
847
+ }
848
+ if (Number(bidPrice) >= Number(askPrice)) {
849
+ throw new Error('Bid price must be less than ask price');
850
+ }
851
+ const publicClient = (0, viem_1.createPublicClient)({
852
+ chain: chain_1.CHAIN_MAP[chainId],
853
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
854
+ });
855
+ const pool = options?.pool
856
+ ? options.pool
857
+ : (await (0, pool_1.fetchPool)(publicClient, chainId, [token0, token1], salt, !!(options && options.useSubgraph))).toJson();
858
+ if (!pool.isOpened) {
859
+ throw new Error(`
860
+ Open the pool before updating strategy price.
861
+ import { openPool } from '@clober/v2-sdk'
862
+
863
+ const transaction = await openPool({
864
+ chainId: ${chainId},
865
+ tokenA: '${token0}',
866
+ tokenB: '${token1}',
867
+ salt: '0x0000000000000000000000000000000000000000000000000000000000000000',
868
+ })
869
+ `);
870
+ }
871
+ const [roundingUpBidPrice, roundingUpAskPrice] = [
872
+ options?.roundingUpBidPrice ? options.roundingUpBidPrice : false,
873
+ options?.roundingUpAskPrice ? options.roundingUpAskPrice : false,
874
+ ];
875
+ const { roundingDownTick: roundingDownTickA, roundingUpTick: roundingUpTickA, } = (0, prices_1.parsePrice)(Number(bidPrice), pool.currencyA.decimals, pool.currencyB.decimals);
876
+ const { roundingDownTick: roundingDownTickB, roundingUpTick: roundingUpTickB, } = (0, prices_1.parsePrice)(Number(askPrice), pool.currencyA.decimals, pool.currencyB.decimals);
877
+ const oracleRawPrice = (0, prices_1.convertHumanReadablePriceToRawPrice)(Number(oraclePrice), pool.currencyA.decimals, pool.currencyB.decimals);
878
+ const tickA = options?.bidTick
879
+ ? Number(options.bidTick)
880
+ : Number(roundingUpBidPrice ? roundingUpTickA : roundingDownTickA);
881
+ const tickB = options?.askTick
882
+ ? Number(options.askTick)
883
+ : Number((0, tick_1.invertTick)(roundingUpAskPrice ? roundingUpTickB : roundingDownTickB));
884
+ const alphaRaw = (0, viem_1.parseUnits)(alpha, 6);
885
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
886
+ chain: chain_1.CHAIN_MAP[chainId],
887
+ account: userAddress,
888
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Operator,
889
+ abi: operator_abi_1.OPERATOR_ABI,
890
+ functionName: 'updatePrice',
891
+ args: [pool.key, oracleRawPrice, tickA, tickB, alphaRaw],
892
+ }, options?.gasLimit, options?.gasPriceLimit);
893
+ };
894
+ exports.adjustOrderPrice = adjustOrderPrice;
895
+ const setStrategyConfig = async ({ chainId, userAddress, token0, token1, salt, config, options, }) => {
896
+ if (Number(config.referenceThreshold) < 0 ||
897
+ Number(config.referenceThreshold) > 1) {
898
+ throw new Error('Reference threshold must be in the range [0, 1]');
899
+ }
900
+ if (Number(config.rebalanceThreshold) < 0 ||
901
+ Number(config.rebalanceThreshold) > 1) {
902
+ throw new Error('Rebalance threshold must be in the range [0, 1]');
903
+ }
904
+ if (Number(config.priceThresholdA) < 0 ||
905
+ Number(config.priceThresholdA) > 1 ||
906
+ Number(config.priceThresholdB) < 0 ||
907
+ Number(config.priceThresholdB) > 1) {
908
+ throw new Error('Price threshold must be in the range [0, 1]');
909
+ }
910
+ if (Number(config.rateA) < 0 ||
911
+ Number(config.rateA) > 1 ||
912
+ Number(config.rateB) < 0 ||
913
+ Number(config.rateB) > 1) {
914
+ throw new Error('Rate must be in the range [0, 1]');
915
+ }
916
+ if (Number(config.minRateA) < 0 ||
917
+ Number(config.minRateA) > 1 ||
918
+ Number(config.minRateB) < 0 ||
919
+ Number(config.minRateB) > 1) {
920
+ throw new Error('Min rate must be in the range [0, 1]');
921
+ }
922
+ if (Number(config.minRateA) > Number(config.rateA) ||
923
+ Number(config.minRateB) > Number(config.rateB)) {
924
+ throw new Error('Min rate must be less or equal to rate');
925
+ }
926
+ const publicClient = (0, viem_1.createPublicClient)({
927
+ chain: chain_1.CHAIN_MAP[chainId],
928
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
929
+ });
930
+ const pool = await (0, pool_1.fetchPool)(publicClient, chainId, [token0, token1], salt, !!(options && options.useSubgraph));
931
+ if (!pool.isOpened) {
932
+ throw new Error(`
933
+ Open the pool before set strategy config.
934
+ import { openPool } from '@clober/v2-sdk'
935
+
936
+ const transaction = await openPool({
937
+ chainId: ${chainId},
938
+ tokenA: '${token0}',
939
+ tokenB: '${token1}',
940
+ })
941
+ `);
942
+ }
943
+ const configRaw = {
944
+ referenceThreshold: (0, viem_1.parseUnits)(config.referenceThreshold, 6),
945
+ rebalanceThreshold: (0, viem_1.parseUnits)(config.rebalanceThreshold, 6),
946
+ rateA: (0, viem_1.parseUnits)(config.rateA, 6),
947
+ rateB: (0, viem_1.parseUnits)(config.rateB, 6),
948
+ minRateA: (0, viem_1.parseUnits)(config.minRateA, 6),
949
+ minRateB: (0, viem_1.parseUnits)(config.minRateB, 6),
950
+ priceThresholdA: (0, viem_1.parseUnits)(config.priceThresholdA, 6),
951
+ priceThresholdB: (0, viem_1.parseUnits)(config.priceThresholdB, 6),
952
+ };
953
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
954
+ chain: chain_1.CHAIN_MAP[chainId],
955
+ account: userAddress,
956
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Strategy,
957
+ abi: strategy_abi_1.STRATEGY_ABI,
958
+ functionName: 'setConfig',
959
+ args: [pool.key, configRaw],
960
+ }, options?.gasLimit);
961
+ };
962
+ exports.setStrategyConfig = setStrategyConfig;
963
+ const pausePool = async ({ chainId, userAddress, token0, token1, salt, options, }) => {
964
+ const publicClient = (0, viem_1.createPublicClient)({
965
+ chain: chain_1.CHAIN_MAP[chainId],
966
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
967
+ });
968
+ const pool = options?.pool
969
+ ? options.pool
970
+ : (await (0, pool_1.fetchPool)(publicClient, chainId, [token0, token1], salt, !!(options && options.useSubgraph))).toJson();
971
+ if (!pool.isOpened) {
972
+ throw new Error(`
973
+ Open the pool before trying pause.
974
+ import { openPool } from '@clober/v2-sdk'
975
+
976
+ const transaction = await openPool({
977
+ chainId: ${chainId},
978
+ tokenA: '${token0}',
979
+ tokenB: '${token1}',
980
+ salt: '0x0000000000000000000000000000000000000000000000000000000000000000',
981
+ })
982
+ `);
983
+ }
984
+ if (pool.paused) {
985
+ return undefined;
986
+ }
987
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
988
+ chain: chain_1.CHAIN_MAP[chainId],
989
+ account: userAddress,
990
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Rebalancer,
991
+ abi: rebalancer_abi_1.REBALANCER_ABI,
992
+ functionName: 'pause',
993
+ args: [pool.key],
994
+ }, options?.gasLimit, options?.gasPriceLimit);
995
+ };
996
+ exports.pausePool = pausePool;
997
+ const resumePool = async ({ chainId, userAddress, token0, token1, salt, options, }) => {
998
+ const publicClient = (0, viem_1.createPublicClient)({
999
+ chain: chain_1.CHAIN_MAP[chainId],
1000
+ transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
1001
+ });
1002
+ const pool = options?.pool
1003
+ ? options.pool
1004
+ : (await (0, pool_1.fetchPool)(publicClient, chainId, [token0, token1], salt, !!(options && options.useSubgraph))).toJson();
1005
+ if (!pool.isOpened) {
1006
+ throw new Error(`
1007
+ Open the pool before trying resume.
1008
+ import { openPool } from '@clober/v2-sdk'
1009
+
1010
+ const transaction = await openPool({
1011
+ chainId: ${chainId},
1012
+ tokenA: '${token0}',
1013
+ tokenB: '${token1}',
1014
+ salt: '0x0000000000000000000000000000000000000000000000000000000000000000',
1015
+ })
1016
+ `);
1017
+ }
1018
+ if (!pool.paused) {
1019
+ return undefined;
1020
+ }
1021
+ return (0, build_transaction_1.buildTransaction)(publicClient, {
1022
+ chain: chain_1.CHAIN_MAP[chainId],
1023
+ account: userAddress,
1024
+ address: addresses_1.CONTRACT_ADDRESSES[chainId].Rebalancer,
1025
+ abi: rebalancer_abi_1.REBALANCER_ABI,
1026
+ functionName: 'resume',
1027
+ args: [pool.key],
1028
+ }, options?.gasLimit, options?.gasPriceLimit);
1029
+ };
1030
+ exports.resumePool = resumePool;
349
1031
  //# sourceMappingURL=call.js.map