@symmio/trading-core 2.0.0 → 3.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 (325) hide show
  1. package/README.md +2 -2
  2. package/dist/balance-history/get-balance-history/types.d.ts +1 -1
  3. package/dist/balance-history/get-balance-history/types.js.map +1 -1
  4. package/dist/core/chains/actions/get-chain-config.d.ts +1 -1
  5. package/dist/core/chains/actions/get-chain-config.js.map +1 -1
  6. package/dist/core/chains/actions/get-default-solver.d.ts +1 -1
  7. package/dist/core/chains/actions/get-default-solver.js.map +1 -1
  8. package/dist/core/chains/actions/list-supported-chains.js.map +1 -1
  9. package/dist/core/chains/registry.d.ts.map +1 -1
  10. package/dist/core/chains/registry.js +52 -50
  11. package/dist/core/chains/registry.js.map +1 -1
  12. package/dist/core/chains/supported-chains.d.ts +3 -3
  13. package/dist/core/chains/supported-chains.d.ts.map +1 -1
  14. package/dist/core/chains/supported-chains.js +1 -1
  15. package/dist/core/chains/supported-chains.js.map +1 -1
  16. package/dist/core/chains/types.d.ts +18 -4
  17. package/dist/core/chains/types.d.ts.map +1 -1
  18. package/dist/core/chains/types.js.map +1 -1
  19. package/dist/core/config/create-config.d.ts +7 -7
  20. package/dist/core/config/create-config.d.ts.map +1 -1
  21. package/dist/core/config/create-config.js +39 -38
  22. package/dist/core/config/create-config.js.map +1 -1
  23. package/dist/core/config/merge-chain-config.js +1 -0
  24. package/dist/core/config/merge-chain-config.js.map +1 -1
  25. package/dist/index.d.ts +18 -9
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +318 -316
  28. package/dist/margin/calculate-margin-risk.d.ts +1 -1
  29. package/dist/margin/calculate-margin-risk.js.map +1 -1
  30. package/dist/notifications/types.d.ts +1 -1
  31. package/dist/notifications/types.d.ts.map +1 -1
  32. package/dist/quotes/close-planning/min-remaining-quantity.d.ts +1 -1
  33. package/dist/quotes/close-planning/min-remaining-quantity.js.map +1 -1
  34. package/dist/quotes/get-quote-history/query-document.d.ts +1 -1
  35. package/dist/quotes/get-quote-history/query-document.js.map +1 -1
  36. package/dist/quotes/get-quote-history/types.d.ts +2 -2
  37. package/dist/quotes/get-quote-history/types.js.map +1 -1
  38. package/dist/quotes/grouping/aggregate-metrics.d.ts +1 -1
  39. package/dist/quotes/grouping/aggregate-metrics.js.map +1 -1
  40. package/dist/quotes/open-price.d.ts +10 -10
  41. package/dist/quotes/open-price.d.ts.map +1 -1
  42. package/dist/quotes/open-price.js +1 -1
  43. package/dist/quotes/open-price.js.map +1 -1
  44. package/dist/quotes/upnl/calculate-quote-leverage.d.ts +8 -6
  45. package/dist/quotes/upnl/calculate-quote-leverage.d.ts.map +1 -1
  46. package/dist/quotes/upnl/calculate-quote-leverage.js.map +1 -1
  47. package/dist/shared/utils/query.d.ts +2 -2
  48. package/dist/shared/utils/query.js.map +1 -1
  49. package/dist/solvers/force-close/force-close-position.js +1 -1
  50. package/dist/solvers/force-close/force-close-position.js.map +1 -1
  51. package/dist/solvers/force-close/get-force-close-params.js +1 -1
  52. package/dist/solvers/force-close/get-force-close-params.js.map +1 -1
  53. package/dist/solvers/instant-close/shared/calldata.js +1 -1
  54. package/dist/solvers/instant-close/shared/calldata.js.map +1 -1
  55. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.d.ts +129 -0
  56. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.d.ts.map +1 -0
  57. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.js +115 -0
  58. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.js.map +1 -0
  59. package/dist/solvers/instant-open/get-instant-open-fees/index.d.ts +3 -0
  60. package/dist/solvers/instant-open/get-instant-open-fees/index.d.ts.map +1 -0
  61. package/dist/solvers/instant-open/get-instant-open-fees/query.d.ts +34 -0
  62. package/dist/solvers/instant-open/get-instant-open-fees/query.d.ts.map +1 -0
  63. package/dist/solvers/instant-open/get-instant-open-fees/query.js +33 -0
  64. package/dist/solvers/instant-open/get-instant-open-fees/query.js.map +1 -0
  65. package/dist/solvers/instant-open/index.d.ts +1 -0
  66. package/dist/solvers/instant-open/index.d.ts.map +1 -1
  67. package/dist/solvers/instant-open/instant-open/adapters/enigma-instant-open.d.ts.map +1 -1
  68. package/dist/solvers/instant-open/instant-open/adapters/enigma-instant-open.js +58 -55
  69. package/dist/solvers/instant-open/instant-open/adapters/enigma-instant-open.js.map +1 -1
  70. package/dist/solvers/instant-open/instant-open/types.d.ts +14 -4
  71. package/dist/solvers/instant-open/instant-open/types.d.ts.map +1 -1
  72. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.d.ts +45 -10
  73. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.d.ts.map +1 -1
  74. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.js +157 -72
  75. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.js.map +1 -1
  76. package/dist/solvers/instant-open/shared/calldata.d.ts +35 -7
  77. package/dist/solvers/instant-open/shared/calldata.d.ts.map +1 -1
  78. package/dist/solvers/instant-open/shared/calldata.js +56 -14
  79. package/dist/solvers/instant-open/shared/calldata.js.map +1 -1
  80. package/dist/solvers/instant-open/shared/index.d.ts +1 -0
  81. package/dist/solvers/instant-open/shared/index.d.ts.map +1 -1
  82. package/dist/solvers/instant-open/shared/open-estimate-guard.d.ts +89 -0
  83. package/dist/solvers/instant-open/shared/open-estimate-guard.d.ts.map +1 -0
  84. package/dist/solvers/instant-open/shared/open-estimate-guard.js +52 -0
  85. package/dist/solvers/instant-open/shared/open-estimate-guard.js.map +1 -0
  86. package/dist/solvers/instant-open/shared/selectors.d.ts +46 -7
  87. package/dist/solvers/instant-open/shared/selectors.d.ts.map +1 -1
  88. package/dist/solvers/instant-open/shared/selectors.js +12 -5
  89. package/dist/solvers/instant-open/shared/selectors.js.map +1 -1
  90. package/dist/solvers/instant-open/shared/trade-math.d.ts +112 -8
  91. package/dist/solvers/instant-open/shared/trade-math.d.ts.map +1 -1
  92. package/dist/solvers/instant-open/shared/trade-math.js +59 -25
  93. package/dist/solvers/instant-open/shared/trade-math.js.map +1 -1
  94. package/dist/solvers/instant-open/shared/types.d.ts +32 -0
  95. package/dist/solvers/instant-open/shared/types.d.ts.map +1 -1
  96. package/dist/solvers/instant-open/shared/types.js.map +1 -1
  97. package/dist/solvers/markets/adapters/enigma-markets.d.ts.map +1 -1
  98. package/dist/solvers/markets/adapters/enigma-markets.js +38 -32
  99. package/dist/solvers/markets/adapters/enigma-markets.js.map +1 -1
  100. package/dist/solvers/markets/types.d.ts +15 -0
  101. package/dist/solvers/markets/types.d.ts.map +1 -1
  102. package/dist/solvers/revenue/get-solver-revenue.d.ts +11 -11
  103. package/dist/solvers/revenue/get-solver-revenue.d.ts.map +1 -1
  104. package/dist/solvers/revenue/get-solver-revenue.js +12 -12
  105. package/dist/solvers/revenue/get-solver-revenue.js.map +1 -1
  106. package/dist/solvers/revenue/query.d.ts +2 -2
  107. package/dist/solvers/revenue/query.d.ts.map +1 -1
  108. package/dist/solvers/revenue/query.js +1 -1
  109. package/dist/solvers/revenue/query.js.map +1 -1
  110. package/dist/solvers/revenue/to-solver-revenue.d.ts +3 -2
  111. package/dist/solvers/revenue/to-solver-revenue.d.ts.map +1 -1
  112. package/dist/solvers/revenue/to-solver-revenue.js.map +1 -1
  113. package/dist/solvers/shared/index.d.ts +1 -0
  114. package/dist/solvers/shared/index.d.ts.map +1 -1
  115. package/dist/solvers/shared/resolvers/resolve-market.d.ts +36 -5
  116. package/dist/solvers/shared/resolvers/resolve-market.d.ts.map +1 -1
  117. package/dist/solvers/shared/resolvers/resolve-market.js +30 -8
  118. package/dist/solvers/shared/resolvers/resolve-market.js.map +1 -1
  119. package/dist/solvers/shared/resolvers/types.d.ts +14 -0
  120. package/dist/solvers/shared/resolvers/types.d.ts.map +1 -1
  121. package/dist/solvers/shared/solver-close-fee.d.ts +76 -0
  122. package/dist/solvers/shared/solver-close-fee.d.ts.map +1 -0
  123. package/dist/solvers/shared/solver-close-fee.js +26 -0
  124. package/dist/solvers/shared/solver-close-fee.js.map +1 -0
  125. package/dist/solvers/symbols/to-solver-symbol.d.ts.map +1 -1
  126. package/dist/solvers/symbols/to-solver-symbol.js +36 -30
  127. package/dist/solvers/symbols/to-solver-symbol.js.map +1 -1
  128. package/dist/solvers/symbols/types.d.ts +22 -1
  129. package/dist/solvers/symbols/types.d.ts.map +1 -1
  130. package/dist/solvers/types/generated/enigma-solver.d.ts +8 -99
  131. package/dist/solvers/types/generated/enigma-solver.d.ts.map +1 -1
  132. package/dist/solvers/types/generated/enigma-solver.js +5 -11
  133. package/dist/solvers/types/generated/enigma-solver.js.map +1 -1
  134. package/dist/solvers/types/generated/rasa-solver.js +2 -2
  135. package/dist/solvers/types/generated/rasa-solver.js.map +1 -1
  136. package/dist/symmio-contracts/abi/index.d.ts +4 -4
  137. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/account-layer.d.ts +499 -132
  138. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/account-layer.d.ts.map +1 -1
  139. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/account-layer.js +591 -149
  140. package/dist/symmio-contracts/abi/v0.8.6/account-layer.js.map +1 -0
  141. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/index.d.ts.map +1 -1
  142. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/instant-layer.d.ts +24 -24
  143. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/instant-layer.d.ts.map +1 -1
  144. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/instant-layer.js +28 -28
  145. package/dist/symmio-contracts/abi/v0.8.6/instant-layer.js.map +1 -0
  146. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/symmio.d.ts +4724 -1019
  147. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/symmio.d.ts.map +1 -1
  148. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/symmio.js +12750 -8308
  149. package/dist/symmio-contracts/abi/v0.8.6/symmio.js.map +1 -0
  150. package/dist/symmio-contracts/account-layer/actions/add-margin.js +1 -1
  151. package/dist/symmio-contracts/account-layer/actions/add-margin.js.map +1 -1
  152. package/dist/symmio-contracts/account-layer/actions/cancel-registration.js +1 -1
  153. package/dist/symmio-contracts/account-layer/actions/cancel-registration.js.map +1 -1
  154. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.js +1 -1
  155. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.js.map +1 -1
  156. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.js +1 -1
  157. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.js.map +1 -1
  158. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.js +1 -1
  159. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.js.map +1 -1
  160. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.js +1 -1
  161. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.js.map +1 -1
  162. package/dist/symmio-contracts/account-layer/actions/edit-account-name.js +1 -1
  163. package/dist/symmio-contracts/account-layer/actions/edit-account-name.js.map +1 -1
  164. package/dist/symmio-contracts/account-layer/actions/generate-account-manager-address.js +1 -1
  165. package/dist/symmio-contracts/account-layer/actions/generate-account-manager-address.js.map +1 -1
  166. package/dist/symmio-contracts/account-layer/actions/get-account-balance-info.js +1 -1
  167. package/dist/symmio-contracts/account-layer/actions/get-account-balance-info.js.map +1 -1
  168. package/dist/symmio-contracts/account-layer/actions/get-account-balance-of.js +1 -1
  169. package/dist/symmio-contracts/account-layer/actions/get-account-balance-of.js.map +1 -1
  170. package/dist/symmio-contracts/account-layer/actions/get-affiliate-state.js +1 -1
  171. package/dist/symmio-contracts/account-layer/actions/get-affiliate-state.js.map +1 -1
  172. package/dist/symmio-contracts/account-layer/actions/get-sub-account-virtual-nonce.js +1 -1
  173. package/dist/symmio-contracts/account-layer/actions/get-sub-account-virtual-nonce.js.map +1 -1
  174. package/dist/symmio-contracts/account-layer/actions/get-sub-account.js +1 -1
  175. package/dist/symmio-contracts/account-layer/actions/get-sub-account.js.map +1 -1
  176. package/dist/symmio-contracts/account-layer/actions/get-sub-accounts-count-of-user.js +1 -1
  177. package/dist/symmio-contracts/account-layer/actions/get-sub-accounts-count-of-user.js.map +1 -1
  178. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts-addresses.js +1 -1
  179. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts-addresses.js.map +1 -1
  180. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts.js +1 -1
  181. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts.js.map +1 -1
  182. package/dist/symmio-contracts/account-layer/actions/get-virtual-account.d.ts +1 -1
  183. package/dist/symmio-contracts/account-layer/actions/get-virtual-account.js +1 -1
  184. package/dist/symmio-contracts/account-layer/actions/get-virtual-account.js.map +1 -1
  185. package/dist/symmio-contracts/account-layer/actions/get-virtual-accounts-addresses-of-sub-account.js +1 -1
  186. package/dist/symmio-contracts/account-layer/actions/get-virtual-accounts-addresses-of-sub-account.js.map +1 -1
  187. package/dist/symmio-contracts/account-layer/actions/predict-next-virtual-account.js +1 -1
  188. package/dist/symmio-contracts/account-layer/actions/predict-next-virtual-account.js.map +1 -1
  189. package/dist/symmio-contracts/account-layer/actions/remove-margin.js +1 -1
  190. package/dist/symmio-contracts/account-layer/actions/remove-margin.js.map +1 -1
  191. package/dist/symmio-contracts/account-layer/actions/request-to-register-affiliate.js +1 -1
  192. package/dist/symmio-contracts/account-layer/actions/request-to-register-affiliate.js.map +1 -1
  193. package/dist/symmio-contracts/account-layer/actions/simulate-add-margin.d.ts +1 -1
  194. package/dist/symmio-contracts/account-layer/actions/simulate-add-margin.js +1 -1
  195. package/dist/symmio-contracts/account-layer/actions/simulate-add-margin.js.map +1 -1
  196. package/dist/symmio-contracts/account-layer/actions/simulate-cancel-registration.d.ts +1 -1
  197. package/dist/symmio-contracts/account-layer/actions/simulate-cancel-registration.js +1 -1
  198. package/dist/symmio-contracts/account-layer/actions/simulate-cancel-registration.js.map +1 -1
  199. package/dist/symmio-contracts/account-layer/actions/simulate-create-sub-accounts.d.ts +1 -1
  200. package/dist/symmio-contracts/account-layer/actions/simulate-create-sub-accounts.js +1 -1
  201. package/dist/symmio-contracts/account-layer/actions/simulate-create-sub-accounts.js.map +1 -1
  202. package/dist/symmio-contracts/account-layer/actions/simulate-delete-sub-account.d.ts +1 -1
  203. package/dist/symmio-contracts/account-layer/actions/simulate-delete-sub-account.js +1 -1
  204. package/dist/symmio-contracts/account-layer/actions/simulate-delete-sub-account.js.map +1 -1
  205. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-and-allocate-for-account.d.ts +1 -1
  206. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-and-allocate-for-account.js +1 -1
  207. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-and-allocate-for-account.js.map +1 -1
  208. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-for-account.d.ts +1 -1
  209. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-for-account.js +1 -1
  210. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-for-account.js.map +1 -1
  211. package/dist/symmio-contracts/account-layer/actions/simulate-edit-account-name.d.ts +1 -1
  212. package/dist/symmio-contracts/account-layer/actions/simulate-edit-account-name.js +1 -1
  213. package/dist/symmio-contracts/account-layer/actions/simulate-edit-account-name.js.map +1 -1
  214. package/dist/symmio-contracts/account-layer/actions/simulate-remove-margin.d.ts +1 -1
  215. package/dist/symmio-contracts/account-layer/actions/simulate-remove-margin.js +1 -1
  216. package/dist/symmio-contracts/account-layer/actions/simulate-remove-margin.js.map +1 -1
  217. package/dist/symmio-contracts/account-layer/actions/simulate-request-to-register-affiliate.d.ts +1 -1
  218. package/dist/symmio-contracts/account-layer/actions/simulate-request-to-register-affiliate.js +1 -1
  219. package/dist/symmio-contracts/account-layer/actions/simulate-request-to-register-affiliate.js.map +1 -1
  220. package/dist/symmio-contracts/account-layer/types.d.ts +10 -10
  221. package/dist/symmio-contracts/account-layer/types.js.map +1 -1
  222. package/dist/symmio-contracts/instant-layer/actions/get-delegation-expiry.js +1 -1
  223. package/dist/symmio-contracts/instant-layer/actions/get-delegation-expiry.js.map +1 -1
  224. package/dist/symmio-contracts/instant-layer/actions/get-is-delegation-active.js +1 -1
  225. package/dist/symmio-contracts/instant-layer/actions/get-is-delegation-active.js.map +1 -1
  226. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.js +1 -1
  227. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.js.map +1 -1
  228. package/dist/symmio-contracts/instant-layer/actions/simulate-grant-delegation.d.ts +1 -1
  229. package/dist/symmio-contracts/instant-layer/actions/simulate-grant-delegation.js +1 -1
  230. package/dist/symmio-contracts/instant-layer/actions/simulate-grant-delegation.js.map +1 -1
  231. package/dist/symmio-contracts/symmio/actions/allocate.js +1 -1
  232. package/dist/symmio-contracts/symmio/actions/allocate.js.map +1 -1
  233. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.d.ts +1 -1
  234. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.js +1 -1
  235. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.js.map +1 -1
  236. package/dist/symmio-contracts/symmio/actions/deallocate.js +1 -1
  237. package/dist/symmio-contracts/symmio/actions/deallocate.js.map +1 -1
  238. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.js +1 -1
  239. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.js.map +1 -1
  240. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.js +1 -1
  241. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.js.map +1 -1
  242. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.js +1 -1
  243. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.js.map +1 -1
  244. package/dist/symmio-contracts/symmio/actions/get-cool-downs-of-ma.js +1 -1
  245. package/dist/symmio-contracts/symmio/actions/get-cool-downs-of-ma.js.map +1 -1
  246. package/dist/symmio-contracts/symmio/actions/get-fee-for-user.js +1 -1
  247. package/dist/symmio-contracts/symmio/actions/get-fee-for-user.js.map +1 -1
  248. package/dist/symmio-contracts/symmio/actions/get-last-withdraw-request-id.js +1 -1
  249. package/dist/symmio-contracts/symmio/actions/get-last-withdraw-request-id.js.map +1 -1
  250. package/dist/symmio-contracts/symmio/actions/get-onchain-contract-markets.js +1 -1
  251. package/dist/symmio-contracts/symmio/actions/get-onchain-contract-markets.js.map +1 -1
  252. package/dist/symmio-contracts/symmio/actions/get-party-a-open-positions.js +1 -1
  253. package/dist/symmio-contracts/symmio/actions/get-party-a-open-positions.js.map +1 -1
  254. package/dist/symmio-contracts/symmio/actions/get-party-a-pending-quotes.js +1 -1
  255. package/dist/symmio-contracts/symmio/actions/get-party-a-pending-quotes.js.map +1 -1
  256. package/dist/symmio-contracts/symmio/actions/get-pending-quotes.js +1 -1
  257. package/dist/symmio-contracts/symmio/actions/get-pending-quotes.js.map +1 -1
  258. package/dist/symmio-contracts/symmio/actions/get-pending-withdraw-requests.d.ts.map +1 -1
  259. package/dist/symmio-contracts/symmio/actions/get-pending-withdraw-requests.js +10 -9
  260. package/dist/symmio-contracts/symmio/actions/get-pending-withdraw-requests.js.map +1 -1
  261. package/dist/symmio-contracts/symmio/actions/get-quote.js +1 -1
  262. package/dist/symmio-contracts/symmio/actions/get-quote.js.map +1 -1
  263. package/dist/symmio-contracts/symmio/actions/get-withdraw-requests.d.ts.map +1 -1
  264. package/dist/symmio-contracts/symmio/actions/get-withdraw-requests.js +9 -8
  265. package/dist/symmio-contracts/symmio/actions/get-withdraw-requests.js.map +1 -1
  266. package/dist/symmio-contracts/symmio/actions/get-withdrawable-time.js +1 -1
  267. package/dist/symmio-contracts/symmio/actions/get-withdrawable-time.js.map +1 -1
  268. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.d.ts +1 -1
  269. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.js +1 -1
  270. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.js.map +1 -1
  271. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.js +1 -1
  272. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.js.map +1 -1
  273. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.js +1 -1
  274. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.js.map +1 -1
  275. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.js +1 -1
  276. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.js.map +1 -1
  277. package/dist/symmio-contracts/symmio/actions/simulate-allocate.js +1 -1
  278. package/dist/symmio-contracts/symmio/actions/simulate-allocate.js.map +1 -1
  279. package/dist/symmio-contracts/symmio/actions/simulate-deallocate-and-initiate-withdraw.js +1 -1
  280. package/dist/symmio-contracts/symmio/actions/simulate-deallocate-and-initiate-withdraw.js.map +1 -1
  281. package/dist/symmio-contracts/symmio/actions/simulate-deallocate.js +1 -1
  282. package/dist/symmio-contracts/symmio/actions/simulate-deallocate.js.map +1 -1
  283. package/dist/symmio-contracts/symmio/actions/simulate-finalize-withdraw-request.d.ts +1 -1
  284. package/dist/symmio-contracts/symmio/actions/simulate-finalize-withdraw-request.js +1 -1
  285. package/dist/symmio-contracts/symmio/actions/simulate-finalize-withdraw-request.js.map +1 -1
  286. package/dist/symmio-contracts/symmio/actions/simulate-initiate-withdraw.js +1 -1
  287. package/dist/symmio-contracts/symmio/actions/simulate-initiate-withdraw.js.map +1 -1
  288. package/dist/symmio-contracts/symmio/actions/simulate-request-cancel-withdraw.js +1 -1
  289. package/dist/symmio-contracts/symmio/actions/simulate-request-cancel-withdraw.js.map +1 -1
  290. package/dist/symmio-contracts/symmio/actions/withdraw.d.ts +1 -1
  291. package/dist/symmio-contracts/symmio/actions/withdraw.js.map +1 -1
  292. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.js +1 -1
  293. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.js.map +1 -1
  294. package/dist/symmio-contracts/symmio/internal/simulate-call-as-sub-account.d.ts +1 -1
  295. package/dist/symmio-contracts/symmio/internal/simulate-call-as-sub-account.js +1 -1
  296. package/dist/symmio-contracts/symmio/internal/simulate-call-as-sub-account.js.map +1 -1
  297. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.d.ts +214 -0
  298. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.d.ts.map +1 -0
  299. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.js +248 -0
  300. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.js.map +1 -0
  301. package/dist/symmio-contracts/symmio/parts.d.ts +1 -1
  302. package/dist/symmio-contracts/symmio/parts.js.map +1 -1
  303. package/dist/symmio-contracts/symmio/types.d.ts +29 -19
  304. package/dist/symmio-contracts/symmio/types.d.ts.map +1 -1
  305. package/dist/symmio-contracts/symmio/types.js.map +1 -1
  306. package/dist/tpsl/grouping/notional.js +6 -6
  307. package/dist/websocket/tpsl/parse-tpsl-frame.d.ts +1 -1
  308. package/dist/websocket/tpsl/parse-tpsl-frame.js.map +1 -1
  309. package/dist/websocket/tpsl/watch-tpsl-notifications.d.ts +1 -1
  310. package/dist/websocket/tpsl/watch-tpsl-notifications.js.map +1 -1
  311. package/package.json +1 -1
  312. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.d.ts +0 -27
  313. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.d.ts.map +0 -1
  314. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.js +0 -25
  315. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.js.map +0 -1
  316. package/dist/solvers/add-solver-whitelist/index.d.ts +0 -3
  317. package/dist/solvers/add-solver-whitelist/index.d.ts.map +0 -1
  318. package/dist/solvers/add-solver-whitelist/query.d.ts +0 -19
  319. package/dist/solvers/add-solver-whitelist/query.d.ts.map +0 -1
  320. package/dist/solvers/add-solver-whitelist/query.js +0 -12
  321. package/dist/solvers/add-solver-whitelist/query.js.map +0 -1
  322. package/dist/symmio-contracts/abi/v0.8.5/account-layer.js.map +0 -1
  323. package/dist/symmio-contracts/abi/v0.8.5/instant-layer.js.map +0 -1
  324. package/dist/symmio-contracts/abi/v0.8.5/symmio.js.map +0 -1
  325. /package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/index.d.ts +0 -0
