@clober/v2-sdk 0.0.4 → 0.0.5-0.a.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 (232) 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 +321 -0
  5. package/dist/cjs/abis/core/book-viewer-abi.js.map +1 -0
  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/apis/chart-logs.js +154 -0
  9. package/dist/cjs/apis/chart-logs.js.map +1 -0
  10. package/dist/cjs/apis/market.js +61 -32
  11. package/dist/cjs/apis/market.js.map +1 -1
  12. package/dist/cjs/apis/open-order.js +56 -21
  13. package/dist/cjs/apis/open-order.js.map +1 -1
  14. package/dist/cjs/approval.js +77 -30
  15. package/dist/cjs/approval.js.map +1 -1
  16. package/dist/cjs/call.js +358 -207
  17. package/dist/cjs/call.js.map +1 -1
  18. package/dist/cjs/constants/addresses.js +26 -1
  19. package/dist/cjs/constants/addresses.js.map +1 -1
  20. package/dist/cjs/constants/chain.js +19 -1
  21. package/dist/cjs/constants/chain.js.map +1 -1
  22. package/dist/cjs/constants/client.js +4 -0
  23. package/dist/cjs/constants/client.js.map +1 -1
  24. package/dist/cjs/constants/currency.js +28 -2
  25. package/dist/cjs/constants/currency.js.map +1 -1
  26. package/dist/cjs/constants/fee.js +17 -2
  27. package/dist/cjs/constants/fee.js.map +1 -1
  28. package/dist/cjs/constants/subgraph.js +57 -0
  29. package/dist/cjs/constants/subgraph.js.map +1 -0
  30. package/dist/cjs/constants/test-chain.js +27 -0
  31. package/dist/cjs/constants/test-chain.js.map +1 -0
  32. package/dist/cjs/index.js +20 -6
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/model/book.js +63 -29
  35. package/dist/cjs/model/book.js.map +1 -1
  36. package/dist/cjs/model/chart-log.js +3 -0
  37. package/dist/cjs/model/chart-log.js.map +1 -0
  38. package/dist/cjs/model/market.js +45 -182
  39. package/dist/cjs/model/market.js.map +1 -1
  40. package/dist/cjs/signature.js +20 -16
  41. package/dist/cjs/signature.js.map +1 -1
  42. package/dist/cjs/type.js +16 -1
  43. package/dist/cjs/type.js.map +1 -1
  44. package/dist/cjs/utils/allowance.js +40 -0
  45. package/dist/cjs/utils/allowance.js.map +1 -0
  46. package/dist/cjs/utils/bigint.js +9 -0
  47. package/dist/cjs/utils/bigint.js.map +1 -0
  48. package/dist/cjs/utils/book-id.js +7 -7
  49. package/dist/cjs/utils/book-id.js.map +1 -1
  50. package/dist/cjs/utils/build-transaction.js +8 -7
  51. package/dist/cjs/utils/build-transaction.js.map +1 -1
  52. package/dist/cjs/utils/currency.js +166 -0
  53. package/dist/cjs/utils/currency.js.map +1 -0
  54. package/dist/cjs/utils/decorator.js +3 -1
  55. package/dist/cjs/utils/decorator.js.map +1 -1
  56. package/dist/cjs/utils/open.js +36 -0
  57. package/dist/cjs/utils/open.js.map +1 -0
  58. package/dist/cjs/utils/order.js +102 -0
  59. package/dist/cjs/utils/order.js.map +1 -0
  60. package/dist/cjs/utils/prices.js +28 -3
  61. package/dist/cjs/utils/prices.js.map +1 -1
  62. package/dist/cjs/utils/unit-size.js +49 -0
  63. package/dist/cjs/utils/unit-size.js.map +1 -0
  64. package/dist/cjs/utils.js +15 -0
  65. package/dist/cjs/utils.js.map +1 -0
  66. package/dist/cjs/view.js +141 -40
  67. package/dist/cjs/view.js.map +1 -1
  68. package/dist/esm/abis/core/book-manager-abi.js +109 -0
  69. package/dist/esm/abis/core/book-manager-abi.js.map +1 -0
  70. package/dist/esm/abis/core/book-viewer-abi.js +318 -0
  71. package/dist/esm/abis/core/book-viewer-abi.js.map +1 -0
  72. package/dist/esm/abis/core/controller-abi.js +29 -24
  73. package/dist/esm/abis/core/controller-abi.js.map +1 -1
  74. package/dist/esm/apis/chart-logs.js +150 -0
  75. package/dist/esm/apis/chart-logs.js.map +1 -0
  76. package/dist/esm/apis/market.js +61 -32
  77. package/dist/esm/apis/market.js.map +1 -1
  78. package/dist/esm/apis/open-order.js +57 -21
  79. package/dist/esm/apis/open-order.js.map +1 -1
  80. package/dist/esm/approval.js +116 -44
  81. package/dist/esm/approval.js.map +1 -1
  82. package/dist/esm/call.js +478 -311
  83. package/dist/esm/call.js.map +1 -1
  84. package/dist/esm/constants/addresses.js +26 -1
  85. package/dist/esm/constants/addresses.js.map +1 -1
  86. package/dist/esm/constants/chain.js +20 -2
  87. package/dist/esm/constants/chain.js.map +1 -1
  88. package/dist/esm/constants/client.js +5 -1
  89. package/dist/esm/constants/client.js.map +1 -1
  90. package/dist/esm/constants/currency.js +28 -2
  91. package/dist/esm/constants/currency.js.map +1 -1
  92. package/dist/esm/constants/fee.js +17 -2
  93. package/dist/esm/constants/fee.js.map +1 -1
  94. package/dist/esm/constants/subgraph.js +53 -0
  95. package/dist/esm/constants/subgraph.js.map +1 -0
  96. package/dist/esm/constants/test-chain.js +24 -0
  97. package/dist/esm/constants/test-chain.js.map +1 -0
  98. package/dist/esm/index.js +1 -0
  99. package/dist/esm/index.js.map +1 -1
  100. package/dist/esm/model/book.js +63 -29
  101. package/dist/esm/model/book.js.map +1 -1
  102. package/dist/esm/model/chart-log.js +2 -0
  103. package/dist/esm/model/chart-log.js.map +1 -0
  104. package/dist/esm/model/market.js +46 -187
  105. package/dist/esm/model/market.js.map +1 -1
  106. package/dist/esm/signature.js +35 -37
  107. package/dist/esm/signature.js.map +1 -1
  108. package/dist/esm/type.js +15 -0
  109. package/dist/esm/type.js.map +1 -1
  110. package/dist/esm/utils/allowance.js +36 -0
  111. package/dist/esm/utils/allowance.js.map +1 -0
  112. package/dist/esm/utils/bigint.js +5 -0
  113. package/dist/esm/utils/bigint.js.map +1 -0
  114. package/dist/esm/utils/book-id.js +7 -7
  115. package/dist/esm/utils/book-id.js.map +1 -1
  116. package/dist/esm/utils/build-transaction.js +8 -7
  117. package/dist/esm/utils/build-transaction.js.map +1 -1
  118. package/dist/esm/utils/currency.js +161 -0
  119. package/dist/esm/utils/currency.js.map +1 -0
  120. package/dist/esm/utils/decorator.js +3 -1
  121. package/dist/esm/utils/decorator.js.map +1 -1
  122. package/dist/esm/utils/open.js +32 -0
  123. package/dist/esm/utils/open.js.map +1 -0
  124. package/dist/esm/utils/order.js +98 -0
  125. package/dist/esm/utils/order.js.map +1 -0
  126. package/dist/esm/utils/prices.js +27 -2
  127. package/dist/esm/utils/prices.js.map +1 -1
  128. package/dist/esm/utils/unit-size.js +45 -0
  129. package/dist/esm/utils/unit-size.js.map +1 -0
  130. package/dist/esm/utils.js +4 -0
  131. package/dist/esm/utils.js.map +1 -0
  132. package/dist/esm/view.js +254 -68
  133. package/dist/esm/view.js.map +1 -1
  134. package/dist/tsconfig.build.tsbuildinfo +1 -1
  135. package/dist/types/abis/core/book-manager-abi.d.ts +82 -0
  136. package/dist/types/abis/core/book-manager-abi.d.ts.map +1 -0
  137. package/dist/types/abis/core/book-viewer-abi.d.ts +243 -0
  138. package/dist/types/abis/core/book-viewer-abi.d.ts.map +1 -0
  139. package/dist/types/abis/core/controller-abi.d.ts +23 -19
  140. package/dist/types/abis/core/controller-abi.d.ts.map +1 -1
  141. package/dist/types/apis/chart-logs.d.ts +5 -0
  142. package/dist/types/apis/chart-logs.d.ts.map +1 -0
  143. package/dist/types/apis/market.d.ts +1 -1
  144. package/dist/types/apis/market.d.ts.map +1 -1
  145. package/dist/types/apis/open-order.d.ts +3 -2
  146. package/dist/types/apis/open-order.d.ts.map +1 -1
  147. package/dist/types/approval.d.ts +48 -16
  148. package/dist/types/approval.d.ts.map +1 -1
  149. package/dist/types/call.d.ts +181 -109
  150. package/dist/types/call.d.ts.map +1 -1
  151. package/dist/types/constants/addresses.d.ts.map +1 -1
  152. package/dist/types/constants/chain.d.ts +6 -2
  153. package/dist/types/constants/chain.d.ts.map +1 -1
  154. package/dist/types/constants/client.d.ts +1 -1
  155. package/dist/types/constants/client.d.ts.map +1 -1
  156. package/dist/types/constants/currency.d.ts.map +1 -1
  157. package/dist/types/constants/fee.d.ts +7 -2
  158. package/dist/types/constants/fee.d.ts.map +1 -1
  159. package/dist/types/constants/subgraph.d.ts +10 -0
  160. package/dist/types/constants/subgraph.d.ts.map +1 -0
  161. package/dist/types/constants/test-chain.d.ts +3 -0
  162. package/dist/types/constants/test-chain.d.ts.map +1 -0
  163. package/dist/types/index.d.ts +1 -0
  164. package/dist/types/index.d.ts.map +1 -1
  165. package/dist/types/model/book.d.ts +23 -29
  166. package/dist/types/model/book.d.ts.map +1 -1
  167. package/dist/types/model/chart-log.d.ts +9 -0
  168. package/dist/types/model/chart-log.d.ts.map +1 -0
  169. package/dist/types/model/depth.d.ts +4 -5
  170. package/dist/types/model/depth.d.ts.map +1 -1
  171. package/dist/types/model/market.d.ts +25 -19
  172. package/dist/types/model/market.d.ts.map +1 -1
  173. package/dist/types/model/open-order.d.ts +16 -8
  174. package/dist/types/model/open-order.d.ts.map +1 -1
  175. package/dist/types/signature.d.ts +18 -24
  176. package/dist/types/signature.d.ts.map +1 -1
  177. package/dist/types/type.d.ts +52 -8
  178. package/dist/types/type.d.ts.map +1 -1
  179. package/dist/types/utils/allowance.d.ts +3 -0
  180. package/dist/types/utils/allowance.d.ts.map +1 -0
  181. package/dist/types/utils/bigint.d.ts +2 -0
  182. package/dist/types/utils/bigint.d.ts.map +1 -0
  183. package/dist/types/utils/book-id.d.ts +2 -1
  184. package/dist/types/utils/book-id.d.ts.map +1 -1
  185. package/dist/types/utils/build-transaction.d.ts +3 -3
  186. package/dist/types/utils/build-transaction.d.ts.map +1 -1
  187. package/dist/types/{apis → utils}/currency.d.ts +3 -0
  188. package/dist/types/utils/currency.d.ts.map +1 -0
  189. package/dist/types/utils/decorator.d.ts +1 -1
  190. package/dist/types/utils/decorator.d.ts.map +1 -1
  191. package/dist/types/utils/open.d.ts +3 -0
  192. package/dist/types/utils/open.d.ts.map +1 -0
  193. package/dist/types/utils/order.d.ts +8 -0
  194. package/dist/types/utils/order.d.ts.map +1 -0
  195. package/dist/types/utils/prices.d.ts +12 -2
  196. package/dist/types/utils/prices.d.ts.map +1 -1
  197. package/dist/types/utils/unit-size.d.ts +4 -0
  198. package/dist/types/utils/unit-size.d.ts.map +1 -0
  199. package/dist/types/utils.d.ts +4 -0
  200. package/dist/types/utils.d.ts.map +1 -0
  201. package/dist/types/view.d.ts +196 -39
  202. package/dist/types/view.d.ts.map +1 -1
  203. package/package.json +1 -1
  204. package/dist/cjs/abis/core/params-abi.js +0 -62
  205. package/dist/cjs/abis/core/params-abi.js.map +0 -1
  206. package/dist/cjs/apis/currency.js +0 -83
  207. package/dist/cjs/apis/currency.js.map +0 -1
  208. package/dist/cjs/apis/subgraph.js +0 -26
  209. package/dist/cjs/apis/subgraph.js.map +0 -1
  210. package/dist/cjs/constants/subgraph-url.js +0 -8
  211. package/dist/cjs/constants/subgraph-url.js.map +0 -1
  212. package/dist/cjs/utils/unit.js +0 -34
  213. package/dist/cjs/utils/unit.js.map +0 -1
  214. package/dist/esm/abis/core/params-abi.js +0 -59
  215. package/dist/esm/abis/core/params-abi.js.map +0 -1
  216. package/dist/esm/apis/currency.js +0 -79
  217. package/dist/esm/apis/currency.js.map +0 -1
  218. package/dist/esm/apis/subgraph.js +0 -22
  219. package/dist/esm/apis/subgraph.js.map +0 -1
  220. package/dist/esm/constants/subgraph-url.js +0 -5
  221. package/dist/esm/constants/subgraph-url.js.map +0 -1
  222. package/dist/esm/utils/unit.js +0 -30
  223. package/dist/esm/utils/unit.js.map +0 -1
  224. package/dist/types/abis/core/params-abi.d.ts +0 -21
  225. package/dist/types/abis/core/params-abi.d.ts.map +0 -1
  226. package/dist/types/apis/currency.d.ts.map +0 -1
  227. package/dist/types/apis/subgraph.d.ts +0 -3
  228. package/dist/types/apis/subgraph.d.ts.map +0 -1
  229. package/dist/types/constants/subgraph-url.d.ts +0 -5
  230. package/dist/types/constants/subgraph-url.d.ts.map +0 -1
  231. package/dist/types/utils/unit.d.ts +0 -4
  232. package/dist/types/utils/unit.d.ts.map +0 -1
