@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,153 @@
1
+ import { MarkOptional } from 'ts-essentials';
2
+ import { Domain, ZERO_ADDRESS } from '../../common/orders/buildOrderData';
3
+ import { Bridge, DeltaAuctionOrder } from './types';
4
+ import { composeDeltaOrderPermit } from './composePermit';
5
+
6
+ // Order(address owner,address beneficiary,address srcToken,address destToken,uint256 srcAmount,uint256 destAmount,uint256 deadline,uint256 nonce,bytes permit, bridge Bridge)";
7
+ const SWAP_ORDER_EIP_712_TYPES = {
8
+ Order: [
9
+ { name: 'owner', type: 'address' },
10
+ { name: 'beneficiary', type: 'address' },
11
+ { name: 'srcToken', type: 'address' },
12
+ { name: 'destToken', type: 'address' },
13
+ { name: 'srcAmount', type: 'uint256' },
14
+ { name: 'destAmount', type: 'uint256' },
15
+ { name: 'expectedDestAmount', type: 'uint256' },
16
+ { name: 'deadline', type: 'uint256' },
17
+ { name: 'nonce', type: 'uint256' },
18
+ { name: 'partnerAndFee', type: 'uint256' },
19
+ { name: 'permit', type: 'bytes' },
20
+ { name: 'bridge', type: 'Bridge' },
21
+ ],
22
+ Bridge: [
23
+ { name: 'maxRelayerFee', type: 'uint256' },
24
+ { name: 'destinationChainId', type: 'uint256' },
25
+ { name: 'outputToken', type: 'address' },
26
+ { name: 'multiCallHandler', type: 'address' },
27
+ ],
28
+ };
29
+
30
+ export type SignableDeltaOrderData = {
31
+ types: {
32
+ Order: typeof SWAP_ORDER_EIP_712_TYPES.Order;
33
+ Bridge: typeof SWAP_ORDER_EIP_712_TYPES.Bridge;
34
+ };
35
+ domain: Domain;
36
+ data: DeltaAuctionOrder;
37
+ };
38
+
39
+ type SignDeltaOrderInput = {
40
+ orderInput: DeltaAuctionOrder;
41
+ paraswapDeltaAddress: string;
42
+ chainId: number;
43
+ };
44
+
45
+ function produceDeltaOrderTypedData({
46
+ orderInput,
47
+ chainId,
48
+ paraswapDeltaAddress,
49
+ }: SignDeltaOrderInput): SignableDeltaOrderData {
50
+ const typedData = {
51
+ types: {
52
+ Order: SWAP_ORDER_EIP_712_TYPES.Order,
53
+ Bridge: SWAP_ORDER_EIP_712_TYPES.Bridge,
54
+ },
55
+ domain: {
56
+ name: 'Portikus',
57
+ version: '2.0.0',
58
+ chainId,
59
+ verifyingContract: paraswapDeltaAddress,
60
+ },
61
+ data: orderInput,
62
+ };
63
+
64
+ return typedData;
65
+ }
66
+
67
+ export type DeltaOrderDataInput = MarkOptional<
68
+ Omit<DeltaAuctionOrder, 'partnerAndFee'>,
69
+ 'beneficiary' | 'deadline' | 'nonce' | 'permit'
70
+ >;
71
+
72
+ export type BuildDeltaOrderDataInput = DeltaOrderDataInput & {
73
+ partnerAddress: string;
74
+ paraswapDeltaAddress: string;
75
+ partnerFeeBps: number;
76
+ partnerTakesSurplus?: boolean;
77
+ chainId: number;
78
+ bridge: Bridge;
79
+ };
80
+
81
+ // default deadline = 1 hour from now (may be changed later)
82
+ export const DELTA_DEFAULT_EXPIRY = 60 * 60; // seconds
83
+
84
+ export function buildDeltaSignableOrderData({
85
+ owner,
86
+ beneficiary = owner,
87
+
88
+ srcToken,
89
+ destToken,
90
+ srcAmount,
91
+ destAmount,
92
+ expectedDestAmount,
93
+
94
+ deadline = Math.floor(Date.now() / 1000 + DELTA_DEFAULT_EXPIRY),
95
+ nonce = Date.now().toString(10), // random enough to not cause collisions
96
+
97
+ permit = '0x',
98
+
99
+ partnerAddress,
100
+ partnerFeeBps,
101
+ partnerTakesSurplus = false,
102
+
103
+ chainId,
104
+ paraswapDeltaAddress,
105
+ bridge,
106
+ }: BuildDeltaOrderDataInput): SignableDeltaOrderData {
107
+ const orderInput: DeltaAuctionOrder = {
108
+ owner,
109
+ beneficiary,
110
+ srcToken,
111
+ destToken,
112
+ srcAmount,
113
+ destAmount,
114
+ expectedDestAmount,
115
+ deadline,
116
+ nonce,
117
+ permit: composeDeltaOrderPermit({ permit, nonce }),
118
+ partnerAndFee: producePartnerAndFee({
119
+ partnerFeeBps,
120
+ partnerAddress,
121
+ partnerTakesSurplus,
122
+ }),
123
+ bridge,
124
+ };
125
+
126
+ return produceDeltaOrderTypedData({
127
+ orderInput,
128
+ chainId,
129
+ paraswapDeltaAddress,
130
+ });
131
+ }
132
+
133
+ type ProducePartnerAndFeeInput = {
134
+ partnerFeeBps: number;
135
+ partnerAddress: string;
136
+ partnerTakesSurplus: boolean;
137
+ };
138
+
139
+ // fee and address are encoded together
140
+ function producePartnerAndFee({
141
+ partnerFeeBps,
142
+ partnerAddress,
143
+ partnerTakesSurplus,
144
+ }: ProducePartnerAndFeeInput): string {
145
+ if (partnerAddress === ZERO_ADDRESS) return '0';
146
+
147
+ const partnerAndFee =
148
+ (BigInt(partnerAddress) << BigInt(96)) |
149
+ BigInt(partnerFeeBps.toFixed(0)) |
150
+ (BigInt(partnerTakesSurplus) << BigInt(8));
151
+
152
+ return partnerAndFee.toString(10);
153
+ }
@@ -0,0 +1,76 @@
1
+ import { DeltaAuctionOrder } from './types';
2
+
3
+ type DeltaOrderPermitInput = Pick<DeltaAuctionOrder, 'permit' | 'nonce'>;
4
+
5
+ export function composeDeltaOrderPermit({
6
+ permit,
7
+ nonce,
8
+ }: DeltaOrderPermitInput): string {
9
+ // Can be empty Permit if allowance is available for srcToken
10
+ if (permit === '0x' || permit === '0x01') {
11
+ // 0x01 is a special permit value that signifies existing Permit2 allowance.
12
+ return permit;
13
+ }
14
+
15
+ // In the Contract, specifically for Permit2 transferFrom, we have signature consisting of
16
+ // bytes32(permit2nonce) + bytes64(compacted signature) = bytes96 Permit2 Transfer format
17
+
18
+ if (permit.length >= 194) {
19
+ // "0x".length + 96bytes*2 = 194, means permit already concatenated with nonce
20
+ // or it's a different type of Permit all together
21
+ return permit;
22
+ }
23
+
24
+ return encodePermit2Transfer(BigInt(nonce), permit);
25
+ }
26
+
27
+ function uintTo32ByteArrayBuffer(nonce: number | bigint) {
28
+ // Create a 32-byte ArrayBuffer
29
+ const buffer = new Uint8Array(32);
30
+
31
+ // Convert nonce to hex string and pad it to 64 hex characters (32 bytes)
32
+ let nonceHex = nonce.toString(16).padStart(64, '0');
33
+
34
+ // Convert the hex string to bytes and fill the ArrayBuffer
35
+ for (let i = 0; i < 32; i++) {
36
+ buffer[i] = parseInt(nonceHex.slice(i * 2, i * 2 + 2), 16);
37
+ }
38
+
39
+ return buffer;
40
+ }
41
+
42
+ function hexToByteArray(hexString: string) {
43
+ // Remove "0x" prefix if present
44
+ hexString = hexString.replace(/^0x/, '');
45
+
46
+ // Convert hex string to Uint8Array
47
+ const byteArray = new Uint8Array(hexString.length / 2);
48
+ for (let i = 0; i < hexString.length; i += 2) {
49
+ byteArray[i / 2] = parseInt(hexString.slice(i, i + 2), 16);
50
+ }
51
+ return byteArray;
52
+ }
53
+
54
+ function encodePermit2Transfer(nonce: number | bigint, signature: string) {
55
+ // Get 32-byte ArrayBuffer for nonce
56
+ const nonceBuffer = uintTo32ByteArrayBuffer(nonce);
57
+
58
+ // Convert signature hex string to Uint8Array (64 bytes)
59
+ const signatureBuffer = hexToByteArray(signature);
60
+ if (signatureBuffer.length !== 64) {
61
+ throw new Error('Signature must be exactly 64 bytes');
62
+ }
63
+
64
+ // Concatenate nonceBuffer and signatureBuffer
65
+ const packedBuffer = new Uint8Array(32 + 64);
66
+ packedBuffer.set(nonceBuffer, 0); // Copy nonceBuffer at the start
67
+ packedBuffer.set(signatureBuffer, 32); // Copy signatureBuffer after nonce
68
+
69
+ // Convert to hex string for output
70
+ return (
71
+ '0x' +
72
+ Array.from(packedBuffer)
73
+ .map((b) => b.toString(16).padStart(2, '0'))
74
+ .join('')
75
+ );
76
+ }
@@ -0,0 +1,32 @@
1
+ import type { SignableDeltaOrderData } from './buildDeltaOrderData';
2
+
3
+ export function sanitizeDeltaOrderData({
4
+ owner,
5
+ beneficiary,
6
+ srcToken,
7
+ destToken,
8
+ srcAmount,
9
+ destAmount,
10
+ expectedDestAmount,
11
+ deadline,
12
+ nonce,
13
+ permit,
14
+ partnerAndFee,
15
+ bridge,
16
+ }: SignableDeltaOrderData['data'] &
17
+ Record<string, any>): SignableDeltaOrderData['data'] {
18
+ return {
19
+ owner,
20
+ beneficiary,
21
+ srcToken,
22
+ destToken,
23
+ srcAmount,
24
+ destAmount,
25
+ expectedDestAmount,
26
+ deadline,
27
+ nonce,
28
+ permit,
29
+ partnerAndFee,
30
+ bridge,
31
+ };
32
+ }
@@ -0,0 +1,110 @@
1
+ export type DeltaAuctionOrder = {
2
+ /** @description The address of the order owner */
3
+ owner: string;
4
+ /** @description The address of the order beneficiary */
5
+ beneficiary: string; // beneficiary==owner if no transferTo
6
+ /** @description The address of the src token */
7
+ srcToken: string; // lowercase
8
+ /** @description The address of the dest token */
9
+ destToken: string; // lowercase
10
+ /** @description The amount of src token to swap */
11
+ srcAmount: string; // wei
12
+ /** @description The minimum amount of dest token to receive */
13
+ destAmount: string; // wei
14
+ /** @description The expected amount of dest token to receive */
15
+ expectedDestAmount: string; // wei
16
+ /** @description The deadline for the order */
17
+ deadline: number; // seconds
18
+ /** @description The nonce of the order */
19
+ nonce: string; // can be random, can even be Date.now()
20
+ /** @description Optional permit signature for the src token */
21
+ permit: string; //can be "0x"
22
+ /** @description Encoded partner address, fee bps, and flags for the order. partnerAndFee = (partner << 96) | (partnerTakesSurplus << 8) | fee in bps (max fee is 2%) */
23
+ partnerAndFee: string;
24
+ /** @description The bridge input */
25
+ bridge: Bridge;
26
+ };
27
+
28
+ export type Bridge = {
29
+ maxRelayerFee: string;
30
+ destinationChainId: number;
31
+ /** @description The address of the output token. Same as Order.destToken but on destination chain, so can still be a different address */
32
+ outputToken: string;
33
+ /** @description The address of the multiCallHandler on destination chain, used to unwrap WETH and send to Smart Contract receiver. Must be non-zero when receiver address is a SmartContract wallet and need to send Native ETH */
34
+ multiCallHandler: string;
35
+ };
36
+
37
+ type DeltaAuctionStatus =
38
+ | 'NOT_STARTED'
39
+ | 'POSTED'
40
+ | 'RUNNING'
41
+ | 'EXECUTING'
42
+ | 'EXECUTED'
43
+ | 'FAILED'
44
+ | 'EXPIRED';
45
+
46
+ type DeltaAuctionTransaction = {
47
+ id: string;
48
+ hash: string;
49
+ orderId: string;
50
+ bidId: string | null;
51
+ blockNumber: number;
52
+ blockHash: string;
53
+ gasUsed: bigint;
54
+ gasPrice: bigint;
55
+ blobGasUsed: bigint;
56
+ blobGasPrice: bigint;
57
+ index: number;
58
+ status: number;
59
+ from: string;
60
+ to: string;
61
+ receivedAmount: string;
62
+ receivedAmountUSD: number;
63
+ spentAmount: string;
64
+ spentAmountUSD: number;
65
+ filledPercent: number; // in base points
66
+ protocolFee: string;
67
+ partnerFee: string;
68
+ agent: string;
69
+ auctionId: string;
70
+ };
71
+
72
+ export type DeltaAuction = {
73
+ id: string;
74
+ deltaVersion: string; // 1.0 or 2.0 currently
75
+ user: string;
76
+ signature: string;
77
+ status: DeltaAuctionStatus;
78
+ order: DeltaAuctionOrder;
79
+ orderHash: string | null; // not available on old Orders only
80
+ transactions: DeltaAuctionTransaction[];
81
+ chainId: number;
82
+ partner: string;
83
+ referrerAddress: string | null;
84
+ expiresAt: string;
85
+ createdAt: string;
86
+ updatedAt: string;
87
+ partiallyFillable: boolean;
88
+
89
+ excludeAgents: string[] | null;
90
+ includeAgents: string[] | null;
91
+
92
+ bridgeMetadata: BridgeMetadata | null;
93
+ bridgeStatus: BridgeStatus | null;
94
+ };
95
+
96
+ export type BridgeMetadata = {
97
+ /** @description The amount that user should expect to get */
98
+ outputAmount: string;
99
+ /** @description The cross-chain deadline. If deadline passes, the bridgeStatus would be expired */
100
+ fillDeadline: number;
101
+ /** @description The deposit id */
102
+ depositId: number;
103
+ /** @description The transaction hash on the destination chain that fulfilled the order. When bridgeStatus='filled' */
104
+ fillTx?: string;
105
+ /** @description The transaction hash on the source chain that refunded the deposit. When bridgeStatus='refunded' */
106
+ depositRefundTxHash?: string;
107
+ };
108
+
109
+ // refunded is basically failed
110
+ export type BridgeStatus = 'pending' | 'filled' | 'expired' | 'refunded';
@@ -0,0 +1,146 @@
1
+ import type { ConstructProviderFetchInput } from '../../types';
2
+ import type { DeltaAuction } from './helpers/types';
3
+ import {
4
+ BuildDeltaOrderDataParams,
5
+ BuildDeltaOrderFunctions,
6
+ constructBuildDeltaOrder,
7
+ } from './buildDeltaOrder';
8
+ import {
9
+ constructPostDeltaOrder,
10
+ PostDeltaOrderFunctions,
11
+ } from './postDeltaOrder';
12
+ import {
13
+ constructSignDeltaOrder,
14
+ SignDeltaOrderFunctions,
15
+ } from './signDeltaOrder';
16
+ import {
17
+ GetDeltaContractFunctions,
18
+ constructGetDeltaContract,
19
+ } from './getDeltaContract';
20
+ import {
21
+ constructGetDeltaPrice,
22
+ GetDeltaPriceFunctions,
23
+ } from './getDeltaPrice';
24
+ import {
25
+ constructGetDeltaOrders,
26
+ GetDeltaOrdersFunctions,
27
+ } from './getDeltaOrders';
28
+ import {
29
+ constructGetPartnerFee,
30
+ GetPartnerFeeFunctions,
31
+ } from './getPartnerFee';
32
+ import {
33
+ ApproveTokenForDeltaFunctions,
34
+ constructApproveTokenForDelta,
35
+ } from './approveForDelta';
36
+ import {
37
+ constructGetBridgeInfo,
38
+ GetBridgeInfoFunctions,
39
+ } from './getBridgeInfo';
40
+ import {
41
+ constructGetMulticallHandlers,
42
+ GetMulticallHandlersFunctions,
43
+ } from './getMulticallHandlers';
44
+ import {
45
+ constructIsTokenSupportedInDelta,
46
+ IsTokenSupportedInDeltaFunctions,
47
+ } from './isTokenSupportedInDelta';
48
+ import {
49
+ BuildCrosschainOrderBridgeFunctions,
50
+ constructBuildCrosschainOrderBridge,
51
+ } from './buildCrosschainOrderBridge';
52
+
53
+ export type SubmitDeltaOrderParams = BuildDeltaOrderDataParams & {
54
+ /** @description designates the Order as being able to be partially filled, as opposed to fill-or-kill */
55
+ partiallyFillable?: boolean;
56
+ };
57
+
58
+ type SubmitDeltaOrder = (
59
+ orderParams: SubmitDeltaOrderParams
60
+ ) => Promise<DeltaAuction>;
61
+
62
+ export type SubmitDeltaOrderFuncs = {
63
+ submitDeltaOrder: SubmitDeltaOrder;
64
+ };
65
+
66
+ export const constructSubmitDeltaOrder = (
67
+ options: ConstructProviderFetchInput<any, 'signTypedDataCall'>
68
+ ): SubmitDeltaOrderFuncs => {
69
+ const { buildDeltaOrder } = constructBuildDeltaOrder(options);
70
+ const { signDeltaOrder } = constructSignDeltaOrder(options);
71
+ const { postDeltaOrder } = constructPostDeltaOrder(options);
72
+
73
+ const submitDeltaOrder: SubmitDeltaOrder = async (orderParams) => {
74
+ const orderData = await buildDeltaOrder(orderParams);
75
+ const signature = await signDeltaOrder(orderData);
76
+
77
+ const response = await postDeltaOrder({
78
+ signature,
79
+ partner: orderParams.partner,
80
+ order: orderData.data,
81
+ partiallyFillable: orderParams.partiallyFillable,
82
+ });
83
+
84
+ return response;
85
+ };
86
+
87
+ return { submitDeltaOrder };
88
+ };
89
+
90
+ export type DeltaOrderHandlers<T> = SubmitDeltaOrderFuncs &
91
+ ApproveTokenForDeltaFunctions<T> &
92
+ BuildDeltaOrderFunctions &
93
+ BuildCrosschainOrderBridgeFunctions &
94
+ GetDeltaOrdersFunctions &
95
+ GetDeltaPriceFunctions &
96
+ GetDeltaContractFunctions &
97
+ GetPartnerFeeFunctions &
98
+ GetMulticallHandlersFunctions &
99
+ GetBridgeInfoFunctions &
100
+ IsTokenSupportedInDeltaFunctions &
101
+ PostDeltaOrderFunctions &
102
+ SignDeltaOrderFunctions;
103
+
104
+ /** @description construct SDK with every Delta Order-related method, fetching from API and Order signing */
105
+ export const constructAllDeltaOrdersHandlers = <TxResponse>(
106
+ options: ConstructProviderFetchInput<
107
+ TxResponse,
108
+ 'signTypedDataCall' | 'transactCall'
109
+ >
110
+ ): DeltaOrderHandlers<TxResponse> => {
111
+ const deltaOrdersGetters = constructGetDeltaOrders(options);
112
+ const deltaOrdersContractGetter = constructGetDeltaContract(options);
113
+ const deltaPrice = constructGetDeltaPrice(options);
114
+
115
+ const partnerFee = constructGetPartnerFee(options);
116
+ const bridgeInfo = constructGetBridgeInfo(options);
117
+ const isTokenSupportedInDelta = constructIsTokenSupportedInDelta(options);
118
+ const multicallHandlers = constructGetMulticallHandlers(options);
119
+
120
+ const approveTokenForDelta = constructApproveTokenForDelta(options);
121
+
122
+ const deltaOrdersSubmit = constructSubmitDeltaOrder(options);
123
+
124
+ const buildCrosschainOrderBridge =
125
+ constructBuildCrosschainOrderBridge(options);
126
+
127
+ const deltaOrdersBuild = constructBuildDeltaOrder(options);
128
+ const deltaOrdersSign = constructSignDeltaOrder(options);
129
+ const deltaOrdersPost = constructPostDeltaOrder(options);
130
+
131
+ return {
132
+ ...deltaOrdersGetters,
133
+ ...deltaOrdersContractGetter,
134
+ ...deltaPrice,
135
+ ...partnerFee,
136
+ ...bridgeInfo,
137
+ ...isTokenSupportedInDelta,
138
+ ...multicallHandlers,
139
+ ...approveTokenForDelta,
140
+ ...deltaOrdersSubmit,
141
+ ...deltaOrdersBuild,
142
+ ...deltaOrdersSign,
143
+ ...deltaOrdersPost,
144
+ ...buildCrosschainOrderBridge,
145
+ };
146
+ };
@@ -0,0 +1,54 @@
1
+ import { API_URL } from '../../constants';
2
+ import { constructSearchString } from '../../helpers/misc';
3
+ import type {
4
+ Address,
5
+ ConstructFetchInput,
6
+ RequestParameters,
7
+ } from '../../types';
8
+
9
+ type TokenSupportedInDeltaResponse = { supported: boolean };
10
+ type IsTokenSupportedInDeltaQueryOptions = {
11
+ token: Address;
12
+ chainId: number;
13
+ };
14
+
15
+ type IsTokenSupportedInDelta = (
16
+ token: Address,
17
+ requestParams?: RequestParameters
18
+ ) => Promise<boolean>;
19
+
20
+ export type IsTokenSupportedInDeltaFunctions = {
21
+ isTokenSupportedInDelta: IsTokenSupportedInDelta;
22
+ };
23
+
24
+ export const constructIsTokenSupportedInDelta = ({
25
+ apiURL = API_URL,
26
+ chainId,
27
+ fetcher,
28
+ }: ConstructFetchInput): IsTokenSupportedInDeltaFunctions => {
29
+ const bridgeInfoUrl = `${apiURL}/delta/prices/is-token-supported` as const;
30
+
31
+ const isTokenSupportedInDelta: IsTokenSupportedInDelta = async (
32
+ token,
33
+ requestParams
34
+ ) => {
35
+ const search = constructSearchString<IsTokenSupportedInDeltaQueryOptions>({
36
+ token,
37
+ chainId,
38
+ });
39
+
40
+ const fetchURL = `${bridgeInfoUrl}/${search}` as const;
41
+
42
+ const data = await fetcher<TokenSupportedInDeltaResponse>({
43
+ url: fetchURL,
44
+ method: 'GET',
45
+ requestParams,
46
+ });
47
+
48
+ return data.supported;
49
+ };
50
+
51
+ return {
52
+ isTokenSupportedInDelta,
53
+ };
54
+ };
@@ -0,0 +1,50 @@
1
+ import { API_URL } from '../../constants';
2
+ import type { ConstructFetchInput, RequestParameters } from '../../types';
3
+ import { DeltaAuctionOrder, DeltaAuction } from './helpers/types';
4
+
5
+ export type DeltaOrderToPost = {
6
+ /** @description Partner string */
7
+ partner?: string;
8
+ /** @description Referrer address */
9
+ referrerAddress?: string;
10
+ order: DeltaAuctionOrder;
11
+ /** @description Signature of the order from order.owner address. EOA signatures must be submitted in ERC-2098 Compact Representation. */
12
+ signature: string;
13
+ chainId: number;
14
+ /** @description designates the Order as being able to partially filled, as opposed to fill-or-kill */
15
+ partiallyFillable?: boolean;
16
+ };
17
+
18
+ export type PostDeltaOrderParams = Omit<DeltaOrderToPost, 'chainId'>;
19
+
20
+ type DeltaOrderApiResponse = DeltaAuction;
21
+
22
+ type PostDeltaOrder = (
23
+ postData: PostDeltaOrderParams,
24
+ requestParams?: RequestParameters
25
+ ) => Promise<DeltaOrderApiResponse>;
26
+
27
+ export type PostDeltaOrderFunctions = {
28
+ postDeltaOrder: PostDeltaOrder;
29
+ };
30
+
31
+ export const constructPostDeltaOrder = ({
32
+ apiURL = API_URL,
33
+ chainId,
34
+ fetcher,
35
+ }: ConstructFetchInput): PostDeltaOrderFunctions => {
36
+ const postOrderUrl = `${apiURL}/delta/orders` as const;
37
+
38
+ const postDeltaOrder: PostDeltaOrder = (postData, requestParams) => {
39
+ const deltaOrderToPost: DeltaOrderToPost = { ...postData, chainId };
40
+
41
+ return fetcher<DeltaOrderApiResponse>({
42
+ url: postOrderUrl,
43
+ method: 'POST',
44
+ data: deltaOrderToPost,
45
+ requestParams,
46
+ });
47
+ };
48
+
49
+ return { postDeltaOrder };
50
+ };
@@ -0,0 +1,41 @@
1
+ import type { ConstructProviderFetchInput } from '../../types';
2
+ import { SignableDeltaOrderData } from './helpers/buildDeltaOrderData';
3
+ import { sanitizeDeltaOrderData } from './helpers/misc';
4
+
5
+ export type SignLimitOrderFunctions = {
6
+ signLimitOrder: (
7
+ signableOrderData: SignableDeltaOrderData
8
+ ) => Promise<string>;
9
+ };
10
+
11
+ type SignDeltaOrder = (
12
+ signableOrderData: SignableDeltaOrderData
13
+ ) => Promise<string>;
14
+
15
+ export type SignDeltaOrderFunctions = {
16
+ signDeltaOrder: SignDeltaOrder;
17
+ };
18
+
19
+ // returns whatever `contractCaller` returns
20
+ // to allow for better versatility
21
+ export const constructSignDeltaOrder = (
22
+ options: Pick<
23
+ ConstructProviderFetchInput<any, 'signTypedDataCall'>,
24
+ 'contractCaller'
25
+ >
26
+ ): SignDeltaOrderFunctions => {
27
+ const signDeltaOrder: SignDeltaOrder = async (typedData) => {
28
+ // types allow to pass OrderData & extra_stuff, but tx will break like that
29
+ const typedDataOnly: SignableDeltaOrderData = {
30
+ ...typedData,
31
+ data: sanitizeDeltaOrderData(typedData.data),
32
+ };
33
+ const signature = await options.contractCaller.signTypedDataCall(
34
+ typedDataOnly
35
+ );
36
+
37
+ return signature;
38
+ };
39
+
40
+ return { signDeltaOrder };
41
+ };
@@ -0,0 +1,36 @@
1
+ import type { ConstructProviderFetchInput } from '../../types';
2
+ import { ApproveToken, approveTokenMethodFactory } from '../../helpers/approve';
3
+ import { constructApproveToken } from '../swap/approve';
4
+ import { constructGetSpender } from '../swap/spender';
5
+
6
+ export type ApproveTokenForLimitOrderFunctions<T> = {
7
+ /** @description approving AugustusRFQ as spender for makerAsset */
8
+ approveMakerTokenForLimitOrder: ApproveToken<T>;
9
+ /** @description approving AugustusRFQ as spender for takerAsset to call SDK.fillOrderDirectly */
10
+ approveTakerTokenForFillingP2POrderDirectly: ApproveToken<T>;
11
+ /** @description approving AugustusSwapper as spender for takerAsset for Limit Orders that will be executed through it */
12
+ approveTakerTokenForLimitOrder: ApproveToken<T>;
13
+ };
14
+
15
+ // returns whatever `contractCaller` returns
16
+ // to allow for better versatility
17
+ export const constructApproveTokenForLimitOrder = <T>(
18
+ options: ConstructProviderFetchInput<T, 'transactCall'>
19
+ ): ApproveTokenForLimitOrderFunctions<T> => {
20
+ // getAugustusRFQ is cached internally for the same instance of SDK
21
+ // so should persist across same apiUrl & network
22
+ const { getAugustusRFQ } = constructGetSpender(options);
23
+
24
+ const approveMakerTokenForLimitOrder: ApproveToken<T> =
25
+ approveTokenMethodFactory<T>(options.contractCaller, getAugustusRFQ);
26
+
27
+ // approving TokenTransaferProxy as for the swap
28
+ const { approveToken: approveTakerTokenForLimitOrder } =
29
+ constructApproveToken(options);
30
+
31
+ return {
32
+ approveMakerTokenForLimitOrder,
33
+ approveTakerTokenForFillingP2POrderDirectly: approveMakerTokenForLimitOrder,
34
+ approveTakerTokenForLimitOrder,
35
+ };
36
+ };