@@ -0,0 +1,89 @@
1
+ import { SolverId } from '../../../core/chains/types.js';
2
+ import { Config } from '../../../core/config/index.js';
3
+ import { PositionType } from './types.js';
4
+ /**
5
+ * Validate a user-supplied slippage percent before any network work.
6
+ *
7
+ * Accepts a finite number in `[0, 100)` — `0` is a legal "no tolerance"
8
+ * choice; `100`+ would zero or invert a SHORT's price bound.
9
+ *
10
+ * @throws {SymmError} `INVALID_SLIPPAGE` when out of range.
11
+ */
12
+ export declare function assertValidSlippage(slippage: number): void;
13
+ /**
14
+ * Parameters for {@link fetchOpenEstimatePrice}.
15
+ */
16
+ export interface FetchOpenEstimatePriceParameters {
17
+ chainId?: number;
18
+ /** Solver whose dry-run estimate to read. Defaults to the chain's `defaultSolverId`. */
19
+ solverId?: SolverId;
20
+ /** Solver market id. */
21
+ symbolId: number;
22
+ /** Trade side. */
23
+ positionType: PositionType;
24
+ /** Leveraged order quantity (decimal string) — the size that will go on the wire. */
25
+ quantity: string;
26
+ /** Mark price the order was sized at (decimal string). */
27
+ markPrice: string;
28
+ }
29
+ /**
30
+ * Fetch the solver's expected fill price for an open, best-effort.
31
+ *
32
+ * Requests with the wide fixed bound ({@link OPEN_ESTIMATE_REQUEST_TOLERANCE})
33
+ * so the solver's price gate never rejects the question. Returns `undefined`
34
+ * instead of throwing when the estimate is unusable — network error,
35
+ * non-Enigma solver, zero/NaN price, zero mark.
36
+ */
37
+ export declare function fetchOpenEstimatePrice(config: Config, parameters: FetchOpenEstimatePriceParameters): Promise<string | undefined>;
38
+ /**
39
+ * Derive a slippage percent from the solver's expected fill price.
40
+ *
41
+ * The price bound is the estimate plus 4% headroom
42
+ * ({@link AUTO_SLIPPAGE_ESTIMATE_MARGIN}) — `estimate × 1.04` for a LONG,
43
+ * `estimate × 0.96` for a SHORT — re-expressed as a percent deviation from the
44
+ * mark price (the basis `calculateTradeParams` applies slippage to). Clamped to
45
+ * `[0, 99]` so the result always passes {@link assertValidSlippage}. Falls back
46
+ * to a flat {@link AUTO_SLIPPAGE_FALLBACK_PERCENT}% when no usable estimate or
47
+ * mark exists.
48
+ */
49
+ export declare function deriveAutoSlippage({ markPrice, expectedFillPrice, positionType, }: {
50
+ markPrice: string;
51
+ expectedFillPrice: string | undefined;
52
+ positionType: PositionType;
53
+ }): number;
54
+ /**
55
+ * Parameters for {@link assertOpenEstimateWithinSlippage}.
56
+ */
57
+ export interface AssertOpenEstimateWithinSlippageParameters extends FetchOpenEstimatePriceParameters {
58
+ /** User slippage tolerance percent (e.g. `5` for 5%). */
59
+ slippage: number;
60
+ /**
61
+ * Pre-fetched expected fill price ({@link fetchOpenEstimatePrice}). When
62
+ * supplied, the dry-run fetch is skipped and this value gates instead.
63
+ */
64
+ expectedFillPrice?: string;
65
+ }
66
+ /**
67
+ * Dry-run the order and reject when the expected fill sits outside the user's
68
+ * slippage tolerance.
69
+ *
70
+ * `expectedFillPrice` comes from `GET /estimated-price` (requested with a wide
71
+ * fixed bound — see {@link OPEN_ESTIMATE_REQUEST_TOLERANCE}); the gate is
72
+ *
73
+ * ```text
74
+ * |expectedFillPrice − markPrice| / markPrice > slippage/100 + ε → reject
75
+ * ```
76
+ *
77
+ * A rejection here is a good estimate saying the market cannot fill within
78
+ * tolerance — the solver would reject the order anyway, so failing early with a
79
+ * clear error beats a wire round-trip ending in a solver error code.
80
+ *
81
+ * Best-effort by design: an unavailable estimate (network error, non-Enigma
82
+ * solver, zero price) skips the gate rather than blocking the open — the
83
+ * mark-sized order is always valid to submit.
84
+ *
85
+ * @throws {SymmError} `SLIPPAGE_EXCEEDED` when the estimated fill deviates
86
+ * from mark beyond the tolerance.
87
+ */
88
+ export declare function assertOpenEstimateWithinSlippage(config: Config, parameters: AssertOpenEstimateWithinSlippageParameters): Promise<void>;
89
+ //# sourceMappingURL=open-estimate-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-estimate-guard.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/shared/open-estimate-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAkBvC;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ1D;AAaD;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,gCAAgC,GAC3C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2B7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,iBAAiB,EACjB,YAAY,GACb,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,MAAM,CAkBT;AAED;;GAEG;AACH,MAAM,WAAW,0CAA2C,SAAQ,gCAAgC;IAClG,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,0CAA0C,GACrD,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,52 @@
1
+ import { SymmError as e } from "../../../shared/errors/symm-error.js";
2
+ import { PositionType as t } from "../../../symmio-contracts/symmio/types.js";
3
+ import { getEstimatedPrice as n } from "../../estimated-price/get-estimated-price.js";
4
+ import { toDecimal as r } from "@symmio/utils/decimal";
5
+ //#region src/solvers/instant-open/shared/open-estimate-guard.ts
6
+ var i = 1e-9, a = .5;
7
+ function o(t) {
8
+ if (typeof t != "number" || !Number.isFinite(t) || t < 0 || t >= 100) throw new e("validation", "INVALID_SLIPPAGE", `Invalid slippage "${String(t)}": expected a finite percent in [0, 100), e.g. 1 for 1%.`);
9
+ }
10
+ var s = .04, c = 4;
11
+ async function l(e, i) {
12
+ let o = r(i.markPrice);
13
+ if (o.isZero() || o.isNaN()) return;
14
+ let s = i.positionType === t.SHORT ? o.times(1 - a) : o.times(1 + a), c;
15
+ try {
16
+ ({estimatedPrice: c} = await n(e, {
17
+ chainId: i.chainId,
18
+ solverId: i.solverId,
19
+ symbolId: i.symbolId,
20
+ quantity: i.quantity,
21
+ positionType: i.positionType,
22
+ entry: "open",
23
+ price: s.toString()
24
+ }));
25
+ } catch {
26
+ return;
27
+ }
28
+ let l = r(c);
29
+ if (!(l.isZero() || l.isNaN())) return c;
30
+ }
31
+ function u({ markPrice: e, expectedFillPrice: n, positionType: i }) {
32
+ let a = r(e);
33
+ if (a.isZero() || a.isNaN() || n === void 0) return c;
34
+ let o = r(n);
35
+ if (o.isZero() || o.isNaN()) return c;
36
+ let l = i === t.SHORT ? r(1).minus(o.times(1 - s).div(a)).times(100) : o.times(1 + s).div(a).minus(1).times(100);
37
+ return Math.min(99, Math.max(0, l.toNumber()));
38
+ }
39
+ async function d(t, n) {
40
+ let a = r(n.markPrice);
41
+ if (a.isZero() || a.isNaN()) return;
42
+ let o = n.expectedFillPrice ?? await l(t, n);
43
+ if (o === void 0) return;
44
+ let s = r(o);
45
+ if (s.isZero() || s.isNaN()) return;
46
+ let c = s.minus(a).abs().div(a);
47
+ if (c.gt(r(n.slippage).div(100).plus(i))) throw new e("validation", "SLIPPAGE_EXCEEDED", `Estimated execution price ${o} deviates ${c.times(100).toFixed(4)}% from mark ${n.markPrice}, above the ${n.slippage}% slippage tolerance. Raise the tolerance or reduce the size.`);
48
+ }
49
+ //#endregion
50
+ export { d as assertOpenEstimateWithinSlippage, o as assertValidSlippage, u as deriveAutoSlippage, l as fetchOpenEstimatePrice };
51
+
52
+ //# sourceMappingURL=open-estimate-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-estimate-guard.js","names":[],"sources":["../../../../src/solvers/instant-open/shared/open-estimate-guard.ts"],"sourcesContent":["import { toDecimal } from \"@symmio/utils/decimal\";\nimport type { SolverId } from \"../../../core/chains/types\";\nimport type { Config } from \"../../../core/config\";\nimport { SymmError } from \"../../../shared/errors/symm-error\";\nimport { getEstimatedPrice } from \"../../estimated-price/get-estimated-price\";\nimport { PositionType } from \"./types\";\n\n/**\n * Absorbs binary-float noise at the tolerance boundary, so a deviation sitting\n * exactly on the user's setting is not rejected by floating-point error.\n */\nconst BAND_EPSILON = 1e-9;\n\n/**\n * Price bound sent when ASKING the solver for an open estimate — never a\n * trading bound. The solver treats `price` as a hard gate and rejects a bound\n * tighter than its fill instead of answering, while above that threshold the\n * answer does not move. A wide fixed bound keeps the estimate request always\n * answerable and keeps the estimate a pure function of quantity rather than of\n * the user's slippage setting.\n */\nconst OPEN_ESTIMATE_REQUEST_TOLERANCE = 0.5;\n\n/**\n * Validate a user-supplied slippage percent before any network work.\n *\n * Accepts a finite number in `[0, 100)` — `0` is a legal \"no tolerance\"\n * choice; `100`+ would zero or invert a SHORT's price bound.\n *\n * @throws {SymmError} `INVALID_SLIPPAGE` when out of range.\n */\nexport function assertValidSlippage(slippage: number): void {\n if (typeof slippage !== \"number\" || !Number.isFinite(slippage) || slippage < 0 || slippage >= 100) {\n throw new SymmError(\n \"validation\",\n \"INVALID_SLIPPAGE\",\n `Invalid slippage \"${String(slippage)}\": expected a finite percent in [0, 100), e.g. 1 for 1%.`,\n );\n }\n}\n\n/**\n * Headroom applied on top of the estimated fill price when deriving an\n * automatic slippage ({@link deriveAutoSlippage}): the price bound is\n * `estimate × (1 ± 4%)`, covering drift between the solver's estimate and the\n * actual fill.\n */\nconst AUTO_SLIPPAGE_ESTIMATE_MARGIN = 0.04;\n\n/** Fallback auto slippage percent when no usable estimate exists. */\nconst AUTO_SLIPPAGE_FALLBACK_PERCENT = 4;\n\n/**\n * Parameters for {@link fetchOpenEstimatePrice}.\n */\nexport interface FetchOpenEstimatePriceParameters {\n chainId?: number;\n /** Solver whose dry-run estimate to read. Defaults to the chain's `defaultSolverId`. */\n solverId?: SolverId;\n /** Solver market id. */\n symbolId: number;\n /** Trade side. */\n positionType: PositionType;\n /** Leveraged order quantity (decimal string) — the size that will go on the wire. */\n quantity: string;\n /** Mark price the order was sized at (decimal string). */\n markPrice: string;\n}\n\n/**\n * Fetch the solver's expected fill price for an open, best-effort.\n *\n * Requests with the wide fixed bound ({@link OPEN_ESTIMATE_REQUEST_TOLERANCE})\n * so the solver's price gate never rejects the question. Returns `undefined`\n * instead of throwing when the estimate is unusable — network error,\n * non-Enigma solver, zero/NaN price, zero mark.\n */\nexport async function fetchOpenEstimatePrice(\n config: Config,\n parameters: FetchOpenEstimatePriceParameters,\n): Promise<string | undefined> {\n const mark = toDecimal(parameters.markPrice);\n if (mark.isZero() || mark.isNaN()) return undefined;\n\n const requestPrice =\n parameters.positionType === PositionType.SHORT\n ? mark.times(1 - OPEN_ESTIMATE_REQUEST_TOLERANCE)\n : mark.times(1 + OPEN_ESTIMATE_REQUEST_TOLERANCE);\n\n let estimatedPrice: string;\n try {\n ({ estimatedPrice } = await getEstimatedPrice(config, {\n chainId: parameters.chainId,\n solverId: parameters.solverId,\n symbolId: parameters.symbolId,\n quantity: parameters.quantity,\n positionType: parameters.positionType,\n entry: \"open\",\n price: requestPrice.toString(),\n }));\n } catch {\n return undefined;\n }\n\n const estimate = toDecimal(estimatedPrice);\n if (estimate.isZero() || estimate.isNaN()) return undefined;\n return estimatedPrice;\n}\n\n/**\n * Derive a slippage percent from the solver's expected fill price.\n *\n * The price bound is the estimate plus 4% headroom\n * ({@link AUTO_SLIPPAGE_ESTIMATE_MARGIN}) — `estimate × 1.04` for a LONG,\n * `estimate × 0.96` for a SHORT — re-expressed as a percent deviation from the\n * mark price (the basis `calculateTradeParams` applies slippage to). Clamped to\n * `[0, 99]` so the result always passes {@link assertValidSlippage}. Falls back\n * to a flat {@link AUTO_SLIPPAGE_FALLBACK_PERCENT}% when no usable estimate or\n * mark exists.\n */\nexport function deriveAutoSlippage({\n markPrice,\n expectedFillPrice,\n positionType,\n}: {\n markPrice: string;\n expectedFillPrice: string | undefined;\n positionType: PositionType;\n}): number {\n const mark = toDecimal(markPrice);\n if (mark.isZero() || mark.isNaN() || expectedFillPrice === undefined) return AUTO_SLIPPAGE_FALLBACK_PERCENT;\n const estimate = toDecimal(expectedFillPrice);\n if (estimate.isZero() || estimate.isNaN()) return AUTO_SLIPPAGE_FALLBACK_PERCENT;\n\n const percent =\n positionType === PositionType.SHORT\n ? toDecimal(1)\n .minus(estimate.times(1 - AUTO_SLIPPAGE_ESTIMATE_MARGIN).div(mark))\n .times(100)\n : estimate\n .times(1 + AUTO_SLIPPAGE_ESTIMATE_MARGIN)\n .div(mark)\n .minus(1)\n .times(100);\n\n return Math.min(99, Math.max(0, percent.toNumber()));\n}\n\n/**\n * Parameters for {@link assertOpenEstimateWithinSlippage}.\n */\nexport interface AssertOpenEstimateWithinSlippageParameters extends FetchOpenEstimatePriceParameters {\n /** User slippage tolerance percent (e.g. `5` for 5%). */\n slippage: number;\n /**\n * Pre-fetched expected fill price ({@link fetchOpenEstimatePrice}). When\n * supplied, the dry-run fetch is skipped and this value gates instead.\n */\n expectedFillPrice?: string;\n}\n\n/**\n * Dry-run the order and reject when the expected fill sits outside the user's\n * slippage tolerance.\n *\n * `expectedFillPrice` comes from `GET /estimated-price` (requested with a wide\n * fixed bound — see {@link OPEN_ESTIMATE_REQUEST_TOLERANCE}); the gate is\n *\n * ```text\n * |expectedFillPrice − markPrice| / markPrice > slippage/100 + ε → reject\n * ```\n *\n * A rejection here is a good estimate saying the market cannot fill within\n * tolerance — the solver would reject the order anyway, so failing early with a\n * clear error beats a wire round-trip ending in a solver error code.\n *\n * Best-effort by design: an unavailable estimate (network error, non-Enigma\n * solver, zero price) skips the gate rather than blocking the open — the\n * mark-sized order is always valid to submit.\n *\n * @throws {SymmError} `SLIPPAGE_EXCEEDED` when the estimated fill deviates\n * from mark beyond the tolerance.\n */\nexport async function assertOpenEstimateWithinSlippage(\n config: Config,\n parameters: AssertOpenEstimateWithinSlippageParameters,\n): Promise<void> {\n const mark = toDecimal(parameters.markPrice);\n if (mark.isZero() || mark.isNaN()) return;\n\n const estimatedPrice = parameters.expectedFillPrice ?? (await fetchOpenEstimatePrice(config, parameters));\n if (estimatedPrice === undefined) return;\n\n const expectedFillPrice = toDecimal(estimatedPrice);\n if (expectedFillPrice.isZero() || expectedFillPrice.isNaN()) return;\n\n const deviation = expectedFillPrice.minus(mark).abs().div(mark);\n if (deviation.gt(toDecimal(parameters.slippage).div(100).plus(BAND_EPSILON))) {\n throw new SymmError(\n \"validation\",\n \"SLIPPAGE_EXCEEDED\",\n `Estimated execution price ${estimatedPrice} deviates ${deviation.times(100).toFixed(4)}% from mark ${parameters.markPrice}, above the ${parameters.slippage}% slippage tolerance. Raise the tolerance or reduce the size.`,\n );\n }\n}\n"],"mappings":";;;;;AAWA,IAAM,IAAe,MAUf,IAAkC;AAUxC,SAAgB,EAAoB,GAAwB;CAC1D,IAAI,OAAO,KAAa,YAAY,CAAC,OAAO,SAAS,CAAQ,KAAK,IAAW,KAAK,KAAY,KAC5F,MAAM,IAAI,EACR,cACA,oBACA,qBAAqB,OAAO,CAAQ,EAAE,yDACxC;AAEJ;AAQA,IAAM,IAAgC,KAGhC,IAAiC;AA2BvC,eAAsB,EACpB,GACA,GAC6B;CAC7B,IAAM,IAAO,EAAU,EAAW,SAAS;CAC3C,IAAI,EAAK,OAAO,KAAK,EAAK,MAAM,GAAG;CAEnC,IAAM,IACJ,EAAW,iBAAiB,EAAa,QACrC,EAAK,MAAM,IAAI,CAA+B,IAC9C,EAAK,MAAM,IAAI,CAA+B,GAEhD;CACJ,IAAI;EACF,CAAC,sBAAqB,MAAM,EAAkB,GAAQ;GACpD,SAAS,EAAW;GACpB,UAAU,EAAW;GACrB,UAAU,EAAW;GACrB,UAAU,EAAW;GACrB,cAAc,EAAW;GACzB,OAAO;GACP,OAAO,EAAa,SAAS;EAC/B,CAAC;CACH,QAAQ;EACN;CACF;CAEA,IAAM,IAAW,EAAU,CAAc;CACrC,QAAS,OAAO,KAAK,EAAS,MAAM,IACxC,OAAO;AACT;AAaA,SAAgB,EAAmB,EACjC,cACA,sBACA,mBAKS;CACT,IAAM,IAAO,EAAU,CAAS;CAChC,IAAI,EAAK,OAAO,KAAK,EAAK,MAAM,KAAK,MAAsB,KAAA,GAAW,OAAO;CAC7E,IAAM,IAAW,EAAU,CAAiB;CAC5C,IAAI,EAAS,OAAO,KAAK,EAAS,MAAM,GAAG,OAAO;CAElD,IAAM,IACJ,MAAiB,EAAa,QAC1B,EAAU,CAAC,EACR,MAAM,EAAS,MAAM,IAAI,CAA6B,EAAE,IAAI,CAAI,CAAC,EACjE,MAAM,GAAG,IACZ,EACG,MAAM,IAAI,CAA6B,EACvC,IAAI,CAAI,EACR,MAAM,CAAC,EACP,MAAM,GAAG;CAElB,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAQ,SAAS,CAAC,CAAC;AACrD;AAqCA,eAAsB,EACpB,GACA,GACe;CACf,IAAM,IAAO,EAAU,EAAW,SAAS;CAC3C,IAAI,EAAK,OAAO,KAAK,EAAK,MAAM,GAAG;CAEnC,IAAM,IAAiB,EAAW,qBAAsB,MAAM,EAAuB,GAAQ,CAAU;CACvG,IAAI,MAAmB,KAAA,GAAW;CAElC,IAAM,IAAoB,EAAU,CAAc;CAClD,IAAI,EAAkB,OAAO,KAAK,EAAkB,MAAM,GAAG;CAE7D,IAAM,IAAY,EAAkB,MAAM,CAAI,EAAE,IAAI,EAAE,IAAI,CAAI;CAC9D,IAAI,EAAU,GAAG,EAAU,EAAW,QAAQ,EAAE,IAAI,GAAG,EAAE,KAAK,CAAY,CAAC,GACzE,MAAM,IAAI,EACR,cACA,qBACA,6BAA6B,EAAe,YAAY,EAAU,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAW,UAAU,cAAc,EAAW,SAAS,8DAC/J;AAEJ"}
@@ -1,4 +1,5 @@
1
1
  import { Hex } from 'viem';
