@velora-dex/sdk 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +494 -0
  3. package/dist/constants.d.ts +7 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/examples/customFetcher.d.ts +3 -0
  6. package/dist/examples/customFetcher.d.ts.map +1 -0
  7. package/dist/examples/delta.d.ts +2 -0
  8. package/dist/examples/delta.d.ts.map +1 -0
  9. package/dist/examples/ethersV6.d.ts +2 -0
  10. package/dist/examples/ethersV6.d.ts.map +1 -0
  11. package/dist/examples/limitOrders_all.d.ts +2 -0
  12. package/dist/examples/limitOrders_all.d.ts.map +1 -0
  13. package/dist/examples/limitOrders_partial.d.ts +2 -0
  14. package/dist/examples/limitOrders_partial.d.ts.map +1 -0
  15. package/dist/examples/limitOrders_postOrder.d.ts +2 -0
  16. package/dist/examples/limitOrders_postOrder.d.ts.map +1 -0
  17. package/dist/examples/partial.d.ts +2 -0
  18. package/dist/examples/partial.d.ts.map +1 -0
  19. package/dist/examples/quote.d.ts +2 -0
  20. package/dist/examples/quote.d.ts.map +1 -0
  21. package/dist/examples/sdk.d.ts +2 -0
  22. package/dist/examples/sdk.d.ts.map +1 -0
  23. package/dist/examples/simple.d.ts +2 -0
  24. package/dist/examples/simple.d.ts.map +1 -0
  25. package/dist/examples/simpleQuote.d.ts +2 -0
  26. package/dist/examples/simpleQuote.d.ts.map +1 -0
  27. package/dist/examples/viem.d.ts +2 -0
  28. package/dist/examples/viem.d.ts.map +1 -0
  29. package/dist/examples/wagmi.d.ts +43 -0
  30. package/dist/examples/wagmi.d.ts.map +1 -0
  31. package/dist/examples/web3.d.ts +2 -0
  32. package/dist/examples/web3.d.ts.map +1 -0
  33. package/dist/gas.d.ts +8 -0
  34. package/dist/gas.d.ts.map +1 -0
  35. package/dist/helpers/approve.d.ts +8 -0
  36. package/dist/helpers/approve.d.ts.map +1 -0
  37. package/dist/helpers/fetchers/axios.d.ts +5 -0
  38. package/dist/helpers/fetchers/axios.d.ts.map +1 -0
  39. package/dist/helpers/fetchers/fetch.d.ts +5 -0
  40. package/dist/helpers/fetchers/fetch.d.ts.map +1 -0
  41. package/dist/helpers/index.d.ts +13 -0
  42. package/dist/helpers/index.d.ts.map +1 -0
  43. package/dist/helpers/misc.d.ts +48 -0
  44. package/dist/helpers/misc.d.ts.map +1 -0
  45. package/dist/helpers/providers/ethers.d.ts +10 -0
  46. package/dist/helpers/providers/ethers.d.ts.map +1 -0
  47. package/dist/helpers/providers/ethersV6.d.ts +8 -0
  48. package/dist/helpers/providers/ethersV6.d.ts.map +1 -0
  49. package/dist/helpers/providers/helpers.d.ts +3 -0
  50. package/dist/helpers/providers/helpers.d.ts.map +1 -0
  51. package/dist/helpers/providers/viem.d.ts +23 -0
  52. package/dist/helpers/providers/viem.d.ts.map +1 -0
  53. package/dist/helpers/providers/web3.d.ts +9 -0
  54. package/dist/helpers/providers/web3.d.ts.map +1 -0
  55. package/dist/helpers/token.d.ts +38 -0
  56. package/dist/helpers/token.d.ts.map +1 -0
  57. package/dist/index.d.ts +64 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +8 -0
  60. package/dist/methods/common/orders/buildOrderData.d.ts +27 -0
  61. package/dist/methods/common/orders/buildOrderData.d.ts.map +1 -0
  62. package/dist/methods/common/orders/encoding.d.ts +23 -0
  63. package/dist/methods/common/orders/encoding.d.ts.map +1 -0
  64. package/dist/methods/common/orders/misc.d.ts +27 -0
  65. package/dist/methods/common/orders/misc.d.ts.map +1 -0
  66. package/dist/methods/common/orders/signature.d.ts +9 -0
  67. package/dist/methods/common/orders/signature.d.ts.map +1 -0
  68. package/dist/methods/common/orders/types.d.ts +8 -0
  69. package/dist/methods/common/orders/types.d.ts.map +1 -0
  70. package/dist/methods/delta/approveForDelta.d.ts +8 -0
  71. package/dist/methods/delta/approveForDelta.d.ts.map +1 -0
  72. package/dist/methods/delta/buildCrosschainOrderBridge.d.ts +23 -0
  73. package/dist/methods/delta/buildCrosschainOrderBridge.d.ts.map +1 -0
  74. package/dist/methods/delta/buildDeltaOrder.d.ts +49 -0
  75. package/dist/methods/delta/buildDeltaOrder.d.ts.map +1 -0
  76. package/dist/methods/delta/getBridgeInfo.d.ts +9 -0
  77. package/dist/methods/delta/getBridgeInfo.d.ts.map +1 -0
  78. package/dist/methods/delta/getDeltaContract.d.ts +9 -0
  79. package/dist/methods/delta/getDeltaContract.d.ts.map +1 -0
  80. package/dist/methods/delta/getDeltaOrders.d.ts +22 -0
  81. package/dist/methods/delta/getDeltaOrders.d.ts.map +1 -0
  82. package/dist/methods/delta/getDeltaPrice.d.ts +58 -0
  83. package/dist/methods/delta/getDeltaPrice.d.ts.map +1 -0
  84. package/dist/methods/delta/getMulticallHandlers.d.ts +9 -0
  85. package/dist/methods/delta/getMulticallHandlers.d.ts.map +1 -0
  86. package/dist/methods/delta/getPartnerFee.d.ts +16 -0
  87. package/dist/methods/delta/getPartnerFee.d.ts.map +1 -0
  88. package/dist/methods/delta/helpers/across.d.ts +22 -0
  89. package/dist/methods/delta/helpers/across.d.ts.map +1 -0
  90. package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts +35 -0
  91. package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts.map +1 -0
  92. package/dist/methods/delta/helpers/composePermit.d.ts +5 -0
  93. package/dist/methods/delta/helpers/composePermit.d.ts.map +1 -0
  94. package/dist/methods/delta/helpers/misc.d.ts +3 -0
  95. package/dist/methods/delta/helpers/misc.d.ts.map +1 -0
  96. package/dist/methods/delta/helpers/types.d.ts +96 -0
  97. package/dist/methods/delta/helpers/types.d.ts.map +1 -0
  98. package/dist/methods/delta/index.d.ts +28 -0
  99. package/dist/methods/delta/index.d.ts.map +1 -0
  100. package/dist/methods/delta/isTokenSupportedInDelta.d.ts +8 -0
  101. package/dist/methods/delta/isTokenSupportedInDelta.d.ts.map +1 -0
  102. package/dist/methods/delta/postDeltaOrder.d.ts +23 -0
  103. package/dist/methods/delta/postDeltaOrder.d.ts.map +1 -0
  104. package/dist/methods/delta/signDeltaOrder.d.ts +12 -0
  105. package/dist/methods/delta/signDeltaOrder.d.ts.map +1 -0
  106. package/dist/methods/limitOrders/approveForOrder.d.ts +12 -0
  107. package/dist/methods/limitOrders/approveForOrder.d.ts.map +1 -0
  108. package/dist/methods/limitOrders/buildOrder.d.ts +11 -0
  109. package/dist/methods/limitOrders/buildOrder.d.ts.map +1 -0
  110. package/dist/methods/limitOrders/cancelOrder.d.ts +9 -0
  111. package/dist/methods/limitOrders/cancelOrder.d.ts.map +1 -0
  112. package/dist/methods/limitOrders/fillOrderDirectly.d.ts +30 -0
  113. package/dist/methods/limitOrders/fillOrderDirectly.d.ts.map +1 -0
  114. package/dist/methods/limitOrders/getOrders.d.ts +39 -0
  115. package/dist/methods/limitOrders/getOrders.d.ts.map +1 -0
  116. package/dist/methods/limitOrders/getOrdersContract.d.ts +8 -0
  117. package/dist/methods/limitOrders/getOrdersContract.d.ts.map +1 -0
  118. package/dist/methods/limitOrders/helpers/buildOrderData.d.ts +43 -0
  119. package/dist/methods/limitOrders/helpers/buildOrderData.d.ts.map +1 -0
  120. package/dist/methods/limitOrders/helpers/misc.d.ts +9 -0
  121. package/dist/methods/limitOrders/helpers/misc.d.ts.map +1 -0
  122. package/dist/methods/limitOrders/helpers/types.d.ts +49 -0
  123. package/dist/methods/limitOrders/helpers/types.d.ts.map +1 -0
  124. package/dist/methods/limitOrders/index.d.ts +30 -0
  125. package/dist/methods/limitOrders/index.d.ts.map +1 -0
  126. package/dist/methods/limitOrders/postOrder.d.ts +10 -0
  127. package/dist/methods/limitOrders/postOrder.d.ts.map +1 -0
  128. package/dist/methods/limitOrders/signOrder.d.ts +7 -0
  129. package/dist/methods/limitOrders/signOrder.d.ts.map +1 -0
  130. package/dist/methods/limitOrders/transaction.d.ts +23 -0
  131. package/dist/methods/limitOrders/transaction.d.ts.map +1 -0
  132. package/dist/methods/nftOrders/approveForOrder.d.ts +12 -0
  133. package/dist/methods/nftOrders/approveForOrder.d.ts.map +1 -0
  134. package/dist/methods/nftOrders/buildOrder.d.ts +11 -0
  135. package/dist/methods/nftOrders/buildOrder.d.ts.map +1 -0
  136. package/dist/methods/nftOrders/cancelOrder.d.ts +8 -0
  137. package/dist/methods/nftOrders/cancelOrder.d.ts.map +1 -0
  138. package/dist/methods/nftOrders/getOrders.d.ts +18 -0
  139. package/dist/methods/nftOrders/getOrders.d.ts.map +1 -0
  140. package/dist/methods/nftOrders/getOrdersContract.d.ts +8 -0
  141. package/dist/methods/nftOrders/getOrdersContract.d.ts.map +1 -0
  142. package/dist/methods/nftOrders/helpers/buildOrderData.d.ts +52 -0
  143. package/dist/methods/nftOrders/helpers/buildOrderData.d.ts.map +1 -0
  144. package/dist/methods/nftOrders/helpers/misc.d.ts +13 -0
  145. package/dist/methods/nftOrders/helpers/misc.d.ts.map +1 -0
  146. package/dist/methods/nftOrders/helpers/types.d.ts +39 -0
  147. package/dist/methods/nftOrders/helpers/types.d.ts.map +1 -0
  148. package/dist/methods/nftOrders/index.d.ts +23 -0
  149. package/dist/methods/nftOrders/index.d.ts.map +1 -0
  150. package/dist/methods/nftOrders/postOrder.d.ts +10 -0
  151. package/dist/methods/nftOrders/postOrder.d.ts.map +1 -0
  152. package/dist/methods/nftOrders/signOrder.d.ts +7 -0
  153. package/dist/methods/nftOrders/signOrder.d.ts.map +1 -0
  154. package/dist/methods/nftOrders/transaction.d.ts +23 -0
  155. package/dist/methods/nftOrders/transaction.d.ts.map +1 -0
  156. package/dist/methods/quote/getQuote.d.ts +51 -0
  157. package/dist/methods/quote/getQuote.d.ts.map +1 -0
  158. package/dist/methods/swap/adapters.d.ts +8 -0
  159. package/dist/methods/swap/adapters.d.ts.map +1 -0
  160. package/dist/methods/swap/approve.d.ts +10 -0
  161. package/dist/methods/swap/approve.d.ts.map +1 -0
  162. package/dist/methods/swap/balance.d.ts +23 -0
  163. package/dist/methods/swap/balance.d.ts.map +1 -0
  164. package/dist/methods/swap/helpers/normalizeRateOptions.d.ts +12 -0
  165. package/dist/methods/swap/helpers/normalizeRateOptions.d.ts.map +1 -0
  166. package/dist/methods/swap/index.d.ts +13 -0
  167. package/dist/methods/swap/index.d.ts.map +1 -0
  168. package/dist/methods/swap/rates.d.ts +52 -0
  169. package/dist/methods/swap/rates.d.ts.map +1 -0
  170. package/dist/methods/swap/spender.d.ts +21 -0
  171. package/dist/methods/swap/spender.d.ts.map +1 -0
  172. package/dist/methods/swap/swapTx.d.ts +158 -0
  173. package/dist/methods/swap/swapTx.d.ts.map +1 -0
  174. package/dist/methods/swap/token.d.ts +8 -0
  175. package/dist/methods/swap/token.d.ts.map +1 -0
  176. package/dist/methods/swap/transaction.d.ts +115 -0
  177. package/dist/methods/swap/transaction.d.ts.map +1 -0
  178. package/dist/sdk/full.d.ts +17 -0
  179. package/dist/sdk/full.d.ts.map +1 -0
  180. package/dist/sdk/partial.d.ts +31 -0
  181. package/dist/sdk/partial.d.ts.map +1 -0
  182. package/dist/sdk/simple.d.ts +75 -0
  183. package/dist/sdk/simple.d.ts.map +1 -0
  184. package/dist/sdk.cjs.development.js +5182 -0
  185. package/dist/sdk.cjs.development.js.map +1 -0
  186. package/dist/sdk.cjs.production.min.js +2 -0
  187. package/dist/sdk.cjs.production.min.js.map +1 -0
  188. package/dist/sdk.esm.js +5102 -0
  189. package/dist/sdk.esm.js.map +1 -0
  190. package/dist/types.d.ts +161 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/docs/DELTA.md +207 -0
  193. package/package.json +126 -0
  194. package/src/constants.ts +16 -0
  195. package/src/examples/customFetcher.ts +44 -0
  196. package/src/examples/delta.ts +127 -0
  197. package/src/examples/ethersV6.ts +38 -0
  198. package/src/examples/limitOrders_all.ts +135 -0
  199. package/src/examples/limitOrders_partial.ts +171 -0
  200. package/src/examples/limitOrders_postOrder.ts +77 -0
  201. package/src/examples/partial.ts +34 -0
  202. package/src/examples/quote.ts +205 -0
  203. package/src/examples/sdk.ts +39 -0
  204. package/src/examples/simple.ts +44 -0
  205. package/src/examples/simpleQuote.ts +98 -0
  206. package/src/examples/viem.ts +120 -0
  207. package/src/examples/wagmi.ts +68 -0
  208. package/src/examples/web3.ts +32 -0
  209. package/src/gas.ts +7 -0
  210. package/src/helpers/approve.ts +60 -0
  211. package/src/helpers/fetchers/axios.ts +34 -0
  212. package/src/helpers/fetchers/fetch.ts +67 -0
  213. package/src/helpers/index.ts +27 -0
  214. package/src/helpers/misc.ts +160 -0
  215. package/src/helpers/providers/ethers.ts +192 -0
  216. package/src/helpers/providers/ethersV6.ts +121 -0
  217. package/src/helpers/providers/helpers.ts +36 -0
  218. package/src/helpers/providers/viem.ts +205 -0
  219. package/src/helpers/providers/web3.ts +154 -0
  220. package/src/helpers/token.ts +75 -0
  221. package/src/index.ts +425 -0
  222. package/src/methods/common/orders/buildOrderData.ts +29 -0
  223. package/src/methods/common/orders/encoding.ts +216 -0
  224. package/src/methods/common/orders/misc.ts +86 -0
  225. package/src/methods/common/orders/signature.ts +68 -0
  226. package/src/methods/common/orders/types.ts +13 -0
  227. package/src/methods/delta/approveForDelta.ts +38 -0
  228. package/src/methods/delta/buildCrosschainOrderBridge.ts +84 -0
  229. package/src/methods/delta/buildDeltaOrder.ts +192 -0
  230. package/src/methods/delta/getBridgeInfo.ts +38 -0
  231. package/src/methods/delta/getDeltaContract.ts +29 -0
  232. package/src/methods/delta/getDeltaOrders.ts +102 -0
  233. package/src/methods/delta/getDeltaPrice.ts +122 -0
  234. package/src/methods/delta/getMulticallHandlers.ts +44 -0
  235. package/src/methods/delta/getPartnerFee.ts +58 -0
  236. package/src/methods/delta/helpers/across.ts +255 -0
  237. package/src/methods/delta/helpers/buildDeltaOrderData.ts +153 -0
  238. package/src/methods/delta/helpers/composePermit.ts +76 -0
  239. package/src/methods/delta/helpers/misc.ts +32 -0
  240. package/src/methods/delta/helpers/types.ts +110 -0
  241. package/src/methods/delta/index.ts +146 -0
  242. package/src/methods/delta/isTokenSupportedInDelta.ts +54 -0
  243. package/src/methods/delta/postDeltaOrder.ts +50 -0
  244. package/src/methods/delta/signDeltaOrder.ts +41 -0
  245. package/src/methods/limitOrders/approveForOrder.ts +36 -0
  246. package/src/methods/limitOrders/buildOrder.ts +56 -0
  247. package/src/methods/limitOrders/cancelOrder.ts +111 -0
  248. package/src/methods/limitOrders/fillOrderDirectly.ts +277 -0
  249. package/src/methods/limitOrders/getOrders.ts +151 -0
  250. package/src/methods/limitOrders/getOrdersContract.ts +20 -0
  251. package/src/methods/limitOrders/helpers/buildOrderData.ts +121 -0
  252. package/src/methods/limitOrders/helpers/misc.ts +64 -0
  253. package/src/methods/limitOrders/helpers/types.ts +70 -0
  254. package/src/methods/limitOrders/index.ts +154 -0
  255. package/src/methods/limitOrders/postOrder.ts +74 -0
  256. package/src/methods/limitOrders/signOrder.ts +29 -0
  257. package/src/methods/limitOrders/transaction.ts +231 -0
  258. package/src/methods/nftOrders/approveForOrder.ts +79 -0
  259. package/src/methods/nftOrders/buildOrder.ts +52 -0
  260. package/src/methods/nftOrders/cancelOrder.ts +23 -0
  261. package/src/methods/nftOrders/getOrders.ts +84 -0
  262. package/src/methods/nftOrders/getOrdersContract.ts +24 -0
  263. package/src/methods/nftOrders/helpers/buildOrderData.ts +131 -0
  264. package/src/methods/nftOrders/helpers/misc.ts +92 -0
  265. package/src/methods/nftOrders/helpers/types.ts +50 -0
  266. package/src/methods/nftOrders/index.ts +139 -0
  267. package/src/methods/nftOrders/postOrder.ts +71 -0
  268. package/src/methods/nftOrders/signOrder.ts +29 -0
  269. package/src/methods/nftOrders/transaction.ts +234 -0
  270. package/src/methods/quote/getQuote.ts +131 -0
  271. package/src/methods/swap/adapters.ts +49 -0
  272. package/src/methods/swap/approve.ts +51 -0
  273. package/src/methods/swap/balance.ts +147 -0
  274. package/src/methods/swap/helpers/normalizeRateOptions.ts +55 -0
  275. package/src/methods/swap/index.ts +38 -0
  276. package/src/methods/swap/rates.ts +276 -0
  277. package/src/methods/swap/spender.ts +76 -0
  278. package/src/methods/swap/swapTx.ts +266 -0
  279. package/src/methods/swap/token.ts +35 -0
  280. package/src/methods/swap/transaction.ts +310 -0
  281. package/src/sdk/full.ts +54 -0
  282. package/src/sdk/partial.ts +107 -0
  283. package/src/sdk/simple.ts +429 -0
  284. package/src/types.ts +240 -0