package/dist/esm/view.js CHANGED
@@ -1,44 +1,144 @@
1
- import { formatUnits, isAddressEqual, parseUnits } from 'viem';
1
+ import { formatUnits, getAddress, isAddressEqual, parseUnits } from 'viem';
2
2
  import { fetchMarket } from './apis/market';
3
- import { parsePrice } from './utils/prices';
3
+ import { formatPrice, parsePrice } from './utils/prices';
4
4
  import { MAX_PRICE } from './constants/price';
5
- import { fetchOpenOrder, fetchOpenOrders } from './apis/open-order';
5
+ import { fetchOpenOrder, fetchOpenOrdersByUserAddress } from './apis/open-order';
6
6
  import { decorator } from './utils/decorator';
7
+ import { fetchChartLogs, fetchLatestChartLog } from './apis/chart-logs';
8
+ import { getMarketId } from './utils/market';
9
+ import { CONTRACT_ADDRESSES } from './constants/addresses';
10
+ import { fromPrice, invertPrice, toPrice } from './utils/tick';
11
+ /**
12
+ * Get contract addresses by chain id
13
+ * @param chainId - chain id from {@link CHAIN_IDS}
14
+ * @returns Contract addresses
15
+ *
16
+ * @example
17
+ * import { getContractAddresses } from '@clober/v2-sdk'
18
+ *
19
+ * const addresses = await getContractAddresses({
20
+ * chainId: 421614,
21
+ * })
22
+ */
23
+ export const getContractAddresses = ({ chainId }) => {
24
+ return CONTRACT_ADDRESSES[chainId];
25
+ };
7
26
  /**
8
27
  * Get market information by chain id and token addresses
9
28
  * @param chainId - chain id from {@link CHAIN_IDS}
10
29
  * @param token0 - token0 address
11
30
  * @param token1 - token1 address
12
31
  * @param options
32
+ * @param options.n - number of depth levels to fetch
13
33
  * @param options.rpcUrl - RPC URL of the blockchain
34
+ * @param options.useSubgraph Whether to use the subgraph to fetch the market data.
14
35
  * @returns A market {@link Market}
15
36
  *
16
37
  * @example
17
38
  * import { getMarket } from '@clober/v2-sdk'
18
39
  *
19
- * const market = await getMarket(
20
- * 421614,
21
- * '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
22
- * '0x0000000000000000000000000000000000000000',
23
- * )
40
+ * const market = await getMarket({
41
+ * chainId: 421614,
42
+ * token0: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
43
+ * token1: '0x0000000000000000000000000000000000000000',
44
+ * })
24
45
  */