2
+ import { Config } from '../../../core/config/index.js';
2
3
  /**
3
4
  * 4-byte function selector for `AccountLayer.addMarginToNextVA(...)`.
4
5
  *
@@ -7,7 +8,17 @@ import { Hex } from 'viem';
7
8
  */
8
9
  export declare const ADD_MARGIN_TO_NEXT_VA_SELECTOR: Hex;
9
10
  /**
10
- * 4-byte function selector for `Symmio.sendQuoteWithAffiliateAndData(...)`.
11
+ * 4-byte function selector for `Symmio.sendQuote(...)` — the perps-core v0.8.6
12
+ * overload carrying `SolverFeeCaps`. This is the selector the Enigma
13
+ * instant-open flow signs, and the one a session key needs delegation for.
14
+ */
15
+ export declare const SEND_QUOTE_SELECTOR: Hex;
16
+ /**
17
+ * 4-byte function selector for the legacy `Symmio.sendQuoteWithAffiliateAndData(...)`.
18
+ *
19
+ * Kept for the Rasa flow, which still signs the legacy method (it stores zero
20
+ * solver-fee caps on-chain). The Enigma delegation set uses
21
+ * {@link SEND_QUOTE_SELECTOR} instead.
11
22
  */
12
23
  export declare const SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR: Hex;
