@clober/v2-sdk 0.0.1-b → 0.0.1-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 (297) hide show
  1. package/dist/cjs/.graphclient/index.js +243 -0
  2. package/dist/cjs/.graphclient/index.js.map +1 -0
  3. package/dist/cjs/.graphclient/sources/clober-v2/introspectionSchema.js +14482 -0
  4. package/dist/cjs/.graphclient/sources/clober-v2/introspectionSchema.js.map +1 -0
  5. package/dist/cjs/.graphclient/sources/clober-v2/types.js +4 -0
  6. package/dist/cjs/.graphclient/sources/clober-v2/types.js.map +1 -0
  7. package/dist/cjs/abis/core/controller-abi.js +989 -0
  8. package/dist/cjs/abis/core/controller-abi.js.map +1 -0
  9. package/dist/cjs/abis/core/params-abi.js +62 -0
  10. package/dist/cjs/abis/core/params-abi.js.map +1 -0
  11. package/dist/cjs/apis/currency.js +87 -0
  12. package/dist/cjs/apis/currency.js.map +1 -0
  13. package/dist/cjs/apis/market.js +63 -0
  14. package/dist/cjs/apis/market.js.map +1 -0
  15. package/dist/cjs/apis/open-order.js +90 -0
  16. package/dist/cjs/apis/open-order.js.map +1 -0
  17. package/dist/cjs/approval.js +74 -0
  18. package/dist/cjs/approval.js.map +1 -0
  19. package/dist/cjs/call.js +545 -0
  20. package/dist/cjs/call.js.map +1 -0
  21. package/dist/cjs/constants/action.js +14 -0
  22. package/dist/cjs/constants/action.js.map +1 -0
  23. package/dist/cjs/constants/addresses.js +13 -0
  24. package/dist/cjs/constants/addresses.js.map +1 -0
  25. package/dist/cjs/constants/chain.js +13 -0
  26. package/dist/cjs/constants/chain.js.map +1 -0
  27. package/dist/cjs/constants/currency.js +12 -0
  28. package/dist/cjs/constants/currency.js.map +1 -0
  29. package/dist/cjs/constants/fee.js +7 -0
  30. package/dist/cjs/constants/fee.js.map +1 -0
  31. package/dist/cjs/constants/price.js +6 -0
  32. package/dist/cjs/constants/price.js.map +1 -0
  33. package/dist/cjs/constants/subgraph-url.js +8 -0
  34. package/dist/cjs/constants/subgraph-url.js.map +1 -0
  35. package/dist/cjs/index.js +22 -0
  36. package/dist/cjs/index.js.map +1 -0
  37. package/dist/cjs/model/book.js +130 -0
  38. package/dist/cjs/model/book.js.map +1 -0
  39. package/dist/cjs/model/currency.js +3 -0
  40. package/dist/cjs/model/currency.js.map +1 -0
  41. package/dist/cjs/model/depth.js +3 -0
  42. package/dist/cjs/model/depth.js.map +1 -0
  43. package/dist/cjs/model/fee-policy.js +42 -0
  44. package/dist/cjs/model/fee-policy.js.map +1 -0
  45. package/dist/cjs/model/market.js +215 -0
  46. package/dist/cjs/model/market.js.map +1 -0
  47. package/dist/cjs/model/open-order.js +3 -0
  48. package/dist/cjs/model/open-order.js.map +1 -0
  49. package/dist/cjs/package.json +1 -0
  50. package/dist/cjs/signature.js +178 -0
  51. package/dist/cjs/signature.js.map +1 -0
  52. package/dist/cjs/tsconfig.build.tsbuildinfo +1 -0
  53. package/dist/cjs/type.js +6 -0
  54. package/dist/cjs/type.js.map +1 -0
  55. package/dist/cjs/utils/approval.js +46 -0
  56. package/dist/cjs/utils/approval.js.map +1 -0
  57. package/dist/cjs/utils/book-id.js +25 -0
  58. package/dist/cjs/utils/book-id.js.map +1 -0
  59. package/dist/cjs/utils/build-transaction.js +31 -0
  60. package/dist/cjs/utils/build-transaction.js.map +1 -0
  61. package/dist/cjs/utils/decimals.js +17 -0
  62. package/dist/cjs/utils/decimals.js.map +1 -0
  63. package/dist/cjs/utils/market.js +53 -0
  64. package/dist/cjs/utils/market.js.map +1 -0
  65. package/dist/cjs/utils/math.js +83 -0
  66. package/dist/cjs/utils/math.js.map +1 -0
  67. package/dist/cjs/utils/prices.js +22 -0
  68. package/dist/cjs/utils/prices.js.map +1 -0
  69. package/dist/cjs/utils/tick.js +106 -0
  70. package/dist/cjs/utils/tick.js.map +1 -0
  71. package/dist/cjs/utils/time.js +9 -0
  72. package/dist/cjs/utils/time.js.map +1 -0
  73. package/dist/cjs/utils/unit.js +38 -0
  74. package/dist/cjs/utils/unit.js.map +1 -0
  75. package/dist/cjs/view.js +185 -0
  76. package/dist/cjs/view.js.map +1 -0
  77. package/dist/esm/.graphclient/index.js +233 -0
  78. package/dist/esm/.graphclient/index.js.map +1 -0
  79. package/dist/esm/.graphclient/sources/clober-v2/introspectionSchema.js +14480 -0
  80. package/dist/esm/.graphclient/sources/clober-v2/introspectionSchema.js.map +1 -0
  81. package/dist/esm/.graphclient/sources/clober-v2/types.js +3 -0
  82. package/dist/esm/.graphclient/sources/clober-v2/types.js.map +1 -0
  83. package/dist/esm/abis/core/controller-abi.js +986 -0
  84. package/dist/esm/abis/core/controller-abi.js.map +1 -0
  85. package/dist/esm/abis/core/params-abi.js +59 -0
  86. package/dist/esm/abis/core/params-abi.js.map +1 -0
  87. package/dist/esm/apis/currency.js +83 -0
  88. package/dist/esm/apis/currency.js.map +1 -0
  89. package/dist/esm/apis/market.js +59 -0
  90. package/dist/esm/apis/market.js.map +1 -0
  91. package/dist/esm/apis/open-order.js +85 -0
  92. package/dist/esm/apis/open-order.js.map +1 -0
  93. package/dist/esm/approval.js +70 -0
  94. package/dist/esm/approval.js.map +1 -0
  95. package/dist/esm/call.js +535 -0
  96. package/dist/esm/call.js.map +1 -0
  97. package/dist/esm/constants/action.js +11 -0
  98. package/dist/esm/constants/action.js.map +1 -0
  99. package/dist/esm/constants/addresses.js +10 -0
  100. package/dist/esm/constants/addresses.js.map +1 -0
  101. package/dist/esm/constants/chain.js +10 -0
  102. package/dist/esm/constants/chain.js.map +1 -0
  103. package/dist/esm/constants/currency.js +9 -0
  104. package/dist/esm/constants/currency.js.map +1 -0
  105. package/dist/esm/constants/fee.js +4 -0
  106. package/dist/esm/constants/fee.js.map +1 -0
  107. package/dist/esm/constants/price.js +3 -0
  108. package/dist/esm/constants/price.js.map +1 -0
  109. package/dist/esm/constants/subgraph-url.js +5 -0
  110. package/dist/esm/constants/subgraph-url.js.map +1 -0
  111. package/dist/esm/index.js +6 -0
  112. package/dist/esm/index.js.map +1 -0
  113. package/dist/esm/model/book.js +126 -0
  114. package/dist/esm/model/book.js.map +1 -0
  115. package/dist/esm/model/currency.js +2 -0
  116. package/dist/esm/model/currency.js.map +1 -0
  117. package/dist/esm/model/depth.js +2 -0
  118. package/dist/esm/model/depth.js.map +1 -0
  119. package/dist/esm/model/fee-policy.js +38 -0
  120. package/dist/esm/model/fee-policy.js.map +1 -0
  121. package/dist/esm/model/market.js +211 -0
  122. package/dist/esm/model/market.js.map +1 -0
  123. package/dist/esm/model/open-order.js +2 -0
  124. package/dist/esm/model/open-order.js.map +1 -0
  125. package/dist/esm/package.json +1 -0
  126. package/dist/esm/signature.js +174 -0
  127. package/dist/esm/signature.js.map +1 -0
  128. package/dist/esm/tsconfig.build.tsbuildinfo +1 -0
  129. package/dist/esm/type.js +2 -0
  130. package/dist/esm/type.js.map +1 -0
  131. package/dist/esm/utils/approval.js +42 -0
  132. package/dist/esm/utils/approval.js.map +1 -0
  133. package/{src/utils/book-id.ts → dist/esm/utils/book-id.js} +9 -19
  134. package/dist/esm/utils/book-id.js.map +1 -0
  135. package/dist/esm/utils/build-transaction.js +27 -0
  136. package/dist/esm/utils/build-transaction.js.map +1 -0
  137. package/dist/esm/utils/decimals.js +12 -0
  138. package/dist/esm/utils/decimals.js.map +1 -0
  139. package/dist/esm/utils/market.js +49 -0
  140. package/dist/esm/utils/market.js.map +1 -0
  141. package/dist/esm/utils/math.js +78 -0
  142. package/dist/esm/utils/math.js.map +1 -0
  143. package/dist/esm/utils/prices.js +17 -0
  144. package/dist/esm/utils/prices.js.map +1 -0
  145. package/dist/esm/utils/tick.js +100 -0
  146. package/dist/esm/utils/tick.js.map +1 -0
  147. package/dist/esm/utils/time.js +5 -0
  148. package/dist/esm/utils/time.js.map +1 -0
  149. package/dist/esm/utils/unit.js +34 -0
  150. package/dist/esm/utils/unit.js.map +1 -0
  151. package/dist/esm/view.js +177 -0
  152. package/dist/esm/view.js.map +1 -0
  153. package/dist/types/.graphclient/index.d.ts +1281 -0
  154. package/dist/types/.graphclient/index.d.ts.map +1 -0
  155. package/dist/types/.graphclient/sources/clober-v2/introspectionSchema.d.ts +3 -0
  156. package/dist/types/.graphclient/sources/clober-v2/introspectionSchema.d.ts.map +1 -0
  157. package/dist/types/.graphclient/sources/clober-v2/types.d.ts +984 -0
  158. package/dist/types/.graphclient/sources/clober-v2/types.d.ts.map +1 -0
  159. package/dist/types/abis/core/controller-abi.d.ts +757 -0
  160. package/dist/types/abis/core/controller-abi.d.ts.map +1 -0
  161. package/dist/types/abis/core/params-abi.d.ts +21 -0
  162. package/dist/types/abis/core/params-abi.d.ts.map +1 -0
  163. package/dist/types/apis/currency.d.ts +4 -0
  164. package/dist/types/apis/currency.d.ts.map +1 -0
  165. package/dist/types/apis/market.d.ts +4 -0
  166. package/dist/types/apis/market.d.ts.map +1 -0
  167. package/dist/types/apis/open-order.d.ts +5 -0
  168. package/dist/types/apis/open-order.d.ts.map +1 -0
  169. package/dist/types/approval.d.ts +32 -0
  170. package/dist/types/approval.d.ts.map +1 -0
  171. package/dist/types/call.d.ts +234 -0
  172. package/dist/types/call.d.ts.map +1 -0
  173. package/dist/types/constants/action.d.ts +10 -0
  174. package/dist/types/constants/action.d.ts.map +1 -0
  175. package/dist/types/constants/addresses.d.ts +9 -0
  176. package/dist/types/constants/addresses.d.ts.map +1 -0
  177. package/dist/types/constants/chain.d.ts +9 -0
  178. package/dist/types/constants/chain.d.ts.map +1 -0
  179. package/dist/types/constants/currency.d.ts +8 -0
  180. package/dist/types/constants/currency.d.ts.map +1 -0
  181. package/dist/types/constants/fee.d.ts +4 -0
  182. package/dist/types/constants/fee.d.ts.map +1 -0
  183. package/dist/types/constants/price.d.ts +3 -0
  184. package/dist/types/constants/price.d.ts.map +1 -0
  185. package/dist/types/constants/subgraph-url.d.ts +5 -0
  186. package/dist/types/constants/subgraph-url.d.ts.map +1 -0
  187. package/dist/types/index.d.ts +6 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/model/book.d.ts +31 -0
  190. package/dist/types/model/book.d.ts.map +1 -0
  191. package/dist/types/model/currency.d.ts +7 -0
  192. package/dist/types/model/currency.d.ts.map +1 -0
  193. package/dist/types/model/depth.d.ts +11 -0
  194. package/dist/types/model/depth.d.ts.map +1 -0
  195. package/dist/types/model/fee-policy.d.ts +15 -0
  196. package/dist/types/model/fee-policy.d.ts.map +1 -0
  197. package/dist/types/model/market.d.ts +44 -0
  198. package/dist/types/model/market.d.ts.map +1 -0
  199. package/dist/types/model/open-order.d.ts +28 -0
  200. package/dist/types/model/open-order.d.ts.map +1 -0
  201. package/dist/types/signature.d.ts +40 -0
  202. package/dist/types/signature.d.ts.map +1 -0
  203. package/dist/types/type.d.ts +34 -0
  204. package/dist/types/type.d.ts.map +1 -0
  205. package/dist/types/utils/approval.d.ts +3 -0
  206. package/dist/types/utils/approval.d.ts.map +1 -0
  207. package/dist/types/utils/book-id.d.ts +2 -0
  208. package/dist/types/utils/book-id.d.ts.map +1 -0
  209. package/dist/types/utils/build-transaction.d.ts +5 -0
  210. package/dist/types/utils/build-transaction.d.ts.map +1 -0
  211. package/dist/types/utils/decimals.d.ts +3 -0
  212. package/dist/types/utils/decimals.d.ts.map +1 -0
  213. package/dist/types/utils/market.d.ts +7 -0
  214. package/dist/types/utils/market.d.ts.map +1 -0
  215. package/dist/types/utils/math.d.ts +3 -0
  216. package/dist/types/utils/math.d.ts.map +1 -0
  217. package/dist/types/utils/prices.d.ts +3 -0
  218. package/dist/types/utils/prices.d.ts.map +1 -0
  219. package/dist/types/utils/tick.d.ts +4 -0
  220. package/dist/types/utils/tick.d.ts.map +1 -0
  221. package/dist/types/utils/time.d.ts +2 -0
  222. package/dist/types/utils/time.d.ts.map +1 -0
  223. package/dist/types/utils/unit.d.ts +4 -0
  224. package/dist/types/utils/unit.d.ts.map +1 -0
  225. package/dist/types/view.d.ts +129 -0
  226. package/dist/types/view.d.ts.map +1 -0
  227. package/package.json +14 -6
  228. package/.eslintignore +0 -1
  229. package/.eslintrc.yaml +0 -34
  230. package/.github/workflows/ci.yaml +0 -88
  231. package/.github/workflows/deployer.yaml +0 -19
  232. package/.nvmrc +0 -1
  233. package/.prettierignore +0 -6
  234. package/.prettierrc +0 -7
  235. package/src/.graphclient/index.ts +0 -1695
  236. package/src/.graphclient/schema.graphql +0 -1116
  237. package/src/.graphclient/sources/clober-v2/introspectionSchema.ts +0 -14481
  238. package/src/.graphclient/sources/clober-v2/schema.graphql +0 -1116
  239. package/src/.graphclient/sources/clober-v2/types.ts +0 -1133
  240. package/src/.graphclientrc.yml +0 -12
  241. package/src/abis/core/controller-abi.ts +0 -985
  242. package/src/abis/core/params-abi.ts +0 -59
  243. package/src/apis/currency.ts +0 -92
  244. package/src/apis/graphql/books.graphql +0 -25
  245. package/src/apis/graphql/open-order.graphql +0 -29
  246. package/src/apis/graphql/open-orders.graphql +0 -29
  247. package/src/apis/market.ts +0 -85
  248. package/src/apis/open-order.ts +0 -145
  249. package/src/approval.ts +0 -82
  250. package/src/call.ts +0 -705
  251. package/src/constants/action.ts +0 -9
  252. package/src/constants/addresses.ts +0 -17
  253. package/src/constants/chain.ts +0 -12
  254. package/src/constants/currency.ts +0 -15
  255. package/src/constants/fee.ts +0 -4
  256. package/src/constants/price.ts +0 -3
  257. package/src/constants/subgraph-url.ts +0 -8
  258. package/src/index.ts +0 -5
  259. package/src/model/book.ts +0 -166
  260. package/src/model/currency.ts +0 -6
  261. package/src/model/depth.ts +0 -11
  262. package/src/model/fee-policy.ts +0 -51
  263. package/src/model/market.ts +0 -320
  264. package/src/model/open-order.ts +0 -16
  265. package/src/signature.ts +0 -196
  266. package/src/type.ts +0 -38
  267. package/src/utils/approval.ts +0 -48
  268. package/src/utils/build-transaction.ts +0 -39
  269. package/src/utils/decimals.ts +0 -22
  270. package/src/utils/market.ts +0 -74
  271. package/src/utils/math.ts +0 -117
  272. package/src/utils/prices.ts +0 -29
  273. package/src/utils/tick.ts +0 -104
  274. package/src/utils/time.ts +0 -6
  275. package/src/utils/unit.ts +0 -43
  276. package/src/view.ts +0 -258
  277. package/test/book-id.test.ts +0 -101
  278. package/test/fee-policy.test.ts +0 -228
  279. package/test/get-expected-input.test.ts +0 -206
  280. package/test/get-expected-output.test.ts +0 -206
  281. package/test/limit-order.test.ts +0 -279
  282. package/test/market-order.test.ts +0 -245
  283. package/test/market.test.ts +0 -68
  284. package/test/math.test.ts +0 -91
  285. package/test/open-order.test.ts +0 -112
  286. package/test/open.test.ts +0 -15
  287. package/test/tick.test.ts +0 -230
  288. package/test/tsconfig.json +0 -12
  289. package/test/utils/chain.ts +0 -12
  290. package/test/utils/constants.ts +0 -25
  291. package/test/utils/currency.ts +0 -44
  292. package/test/utils/depth.ts +0 -148
  293. package/test/utils/test-chain.ts +0 -26
  294. package/test/vitest.config.ts +0 -15
  295. package/tsconfig.base.json +0 -37
  296. package/tsconfig.build.json +0 -9
  297. package/tsconfig.json +0 -9