@@ -0,0 +1,216 @@
1
+ import { splitSignature } from './signature';
2
+
3
+ type EncodeEIP_2612PermitFunctionInput = {
4
+ permitSignature: string;
5
+ owner: string;
6
+ spender: string;
7
+ value: string | bigint;
8
+ deadline: string | number | bigint;
9
+ };
10
+
11
+ // encoding params for Token.permit() Permit1 function
12
+ export function encodeEIP_2612PermitFunctionInput({
13
+ owner,
14
+ spender,
15
+ value,
16
+ deadline,
17
+ permitSignature,
18
+ }: EncodeEIP_2612PermitFunctionInput): string {
19
+ const { v, r, s } = splitSignature(permitSignature);
20
+
21
+ const encodedOwner = encodeAddress(owner);
22
+ const encodedSpender = encodeAddress(spender);
23
+ const encodedValue = encodeUint256(value);
24
+ const encodedDeadline = encodeUint256(deadline.toString());
25
+ const encodedV = encodeUint8(v);
26
+ const encodedR = encodeBytes32(r);
27
+ const encodedS = encodeBytes32(s);
28
+
29
+ // Concatenate all encoded values, stripping the "0x" prefix from each (except the first one)
30
+ return (
31
+ '0x' +
32
+ [
33
+ encodedOwner,
34
+ encodedSpender,
35
+ encodedValue,
36
+ encodedDeadline,
37
+ encodedV,
38
+ encodedR,
39
+ encodedS,
40
+ ]
41
+ .map((val) => val.slice(2)) // Remove "0x" prefix from each encoded value
42
+ .join('') // Concatenate the values
43
+ );
44
+ }
45
+
46
+ type EncodeDAIlikePermitFunctionInput = {
47
+ permitSignature: string;
48
+ holder: string;
49
+ spender: string;
50
+ nonce: number | bigint | string;
51
+ expiry: number | bigint | string;
52
+ };
53
+
54
+ // encoding params for DAIlike.permit() function
55
+ export function encodeDAIlikePermitFunctionInput({
56
+ permitSignature,
57
+ holder,
58
+ spender,
59
+ nonce,
60
+ expiry,
61
+ }: EncodeDAIlikePermitFunctionInput): string {
62
+ const { v, r, s } = splitSignature(permitSignature);
63
+
64
+ const encodedHolder = encodeAddress(holder);
65
+ const encodedSpender = encodeAddress(spender);
66
+ const encodedNonce = encodeUint256(nonce.toString());
67
+ const encodedExpiry = encodeUint256(expiry.toString());
68
+ const encodedV = encodeUint8(v);
69
+ const encodedR = encodeBytes32(r);
70
+ const encodedS = encodeBytes32(s);
71
+
72
+ // Concatenate all encoded values, stripping the "0x" prefix from each (except the first one)
73
+ return (
74
+ '0x' +
75
+ [
76
+ encodedHolder,
77
+ encodedSpender,
78
+ encodedNonce,
79
+ encodedExpiry,
80
+ encodeBool(true), //allowed=true
81
+ encodedV,
82
+ encodedR,
83
+ encodedS,
84
+ ]
85
+ .map((val) => val.slice(2)) // Remove "0x" prefix from each encoded value
86
+ .join('') // Concatenate the values
87
+ );
88
+ }
89
+
90
+ // encode an address (20 bytes) into 32 bytes
91
+ export function encodeAddress(address: string): string {
92
+ const strippedAddress = address.replace(/^0x/, ''); // Remove "0x" prefix
93
+ return '0x' + strippedAddress.toLowerCase().padStart(64, '0');
94
+ }
95
+
96
+ // encode a uint256 value
97
+ export function encodeUint256(value: string | bigint): string {
98
+ const bn = BigInt(value);
99
+ return '0x' + bn.toString(16).padStart(64, '0');
100
+ }
101
+
102
+ // encode a uint8 value
103
+ export function encodeUint8(value: number | bigint): string {
104
+ return '0x' + value.toString(16).padStart(64, '0');
105
+ }
106
+
107
+ // encode a bytes32 value
108
+ export function encodeBytes32(value: string): string {
109
+ const strippedValue = value.replace(/^0x/, ''); // Remove "0x" prefix
110
+ return '0x' + strippedValue.padStart(64, '0').toLowerCase();
111
+ }
112
+
113
+ //encode a boolean
114
+ export function encodeBool(value: boolean): string {
115
+ const encodedValue = value ? '1' : '0';
116
+ // padded to 32 bytes
117
+ return '0x' + encodedValue.padStart(64, '0');
118
+ }
119
+
120
+ /*
121
+ const EIP_2612_PERMIT_ABI = [
122
+ {
123
+ constant: false,
124
+ inputs: [
125
+ {
126
+ name: 'owner',
127
+ type: 'address',
128
+ },
129
+ {
130
+ name: 'spender',
131
+ type: 'address',
132
+ },
133
+ {
134
+ name: 'value',
135
+ type: 'uint256',
136
+ },
137
+ {
138
+ name: 'deadline',
139
+ type: 'uint256',
140
+ },
141
+ {
142
+ name: 'v',
143
+ type: 'uint8',
144
+ },
145
+ {
146
+ name: 'r',
147
+ type: 'bytes32',
148
+ },
149
+ {
150
+ name: 's',
151
+ type: 'bytes32',
152
+ },
153
+ ],
154
+ name: 'permit',
155
+ outputs: [],
156
+ payable: false,
157
+ stateMutability: 'nonpayable',
158
+ type: 'function',
159
+ },
160
+ ];
161
+ */
162
+
163
+ /*
164
+ const DAI_EIP_2612_PERMIT_ABI = [
165
+ {
166
+ constant: false,
167
+ inputs: [
168
+ {
169
+ internalType: 'address',
170
+ name: 'holder',
171
+ type: 'address',
172
+ },
173
+ {
174
+ internalType: 'address',
175
+ name: 'spender',
176
+ type: 'address',
177
+ },
178
+ {
179
+ internalType: 'uint256',
180
+ name: 'nonce',
181
+ type: 'uint256',
182
+ },
183
+ {
184
+ internalType: 'uint256',
185
+ name: 'expiry',
186
+ type: 'uint256',
187
+ },
188
+ {
189
+ internalType: 'bool',
190
+ name: 'allowed',
191
+ type: 'bool',
192
+ },
193
+ {
194
+ internalType: 'uint8',
195
+ name: 'v',
196
+ type: 'uint8',
197
+ },
198
+ {
199
+ internalType: 'bytes32',
200
+ name: 'r',
201
+ type: 'bytes32',
202
+ },
203
+ {
204
+ internalType: 'bytes32',
205
+ name: 's',
206
+ type: 'bytes32',
207
+ },
208
+ ],
209
+ name: 'permit',
210
+ outputs: [],
211
+ payable: false,
212
+ stateMutability: 'nonpayable',
213
+ type: 'function',
214
+ },
215
+ ];
216
+ */
@@ -0,0 +1,86 @@
1
+ import type { LimitOrderFromApi } from '../../limitOrders/helpers/types';
2
+ import { ZERO_ADDRESS } from './buildOrderData';
3
+ import type { OrderType } from './types';
4
+
5
+ type GetBaseFetchUrlInput = {
6
+ apiURL: string;
7
+ chainId: number;
8
+ };
9
+
10
+ export type BaseFetchUrlInputConstructor<Kind extends OrderKind> = (
11
+ params: GetBaseFetchUrlInput
12
+ ) => UrlByTypeFunction<Kind>;
13
+
14
+ type OrderType2URLPart = {
15
+ LIMIT: 'orders';
16
+ P2P: 'p2p';
17
+ };
18
+
19
+ type OrderKind = 'nft' | 'ft';
20
+
21
+ export type BaseFetchUrl<
22
+ Kind extends OrderKind,
23
+ Type extends OrderType = OrderType
24
+ > = `${string}/${Kind}/${OrderType2URLPart[Type]}/${number}`;
25
+
26
+ export type MinFetchUrl<Kind extends OrderKind> = `${string}/${Kind}/order`;
27
+ export type OrderFillableBalanceFetchUrl<Kind extends OrderKind> =
28
+ `${string}/${Kind}/fillablebalance/${number}`;
29
+
30
+ interface UrlByTypeFunction<Kind extends OrderKind> {
31
+ (): MinFetchUrl<Kind>;
32
+ (type: 'LIMIT'): BaseFetchUrl<Kind, 'LIMIT'>;
33
+ (type: 'P2P'): BaseFetchUrl<Kind, 'P2P'>;
34
+ (type: OrderType): BaseFetchUrl<Kind>;
35
+ (type: 'fillablebalance'): OrderFillableBalanceFetchUrl<Kind>;
36
+ (type?: OrderType | 'fillablebalance'):
37
+ | BaseFetchUrl<Kind>
38
+ | MinFetchUrl<Kind>
39
+ | OrderFillableBalanceFetchUrl<Kind>;
40
+ }
41
+
42
+ export function baseFetchUrlGetterFactory<Kind extends OrderKind>(
43
+ orderKind: Kind
44
+ ): BaseFetchUrlInputConstructor<Kind> {
45
+ return function constructBaseFetchUrlGetter({
46
+ chainId,
47
+ apiURL,
48
+ }: GetBaseFetchUrlInput): UrlByTypeFunction<Kind> {
49
+ function urlGetter(type: 'LIMIT'): BaseFetchUrl<Kind, 'LIMIT'>;
50
+ function urlGetter(type: 'P2P'): BaseFetchUrl<Kind, 'P2P'>;
51
+ function urlGetter(type: OrderType): BaseFetchUrl<Kind>;
52
+ function urlGetter(
53
+ type: 'fillablebalance'
54
+ ): OrderFillableBalanceFetchUrl<Kind>;
55
+ function urlGetter(): MinFetchUrl<Kind>;
56
+ function urlGetter(
57
+ type?: OrderType | 'fillablebalance'
58
+ ):
59
+ | BaseFetchUrl<Kind>
60
+ | MinFetchUrl<Kind>
61
+ | OrderFillableBalanceFetchUrl<Kind> {
62
+ if (!type) return `${apiURL}/${orderKind}/order` as const;
63
+
64
+ if (type === 'fillablebalance')
65
+ return `${apiURL}/${orderKind}/fillablebalance/${chainId}` as const;
66
+
67
+ const orderURLpart = type === 'LIMIT' ? 'orders' : 'p2p';
68
+ return `${apiURL}/${orderKind}/${orderURLpart}/${chainId}` as const;
69
+ }
70
+
71
+ return urlGetter;
72
+ };
73
+ }
74
+
75
+ // orders with taker = EOA address
76
+ // that can't be filled through AugustusSwapper,
77
+ // only through AugustusRFQ
78
+ export function isOrderFillableDirectlyOnRFQOnly(
79
+ order: Pick<LimitOrderFromApi, 'taker' | 'takerFromMeta'>
80
+ ): boolean {
81
+ // with 0x taker fillable by anyone
82
+ if (order.taker === ZERO_ADDRESS) return false;
83
+
84
+ // same intended EOA taker and msg.sender taker
85
+ return order.taker.toLowerCase() === order.takerFromMeta.toLowerCase();
86
+ }
@@ -0,0 +1,68 @@
1
+ type SplitSignatureResult = {
2
+ v: number;
3
+ r: string;
4
+ s: string;
5
+ compact: string;
6
+ };
7
+
8
+ export function splitSignature(signature: string): SplitSignatureResult {
9
+ // Remove "0x" prefix if present
10
+ if (signature.startsWith('0x')) {
11
+ signature = signature.slice(2);
12
+ }
13
+
14
+ // Convert the hex string to a byte array
15
+ const bytes = new Uint8Array(signature.length / 2);
16
+ for (let i = 0; i < signature.length; i += 2) {
17
+ bytes[i / 2] = parseInt(signature.slice(i, i + 2), 16);
18
+ }
19
+
20
+ // Validate the signature length (64 or 65 bytes)
21
+ if (bytes.length !== 64 && bytes.length !== 65) {
22
+ throw new Error('Invalid signature length: must be 64 or 65 bytes');
23
+ }
24
+
25
+ // Extract r and s components
26
+ const r = `0x${Array.from(bytes.slice(0, 32), (b) =>
27
+ b.toString(16).padStart(2, '0')
28
+ ).join('')}`;
29
+ let s: string;
30
+ let v;
31
+
32
+ // Handle 64-byte (EIP-2098 compact) and 65-byte signatures
33
+ if (bytes.length === 64) {
34
+ // Extract v from the highest bit of s and clear the bit in s
35
+ v = 27 + (bytes[32]! >> 7);
36
+ bytes[32]! &= 0x7f; // Clear the highest bit
37
+ s = `0x${Array.from(bytes.slice(32, 64))
38
+ .map((b) => b.toString(16).padStart(2, '0'))
39
+ .join('')}`;
40
+ } else {
41
+ s = `0x${Array.from(bytes.slice(32, 64))
42
+ .map((b) => b.toString(16).padStart(2, '0'))
43
+ .join('')}`;
44
+
45
+ // Extract v directly for 65-byte signature
46
+ v = bytes[64]!;
47
+
48
+ // Normalize v to canonical form (27 or 28)
49
+ if (v < 27) {
50
+ v += 27;
51
+ }
52
+ }
53
+
54
+ // Compute yParityAndS (_vs) for the compact signature
55
+ const sBytes = Array.from(bytes.slice(32, 64));
56
+ if (v === 28) {
57
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
58
+ sBytes[0]! |= 0x80; // Set the highest bit if v is 28
59
+ }
60
+ const yParityAndS = `0x${sBytes
61
+ .map((b) => b.toString(16).padStart(2, '0'))
62
+ .join('')}`;
63
+
64
+ // Construct the compact signature by concatenating r and yParityAndS
65
+ const compactSignature = r + yParityAndS.slice(2);
66
+
67
+ return { v, r, s, compact: compactSignature };
68
+ }
@@ -0,0 +1,13 @@
1
+ export type OrderTransaction = {
2
+ hash: string;
3
+ event_type: 'OrderFilled' | 'OrderCancelled';
4
+ };
5
+
6
+ export type OrderType = 'LIMIT' | 'P2P';
7
+
8
+ // display states such as EXPIRED and PARTIALLY_FILLLED derived on client side
9
+ // returned by API but can be calculated too, EXPIRED == order.expiry < Date.now()/1000
10
+ // PARTIALLY_FILLED == order.fillableBalance < order.makerAmount && order.fillableBalance !== '0'
11
+ export type OrderState = 'PENDING' | 'FULFILLED' | 'CANCELLED' | 'EXPIRED';
12
+
13
+ export type BeneficiaryType = 'EOA' | 'SmartContract';
@@ -0,0 +1,38 @@
1
+ import type {
2
+ ConstructProviderFetchInput,
3
+ RequestParameters,
4
+ } from '../../types';
5
+ import { ApproveToken, approveTokenMethodFactory } from '../../helpers/approve';
6
+ import { constructGetDeltaContract } from './getDeltaContract';
7
+
8
+ export type ApproveTokenForDeltaFunctions<T> = {
9
+ /** @description approving ParaswapDelta contract as spender for Token */
10
+ approveTokenForDelta: ApproveToken<T>;
11
+ };
12
+
13
+ // returns whatever `contractCaller` returns
14
+ // to allow for better versatility
15
+ export const constructApproveTokenForDelta = <T>(
16
+ options: ConstructProviderFetchInput<T, 'transactCall'>
17
+ ): ApproveTokenForDeltaFunctions<T> => {
18
+ // getDeltaContract is cached internally for the same instance of SDK
19
+ // so should persist across same apiUrl & network
20
+ const { getDeltaContract } = constructGetDeltaContract(options);
21
+
22
+ const getParaswapDeltaAddress = async (requestParams?: RequestParameters) => {
23
+ const deltaContract = await getDeltaContract(requestParams);
24
+ if (!deltaContract) {
25
+ throw new Error(`Delta is not available on chain ${options.chainId}`);
26
+ }
27
+ return deltaContract;
28
+ };
29
+
30
+ const approveTokenForDelta: ApproveToken<T> = approveTokenMethodFactory<T>(
31
+ options.contractCaller,
32
+ getParaswapDeltaAddress
33
+ );
34
+
35
+ return {
36
+ approveTokenForDelta,
37
+ };
38
+ };
@@ -0,0 +1,84 @@
1
+ import { assert } from 'ts-essentials';
2
+ import type { ConstructFetchInput, RequestParameters } from '../../types';
3
+ import { BridgePrice } from './getDeltaPrice';
4
+ import { constructGetMulticallHandlers } from './getMulticallHandlers';
5
+ import {
6
+ getDeltaBridgeAndDestToken,
7
+ GetDeltaBridgeAndDestTokenOutput,
8
+ } from './helpers/across';
9
+ import { BeneficiaryType } from '../common/orders/types';
10
+ export type { SignableDeltaOrderData } from './helpers/buildDeltaOrderData';
11
+
12
+ export type BuildCrosschainOrderBridgeParams = {
13
+ /** @description The address of the destination token on the destination chain */
14
+ destToken: string; // lowercase
15
+ /** @description Destination Chain ID for Crosschain Orders */
16
+ destChainId: number;
17
+ /** @description Whether the beneficiary is a contract. Needed to automatically fill in crosschain Bridge */
18
+ beneficiaryType: BeneficiaryType;
19
+
20
+ /** @description price response received from /delta/prices (getDeltaPrice method) */
21
+ deltaPrice: Pick<BridgePrice, 'bridgeFee' | 'destToken'>;
22
+ };
23
+
24
+ type BuildCrosschainOrderBridge = (
25
+ buildOrderParams: BuildCrosschainOrderBridgeParams,
26
+ requestParams?: RequestParameters
27
+ ) => Promise<GetDeltaBridgeAndDestTokenOutput>;
28
+
29
+ export { GetDeltaBridgeAndDestTokenOutput as CrosschainOrderBridgeAndChanges };
30
+
31
+ export type BuildCrosschainOrderBridgeFunctions = {
32
+ /** @description Build Orders to be posted to Delta API for execution */
33
+ buildCrosschainOrderBridge: BuildCrosschainOrderBridge;
34
+ };
35
+
36
+ export const constructBuildCrosschainOrderBridge = (
37
+ options: ConstructFetchInput
38
+ ): BuildCrosschainOrderBridgeFunctions => {
39
+ const { chainId } = options;
40
+
41
+ // cached internally for `multicall` contracts
42
+ const { getMulticallHandlers } = constructGetMulticallHandlers(options);
43
+
44
+ const buildCrosschainOrderBridge: BuildCrosschainOrderBridge = async (
45
+ { destToken, destChainId, beneficiaryType, deltaPrice },
46
+ requestParams
47
+ ) => {
48
+ assert(
49
+ chainId !== destChainId,
50
+ '`destChainId` must be different from `chainId` for crosschain Order.bridge'
51
+ );
52
+
53
+ const getMulticallHandler = async (chainId: number) => {
54
+ const multicallHandlersMap = await getMulticallHandlers(requestParams);
55
+ const multicallHandler = multicallHandlersMap[chainId];
56
+
57
+ assert(
58
+ multicallHandler,
59
+ `Multicall handler not found for chain ${chainId}`
60
+ );
61
+
62
+ return multicallHandler;
63
+ };
64
+
65
+ const { bridge, orderChanges } = await getDeltaBridgeAndDestToken({
66
+ destTokenDestChain: destToken,
67
+ destChainId: destChainId,
68
+ destTokenSrcChain: deltaPrice.destToken,
69
+ srcChainId: chainId,
70
+ bridgeFee: deltaPrice.bridgeFee,
71
+ beneficiaryType,
72
+ getMulticallHandler,
73
+ });
74
+
75
+ return {
76
+ bridge,
77
+ orderChanges,
78
+ };
79
+ };
80
+
81
+ return {
82
+ buildCrosschainOrderBridge,
83
+ };
84
+ };
@@ -0,0 +1,192 @@
1
+ import { assert } from 'ts-essentials';
2
+ import type { ConstructFetchInput, RequestParameters } from '../../types';
3
+ import { ZERO_ADDRESS } from '../common/orders/buildOrderData';
4
+ import { constructGetDeltaContract } from './getDeltaContract';
5
+ import { BridgePrice, DeltaPrice } from './getDeltaPrice';
6
+ import { constructGetPartnerFee } from './getPartnerFee';
7
+ import {
8
+ buildDeltaSignableOrderData,
9
+ type BuildDeltaOrderDataInput,
10
+ type SignableDeltaOrderData,
11
+ } from './helpers/buildDeltaOrderData';
12
+ import { Bridge, DeltaAuctionOrder } from './helpers/types';
13
+ import { constructBuildCrosschainOrderBridge } from './buildCrosschainOrderBridge';
14
+ import { BeneficiaryType } from '../common/orders/types';
15
+ export type { SignableDeltaOrderData } from './helpers/buildDeltaOrderData';
16
+
17
+ export type BuildDeltaOrderDataParams = {
18
+ /** @description The address of the order owner */
19
+ owner: string;
20
+ /** @description The address of the order beneficiary */
21
+ beneficiary?: string; // beneficiary==owner if no transferTo
22
+ /** @description The address of the src token */
23
+ srcToken: string; // lowercase
24
+ /** @description The address of the dest token. For Crosschain Order - destination token on the destination chain */
25
+ destToken: string; // lowercase
26
+ /** @description The amount of src token to swap */
27
+ srcAmount: string; // wei
28
+ /** @description The minimum amount of dest token to receive */
29
+ destAmount: string; // wei, deltaPrice.destAmount - slippage
30
+ /** @description The deadline for the order */
31
+ deadline?: number; // seconds
32
+ /** @description The nonce of the order */
33
+ nonce?: number | string; // can be random, can even be Date.now()
34
+ /** @description Optional permit signature for the src token https://developers.velora.xyz/api/velora-api/velora-delta-api/build-a-delta-order-to-sign#supported-permits-order#supported-permits */
35
+ permit?: string; //can be "0x"
36
+ /** @description Partner string. */
37
+ partner?: string;
38
+
39
+ /** @description The bridge input */
40
+ bridge?: Bridge;
41
+ /** @description Destination Chain ID for Crosschain Orders */
42
+ destChainId?: number;
43
+ /** @description Whether the beneficiary is a contract. Needed to automatically fill in crosschain Bridge */
44
+ beneficiaryType?: BeneficiaryType;
45
+
46
+ /** @description price response received from /delta/prices (getDeltaPrice method) */
47
+ deltaPrice: Pick<
48
+ DeltaPrice,
49
+ 'destAmount' | 'partner' | 'partnerFee' | 'destToken'
50
+ > &
51
+ Partial<Pick<BridgePrice, 'bridgeFee'>>;
52
+
53
+ /** @description partner fee in basis points (bps), 50bps=0.5% */
54
+ partnerFeeBps?: number;
55
+ /** @description partner address */
56
+ partnerAddress?: string;
57
+ /** @description take surplus */
58
+ partnerTakesSurplus?: boolean;
59
+ };
60
+
61
+ type BuildDeltaOrder = (
62
+ buildOrderParams: BuildDeltaOrderDataParams,
63
+ requestParams?: RequestParameters
64
+ ) => Promise<SignableDeltaOrderData>;
65
+
66
+ export type BuildDeltaOrderFunctions = {
67
+ /** @description Build Orders to be posted to Delta API for execution */
68
+ buildDeltaOrder: BuildDeltaOrder;
69
+ };
70
+
71
+ // for same-chain Orders, all 0 params
72
+ const DEFAULT_BRIDGE: Bridge = {
73
+ maxRelayerFee: '0',
74
+ destinationChainId: 0,
75
+ outputToken: ZERO_ADDRESS,
76
+ multiCallHandler: ZERO_ADDRESS,
77
+ };
78
+
79
+ export const constructBuildDeltaOrder = (
80
+ options: ConstructFetchInput
81
+ ): BuildDeltaOrderFunctions => {
82
+ const { chainId } = options;
83
+
84
+ // cached internally
85
+ const { getDeltaContract } = constructGetDeltaContract(options);
86
+ // cached internally for `partner`
87
+ const { getPartnerFee } = constructGetPartnerFee(options);
88
+
89
+ const { buildCrosschainOrderBridge } =
90
+ constructBuildCrosschainOrderBridge(options);
91
+
92
+ const buildDeltaOrder: BuildDeltaOrder = async (options, requestParams) => {
93
+ const ParaswapDelta = await getDeltaContract(requestParams);
94
+ if (!ParaswapDelta) {
95
+ throw new Error(`Delta is not available on chain ${chainId}`);
96
+ }
97
+
98
+ ////// Partner logic //////
99
+
100
+ // externally supplied partner fee data takes precedence
101
+ let partnerAddress = options.partnerAddress;
102
+ let partnerFeeBps =
103
+ options.partnerFeeBps ?? options.deltaPrice.partnerFee * 100;
104
+ let partnerTakesSurplus = options.partnerTakesSurplus;
105
+
106
+ // if fee given, takeSurplus is ignored
107
+ const feeOrTakeSurplusSupplied =
108
+ partnerFeeBps !== undefined || partnerTakesSurplus !== undefined;
109
+
110
+ if (partnerAddress === undefined || feeOrTakeSurplusSupplied) {
111
+ const partner = options.partner || options.deltaPrice.partner;
112
+ const partnerFeeResponse = await getPartnerFee(
113
+ { partner },
114
+ requestParams
115
+ );
116
+
117
+ partnerAddress = partnerAddress ?? partnerFeeResponse.partnerAddress;
118
+ // deltaPrice.partnerFee and partnerFeeResponse.partnerFee should be the same, but give priority to externally provided
119
+ partnerFeeBps = partnerFeeBps ?? partnerFeeResponse.partnerFee;
120
+ partnerTakesSurplus =
121
+ partnerTakesSurplus ?? partnerFeeResponse.takeSurplus;
122
+ }
123
+
124
+ ////// Bridge logic //////
125
+
126
+ // Bridge is necessary for Crosschain Delta Orders
127
+ let bridge = options.bridge;
128
+ let partialChangedOrder: Pick<DeltaAuctionOrder, 'destToken'> | null = null;
129
+
130
+ // give preference to user-provided bridge
131
+ if (!bridge) {
132
+ // no bridge passed in input
133
+
134
+ if (options.destChainId && chainId !== options.destChainId) {
135
+ // crosschain Delta Order
136
+ const deltaPrice = options.deltaPrice;
137
+ assert(
138
+ deltaPrice.bridgeFee,
139
+ '`bridgeFee` is required in `deltaPrice` for crosschain Delta Orders'
140
+ );
141
+
142
+ const { bridge: constructedBridge, orderChanges } =
143
+ await buildCrosschainOrderBridge(
144
+ {
145
+ destToken: options.destToken,
146
+ destChainId: options.destChainId,
147
+ beneficiaryType: options.beneficiaryType ?? 'EOA',
148
+ deltaPrice: {
149
+ bridgeFee: deltaPrice.bridgeFee,
150
+ destToken: deltaPrice.destToken,
151
+ },
152
+ },
153
+ requestParams
154
+ );
155
+
156
+ bridge = constructedBridge;
157
+ partialChangedOrder = orderChanges;
158
+ } else {
159
+ // 0-values bridge for same-chain Orders
160
+ bridge = DEFAULT_BRIDGE;
161
+ }
162
+ }
163
+
164
+ const input: BuildDeltaOrderDataInput = {
165
+ owner: options.owner,
166
+ beneficiary: options.beneficiary,
167
+ srcToken: options.srcToken,
168
+ // for some cases of WETH<->ETH crosschain swaps, the destToken is to WETH or ETH
169
+ destToken: partialChangedOrder?.destToken ?? options.destToken,
170
+ srcAmount: options.srcAmount,
171
+ destAmount: options.destAmount,
172
+ expectedDestAmount: options.deltaPrice.destAmount,
173
+ deadline: options.deadline,
174
+ nonce: options.nonce?.toString(10),
175
+ permit: options.permit,
176
+
177
+ chainId,
178
+ paraswapDeltaAddress: ParaswapDelta,
179
+ partnerAddress,
180
+ partnerTakesSurplus,
181
+ partnerFeeBps,
182
+
183
+ bridge,
184
+ };
185
+
186
+ return buildDeltaSignableOrderData(input);
187
+ };
188
+
189
+ return {
190
+ buildDeltaOrder,
191
+ };
192
+ };