13
24
  /**
@@ -15,21 +26,49 @@ export declare const SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR: Hex;
15
26
  */
16
27
  export declare const REQUEST_TO_CLOSE_POSITION_SELECTOR: Hex;
17
28
  /**
18
- * The full set of selectors a session key needs delegation for in order to
19
- * sign the InstantLayer v2 trade lifecycle on behalf of a sub-account: open
20
- * (`sendQuoteWithAffiliateAndData`), close (`requestToClosePosition`), and
21
- * margin top-up (`addMarginToNextVA`). Pass to `grantDelegation` in one
22
- * transaction.
29
+ * The selectors a session key needs delegation for to sign the InstantLayer v2
30
+ * trade lifecycle on a **perps-core v0.8.6 chain**: open (`sendQuote`), close
31
+ * (`requestToClosePosition`), and margin top-up (`addMarginToNextVA`). Pass to
32
+ * `grantDelegation` in one transaction.
33
+ *
34
+ * **The set is per-chain.** A v0.8.5 chain's open leg is the legacy
35
+ * `sendQuoteWithAffiliateAndData` ({@link LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS});
36
+ * in a flow that serves several chains, resolve the right set with
37
+ * {@link getInstantTradeRequiredSelectors} instead of hardcoding either
38
+ * constant.
23
39
  *
24
40
  * @example
25
41
  * ```ts
26
42
  * grantDelegation(config, {
27
43
  * account: { addr: subAccountAddress, isPartyB: false },
28
44
  * delegatedSigner: sessionKeyAddress,
29
- * selectors: INSTANT_TRADE_REQUIRED_SELECTORS,
45
+ * selectors: getInstantTradeRequiredSelectors(config, { chainId }),
30
46
  * expiryTimestamp,
31
47
  * });
32
48
  * ```
33
49
  */