package/src/signature.ts DELETED
@@ -1,196 +0,0 @@
1
- import {
2
- createPublicClient,
3
- HDAccount,
4
- hexToSignature,
5
- http,
6
- parseUnits,
7
- PrivateKeyAccount,
8
- verifyTypedData,
9
- zeroHash,
10
- } from 'viem'
11
-
12
- import { CHAIN_IDS, CHAIN_MAP } from './constants/chain'
13
- import { getDeadlineTimestampInSeconds } from './utils/time'
14
- import { CONTRACT_ADDRESSES } from './constants/addresses'
15
- import { fetchCurrency } from './apis/currency'
16
- import { PermitSignature } from './type'
17
-
18
- const _abi = [
19
- {
20
- inputs: [],
21
- name: 'version',
22
- outputs: [
23
- {
24
- internalType: 'string',
25
- name: '',
26
- type: 'string',
27
- },
28
- ],
29
- stateMutability: 'view',
30
- type: 'function',
31
- },
32
- {
33
- inputs: [
34
- {
35
- internalType: 'address',
36
- name: 'owner',
37
- type: 'address',
38
- },
39
- ],
40
- name: 'nonces',
41
- outputs: [
42
- {
43
- internalType: 'uint256',
44
- name: '',
45
- type: 'uint256',
46
- },
47
- ],
48
- stateMutability: 'view',
49
- type: 'function',
50
- },
51
- {
52
- inputs: [],
53
- name: 'name',
54
- outputs: [
55
- {
56
- internalType: 'string',
57
- name: '',
58
- type: 'string',
59
- },
60
- ],
61
- stateMutability: 'view',
62
- type: 'function',
63
- },
64
- ] as const
65
-
66
- /**
67
- * Signs an ERC20 permit using EIP-712 encoding.
68
- *
69
- * @param {CHAIN_IDS} chainId The chain ID.
70
- * @param {HDAccount | PrivateKeyAccount} account The Ethereum account used for signing using
71
- * [viem - Local Accounts (Private Key, Mnemonic, etc)](https://viem.sh/docs/accounts/local#local-accounts-private-key-mnemonic-etc).
72
- * @param {`0x${string}`} token The ERC20 token address.
73
- * @param {string} amount The amount of tokens to permit.
74
- * @param options
75
- * @param options.rpcUrl The RPC URL of the blockchain.
76
- * @returns {Promise<PermitSignature>} Promise resolving to the permit signature.
77
- * @example
78
- * import { signERC20Permit } from '@clober/v2-sdk'
79
- * import { privateKeyToAccount } from 'viem/accounts'
80
- *
81
- * const { deadline, r, s, v } = await signERC20Permit(
82
- * 421614,
83
- * privateKeyToAccount('0x...')
84
- * '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
85
- * '1000.123', // spend 1000.123 USDC
86
- * )
87
- *
88
- * @example
89
- * import { signERC20Permit } from '@clober/v2-sdk'
90
- * import { mnemonicToAccount } from 'viem/accounts'
91
- *
92
- * const { deadline, r, s, v } = await signERC20Permit(
93
- * 421614,
94
- * mnemonicToAccount('legal ...')
95
- * '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
96
- * '1000.123', // spend 1000.123 USDC
97
- * )
98
- */
99
- export const signERC20Permit = async (
100
- chainId: CHAIN_IDS,
101
- account: HDAccount | PrivateKeyAccount,
102
- token: `0x${string}`,
103
- amount: string,
104
- options?: {
105
- rpcUrl: string
106
- },
107
- ): Promise<PermitSignature> => {
108
- const currency = await fetchCurrency(chainId, token, options?.rpcUrl)
109
- const spender = CONTRACT_ADDRESSES[chainId]!.Controller
110
- const publicClient = createPublicClient({
111
- chain: CHAIN_MAP[chainId],
112
- transport: options?.rpcUrl ? http(options.rpcUrl) : http(),
113
- })
114
- const value = parseUnits(amount, currency.decimals)
115
- const [{ result: nonce }, { result: version }, { result: name }] =
116
- await publicClient.multicall({
117
- allowFailure: true,
118
- contracts: [
119
- {
120
- address: token,
121
- abi: _abi,
122
- functionName: 'nonces',
123
- args: [account.address],
124
- },
125
- {
126
- address: token,
127
- abi: _abi,
128
- functionName: 'version',
129
- },
130
- {
131
- address: token,
132
- abi: _abi,
133
- functionName: 'name',
134
- },
135
- ],
136
- })
137
-
138
- if (nonce === undefined || !name) {
139
- return {
140
- r: zeroHash,
141
- s: zeroHash,
142
- v: 0,
143
- deadline: 0n,
144
- }
145
- }
146
- const deadline = getDeadlineTimestampInSeconds()
147
- const data = {
148
- domain: {
149
- name: name,
150
- version: (version || '1').toString(),
151
- chainId: BigInt(chainId),
152
- verifyingContract: currency.address,
153
- },
154
- message: {
155
- owner: account.address,
156
- spender,
157
- value,
158
- nonce,
159
- deadline,
160
- },
161
- primaryType: 'Permit',
162
- types: {
163
- Permit: [
164
- { name: 'owner', type: 'address' },
165
- { name: 'spender', type: 'address' },
166
- { name: 'value', type: 'uint256' },
167
- { name: 'nonce', type: 'uint256' },
168
- { name: 'deadline', type: 'uint256' },
169
- ],
170
- EIP712Domain: [
171
- { name: 'name', type: 'string' },
172
- { name: 'version', type: 'string' },
173
- { name: 'chainId', type: 'uint256' },
174
- { name: 'verifyingContract', type: 'address' },
175
- ],
176
- },
177
- } as const
178
- const signature = await account.signTypedData({
179
- ...data,
180
- })
181
- const valid = await verifyTypedData({
182
- ...data,
183
- signature,
184
- address: account.address,
185
- })
186
- if (!valid) {
187
- throw new Error('Invalid signature')
188
- }
189
- const { v, s, r } = hexToSignature(signature)
190
- return {
191
- v: Number(v),
192
- s,
193
- r,
194
- deadline,
195
- }
196
- }
package/src/type.ts DELETED
@@ -1,38 +0,0 @@
1
- import { Account } from 'viem'
2
-
3
- import { CHAIN_IDS } from './constants/chain'
4
- import { Currency } from './model/currency'
5
- import { Depth } from './model/depth'
6
-
7
- export { CHAIN_IDS } from './constants/chain'
8
- export { Currency } from './model/currency'
9
- export { Depth } from './model/depth'
10
- export { OpenOrder } from './model/open-order'
11
-
12
- export type Market = {
13
- chainId: CHAIN_IDS
14
- quote: Currency
15
- base: Currency
16
- makerFee: number
17
- takerFee: number
18
- bids: Depth[]
19
- bidBookOpen: boolean
20
- asks: Depth[]
21
- askBookOpen: boolean
22
- }
23
-
24
- export type Transaction = {
25
- data: `0x${string}`
26
- gas: bigint
27
- gasPrice: bigint
28
- value: bigint
29
- to: `0x${string}`
30
- from: `0x${string}` | Account | undefined
31
- }
32
-
33
- export type PermitSignature = {
34
- deadline: bigint
35
- v: number
36
- r: `0x${string}`
37
- s: `0x${string}`
38
- }
@@ -1,48 +0,0 @@
1
- import { createPublicClient, http } from 'viem'
2
-
3
- import { CHAIN_IDS, CHAIN_MAP } from '../constants/chain'
4
- import { CONTRACT_ADDRESSES } from '../constants/addresses'
5
-
6
- const _abi = [
7
- {
8
- inputs: [
9
- {
10
- internalType: 'address',
11
- name: 'owner',
12
- type: 'address',
13
- },
14
- {
15
- internalType: 'address',
16
- name: 'operator',
17
- type: 'address',
18
- },
19
- ],
20
- name: 'isApprovedForAll',
21
- outputs: [
22
- {
23
- internalType: 'bool',
24
- name: '',
25
- type: 'bool',
26
- },
27
- ],
28
- stateMutability: 'view',
29
- type: 'function',
30
- },
31
- ] as const
32
-
33
- export async function fetchIsApprovedForAll(
34
- chainId: CHAIN_IDS,
35
- owner: `0x${string}`,
36
- rpcUrl?: string,
37
- ): Promise<boolean> {
38
- const publicClient = createPublicClient({
39
- chain: CHAIN_MAP[chainId],
40
- transport: rpcUrl ? http(rpcUrl) : http(),
41
- })
42
- return publicClient.readContract({
43
- address: CONTRACT_ADDRESSES[chainId]!.BookManager,
44
- abi: _abi,
45
- functionName: 'isApprovedForAll',
46
- args: [owner, CONTRACT_ADDRESSES[chainId]!.Controller],
47
- })
48
- }
@@ -1,39 +0,0 @@
1
- import {
2
- createPublicClient,
3
- encodeFunctionData,
4
- http,
5
- SimulateContractParameters,
6
- WriteContractParameters,
7
- } from 'viem'
8
-
9
- import { CHAIN_IDS, CHAIN_MAP } from '../constants/chain'
10
- import { Transaction } from '../type'
11
-
12
- export const buildTransaction = async (
13
- chainId: CHAIN_IDS,
14
- args: WriteContractParameters | SimulateContractParameters,
15
- rpcUrl?: string,
16
- ): Promise<Transaction> => {
17
- const publicClient = createPublicClient({
18
- chain: CHAIN_MAP[chainId],
19
- transport: rpcUrl ? http(rpcUrl) : http(),
20
- })
21
- const data = encodeFunctionData(args)
22
- const [gas, gasPrice] = await Promise.all([
23
- publicClient.estimateGas({
24
- account: args.account,
25
- data,
26
- to: args.address,
27
- value: args.value || 0n,
28
- }),
29
- publicClient.getGasPrice(),
30
- ])
31
- return {
32
- gas,
33
- gasPrice,
34
- data,
35
- value: args.value || 0n,
36
- to: args.address,
37
- from: args.account,
38
- }
39
- }
@@ -1,22 +0,0 @@
1
- import { PRICE_PRECISION } from '../constants/price'
2
-
3
- import { divide } from './math'
4
- import { toPrice } from './tick'
5
-
6
- export const baseToQuote = (
7
- tick: bigint,
8
- base: bigint,
9
- roundingUp: boolean,
10
- ): bigint => {
11
- const y = 1n << PRICE_PRECISION
12
- return divide(base * toPrice(tick), y, roundingUp)
13
- }
14
-
15
- export const quoteToBase = (
16
- tick: bigint,
17
- quote: bigint,
18
- roundingUp: boolean,
19
- ): bigint => {
20
- const x = quote << PRICE_PRECISION
21
- return divide(x, toPrice(tick), roundingUp)
22
- }
@@ -1,74 +0,0 @@
1
- import { getAddress, isAddressEqual, zeroAddress } from 'viem'
2
-
3
- import { STABLE_COIN_ADDRESSES, WETH_ADDRESSES } from '../constants/currency'
4
- import { CHAIN_IDS } from '../constants/chain'
5
-
6
- export const getMarketId = (
7
- chainId: CHAIN_IDS,
8
- tokenAddresses: `0x${string}`[],
9
- ): {
10
- baseTokenAddress: `0x${string}`
11
- quoteTokenAddress: `0x${string}`
12
- marketId: string
13
- } => {
14
- if (tokenAddresses.length !== 2) {
15
- throw new Error('Invalid token pair')
16
- }
17
- tokenAddresses = tokenAddresses.map((address) => getAddress(address))
18
-
19
- // include stable coin
20
- const stable = tokenAddresses.find((address) => {
21
- return STABLE_COIN_ADDRESSES[chainId]!.map((addresses) =>
22
- getAddress(addresses),
23
- ).some((addresses) => addresses.includes(address))
24
- })
25
- if (stable) {
26
- const other = tokenAddresses.find(
27
- (address) => !isAddressEqual(address, stable),
28
- )!
29
- return {
30
- marketId: `${other}/${stable}`,
31
- quoteTokenAddress: stable,
32
- baseTokenAddress: other,
33
- }
34
- }
35
-
36
- // include eth
37
- const eth = tokenAddresses.find((address) =>
38
- isAddressEqual(address, zeroAddress),
39
- )
40
- if (eth) {
41
- const other = tokenAddresses.find(
42
- (address) => !isAddressEqual(address, zeroAddress),
43
- )!
44
- return {
45
- marketId: `${other}/${eth}`,
46
- quoteTokenAddress: eth,
47
- baseTokenAddress: other,
48
- }
49
- }
50
-
51
- // include weth
52
- const weth = tokenAddresses.find((address) => {
53
- return WETH_ADDRESSES[chainId]!.map((addresses) =>
54
- getAddress(addresses),
55
- ).some((addresses) => addresses.includes(address))
56
- })
57
- if (weth) {
58
- const other = tokenAddresses.find(
59
- (address) => !isAddressEqual(address, weth),
60
- )!
61
- return {
62
- marketId: `${other}/${weth}`,
63
- quoteTokenAddress: weth,
64
- baseTokenAddress: other,
65
- }
66
- }
67
-
68
- const _tokens = tokenAddresses.sort((a, b) => a.localeCompare(b))
69
- return {
70
- marketId: `${_tokens[0]}/${_tokens[1]}`,
71
- quoteTokenAddress: _tokens[0]!,
72
- baseTokenAddress: _tokens[1]!,
73
- }
74
- }
package/src/utils/math.ts DELETED
@@ -1,117 +0,0 @@
1
- export const divide = (x: bigint, y: bigint, roundUp: boolean): bigint => {
2
- if (roundUp) {
3
- if (x === 0n) {
4
- return 0n
5
- } else {
6
- return (x - 1n) / y + 1n
7
- }
8
- } else {
9
- return x / y
10
- }
11
- }
12
-
13
- export const lnWad = (x: bigint): bigint => {
14
- const or = (a: bigint, b: bigint) => a | b
15
- const xor = (a: bigint, b: bigint) => a ^ b
16
- const and = (a: bigint, b: bigint) => a & b
17
- const add = (a: bigint, b: bigint) => a + b
18
- const sub = (a: bigint, b: bigint) => a - b
19
- const mul = (a: bigint, b: bigint) => a * b
20
- const sdiv = (a: bigint, b: bigint) => a / b
21
- const lt = (a: bigint, b: bigint) => (a < b ? 1n : 0n)
22
- const shl = (x: bigint, y: bigint) => y << x
23
- const shr = (x: bigint, y: bigint) => y >> x
24
- const sar = (x: bigint, y: bigint) => y >> x
25
- const byte = (i: bigint, x: bigint) => (x >> (248n - i * 8n)) & 0xffn
26
-
27
- // We want to convert `x` from `10**18` fixed point to `2**96` fixed point.
28
- // We do this by multiplying by `2**96 / 10**18`. But since
29
- // `ln(x * C) = ln(x) + ln(C)`, we can simply do nothing here
30
- // and add `ln(2**96 / 10**18)` at the end.
31
-
32
- // Compute `k = log2(x) - 96`, `r = 159 - k = 255 - log2(x) = 255 ^ log2(x)`.
33
- let r = shl(7n, lt(0xffffffffffffffffffffffffffffffffn, x))
34
- r = or(r, shl(6n, lt(0xffffffffffffffffn, shr(r, x))))
35
- r = or(r, shl(5n, lt(0xffffffffn, shr(r, x))))
36
- r = or(r, shl(4n, lt(0xffffn, shr(r, x))))
37
- r = or(r, shl(3n, lt(0xffn, shr(r, x))))
38
- // forgefmt: disable-next-item
39
- r = xor(
40
- r,
41
- byte(
42
- and(0x1fn, shr(shr(r, x), 0x8421084210842108cc6318c6db6d54ben)),
43
- 0xf8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffffn,
44
- ),
45
- )
46
-
47
- // Reduce range of x to (1, 2) * 2**96
48
- // ln(2^k * x) = k * ln(2) + ln(x)
49
- x = shr(159n, shl(r, x))
50
-
51
- // Evaluate using a (8, 8)-term rational approximation.
52
- // `p` is made monic, we will multiply by a scale factor later.
53
- // forgefmt: disable-next-item
54
- let p = sub(
55
- // This heavily nested expression is to avoid stack-too-deep for via-ir.
56
- sar(
57
- 96n,
58
- mul(
59
- add(
60
- 43456485725739037958740375743393n,
61
- sar(
62
- 96n,
63
- mul(
64
- add(
65
- 24828157081833163892658089445524n,
66
- sar(96n, mul(add(3273285459638523848632254066296n, x), x)),
67
- ),
68
- x,
69
- ),
70
- ),
71
- ),
72
- x,
73
- ),
74
- ),
75
- 11111509109440967052023855526967n,
76
- )
77
- p = sub(sar(96n, mul(p, x)), 45023709667254063763336534515857n)
78
- p = sub(sar(96n, mul(p, x)), 14706773417378608786704636184526n)
79
- p = sub(mul(p, x), shl(96n, 795164235651350426258249787498n))
80
- // We leave `p` in `2**192` basis so we don't need to scale it back up for the division.
81
-
82
- // `q` is monic by convention.
83
- let q = add(5573035233440673466300451813936n, x)
84
- q = add(71694874799317883764090561454958n, sar(96n, mul(x, q)))
85
- q = add(283447036172924575727196451306956n, sar(96n, mul(x, q)))
86
- q = add(401686690394027663651624208769553n, sar(96n, mul(x, q)))
87
- q = add(204048457590392012362485061816622n, sar(96n, mul(x, q)))
88
- q = add(31853899698501571402653359427138n, sar(96n, mul(x, q)))
89
- q = add(909429971244387300277376558375n, sar(96n, mul(x, q)))
90
-
91
- // `p / q` is in the range `(0, 0.125) * 2**96`.
92
-
93
- // Finalization, we need to:
94
- // - Multiply by the scale factor `s = 5.549…`.
95
- // - Add `ln(2**96 / 10**18)`.
96
- // - Add `k * ln(2)`.
97
- // - Multiply by `10**18 / 2**96 = 5**18 >> 78`.
98
-
99
- // The q polynomial is known not to have zeros in the domain.
100
- // No scaling required because p is already `2**96` too large.
101
- p = sdiv(p, q)
102
- // Multiply by the scaling factor: `s * 5**18 * 2**96`, base is now `5**18 * 2**192`.
103
- p = mul(1677202110996718588342820967067443963516166n, p)
104
- // Add `ln(2) * k * 5**18 * 2**192`.
105
- // forgefmt: disable-next-item
106
- p = add(
107
- mul(
108
- 16597577552685614221487285958193947469193820559219878177908093499208371n,
109
- sub(159n, r),
110
- ),
111
- p,
112
- )
113
- // Base conversion: mul `2**96 / (5**18 * 2**192)`.
114
- r = sdiv(p, 302231454903657293676544000000000000000000n)
115
-
116
- return r
117
- }
@@ -1,29 +0,0 @@
1
- import BigNumber from 'bignumber.js'
2
-
3
- import { PRICE_PRECISION } from '../constants/price'
4
-
5
- export const formatPrice = (
6
- price: bigint,
7
- quoteDecimals: number,
8
- baseDecimals: number,
9
- ): number => {
10
- return new BigNumber(price.toString())
11
- .div(new BigNumber(2).pow(PRICE_PRECISION.toString()))
12
- .times(new BigNumber(10).pow(baseDecimals))
13
- .div(new BigNumber(10).pow(quoteDecimals))
14
- .toNumber()
15
- }
16
-
17
- export const parsePrice = (
18
- price: number,
19
- quoteDecimals: number,
20
- baseDecimals: number,
21
- ): bigint => {
22
- const value = new BigNumber(price)
23
- .times(new BigNumber(2).pow(PRICE_PRECISION.toString()))
24
- .times(new BigNumber(10).pow(quoteDecimals))
25
- .div(new BigNumber(10).pow(baseDecimals))
26
- return BigInt(
27
- value.isInteger() ? value.toFixed() : value.integerValue().toFixed(),
28
- )
29
- }
package/src/utils/tick.ts DELETED
@@ -1,104 +0,0 @@
1
- import { PRICE_PRECISION } from '../constants/price'
2
-
3
- import { lnWad } from './math'
4
-
5
- const _R0 = 0xfff97272373d413259a46990n
6
- const _R1 = 0xfff2e50f5f656932ef12357cn
7
- const _R2 = 0xffe5caca7e10e4e61c3624ean
8
- const _R3 = 0xffcb9843d60f6159c9db5883n
9
- const _R4 = 0xff973b41fa98c081472e6896n
10
- const _R5 = 0xff2ea16466c96a3843ec78b3n
11
- const _R6 = 0xfe5dee046a99a2a811c461f1n
12
- const _R7 = 0xfcbe86c7900a88aedcffc83bn
13
- const _R8 = 0xf987a7253ac413176f2b074cn
14
- const _R9 = 0xf3392b0822b70005940c7a39n
15
- const _R10 = 0xe7159475a2c29b7443b29c7fn
16
- const _R11 = 0xd097f3bdfd2022b8845ad8f7n
17
- const _R12 = 0xa9f746462d870fdf8a65dc1fn
18
- const _R13 = 0x70d869a156d2a1b890bb3df6n
19
- const _R14 = 0x31be135f97d08fd981231505n
20
- const _R15 = 0x9aa508b5b7a84e1c677de54n
21
- const _R16 = 0x5d6af8dedb81196699c329n
22
- const _R17 = 0x2216e584f5fa1ea92604n
23
- const _R18 = 0x48a170391f7dc42n
24
-
25
- export const invertPrice = (price: bigint): bigint => {
26
- return price ? (1n << (PRICE_PRECISION * 2n)) / price : 0n
27
- }
28
-
29
- export const fromPrice = (price: bigint): bigint => {
30
- const tick = (lnWad(price) * 42951820407860n) / 2n ** 128n
31
- if (toPrice(tick) > price) {
32
- return tick - 1n
33
- }
34
- return tick
35
- }
36
-
37
- export const toPrice = (tick: bigint): bigint => {
38
- const absTick = tick < 0n ? -tick : tick
39
- let price = 0n
40
- if ((absTick & 0x1n) !== 0n) {
41
- price = _R0
42
- } else {
43
- price = 1n << PRICE_PRECISION
44
- }
45
- if ((absTick & 0x2n) != 0n) {
46
- price = (price * _R1) >> PRICE_PRECISION
47
- }
48
- if ((absTick & 0x4n) != 0n) {
49
- price = (price * _R2) >> PRICE_PRECISION
50
- }
51
- if ((absTick & 0x8n) != 0n) {
52
- price = (price * _R3) >> PRICE_PRECISION
53
- }
54
- if ((absTick & 0x10n) != 0n) {
55
- price = (price * _R4) >> PRICE_PRECISION
56
- }
57
- if ((absTick & 0x20n) != 0n) {
58
- price = (price * _R5) >> PRICE_PRECISION
59
- }
60
- if ((absTick & 0x40n) != 0n) {
61
- price = (price * _R6) >> PRICE_PRECISION
62
- }
63
- if ((absTick & 0x80n) != 0n) {
64
- price = (price * _R7) >> PRICE_PRECISION
65
- }
66
- if ((absTick & 0x100n) != 0n) {
67
- price = (price * _R8) >> PRICE_PRECISION
68
- }
69
- if ((absTick & 0x200n) != 0n) {
70
- price = (price * _R9) >> PRICE_PRECISION
71
- }
72
- if ((absTick & 0x400n) != 0n) {
73
- price = (price * _R10) >> PRICE_PRECISION
74
- }
75
- if ((absTick & 0x800n) != 0n) {
76
- price = (price * _R11) >> PRICE_PRECISION
77
- }
78
- if ((absTick & 0x1000n) != 0n) {
79
- price = (price * _R12) >> PRICE_PRECISION
80
- }
81
- if ((absTick & 0x2000n) != 0n) {
82
- price = (price * _R13) >> PRICE_PRECISION
83
- }
84
- if ((absTick & 0x4000n) != 0n) {
85
- price = (price * _R14) >> PRICE_PRECISION
86
- }
87
- if ((absTick & 0x8000n) != 0n) {
88
- price = (price * _R15) >> PRICE_PRECISION
89
- }
90
- if ((absTick & 0x10000n) != 0n) {
91
- price = (price * _R16) >> PRICE_PRECISION
92
- }
93
- if ((absTick & 0x20000n) != 0n) {
94
- price = (price * _R17) >> PRICE_PRECISION
95
- }
96
- if ((absTick & 0x40000n) != 0n) {
97
- price = (price * _R18) >> PRICE_PRECISION
98
- }
99
- if (tick > 0n) {
100
- price = 0x1000000000000000000000000000000000000000000000000n / price
101
- }
102
-
103
- return price
104
- }
package/src/utils/time.ts DELETED
@@ -1,6 +0,0 @@
1
- const currentTimestampInSeconds = (): number =>
2
- Math.floor(new Date().getTime() / 1000)
3
-
4
- export const getDeadlineTimestampInSeconds = (): bigint => {
5
- return BigInt(Math.floor(currentTimestampInSeconds() + 60 * 20))
6
- }