25
- export const getMarket = decorator(async ({ chainId, token0, token1, }) => {
46
+ export const getMarket = decorator(async ({ chainId, token0, token1, options, }) => {
26
47
  if (isAddressEqual(token0, token1)) {
27
48
  throw new Error('Token0 and token1 must be different');
28
49
  }
29
- const market = await fetchMarket(chainId, [token0, token1]);
50
+ const market = await fetchMarket(chainId, [token0, token1], options?.n);
30
51
  return {
31
52
  chainId,
32
53
  quote: market.quote,
33
54
  base: market.base,
34
55
  makerFee: market.makerFee,
35
56
  takerFee: market.takerFee,
36
- bids: market.bids,
37
- bidBookOpen: market.bidBookOpen,
38
- asks: market.asks,
39
- askBookOpen: market.askBookOpen,
57
+ bids: market.bids.map(({ price, tick, baseAmount }) => ({
58
+ price,
59
+ tick: Number(tick),
60
+ baseAmount: formatUnits(baseAmount, market.base.decimals),
61
+ })),
62
+ bidBook: {
63
+ id: market.bidBook.id.toString(),
64
+ base: market.bidBook.base,
65
+ unitSize: market.bidBook.unitSize.toString(),
66
+ quote: market.bidBook.quote,
67
+ isOpened: market.bidBook.isOpened,
68
+ },
69
+ asks: market.asks.map(({ price, tick, baseAmount }) => ({
70
+ price,
71
+ tick: Number(tick),
72
+ baseAmount: formatUnits(baseAmount, market.base.decimals),
73
+ })),
74
+ askBook: {
75
+ id: market.askBook.id.toString(),
76
+ base: market.askBook.base,
77
+ unitSize: market.askBook.unitSize.toString(),
78
+ quote: market.askBook.quote,
79
+ isOpened: market.askBook.isOpened,
80
+ },
40
81
  };
41
82
  });
83
+ /**
84
+ * Calculates and returns the neighboring price ticks and their corresponding prices for a given input price.
85
+ *
86
+ * @param {CHAIN_IDS} chainId - chain id from {@link CHAIN_IDS}
87
+ * @param {string} price - The input price to calculate the neighborhood for, as a string.
88
+ * @param {Currency} currency0 - token0 currency {@link Currency}.
89
+ * @param {Currency} currency1 - token1 currency {@link Currency}.
90
+ *
91
+ * @returns {Object} An object containing the normal and inverted price neighborhoods. Each neighborhood includes:
92
+ * - up: The tick and price for one tick above the current price.
93
+ * - now: The tick and price for the current price.
94
+ * - down: The tick and price for one tick below the current price.
95
+ */
96
+ export const getPriceNeighborhood = ({ chainId, price, currency0, currency1, }) => {
97
+ const quoteTokenAddress = getQuoteToken({
98
+ chainId,
99
+ token0: currency0.address,
100
+ token1: currency1.address,
101
+ });
102
+ const quoteCurrency = isAddressEqual(quoteTokenAddress, currency0.address)
103
+ ? currency0
104
+ : currency1;
105
+ const baseCurrency = isAddressEqual(quoteTokenAddress, currency0.address)
106
+ ? currency1
107
+ : currency0;
108
+ const { roundingDownPrice, roundingUpPrice } = parsePrice(Number(price), quoteCurrency.decimals, baseCurrency.decimals);
109
+ const bidBookTick = fromPrice(roundingDownPrice);
110
+ const askBookTick = fromPrice(invertPrice(roundingUpPrice));
111
+ return {
112
+ normal: {
113
+ up: {
114
+ tick: bidBookTick + 1n,
115
+ price: formatPrice(toPrice(bidBookTick + 1n), quoteCurrency.decimals, baseCurrency.decimals),
116
+ },
117
+ now: {
118
+ tick: bidBookTick,
119
+ price: formatPrice(toPrice(bidBookTick), quoteCurrency.decimals, baseCurrency.decimals),
120
+ },
121
+ down: {
122
+ tick: bidBookTick - 1n,
123
+ price: formatPrice(toPrice(bidBookTick - 1n), quoteCurrency.decimals, baseCurrency.decimals),
124
+ },
125
+ },
126
+ inverted: {
127
+ up: {
128
+ tick: askBookTick + 1n,
129
+ price: formatPrice(toPrice(askBookTick + 1n), baseCurrency.decimals, quoteCurrency.decimals),
130
+ },
131
+ now: {
132
+ tick: askBookTick,
133
+ price: formatPrice(toPrice(askBookTick), baseCurrency.decimals, quoteCurrency.decimals),
134
+ },
135
+ down: {
136
+ tick: askBookTick - 1n,
137
+ price: formatPrice(toPrice(askBookTick - 1n), baseCurrency.decimals, quoteCurrency.decimals),
138
+ },
139
+ },
140
+ };
141
+ };
42
142
  /**
43
143
  * Calculates the expected output for a given input amount, based on the provided market data.
44
144
  *
@@ -49,42 +149,51 @@ export const getMarket = decorator(async ({ chainId, token0, token1, }) => {
49
149
  * @param options
50
150
  * @param options.limitPrice The maximum limit price to spend.
51
151
  * @param options.rpcUrl The RPC URL of the blockchain.
152
+ * @param options.useSubgraph Whether to use the subgraph to fetch the market data.
52
153
  * @returns A Promise resolving to an object containing the taken amount, spend amount and result of the calculation.
53
154
  * @example
54
155
  * import { getExpectedOutput } from '@clober/v2-sdk'
55
156
  *
56
- * const { takenAmount, spendAmount } = await getExpectedOutput(
57
- * 421614,
58
- * '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
59
- * '0x0000000000000000000000000000000000000000',
60
- * '1000.123', // spend 1000.123 USDC
61
- * )
157
+ * const { takenAmount, spentAmount } = await getExpectedOutput({
158
+ * chainId: 421614,
159
+ * inputToken: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
160
+ * outputToken: '0x0000000000000000000000000000000000000000',
161
+ * amountIn: '1000.123', // spend 1000.123 USDC
162
+ * })
62
163
  */
63
164
  export const getExpectedOutput = decorator(async ({ chainId, inputToken, outputToken, amountIn, options, }) => {
165
+ const [roundingDownTakenBid, roundingUpTakenAsk] = [
166
+ options?.roundingDownTakenBid ? options.roundingDownTakenBid : false,
167
+ options?.roundingUpTakenAsk ? options.roundingUpTakenAsk : false,
168
+ ];
64
169
  const market = await fetchMarket(chainId, [inputToken, outputToken]);
65
170
  const isBid = isAddressEqual(market.quote.address, inputToken);
66
- const rawLimitPrice = options && options.limitPrice
171
+ const { roundingDownPrice, roundingUpPrice } = options && options.limitPrice
67
172
  ? parsePrice(Number(options.limitPrice), market.quote.decimals, market.base.decimals)
68
173
  : isBid
69
- ? MAX_PRICE
70
- : 0n;
174
+ ? { roundingDownPrice: MAX_PRICE, roundingUpPrice: MAX_PRICE }
175
+ : { roundingDownPrice: 0n, roundingUpPrice: 0n };
71
176
  const inputCurrency = isBid ? market.quote : market.base;
72
- const result = market.spend({
73
- spendBase: !isBid,
74
- limitPrice: rawLimitPrice,
177
+ const isTakingBidSide = !isBid;
178
+ const { takenQuoteAmount, spentBaseAmount, bookId, events } = market.spend({
179
+ spentBase: isTakingBidSide,
180
+ limitPrice: isTakingBidSide
181
+ ? roundingDownTakenBid
182
+ ? roundingDownPrice
183
+ : roundingUpPrice
184
+ : roundingUpTakenAsk
185
+ ? roundingUpPrice
186
+ : roundingDownPrice,
75
187
  amountIn: parseUnits(amountIn, inputCurrency.decimals),
76
188
  });
77
- const { takenAmount, spendAmount } = Object.values(result).reduce((acc, { takenAmount, spendAmount }) => ({
78
- takenAmount: acc.takenAmount + takenAmount,
79
- spendAmount: acc.spendAmount + spendAmount,
80
- }), { takenAmount: 0n, spendAmount: 0n });
81
189
  return {
82
- takenAmount: formatUnits(takenAmount, isBid ? market.base.decimals : market.quote.decimals),
83
- spendAmount: formatUnits(spendAmount, isBid ? market.quote.decimals : market.base.decimals),
84
- result: Object.entries(result).map(([bookId, { takenAmount, spendAmount }]) => ({
85
- bookId: BigInt(bookId),
86
- takenAmount,
87
- spendAmount,
190
+ takenAmount: formatUnits(takenQuoteAmount, isBid ? market.base.decimals : market.quote.decimals),
191
+ spentAmount: formatUnits(spentBaseAmount, isBid ? market.quote.decimals : market.base.decimals),
192
+ bookId,
193
+ events: events.map(({ tick, takenQuoteAmount, spentBaseAmount }) => ({
194
+ price: formatPrice(isBid ? invertPrice(toPrice(BigInt(tick))) : toPrice(BigInt(tick)), market.quote.decimals, market.base.decimals),
195
+ takenAmount: formatUnits(takenQuoteAmount, isBid ? market.base.decimals : market.quote.decimals),
196
+ spentAmount: formatUnits(spentBaseAmount, isBid ? market.quote.decimals : market.base.decimals),
88
197
  })),
89
198
  };
90
199
  });
@@ -98,42 +207,51 @@ export const getExpectedOutput = decorator(async ({ chainId, inputToken, outputT
98
207
  * @param options
99
208
  * @param options.limitPrice The maximum limit price to take.
100
209
  * @param options.rpcUrl The RPC URL of the blockchain.
101
- * @returns A Promise resolving to an object containing the taken amount, spend amount and result of the calculation.
210
+ * @param options.useSubgraph Whether to use the subgraph to fetch the market data.
211
+ * @returns A Promise resolving to an object containing the taken amount, spent amount and result of the calculation.
102
212
  * @example
103
213
  * import { getExpectedInput } from '@clober/v2-sdk'
104
214
  *
105
- * const { takenAmount, spendAmount } = await getExpectedInput(
106
- * 421614,
107
- * '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
108
- * '0x0000000000000000000000000000000000000000',
109
- * '0.1', // take 0.1 ETH
110
- * )
215
+ * const { takenAmount, spentAmount } = await getExpectedInput({
216
+ * chainId: 421614,
217
+ * inputToken: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
218
+ * outputToken: '0x0000000000000000000000000000000000000000',
219
+ * amountOut: '0.1', // take 0.1 ETH
220
+ * })
111
221
  */
112
222
  export const getExpectedInput = decorator(async ({ chainId, inputToken, outputToken, amountOut, options, }) => {
223
+ const [roundingDownTakenBid, roundingUpTakenAsk] = [
224
+ options?.roundingDownTakenBid ? options.roundingDownTakenBid : false,
225
+ options?.roundingUpTakenAsk ? options.roundingUpTakenAsk : false,
226
+ ];
113
227
  const market = await fetchMarket(chainId, [inputToken, outputToken]);
114
228
  const isBid = isAddressEqual(market.quote.address, inputToken);
115
- const rawLimitPrice = options && options.limitPrice
229
+ const { roundingDownPrice, roundingUpPrice } = options && options.limitPrice
116
230
  ? parsePrice(Number(options.limitPrice), market.quote.decimals, market.base.decimals)
117
231
  : isBid
118
- ? MAX_PRICE
119
- : 0n;
232
+ ? { roundingDownPrice: MAX_PRICE, roundingUpPrice: MAX_PRICE }
233
+ : { roundingDownPrice: 0n, roundingUpPrice: 0n };
120
234
  const outputCurrency = isBid ? market.base : market.quote;
121
- const result = market.take({
122
- takeQuote: !isBid,
123
- limitPrice: rawLimitPrice,
235
+ const isTakingBidSide = !isBid;
236
+ const { takenQuoteAmount, spentBaseAmount, bookId, events } = market.take({
237
+ takeQuote: isTakingBidSide,
238
+ limitPrice: isTakingBidSide
239
+ ? roundingDownTakenBid
240
+ ? roundingDownPrice
241
+ : roundingUpPrice
242
+ : roundingUpTakenAsk
243
+ ? roundingUpPrice
244
+ : roundingDownPrice,
124
245
  amountOut: parseUnits(amountOut, outputCurrency.decimals),
125
246
  });
126
- const { takenAmount, spendAmount } = Object.values(result).reduce((acc, { takenAmount, spendAmount }) => ({
127
- takenAmount: acc.takenAmount + takenAmount,
128
- spendAmount: acc.spendAmount + spendAmount,
129
- }), { takenAmount: 0n, spendAmount: 0n });
130
247
  return {
131
- takenAmount: formatUnits(takenAmount, isBid ? market.base.decimals : market.quote.decimals),
132
- spendAmount: formatUnits(spendAmount, isBid ? market.quote.decimals : market.base.decimals),
133
- result: Object.entries(result).map(([bookId, { takenAmount, spendAmount }]) => ({
134
- bookId: BigInt(bookId),
135
- takenAmount,
136
- spendAmount,
248
+ takenAmount: formatUnits(takenQuoteAmount, isBid ? market.base.decimals : market.quote.decimals),
249
+ spentAmount: formatUnits(spentBaseAmount, isBid ? market.quote.decimals : market.base.decimals),
250
+ bookId,
251
+ events: events.map(({ tick, takenQuoteAmount, spentBaseAmount }) => ({
252
+ price: formatPrice(isBid ? invertPrice(toPrice(BigInt(tick))) : toPrice(BigInt(tick)), market.quote.decimals, market.base.decimals),
253
+ takenAmount: formatUnits(takenQuoteAmount, isBid ? market.base.decimals : market.quote.decimals),
254
+ spentAmount: formatUnits(spentBaseAmount, isBid ? market.quote.decimals : market.base.decimals),
137
255
  })),
138
256
  };
139
257
  });
@@ -144,14 +262,15 @@ export const getExpectedInput = decorator(async ({ chainId, inputToken, outputTo
144
262
  * @param {string} id The ID of the open order.
145
263
  * @param options
146
264
  * @param options.rpcUrl The RPC URL of the blockchain.
265
+ * @param options.useSubgraph Whether to use the subgraph to fetch the market data.
147
266
  * @returns {Promise<OpenOrder>} Promise resolving to the open order object, or undefined if not found.
148
267
  * @example
149
268
  * import { getOpenOrder } from '@clober/v2-sdk'
150
269
  *
151
- * const openOrder = await getOpenOrder(
152
- * 421614,
153
- * '46223845323662364279893361453861711542636620039907198451770258805035840307200'
154
- * )
270
+ * const openOrder = await getOpenOrder({
271
+ * chainId: 421614,
272
+ * id: '46223845323662364279893361453861711542636620039907198451770258805035840307200'
273
+ * })
155
274
  */
156
275
  export const getOpenOrder = decorator(async ({ chainId, id, }) => {
157
276
  return fetchOpenOrder(chainId, id);
@@ -163,16 +282,83 @@ export const getOpenOrder = decorator(async ({ chainId, id, }) => {
163
282
  * @param {`0x${string}`} userAddress The Ethereum address of the user.
164
283
  * @param options
165
284
  * @param options.rpcUrl The RPC URL of the blockchain.
285
+ * @param options.useSubgraph Whether to use the subgraph to fetch the market data.
166
286
  * @returns {Promise<OpenOrder[]>} Promise resolving to an array of open orders.
167
287
  * @example
168
288
  * import { getOpenOrders } from '@clober/v2-sdk'
169
289
  *
170
- * const openOrders = await getOpenOrders(
171
- * 421614,
172
- * '0x5F79EE8f8fA862E98201120d83c4eC39D9468D49'
173
- * )
290
+ * const openOrders = await getOpenOrders({
291
+ * chainId: 421614,
292
+ * userAddress: '0x5F79EE8f8fA862E98201120d83c4eC39D9468D49'
293
+ * })
174
294
  */
175
295
  export const getOpenOrders = decorator(async ({ chainId, userAddress, }) => {
176
- return fetchOpenOrders(chainId, userAddress);
296
+ return fetchOpenOrdersByUserAddress(chainId, userAddress);
297
+ });
298
+ /**
299
+ * Retrieves the latest chart log for a specific market.
300
+ *
301
+ * @param {CHAIN_IDS} params.chainId - The ID of the blockchain.
302
+ * @param {`0x${string}`} params.quote - The address of the quote token.
303
+ * @param {`0x${string}`} params.base - The address of the base token.
304
+ * @returns {Promise<ChartLog>} A promise that resolves with the latest chart log.
305
+ *
306
+ * @example
307
+ * import { getLatestChartLog } from '@clober/v2-sdk'
308
+ *
309
+ * const logs = await getLatestChartLog({
310
+ * chainId: 421614,
311
+ * quote: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
312
+ * base: '0x0000000000000000000000000000000000000000',
313
+ * })
314
+ */
315
+ export const getLatestChartLog = decorator(async ({ chainId, quote, base, }) => {
316
+ return fetchLatestChartLog(chainId, `${base}/${quote}`);
317
+ });
318
+ /**
319
+ * Retrieves chart logs for a specific market within a specified time interval.
320
+ *
321
+ * @param {CHAIN_IDS} params.chainId - The ID of the chain.
322
+ * @param {`0x${string}`} params.quote - The address of the quote token.
323
+ * @param {`0x${string}`} params.base - The address of the base token.
324
+ * @param {CHART_LOG_INTERVALS} params.intervalType - The type of time interval for the chart logs.
325
+ * @param {number} params.from - The start of the time interval (Unix timestamp in seconds).
326
+ * @param {number} params.to - The end of the time interval (Unix timestamp in seconds).
327
+ * @returns {Promise<ChartLog[]>} A promise that resolves with an array of chart logs within the specified interval.
328
+ *
329
+ * @example
330
+ * import { getLatestChartLog, CHART_LOG_INTERVALS } from '@clober/v2-sdk'
331
+ *
332
+ * const logs = await getChartLogs({
333
+ * chainId: 421614,
334
+ * quote: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
335
+ * base: '0x0000000000000000000000000000000000000000',
336
+ * intervalType: CHART_LOG_INTERVALS.oneDay,
337
+ * from: 1687305600,
338
+ * to: 1713312000,
339
+ * })
340
+ */
341
+ export const getChartLogs = decorator(async ({ chainId, quote, base, intervalType, from, to, }) => {
342
+ return fetchChartLogs(chainId, `${base}/${quote}`, intervalType, from, to);
177
343
  });
344
+ /**
345
+ * Retrieves the quote token address for a given chain and a pair of tokens.
346
+ *
347
+ * @param chainId - chain id from {@link CHAIN_IDS}
348
+ * @param token0 - token0 address
349
+ * @param token1 - token1 address
350
+ * @returns {string} The address of the quote token.
351
+ *
352
+ * @example
353
+ * import { getQuoteToken } from '@clober/v2-sdk'
354
+ *
355
+ * const quote = await getQuoteToken({
356
+ * chainId: 421614,
357
+ * token0: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
358
+ * token1: '0x0000000000000000000000000000000000000000',
359
+ * })
360
+ */
361
+ export const getQuoteToken = ({ chainId, token0, token1, }) => {
362
+ return getAddress(getMarketId(chainId, [token0, token1]).quoteTokenAddress);
363
+ };
178
364
  //# sourceMappingURL=view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/view.ts"],"names":[],"mappings":"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"}