34
50
  export declare const INSTANT_TRADE_REQUIRED_SELECTORS: readonly [`0x${string}`, `0x${string}`, `0x${string}`];
51
+ /**
52
+ * The {@link INSTANT_TRADE_REQUIRED_SELECTORS} counterpart for a **perps-core
53
+ * v0.8.5 chain**, whose open leg is the legacy `sendQuoteWithAffiliateAndData`
54
+ * (the capped `sendQuote` selector does not exist on its diamond).
55
+ */
56
+ export declare const LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS: readonly [`0x${string}`, `0x${string}`, `0x${string}`];
57
+ /**
58
+ * Resolve the session-key delegation selector set for a chain by its
59
+ * `contractsVersion`: {@link INSTANT_TRADE_REQUIRED_SELECTORS} on `"0.8.6"`,
60
+ * {@link LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS} on `"0.8.5"`.
61
+ *
62
+ * Use this (or the `useInstantTradeRequiredSelectors` hook) in any flow that
63
+ * can point at more than one chain — a hardcoded set is wrong on the other
64
+ * generation's chains.
65
+ *
66
+ * @param config - The SDK config.
67
+ * @param parameters - Optional `chainId`; defaults to the config's `defaultChainId`.
68
+ * @returns The selector set matching the chain's contracts generation.
69
+ * @throws {SymmError} `UNSUPPORTED_CHAIN` when the chain is not configured.
70
+ */
71
+ export declare function getInstantTradeRequiredSelectors(config: Config, parameters?: {
72
+ chainId?: number;
73
+ }): typeof INSTANT_TRADE_REQUIRED_SELECTORS | typeof LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS;
35
74
  //# sourceMappingURL=selectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/shared/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAUhF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,GAAkE,CAAC;AAEhH;;GAEG;AACH,eAAO,MAAM,2CAA2C,EAAE,GAGzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,EAAE,GAAiE,CAAC;AAEnH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gCAAgC,wDAInC,CAAC"}
1
+ {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/shared/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAChF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAUnD;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,GAAkE,CAAC;AAEhH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,GAAoD,CAAC;AAEvF;;;;;;GAMG;AACH,eAAO,MAAM,2CAA2C,EAAE,GAGzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kCAAkC,EAAE,GAAiE,CAAC;AAEnH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gCAAgC,wDAInC,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,wDAI1C,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EACd,UAAU,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,OAAO,gCAAgC,GAAG,OAAO,uCAAuC,CAI1F"}
@@ -1,5 +1,5 @@
1
- import { accountLayerAbi as e } from "../../../symmio-contracts/abi/v0.8.5/account-layer.js";
2
- import { symmioAbi as t } from "../../../symmio-contracts/abi/v0.8.5/symmio.js";
1
+ import { accountLayerAbi as e } from "../../../symmio-contracts/abi/v0.8.6/account-layer.js";
2
+ import { symmioAbi as t } from "../../../symmio-contracts/abi/v0.8.6/symmio.js";
3
3
  import { toFunctionSelector as n } from "viem";
4
4
  //#region src/solvers/instant-open/shared/selectors.ts
5
5
  function r(e, t) {
@@ -7,12 +7,19 @@ function r(e, t) {
7
7
  if (!r) throw Error(`Selector lookup failed: "${t}" not in ABI.`);
8
8
  return n(r);
9
9
  }
10
- var i = r(e, "addMarginToNextVA"), a = r(t, "sendQuoteWithAffiliateAndData"), o = r(t, "requestToClosePosition"), s = [
10
+ var i = r(e, "addMarginToNextVA"), a = r(t, "sendQuote"), o = r(t, "sendQuoteWithAffiliateAndData"), s = r(t, "requestToClosePosition"), c = [
11
11
  i,
12
12
  a,
13
- o
13
+ s
14
+ ], l = [
15
+ i,
16
+ o,
17
+ s
14
18
  ];
19
+ function u(e, t = {}) {
20
+ return e.getChainConfig(t.chainId).contractsVersion === "0.8.5" ? l : c;
21
+ }
15
22
  //#endregion
16
- export { i as ADD_MARGIN_TO_NEXT_VA_SELECTOR, s as INSTANT_TRADE_REQUIRED_SELECTORS, o as REQUEST_TO_CLOSE_POSITION_SELECTOR, a as SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR };
23
+ export { i as ADD_MARGIN_TO_NEXT_VA_SELECTOR, c as INSTANT_TRADE_REQUIRED_SELECTORS, l as LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS, s as REQUEST_TO_CLOSE_POSITION_SELECTOR, a as SEND_QUOTE_SELECTOR, o as SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR, u as getInstantTradeRequiredSelectors };
17
24
 
18
25
  //# sourceMappingURL=selectors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.js","names":[],"sources":["../../../../src/solvers/instant-open/shared/selectors.ts"],"sourcesContent":["import { toFunctionSelector, type Abi, type AbiFunction, type Hex } from \"viem\";\nimport { accountLayerAbi } from \"../../../symmio-contracts/abi/v0.8.5/account-layer\";\nimport { symmioAbi } from \"../../../symmio-contracts/abi/v0.8.5/symmio\";\n\nfunction selectorFromAbi(abi: Abi, name: string): Hex {\n const fragment = abi.find((item) => item.type === \"function\" && item.name === name) as AbiFunction | undefined;\n if (!fragment) throw new Error(`Selector lookup failed: \"${name}\" not in ABI.`);\n return toFunctionSelector(fragment);\n}\n\n/**\n * 4-byte function selector for `AccountLayer.addMarginToNextVA(...)`.\n *\n * Computed once from the ABI fragment so it stays in sync if the function\n * signature changes in a future ABI version.\n */\nexport const ADD_MARGIN_TO_NEXT_VA_SELECTOR: Hex = selectorFromAbi(accountLayerAbi as Abi, \"addMarginToNextVA\");\n\n/**\n * 4-byte function selector for `Symmio.sendQuoteWithAffiliateAndData(...)`.\n */\nexport const SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR: Hex = selectorFromAbi(\n symmioAbi as Abi,\n \"sendQuoteWithAffiliateAndData\",\n);\n\n/**\n * 4-byte function selector for `Symmio.requestToClosePosition(...)`.\n */\nexport const REQUEST_TO_CLOSE_POSITION_SELECTOR: Hex = selectorFromAbi(symmioAbi as Abi, \"requestToClosePosition\");\n\n/**\n * The full set of selectors a session key needs delegation for in order to\n * sign the InstantLayer v2 trade lifecycle on behalf of a sub-account: open\n * (`sendQuoteWithAffiliateAndData`), close (`requestToClosePosition`), and\n * margin top-up (`addMarginToNextVA`). Pass to `grantDelegation` in one\n * transaction.\n *\n * @example\n * ```ts\n * grantDelegation(config, {\n * account: { addr: subAccountAddress, isPartyB: false },\n * delegatedSigner: sessionKeyAddress,\n * selectors: INSTANT_TRADE_REQUIRED_SELECTORS,\n * expiryTimestamp,\n * });\n * ```\n */\nexport const INSTANT_TRADE_REQUIRED_SELECTORS = [\n ADD_MARGIN_TO_NEXT_VA_SELECTOR,\n SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR,\n REQUEST_TO_CLOSE_POSITION_SELECTOR,\n] as const;\n"],"mappings":";;;;AAIA,SAAS,EAAgB,GAAU,GAAmB;CACpD,IAAM,IAAW,EAAI,MAAM,MAAS,EAAK,SAAS,cAAc,EAAK,SAAS,CAAI;CAClF,IAAI,CAAC,GAAU,MAAU,MAAM,4BAA4B,EAAK,cAAc;CAC9E,OAAO,EAAmB,CAAQ;AACpC;AAQA,IAAa,IAAsC,EAAgB,GAAwB,mBAAmB,GAKjG,IAAmD,EAC9D,GACA,+BACF,GAKa,IAA0C,EAAgB,GAAkB,wBAAwB,GAmBpG,IAAmC;CAC9C;CACA;CACA;AACF"}
1
+ {"version":3,"file":"selectors.js","names":[],"sources":["../../../../src/solvers/instant-open/shared/selectors.ts"],"sourcesContent":["import { toFunctionSelector, type Abi, type AbiFunction, type Hex } from \"viem\";\nimport type { Config } from \"../../../core/config\";\nimport { accountLayerAbi } from \"../../../symmio-contracts/abi/v0.8.6/account-layer\";\nimport { symmioAbi } from \"../../../symmio-contracts/abi/v0.8.6/symmio\";\n\nfunction selectorFromAbi(abi: Abi, name: string): Hex {\n const fragment = abi.find((item) => item.type === \"function\" && item.name === name) as AbiFunction | undefined;\n if (!fragment) throw new Error(`Selector lookup failed: \"${name}\" not in ABI.`);\n return toFunctionSelector(fragment);\n}\n\n/**\n * 4-byte function selector for `AccountLayer.addMarginToNextVA(...)`.\n *\n * Computed once from the ABI fragment so it stays in sync if the function\n * signature changes in a future ABI version.\n */\nexport const ADD_MARGIN_TO_NEXT_VA_SELECTOR: Hex = selectorFromAbi(accountLayerAbi as Abi, \"addMarginToNextVA\");\n\n/**\n * 4-byte function selector for `Symmio.sendQuote(...)` — the perps-core v0.8.6\n * overload carrying `SolverFeeCaps`. This is the selector the Enigma\n * instant-open flow signs, and the one a session key needs delegation for.\n */\nexport const SEND_QUOTE_SELECTOR: Hex = selectorFromAbi(symmioAbi as Abi, \"sendQuote\");\n\n/**\n * 4-byte function selector for the legacy `Symmio.sendQuoteWithAffiliateAndData(...)`.\n *\n * Kept for the Rasa flow, which still signs the legacy method (it stores zero\n * solver-fee caps on-chain). The Enigma delegation set uses\n * {@link SEND_QUOTE_SELECTOR} instead.\n */\nexport const SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR: Hex = selectorFromAbi(\n symmioAbi as Abi,\n \"sendQuoteWithAffiliateAndData\",\n);\n\n/**\n * 4-byte function selector for `Symmio.requestToClosePosition(...)`.\n */\nexport const REQUEST_TO_CLOSE_POSITION_SELECTOR: Hex = selectorFromAbi(symmioAbi as Abi, \"requestToClosePosition\");\n\n/**\n * The selectors a session key needs delegation for to sign the InstantLayer v2\n * trade lifecycle on a **perps-core v0.8.6 chain**: open (`sendQuote`), close\n * (`requestToClosePosition`), and margin top-up (`addMarginToNextVA`). Pass to\n * `grantDelegation` in one transaction.\n *\n * **The set is per-chain.** A v0.8.5 chain's open leg is the legacy\n * `sendQuoteWithAffiliateAndData` ({@link LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS});\n * in a flow that serves several chains, resolve the right set with\n * {@link getInstantTradeRequiredSelectors} instead of hardcoding either\n * constant.\n *\n * @example\n * ```ts\n * grantDelegation(config, {\n * account: { addr: subAccountAddress, isPartyB: false },\n * delegatedSigner: sessionKeyAddress,\n * selectors: getInstantTradeRequiredSelectors(config, { chainId }),\n * expiryTimestamp,\n * });\n * ```\n */\nexport const INSTANT_TRADE_REQUIRED_SELECTORS = [\n ADD_MARGIN_TO_NEXT_VA_SELECTOR,\n SEND_QUOTE_SELECTOR,\n REQUEST_TO_CLOSE_POSITION_SELECTOR,\n] as const;\n\n/**\n * The {@link INSTANT_TRADE_REQUIRED_SELECTORS} counterpart for a **perps-core\n * v0.8.5 chain**, whose open leg is the legacy `sendQuoteWithAffiliateAndData`\n * (the capped `sendQuote` selector does not exist on its diamond).\n */\nexport const LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS = [\n ADD_MARGIN_TO_NEXT_VA_SELECTOR,\n SEND_QUOTE_WITH_AFFILIATE_AND_DATA_SELECTOR,\n REQUEST_TO_CLOSE_POSITION_SELECTOR,\n] as const;\n\n/**\n * Resolve the session-key delegation selector set for a chain by its\n * `contractsVersion`: {@link INSTANT_TRADE_REQUIRED_SELECTORS} on `\"0.8.6\"`,\n * {@link LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS} on `\"0.8.5\"`.\n *\n * Use this (or the `useInstantTradeRequiredSelectors` hook) in any flow that\n * can point at more than one chain — a hardcoded set is wrong on the other\n * generation's chains.\n *\n * @param config - The SDK config.\n * @param parameters - Optional `chainId`; defaults to the config's `defaultChainId`.\n * @returns The selector set matching the chain's contracts generation.\n * @throws {SymmError} `UNSUPPORTED_CHAIN` when the chain is not configured.\n */\nexport function getInstantTradeRequiredSelectors(\n config: Config,\n parameters: { chainId?: number } = {},\n): typeof INSTANT_TRADE_REQUIRED_SELECTORS | typeof LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS {\n return config.getChainConfig(parameters.chainId).contractsVersion === \"0.8.5\"\n ? LEGACY_INSTANT_TRADE_REQUIRED_SELECTORS\n : INSTANT_TRADE_REQUIRED_SELECTORS;\n}\n"],"mappings":";;;;AAKA,SAAS,EAAgB,GAAU,GAAmB;CACpD,IAAM,IAAW,EAAI,MAAM,MAAS,EAAK,SAAS,cAAc,EAAK,SAAS,CAAI;CAClF,IAAI,CAAC,GAAU,MAAU,MAAM,4BAA4B,EAAK,cAAc;CAC9E,OAAO,EAAmB,CAAQ;AACpC;AAQA,IAAa,IAAsC,EAAgB,GAAwB,mBAAmB,GAOjG,IAA2B,EAAgB,GAAkB,WAAW,GASxE,IAAmD,EAC9D,GACA,+BACF,GAKa,IAA0C,EAAgB,GAAkB,wBAAwB,GAwBpG,IAAmC;CAC9C;CACA;CACA;AACF,GAOa,IAA0C;CACrD;CACA;CACA;AACF;AAgBA,SAAgB,EACd,GACA,IAAmC,CAAC,GACsD;CAC1F,OAAO,EAAO,eAAe,EAAW,OAAO,EAAE,qBAAqB,UAClE,IACA;AACN"}
@@ -81,8 +81,11 @@ export interface CalculateTradeParamsReturnType {
81
81
  *
82
82
  * Steps:
83
83
  * 1. `requestedOpenPrice = markPrice × (1 ± slippage/100)` trimmed to `pricePrecision`.
84
- * 2. `quantityBasic = userInput / requestedOpenPrice` (when `inputField === "PRICE"`) or
84
+ * 2. `quantityBasic = userInput / markPrice` (when `inputField === "PRICE"`) or
85
85
  * `userInput` (when `inputField === "TOKEN"`) trimmed to `quantityPrecision`.
86
+ * Sized at the raw mark price, never the slippage-adjusted bound: `V × L` of
87
+ * notional at mark `M` is `V × L / M` units on every fill, so changing the
88
+ * slippage setting moves only the price bound and never resizes the position.
86
89
  * 3. `notionalBasic = quantityBasic × requestedOpenPrice`.
87
90
  * 4. `cva / lf / partyAmm / partyBmm = notionalBasic × percent / 100`.
88
91
  * 5. `quantity = quantityBasic × leverage` trimmed to `quantityPrecision`.
@@ -91,6 +94,65 @@ export interface CalculateTradeParamsReturnType {
91
94
  * @returns `null` when `markPrice` is zero/NaN or `userInput` is invalid.
92
95
  */
93
96
  export declare function calculateTradeParams(parameters: CalculateTradeParamsParameters): CalculateTradeParamsReturnType | null;
97
+ /**
98
+ * Solver fees charged on the position, funded from the VA at open.
99
+ */
100
+ export interface SolverFees {
101
+ /** `hedgerFeeOpen × notional`, decimal string. */
102
+ openSolverFee: string;
103
+ /**
104
+ * Close fee provisioned at open, decimal string. The solver charges more to
105
+ * close a freshly opened position, so — since the holding time is unknown at
106
+ * open — this provisions the **worst case**: `hedgerFeeCloseEarlyRate ×
107
+ * notional` when the early-rate field is supplied, else the flat
108
+ * `hedgerFeeClose × notional`.
109
+ */
110
+ closeSolverFee: string;
111
+ }
112
+ /**
113
+ * Compute the solver's open and close fees on the leveraged notional.
114
+ *
115
+ * The solver charges its fees from the **VA balance**, so both legs must ride
116
+ * the `addMargin` transfer from the SubAccount into the VA. The open leg is
117
+ * `hedgerFeeOpen × notional`. The close leg is provisioned for the **worst
118
+ * case**, because the holding time is unknown at open and an early close costs
119
+ * more: when `hedgerFeeCloseEarlyRate` is supplied it uses the peak rate (the
120
+ * rate at holding time 0); without it it falls back to the flat
121
+ * `hedgerFeeClose`. An absent, NaN, or negative rate contributes `"0"`.
122
+ */
123
+ export declare function calculateSolverFees({ notional, hedgerFeeOpen, hedgerFeeClose, hedgerFeeCloseEarlyRate, hedgerFeeCloseEarlyThreshold, hedgerFeeCloseStandardThreshold, }: {
124
+ /** Leveraged notional (decimal string). */
125
+ notional: string;
126
+ /** Solver open-fee rate as a decimal fraction string (e.g. `"0.0004"`). */
127
+ hedgerFeeOpen: string | undefined;
128
+ /** Solver standard close-fee rate as a decimal fraction string. Used when no early rate is given. */
129
+ hedgerFeeClose: string | undefined;
130
+ /** Early (peak) close-fee rate; when given, the close leg provisions this worst-case rate. */
131
+ hedgerFeeCloseEarlyRate?: string;
132
+ /** Early-window length in seconds (paired with `hedgerFeeCloseEarlyRate`). */
133
+ hedgerFeeCloseEarlyThreshold?: number;
134
+ /** Standard-rate threshold in seconds (paired with `hedgerFeeCloseEarlyRate`). */
135
+ hedgerFeeCloseStandardThreshold?: number;
136
+ }): SolverFees;
137
+ /**
138
+ * Expected settlement loss charged from the VA when the fill lands away from
139
+ * the mark price the order was sized at.
140
+ *
141
+ * Side-aware: a LONG loses when the expected fill is **above** mark
142
+ * (`(expectedFillPrice − markPrice) × quantity`), a SHORT when it is **below**
143
+ * (`(markPrice − expectedFillPrice) × quantity`). Clamped at zero — a
144
+ * favorable expected fill never shrinks the transfer. Returns `"0"` when no
145
+ * usable estimate exists.
146
+ */
147
+ export declare function calculateExpectedSettlementLoss({ positionType, markPrice, expectedFillPrice, quantity, }: {
148
+ positionType: PositionType;
149
+ /** Mark price the order was sized at (decimal string). */
150
+ markPrice: string;
151
+ /** Solver's estimated fill price (decimal string), when available. */
152
+ expectedFillPrice: string | undefined;
153
+ /** Leveraged order quantity (decimal string). */
154
+ quantity: string;
155
+ }): string;
94
156
  /**
95
157
  * Parameters for {@link calculateMargin}.
96
158
  */
@@ -115,13 +177,38 @@ export interface CalculateMarginParameters {
115
177
  partyAmmPercent?: string;
116
178
  /** On-chain platform fee as decimal string (from {@link computePlatformFee}). */
117
179
  platformFee: string;
180
+ /** Solver open fee funded from the VA (from {@link calculateSolverFees}). Defaults to `"0"`. */
181
+ openSolverFee?: string;
182
+ /** Solver close fee provisioned at open (from {@link calculateSolverFees}). Defaults to `"0"`. */
183
+ closeSolverFee?: string;
184
+ /** Expected settlement loss vs the estimated fill (from {@link calculateExpectedSettlementLoss}). Defaults to `"0"`. */
185
+ expectedSettlementLoss?: string;
186
+ /**
187
+ * Extra funding headroom percent applied to a SHORT's margin basis
188
+ * (`markPrice × (1 + percent/100)`). A SHORT's `requestedOpenPrice` is a
189
+ * contract FLOOR — a fill above it rescales the signed locks up, so the
190
+ * prefund needs headroom the signed values do not carry. Defaults to `0`;
191
+ * the lowcap open flow passes {@link SHORT_FUNDING_BUFFER_PERCENT}.
192
+ */
193
+ shortFundingBufferPercent?: number;
118
194
  }
195
+ /**
196
+ * Funding headroom percent the lowcap open flow applies to a SHORT's margin
197
+ * basis (see {@link CalculateMarginParameters.shortFundingBufferPercent}).
198
+ */
199
+ export declare const SHORT_FUNDING_BUFFER_PERCENT = 1;
119
200
  /**
120
201
  * Compute the `addMargin` amount for lowcap isolation.
121
202
  *
122
- * - **LONG**: `margin = cva + lf + partyAmm + platformFee`.
123
- * - **SHORT**: recompute the locked values at `markPrice`,
124
- * then sum + `platformFee`.
203
+ * - **LONG**: `margin = cva + lf + partyAmm + fees`.
204
+ * - **SHORT**: recompute the locked values at
205
+ * `markPrice × (1 + shortFundingBufferPercent/100)`, then sum + fees — the
206
+ * buffer covers lock growth when the fill lands above the SHORT's floor.
207
+ *
208
+ * `fees = platformFee + openSolverFee + closeSolverFee +
209
+ * expectedSettlementLoss` — the solver charges its fees and the open-price
210
+ * settlement from the **VA balance**, so every leg must ride this SubAccount →
211
+ * VA transfer or the position opens underfunded.
125
212
  *
126
213
  * @returns Margin as decimal string.
127
214
  */
@@ -146,6 +233,23 @@ export interface ComputePlatformFeeRates {
146
233
  * @returns Total fee as decimal string.
147
234
  */
148
235
  export declare function computePlatformFee(rates: ComputePlatformFeeRates, initialNotional: string, closeNotional: string): string;
236
+ /**
237
+ * The two platform-fee legs, separated. Their sum equals
238
+ * {@link computePlatformFee} for the same inputs.
239
+ */
240
+ export interface PlatformFeeLegs {
241
+ /** `openFee × openNotional / 1e18`, decimal string. */
242
+ platformOpenFee: string;
243
+ /** `closeFee × closeNotional / 1e18`, decimal string — provisioned at open. */
244
+ platformCloseFee: string;
245
+ }
246
+ /**
247
+ * Compute the platform open and close fee legs separately.
248
+ *
249
+ * Same math as {@link computePlatformFee}, split per leg for fee-breakdown
250
+ * displays. Rates come from on-chain `getFeeForUser` (18-decimal fixed-point).
251
+ */
252
+ export declare function computePlatformFeeLegs(rates: ComputePlatformFeeRates, openNotional: string, closeNotional: string): PlatformFeeLegs;
149
253
  /**
150
254
  * Convert a decimal string to an 18-decimal-fixed-point `bigint`.
151
255
  *
@@ -182,10 +286,10 @@ export interface CalculateAvailableInstantOpenMarginParameters {
182
286
  * × max(0, 1 − leverage × (openFee + closeFee))
183
287
  * ```
184
288
  *
185
- * A SHORT sizes quantity off `requestOpenPrice = markPrice × (1 − s)` (below
186
- * mark), so a worse fill inflates notional by up to `1 / (1 − s)`; capping usable
187
- * balance at `balance × (1 − s)` covers it. A LONG sets the request above mark,
188
- * so fills deflate notional and need no cap.
289
+ * A SHORT's `requestOpenPrice = markPrice × (1 − s)` is a contract FLOOR: a fill
290
+ * above it rescales the signed locks by up to `1 / (1 − s)`, so capping usable
291
+ * balance at `balance × (1 − s)` covers that growth. A LONG's request price is a
292
+ * ceiling, so fills can only shrink the locks and need no cap.
189
293
  *
190
294
  * @returns spendable margin in 18-decimal wei.
191
295
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"trade-math.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/shared/trade-math.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trade-math.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/shared/trade-math.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,84 @@
1
1
  import { PositionType as e } from "../../../symmio-contracts/symmio/types.js";
2
- import { RoundingMode as t, parseEther as n, toDecimal as r } from "@symmio/utils/decimal";
2
+ import { calculateSolverCloseFee as t } from "../../shared/solver-close-fee.js";
3
+ import { RoundingMode as n, parseEther as r, toDecimal as i } from "@symmio/utils/decimal";
3
4
  //#region src/solvers/instant-open/shared/trade-math.ts
4
- var i = 300n;
5
- function a(e) {
6
- return (e ?? BigInt(Math.floor(Date.now() / 1e3))) + i;
5
+ var a = 300n;
6
+ function o(e) {
7
+ return (e ?? BigInt(Math.floor(Date.now() / 1e3))) + a;
7
8
  }
8
- var o = 900n;
9
- function s(e) {
10
- return (e ?? BigInt(Math.floor(Date.now() / 1e3))) + o;
9
+ var s = 900n;
10
+ function c(e) {
11
+ return (e ?? BigInt(Math.floor(Date.now() / 1e3))) + s;
11
12
  }
12
- function c(n) {
13
- let { markPrice: i, slippage: a, positionType: o, userInput: s, inputField: c, leverage: l, pricePrecision: u, quantityPrecision: d, cvaPercent: f, lfPercent: p, partyAmmPercent: m, partyBmmPercent: h } = n, g = r(i);
13
+ function l(t) {
14
+ let { markPrice: r, slippage: a, positionType: o, userInput: s, inputField: c, leverage: l, pricePrecision: u, quantityPrecision: d, cvaPercent: f, lfPercent: p, partyAmmPercent: m, partyBmmPercent: h } = t, g = i(r);
14
15
  if (g.isZero() || g.isNaN()) return null;
15
- let _ = r(s);
16
+ let _ = i(s);
16
17
  if (_.isZero() || _.isNaN()) return null;
17
- let v = r(100 - (o === e.SHORT ? a : -a)).div(100), y = g.times(v).toFixed(u, t.ROUND_DOWN), b = c === "PRICE" ? _.div(y).toFixed(d, t.ROUND_DOWN) : _.toFixed(d, t.ROUND_DOWN), x = r(b).times(y).toString(), S = r(x).times(r(f)).div(100).toString(), C = r(x).times(r(p)).div(100).toString(), w = r(x).times(r(m)).div(100).toString(), T = r(x).times(r(h)).div(100).toString();
18
+ let v = i(100 - (o === e.SHORT ? a : -a)).div(100), y = g.times(v).toFixed(u, n.ROUND_DOWN), b = c === "PRICE" ? _.div(g).toFixed(d, n.ROUND_DOWN) : _.toFixed(d, n.ROUND_DOWN), x = i(b).times(y).toString(), S = i(x).times(i(f)).div(100).toString(), C = i(x).times(i(p)).div(100).toString(), w = i(x).times(i(m)).div(100).toString(), T = i(x).times(i(h)).div(100).toString();
18
19
  return {
19
20
  requestedOpenPrice: y,
20
21
  quantityBasic: b,
21
- quantity: r(b).times(l).toFixed(d, t.ROUND_DOWN),
22
+ quantity: i(b).times(l).toFixed(d, n.ROUND_DOWN),
22
23
  notionalBasic: x,
23
- notional: r(x).times(l).toString(),
24
+ notional: i(x).times(l).toString(),
24
25
  cva: S,
25
26
  lf: C,
26
27
  partyAmm: w,
27
28
  partyBmm: T
28
29
  };
29
30
  }
30
- function l(t) {
31
- let { positionType: n, markPrice: i, quantityBasic: a, cva: o, lf: s, partyAmm: c, cvaPercent: l, lfPercent: u, partyAmmPercent: d, platformFee: f } = t;
32
- if (n === e.LONG) return r(o).plus(s).plus(c).plus(f).toString();
33
- let p = r(i), m = r(a).times(p).toString(), h = r(m).times(r(l)).div(100).toString(), g = r(m).times(r(u)).div(100).toString(), _ = r(m).times(r(d)).div(100).toString();
34
- return r(h).plus(g).plus(_).plus(f).toString();
31
+ function u({ notional: e, hedgerFeeOpen: n, hedgerFeeClose: r, hedgerFeeCloseEarlyRate: a, hedgerFeeCloseEarlyThreshold: o, hedgerFeeCloseStandardThreshold: s }) {
32
+ let c = i(e), l = (e) => {
33
+ let t = i(e);
34
+ return t.isNaN() || t.isNegative() || c.isNaN() ? "0" : c.times(t).toString();
35
+ }, u = a === void 0 ? l(r) : t({
36
+ hedgerFeeClose: r ?? "0",
37
+ hedgerFeeCloseEarlyRate: a,
38
+ hedgerFeeCloseEarlyThreshold: o ?? 0,
39
+ hedgerFeeCloseStandardThreshold: s ?? 0
40
+ }, {
41
+ notional: e,
42
+ holdingSeconds: 0
43
+ });
44
+ return {
45
+ openSolverFee: l(n),
46
+ closeSolverFee: u
47
+ };
48
+ }
49
+ function d({ positionType: t, markPrice: n, expectedFillPrice: r, quantity: a }) {
50
+ if (r === void 0) return "0";
51
+ let o = i(n), s = i(r), c = i(a);
52
+ if (o.isNaN() || s.isNaN() || s.isZero() || c.isNaN()) return "0";
53
+ let l = t === e.SHORT ? o.minus(s).times(c) : s.minus(o).times(c);
54
+ return l.isNegative() || l.isNaN() ? "0" : l.toString();
35
55
  }
36
- function u(e, t, n) {
37
- let i = r(e.openFee.toString()).times(t), a = r(e.closeFee.toString()).times(n);
38
- return i.plus(a).div(r("1e18")).toString();
56
+ var f = 1;
57
+ function p(t) {
58
+ let { positionType: n, markPrice: r, quantityBasic: a, cva: o, lf: s, partyAmm: c, cvaPercent: l, lfPercent: u, partyAmmPercent: d, platformFee: f, openSolverFee: p = "0", closeSolverFee: m = "0", expectedSettlementLoss: h = "0", shortFundingBufferPercent: g = 0 } = t, _ = i(f).plus(p).plus(m).plus(h);
59
+ if (n === e.LONG) return i(o).plus(s).plus(c).plus(_).toString();
60
+ let v = i(r).times(i(100 + g).div(100)), y = i(a).times(v).toString(), b = i(y).times(i(l)).div(100).toString(), x = i(y).times(i(u)).div(100).toString(), S = i(y).times(i(d)).div(100).toString();
61
+ return i(b).plus(x).plus(S).plus(_).toString();
62
+ }
63
+ function m(e, t, n) {
64
+ let r = i(e.openFee.toString()).times(t), a = i(e.closeFee.toString()).times(n);
65
+ return r.plus(a).div(i("1e18")).toString();
66
+ }
67
+ function h(e, t, n) {
68
+ let r = i("1e18");
69
+ return {
70
+ platformOpenFee: i(e.openFee.toString()).times(t).div(r).toString(),
71
+ platformCloseFee: i(e.closeFee.toString()).times(n).div(r).toString()
72
+ };
39
73
  }
40
- function d(e) {
41
- return BigInt(n(e).toFixed(0, t.ROUND_DOWN));
74
+ function g(e) {
75
+ return BigInt(r(e).toFixed(0, n.ROUND_DOWN));
42
76
  }
43
- function f(t) {
77
+ function _(t) {
44
78
  let { balance: n, openFee: r, closeFee: i, slippageFractionWei: a, leverage: o, positionType: s } = t, c = 10n ** 18n, l = s === e.SHORT ? a >= c ? 0n : c - a : c, u = BigInt(o) * (r + i), d = u >= c ? 0n : c - u;
45
79
  return n * l / c * d / c;
46
80
  }
47
81
  //#endregion
48
- export { i as MARKET_ORDER_DEADLINE_SECONDS, f as calculateAvailableInstantOpenMargin, l as calculateMargin, c as calculateTradeParams, u as computePlatformFee, s as getLimitOrderDeadline, a as getMarketOrderDeadline, d as toWeiBigInt };
82
+ export { a as MARKET_ORDER_DEADLINE_SECONDS, f as SHORT_FUNDING_BUFFER_PERCENT, _ as calculateAvailableInstantOpenMargin, d as calculateExpectedSettlementLoss, p as calculateMargin, u as calculateSolverFees, l as calculateTradeParams, m as computePlatformFee, h as computePlatformFeeLegs, c as getLimitOrderDeadline, o as getMarketOrderDeadline, g as toWeiBigInt };
49
83
 
50
84
  //# sourceMappingURL=trade-math.js.map