@lightconexyz/lightcone-sdk 0.6.1 → 0.7.1

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 (169) hide show
  1. package/README.md +6 -2
  2. package/dist/auth/client.d.ts.map +1 -1
  3. package/dist/auth/client.js +2 -0
  4. package/dist/auth/client.js.map +1 -1
  5. package/dist/auth/index.d.ts +15 -0
  6. package/dist/auth/index.d.ts.map +1 -1
  7. package/dist/auth/index.js +10 -1
  8. package/dist/auth/index.js.map +1 -1
  9. package/dist/client.d.ts +17 -7
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +36 -13
  12. package/dist/client.js.map +1 -1
  13. package/dist/context.d.ts +7 -1
  14. package/dist/context.d.ts.map +1 -1
  15. package/dist/context.js +60 -6
  16. package/dist/context.js.map +1 -1
  17. package/dist/domain/admin/client.d.ts +11 -1
  18. package/dist/domain/admin/client.d.ts.map +1 -1
  19. package/dist/domain/admin/client.js +39 -4
  20. package/dist/domain/admin/client.js.map +1 -1
  21. package/dist/domain/admin/wire.d.ts +37 -12
  22. package/dist/domain/admin/wire.d.ts.map +1 -1
  23. package/dist/domain/admin/wire.js.map +1 -1
  24. package/dist/domain/market/client.js +1 -1
  25. package/dist/domain/market/client.js.map +1 -1
  26. package/dist/domain/market/convert.js +1 -1
  27. package/dist/domain/market/convert.js.map +1 -1
  28. package/dist/domain/market/index.d.ts +8 -1
  29. package/dist/domain/market/index.d.ts.map +1 -1
  30. package/dist/domain/market/index.js +12 -0
  31. package/dist/domain/market/index.js.map +1 -1
  32. package/dist/domain/market/outcome.d.ts +1 -0
  33. package/dist/domain/market/outcome.d.ts.map +1 -1
  34. package/dist/domain/market/outcome.js +1 -0
  35. package/dist/domain/market/outcome.js.map +1 -1
  36. package/dist/domain/market/tokens.d.ts +2 -0
  37. package/dist/domain/market/tokens.d.ts.map +1 -1
  38. package/dist/domain/market/tokens.js +6 -1
  39. package/dist/domain/market/tokens.js.map +1 -1
  40. package/dist/domain/market/wire.d.ts +23 -2
  41. package/dist/domain/market/wire.d.ts.map +1 -1
  42. package/dist/domain/market/wire.js +5 -0
  43. package/dist/domain/market/wire.js.map +1 -1
  44. package/dist/domain/metrics/client.d.ts +3 -3
  45. package/dist/domain/metrics/client.d.ts.map +1 -1
  46. package/dist/domain/metrics/client.js +4 -4
  47. package/dist/domain/metrics/client.js.map +1 -1
  48. package/dist/domain/metrics/wire.d.ts +5 -1
  49. package/dist/domain/metrics/wire.d.ts.map +1 -1
  50. package/dist/domain/metrics/wire.js.map +1 -1
  51. package/dist/domain/notification/client.d.ts +2 -2
  52. package/dist/domain/notification/client.d.ts.map +1 -1
  53. package/dist/domain/notification/client.js +3 -3
  54. package/dist/domain/notification/client.js.map +1 -1
  55. package/dist/domain/notification/index.d.ts +3 -1
  56. package/dist/domain/notification/index.d.ts.map +1 -1
  57. package/dist/domain/notification/index.js.map +1 -1
  58. package/dist/domain/order/client.d.ts +12 -10
  59. package/dist/domain/order/client.d.ts.map +1 -1
  60. package/dist/domain/order/client.js +20 -13
  61. package/dist/domain/order/client.js.map +1 -1
  62. package/dist/domain/order/convert.d.ts +1 -1
  63. package/dist/domain/order/convert.d.ts.map +1 -1
  64. package/dist/domain/order/convert.js +2 -2
  65. package/dist/domain/order/convert.js.map +1 -1
  66. package/dist/domain/order/index.d.ts +2 -1
  67. package/dist/domain/order/index.d.ts.map +1 -1
  68. package/dist/domain/order/index.js +11 -3
  69. package/dist/domain/order/index.js.map +1 -1
  70. package/dist/domain/orderbook/client.d.ts +6 -2
  71. package/dist/domain/orderbook/client.d.ts.map +1 -1
  72. package/dist/domain/orderbook/client.js +17 -0
  73. package/dist/domain/orderbook/client.js.map +1 -1
  74. package/dist/domain/position/builders.d.ts +11 -8
  75. package/dist/domain/position/builders.d.ts.map +1 -1
  76. package/dist/domain/position/builders.js +31 -25
  77. package/dist/domain/position/builders.js.map +1 -1
  78. package/dist/domain/position/client.d.ts +21 -15
  79. package/dist/domain/position/client.d.ts.map +1 -1
  80. package/dist/domain/position/client.js +43 -22
  81. package/dist/domain/position/client.js.map +1 -1
  82. package/dist/domain/referral/client.d.ts +2 -2
  83. package/dist/domain/referral/client.d.ts.map +1 -1
  84. package/dist/domain/referral/client.js +3 -3
  85. package/dist/domain/referral/client.js.map +1 -1
  86. package/dist/domain/trade/client.d.ts +1 -0
  87. package/dist/domain/trade/client.d.ts.map +1 -1
  88. package/dist/domain/trade/client.js +14 -0
  89. package/dist/domain/trade/client.js.map +1 -1
  90. package/dist/domain/trade/wire.d.ts +6 -0
  91. package/dist/domain/trade/wire.d.ts.map +1 -1
  92. package/dist/domain/trade/wire.js.map +1 -1
  93. package/dist/env.d.ts +6 -1
  94. package/dist/env.d.ts.map +1 -1
  95. package/dist/env.js +19 -9
  96. package/dist/env.js.map +1 -1
  97. package/dist/http/client.d.ts +7 -7
  98. package/dist/http/client.d.ts.map +1 -1
  99. package/dist/http/client.js +15 -12
  100. package/dist/http/client.js.map +1 -1
  101. package/dist/index.d.ts +1 -1
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js.map +1 -1
  104. package/dist/prelude.d.ts +8 -7
  105. package/dist/prelude.d.ts.map +1 -1
  106. package/dist/prelude.js +7 -6
  107. package/dist/prelude.js.map +1 -1
  108. package/dist/privy/index.d.ts +1 -1
  109. package/dist/privy/index.js.map +1 -1
  110. package/dist/program/accounts.d.ts +12 -7
  111. package/dist/program/accounts.d.ts.map +1 -1
  112. package/dist/program/accounts.js +38 -16
  113. package/dist/program/accounts.js.map +1 -1
  114. package/dist/program/builder.d.ts +0 -4
  115. package/dist/program/builder.d.ts.map +1 -1
  116. package/dist/program/builder.js +0 -8
  117. package/dist/program/builder.js.map +1 -1
  118. package/dist/program/constants.d.ts +20 -7
  119. package/dist/program/constants.d.ts.map +1 -1
  120. package/dist/program/constants.js +21 -8
  121. package/dist/program/constants.js.map +1 -1
  122. package/dist/program/error.d.ts +25 -1
  123. package/dist/program/error.d.ts.map +1 -1
  124. package/dist/program/error.js +72 -0
  125. package/dist/program/error.js.map +1 -1
  126. package/dist/program/index.d.ts +7 -7
  127. package/dist/program/index.d.ts.map +1 -1
  128. package/dist/program/index.js +36 -9
  129. package/dist/program/index.js.map +1 -1
  130. package/dist/program/instructions.d.ts +184 -71
  131. package/dist/program/instructions.d.ts.map +1 -1
  132. package/dist/program/instructions.js +573 -140
  133. package/dist/program/instructions.js.map +1 -1
  134. package/dist/program/orders.js +2 -2
  135. package/dist/program/orders.js.map +1 -1
  136. package/dist/program/pda.d.ts +21 -3
  137. package/dist/program/pda.d.ts.map +1 -1
  138. package/dist/program/pda.js +43 -6
  139. package/dist/program/pda.js.map +1 -1
  140. package/dist/program/types.d.ts +139 -21
  141. package/dist/program/types.d.ts.map +1 -1
  142. package/dist/program/types.js.map +1 -1
  143. package/dist/program/utils.d.ts +31 -2
  144. package/dist/program/utils.d.ts.map +1 -1
  145. package/dist/program/utils.js +132 -5
  146. package/dist/program/utils.js.map +1 -1
  147. package/dist/rpc.d.ts +6 -1
  148. package/dist/rpc.d.ts.map +1 -1
  149. package/dist/rpc.js +9 -7
  150. package/dist/rpc.js.map +1 -1
  151. package/dist/rpcFailover.d.ts +22 -0
  152. package/dist/rpcFailover.d.ts.map +1 -0
  153. package/dist/rpcFailover.js +71 -0
  154. package/dist/rpcFailover.js.map +1 -0
  155. package/dist/shared/fmt/constants.d.ts +5 -0
  156. package/dist/shared/fmt/constants.d.ts.map +1 -0
  157. package/dist/shared/fmt/constants.js +25 -0
  158. package/dist/shared/fmt/constants.js.map +1 -0
  159. package/dist/shared/fmt/decimal.d.ts +7 -0
  160. package/dist/shared/fmt/decimal.d.ts.map +1 -1
  161. package/dist/shared/fmt/decimal.js +28 -20
  162. package/dist/shared/fmt/decimal.js.map +1 -1
  163. package/dist/shared/fmt/num.d.ts +7 -0
  164. package/dist/shared/fmt/num.d.ts.map +1 -1
  165. package/dist/shared/fmt/num.js +27 -15
  166. package/dist/shared/fmt/num.js.map +1 -1
  167. package/dist/ws/client.node.js +1 -1
  168. package/dist/ws/client.node.js.map +1 -1
  169. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../src/program/orders.ts"],"names":[],"mappings":";;;;;;AA0CA,oCAKC;AAeD,8BAeC;AAKD,oCAEC;AAKD,0CAEC;AAWD,8BAMC;AAKD,sCAaC;AAMD,oDASC;AAsBD,oDAqCC;AAKD,wDAwDC;AAiBD,wCAsBC;AAKD,4CAgCC;AAKD,gDASC;AAMD,sCAqBC;AASD,wCAeC;AAKD,wCAeC;AAKD,oDAMC;AAKD,oDAMC;AASD,wCASC;AAKD,wCAqBC;AAKD,gDAeC;AASD,oCAEC;AAKD,4BAEC;AAMD,wCASC;AAgBD,gDAEC;AAMD,8DAEC;AAMD,0CAIC;AAMD,wDAIC;AAMD,4CAOC;AAMD,sDAEC;AAMD,sCAWC;AAgBD,0CAuBC;AAxpBD,6CAAqD;AACrD,yCAAiC;AACjC,gDAAwB;AAOxB,mCAMiB;AACjB,2CAAyC;AACzC,mCASiB;AACjB,mCAA0C;AAE1C,SAAS,kBAAkB,CAAC,KAAa,EAAE,KAAa;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,uBAAe,CAAC,QAAQ,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY;IAC1B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;AACtD,CAAC;AAGD,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,KAAkB;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,IAAA,eAAO,EAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAA,eAAO,EAAC,KAAK,CAAC,IAAI,CAAC;QACnB,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;QACtB,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;QACvB,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;QAC1B,IAAA,YAAI,EAAC,KAAK,CAAC,IAAI,CAAC;QAChB,IAAA,eAAO,EAAC,KAAK,CAAC,QAAQ,CAAC;QACvB,IAAA,eAAO,EAAC,KAAK,CAAC,SAAS,CAAC;QACxB,IAAA,eAAO,EAAC,KAAK,CAAC,UAAU,CAAC;KAC1B,CAAC,CAAC;IAEH,OAAO,IAAA,iBAAS,EAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,KAAkB;IAC7C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAkB;IAChD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;GAIG;AACH,SAAgB,SAAS,CAAC,KAAkB,EAAE,MAAe;IAC3D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,KAAqC,EACrC,MAAe;IAEf,MAAM,iBAAiB,GAAgB;QACrC,GAAG,KAAK;QACR,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;KAC5B,CAAC;IACF,MAAM,SAAS,GAAG,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACvD,OAAO;QACL,GAAG,KAAK;QACR,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAAkB;IACrD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,gBAAI,CAAC,QAAQ,CAAC,MAAM,CACzB,YAAY,EACZ,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CACtB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,oBAAoB,CAAC,KAAkB;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAU,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,IAAA,eAAO,EAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IAEZ,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,EAAE,CAAC;IAEb,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,EAAE,CAAC;IAEb,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,EAAE,CAAC;IAEb,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,EAAE,CAAC;IAEb,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5B,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,CAAC,CAAC;IAEZ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,IAAY;IACjD,IAAI,IAAI,CAAC,MAAM,GAAG,sBAAU,CAAC,YAAY,EAAE,CAAC;QAC1C,MAAM,uBAAe,CAAC,iBAAiB,CAAC,aAAa,EAAE,sBAAU,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC3B,MAAM,uBAAe,CAAC,aAAa,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,EAAE,CAAC;IAEb,MAAM,MAAM,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,EAAE,CAAC;IAEb,MAAM,QAAQ,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,EAAE,CAAC;IAEb,MAAM,SAAS,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,EAAE,CAAC;IAEb,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAc,CAAC;IACvC,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IAElE,OAAO;QACL,KAAK;QACL,IAAI;QACJ,KAAK;QACL,MAAM;QACN,QAAQ;QACR,SAAS;QACT,IAAI;QACJ,QAAQ;QACR,SAAS;QACT,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,SAAgB,cAAc,CAAC,KAAY;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAU,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,IAAA,eAAO,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5B,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAA,eAAO,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,sBAAU,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,uBAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,sBAAU,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAc,CAAC;IACvC,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEhE,OAAO;QACL,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,QAAQ;QACR,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,KAAkB;IACnD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAC3B,KAAY,EACZ,KAAgB,EAChB,MAAiB,EACjB,QAAmB,EACnB,SAAoB,EACpB,SAAiB;IAEjB,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK;QACL,MAAM;QACN,QAAQ;QACR,SAAS;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS;KACV,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,cAAc,CAC5B,MAAsB;IAEtB,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE;QACnC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,iBAAS,CAAC,GAAG;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,MAAsB;IAEtB,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE;QACnC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,iBAAS,CAAC,GAAG;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAsB,EACtB,MAAe;IAEf,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAsB,EACtB,MAAe;IAEf,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAA0B,EAC1B,WAAoB;IAEpB,IAAI,KAAK,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,QAAqB,EACrB,SAAsB;IAEtB,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAS,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAS,CAAC,GAAG,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IACE,QAAQ,CAAC,QAAQ,KAAK,EAAE;QACxB,QAAQ,CAAC,SAAS,KAAK,EAAE;QACzB,SAAS,CAAC,QAAQ,KAAK,EAAE;QACzB,SAAS,CAAC,SAAS,KAAK,EAAE,EAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;QACtC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,UAAuB,EACvB,eAAuB;IAEvB,IAAI,UAAU,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC/B,MAAM,uBAAe,CAAC,cAAc,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;IAE9E,IAAI,MAAM,GAAG,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC5C,MAAM,uBAAe,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,YAAY,CAAC,KAAkB;IAC7C,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,KAAkB;IACzC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAC5B,KAAqC,EACrC,aAAqB;IAErB,MAAM,QAAQ,GAAG,cAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3B,MAAM,uBAAe,CAAC,gBAAgB,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,yCAAoD;AAA3C,0GAAA,iBAAiB,OAAA;AAE1B,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,SAAiB;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,cAAsB;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,SAAiB,EAAE,MAAe;IAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,gBAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,cAAsB,EAAE,MAAe;IAC5E,MAAM,OAAO,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,gBAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,UAAkB,EAClB,WAAmB,EACnB,SAAiB,EACjB,IAAY;IAEZ,OAAO,cAAc,UAAU,IAAI,WAAW,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB;IACnC,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAC3B,UAAkB,EAClB,WAAmB,EACnB,SAAiB,EACjB,IAAY,EACZ,MAAe;IAEf,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,gBAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAgBD,SAAgB,eAAe,CAC7B,KAAkB,EAClB,WAAmB,EACnB,UAAgC,EAAE;IAElC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAC5C,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;QACtC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACrC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;QACvC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC1D,UAAU,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC;QAC7D,UAAU,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC;QAC9D,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;QAC9B,YAAY,EAAE,WAAW;QACzB,GAAG,EAAE,OAAO,CAAC,WAAW;QACxB,aAAa,EAAE,OAAO,CAAC,YAAY;QACnC,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,cAAc,EAAE,OAAO,CAAC,aAAa;KACtC,CAAC;AACJ,CAAC;AAED,sCAAsC;AACzB,QAAA,gBAAgB,GAAG,cAAc,CAAC;AAClC,QAAA,gBAAgB,GAAG,cAAc,CAAC;AAClC,QAAA,oBAAoB,GAAG,kBAAkB,CAAC;AAC1C,QAAA,oBAAoB,GAAG,kBAAkB,CAAC;AAC1C,QAAA,4BAA4B,GAAG,yBAAyB,CAAC;AACzD,QAAA,kBAAkB,GAAG,gBAAgB,CAAC;AACtC,QAAA,wBAAwB,GAAG,qBAAqB,CAAC;AACjD,QAAA,mBAAmB,GAAG,yBAAiB,CAAC;AACxC,QAAA,eAAe,GAAG,cAAc,CAAC;AACjC,QAAA,eAAe,GAAG,aAAa,CAAC","sourcesContent":["import { PublicKey, Keypair } from \"@solana/web3.js\";\nimport { sign } from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport type {\n DepositSource,\n SubmitOrderRequest,\n TimeInForce,\n TriggerType,\n} from \"../shared\";\nimport {\n SignedOrder,\n Order,\n OrderSide,\n BidOrderParams,\n AskOrderParams,\n} from \"./types\";\nimport { ORDER_SIZE } from \"./constants\";\nimport {\n keccak256,\n toU64Le,\n toI64Le,\n toU8,\n toU32Le,\n fromLeBytes,\n fromI64Le,\n deriveConditionId,\n} from \"./utils\";\nimport { ProgramSdkError } from \"./error\";\n\nfunction bigintToSafeNumber(value: bigint, field: string): number {\n const max = BigInt(Number.MAX_SAFE_INTEGER);\n if (value > max || value < -max) {\n throw ProgramSdkError.overflow(`${field} exceeds Number.MAX_SAFE_INTEGER`);\n }\n return Number(value);\n}\n\n/**\n * Generate a random salt for order uniqueness.\n * Capped to Number.MAX_SAFE_INTEGER (2^53 - 1) so the value round-trips\n * through JSON without precision loss.\n */\nexport function generateSalt(): bigint {\n const buf = new Uint8Array(8);\n globalThis.crypto.getRandomValues(buf);\n const raw = fromLeBytes(Buffer.from(buf));\n return raw % (BigInt(Number.MAX_SAFE_INTEGER) + 1n);\n}\n\n\n// ============================================================================\n// ORDER HASHING\n// ============================================================================\n\n/**\n * Hash an order using keccak256\n * Layout (169 bytes - order without signature):\n * nonce (8) || salt (8) || maker (32) || market (32) || baseMint (32) || quoteMint (32) ||\n * side (1) || amountIn (8) || amountOut (8) || expiration (8)\n *\n * @returns 32-byte keccak256 hash\n */\nexport function hashOrder(order: SignedOrder): Buffer {\n const data = Buffer.concat([\n toU64Le(BigInt(order.nonce)),\n toU64Le(order.salt),\n order.maker.toBuffer(),\n order.market.toBuffer(),\n order.baseMint.toBuffer(),\n order.quoteMint.toBuffer(),\n toU8(order.side),\n toU64Le(order.amountIn),\n toU64Le(order.amountOut),\n toI64Le(order.expiration),\n ]);\n\n return keccak256(data);\n}\n\n/**\n * Get the hex-encoded hash of an order\n */\nexport function hashOrderHex(order: SignedOrder): string {\n return hashOrder(order).toString(\"hex\");\n}\n\n/**\n * Get the message to sign for an order (the order hash)\n */\nexport function getOrderMessage(order: SignedOrder): Buffer {\n return hashOrder(order);\n}\n\n// ============================================================================\n// ORDER SIGNING\n// ============================================================================\n\n/**\n * Sign an order with a Keypair.\n * Signs the hex-encoded keccak hash (64-char ASCII string) for cross-compatibility with Rust.\n * Returns 64-byte Ed25519 signature.\n */\nexport function signOrder(order: SignedOrder, signer: Keypair): Buffer {\n const hash = hashOrder(order);\n const hexString = hash.toString(\"hex\");\n const messageBytes = Buffer.from(hexString, \"ascii\");\n const signature = sign.detached(messageBytes, signer.secretKey);\n return Buffer.from(signature);\n}\n\n/**\n * Sign an order and return a new order with the signature attached\n */\nexport function signOrderFull(\n order: Omit<SignedOrder, \"signature\">,\n signer: Keypair\n): SignedOrder {\n const orderWithEmptySig: SignedOrder = {\n ...order,\n signature: Buffer.alloc(64),\n };\n const signature = signOrder(orderWithEmptySig, signer);\n return {\n ...order,\n signature,\n };\n}\n\n/**\n * Verify an order's signature.\n * Verifies against the hex-encoded keccak hash.\n */\nexport function verifyOrderSignature(order: SignedOrder): boolean {\n const hash = hashOrder(order);\n const hexString = hash.toString(\"hex\");\n const messageBytes = Buffer.from(hexString, \"ascii\");\n return sign.detached.verify(\n messageBytes,\n order.signature,\n order.maker.toBytes()\n );\n}\n\n// ============================================================================\n// SIGNED ORDER SERIALIZATION (225 bytes)\n// ============================================================================\n\n/**\n * Serialize a signed order to bytes (233 bytes)\n *\n * Layout:\n * [0..8] nonce (u64)\n * [8..16] salt (u64)\n * [16..48] maker (Pubkey)\n * [48..80] market (Pubkey)\n * [80..112] baseMint (Pubkey)\n * [112..144] quoteMint (Pubkey)\n * [144] side (u8)\n * [145..153] amountIn (u64)\n * [153..161] amountOut (u64)\n * [161..169] expiration (i64)\n * [169..233] signature (64 bytes)\n */\nexport function serializeSignedOrder(order: SignedOrder): Buffer {\n const buffer = Buffer.alloc(ORDER_SIZE.SIGNED_ORDER);\n let offset = 0;\n\n toU64Le(BigInt(order.nonce)).copy(buffer, offset);\n offset += 8;\n\n toU64Le(order.salt).copy(buffer, offset);\n offset += 8;\n\n order.maker.toBuffer().copy(buffer, offset);\n offset += 32;\n\n order.market.toBuffer().copy(buffer, offset);\n offset += 32;\n\n order.baseMint.toBuffer().copy(buffer, offset);\n offset += 32;\n\n order.quoteMint.toBuffer().copy(buffer, offset);\n offset += 32;\n\n buffer[offset] = order.side;\n offset += 1;\n\n toU64Le(order.amountIn).copy(buffer, offset);\n offset += 8;\n\n toU64Le(order.amountOut).copy(buffer, offset);\n offset += 8;\n\n toI64Le(order.expiration).copy(buffer, offset);\n offset += 8;\n\n order.signature.copy(buffer, offset);\n\n return buffer;\n}\n\n/**\n * Deserialize a signed order from bytes\n */\nexport function deserializeSignedOrder(data: Buffer): SignedOrder {\n if (data.length < ORDER_SIZE.SIGNED_ORDER) {\n throw ProgramSdkError.invalidDataLength(\"SignedOrder\", ORDER_SIZE.SIGNED_ORDER, data.length);\n }\n\n let offset = 0;\n\n const nonceU64 = fromLeBytes(data.subarray(offset, offset + 8));\n if (nonceU64 > 0xFFFFFFFFn) {\n throw ProgramSdkError.serialization(`Nonce exceeds u32 range: ${nonceU64}`);\n }\n const nonce = Number(nonceU64);\n offset += 8;\n\n const salt = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const maker = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const market = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const baseMint = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const quoteMint = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const side = data[offset] as OrderSide;\n offset += 1;\n\n const amountIn = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const amountOut = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const expiration = fromI64Le(data.subarray(offset, offset + 8));\n offset += 8;\n\n const signature = Buffer.from(data.subarray(offset, offset + 64));\n\n return {\n nonce,\n salt,\n maker,\n market,\n baseMint,\n quoteMint,\n side,\n amountIn,\n amountOut,\n expiration,\n signature,\n };\n}\n\n// ============================================================================\n// ORDER SERIALIZATION (29 bytes)\n// ============================================================================\n\n/**\n * Serialize a compact order to bytes (37 bytes)\n *\n * Layout:\n * [0..4] nonce (u32)\n * [4..12] salt (u64)\n * [12] side (u8)\n * [13..21] amountIn (u64)\n * [21..29] amountOut (u64)\n * [29..37] expiration (i64)\n */\nexport function serializeOrder(order: Order): Buffer {\n const buffer = Buffer.alloc(ORDER_SIZE.ORDER);\n let offset = 0;\n\n toU32Le(order.nonce).copy(buffer, offset);\n offset += 4;\n\n toU64Le(order.salt).copy(buffer, offset);\n offset += 8;\n\n buffer[offset] = order.side;\n offset += 1;\n\n toU64Le(order.amountIn).copy(buffer, offset);\n offset += 8;\n\n toU64Le(order.amountOut).copy(buffer, offset);\n offset += 8;\n\n toI64Le(order.expiration).copy(buffer, offset);\n\n return buffer;\n}\n\n/**\n * Deserialize a compact order from bytes\n */\nexport function deserializeOrder(data: Buffer): Order {\n if (data.length < ORDER_SIZE.ORDER) {\n throw ProgramSdkError.invalidDataLength(\"Order\", ORDER_SIZE.ORDER, data.length);\n }\n\n let offset = 0;\n\n const nonce = data.readUInt32LE(offset);\n offset += 4;\n\n const salt = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const side = data[offset] as OrderSide;\n offset += 1;\n\n const amountIn = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const amountOut = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const expiration = fromI64Le(data.subarray(offset, offset + 8));\n\n return {\n nonce,\n salt,\n side,\n amountIn,\n amountOut,\n expiration,\n };\n}\n\n/**\n * Convert a SignedOrder to a compact Order (drop maker)\n */\nexport function signedOrderToOrder(order: SignedOrder): Order {\n return {\n nonce: order.nonce,\n salt: order.salt,\n side: order.side,\n amountIn: order.amountIn,\n amountOut: order.amountOut,\n expiration: order.expiration,\n };\n}\n\n/**\n * Expand a compact Order back to a full SignedOrder using provided pubkeys and signature.\n * Rust equivalent: Order::to_signed()\n */\nexport function orderToSigned(\n order: Order,\n maker: PublicKey,\n market: PublicKey,\n baseMint: PublicKey,\n quoteMint: PublicKey,\n signature: Buffer\n): SignedOrder {\n return {\n nonce: order.nonce,\n salt: order.salt,\n maker,\n market,\n baseMint,\n quoteMint,\n side: order.side,\n amountIn: order.amountIn,\n amountOut: order.amountOut,\n expiration: order.expiration,\n signature,\n };\n}\n\n// ============================================================================\n// ORDER CREATION HELPERS\n// ============================================================================\n\n/**\n * Create a BID order (buyer wants base tokens, pays with quote tokens)\n */\nexport function createBidOrder(\n params: BidOrderParams\n): Omit<SignedOrder, \"signature\"> {\n return {\n nonce: params.nonce,\n salt: params.salt ?? generateSalt(),\n maker: params.maker,\n market: params.market,\n baseMint: params.baseMint,\n quoteMint: params.quoteMint,\n side: OrderSide.BID,\n amountIn: params.amountIn,\n amountOut: params.amountOut,\n expiration: params.expiration ?? 0n,\n };\n}\n\n/**\n * Create an ASK order (seller offers base tokens, receives quote tokens)\n */\nexport function createAskOrder(\n params: AskOrderParams\n): Omit<SignedOrder, \"signature\"> {\n return {\n nonce: params.nonce,\n salt: params.salt ?? generateSalt(),\n maker: params.maker,\n market: params.market,\n baseMint: params.baseMint,\n quoteMint: params.quoteMint,\n side: OrderSide.ASK,\n amountIn: params.amountIn,\n amountOut: params.amountOut,\n expiration: params.expiration ?? 0n,\n };\n}\n\n/**\n * Create and sign a BID order in one step\n */\nexport function createSignedBidOrder(\n params: BidOrderParams,\n signer: Keypair\n): SignedOrder {\n const order = createBidOrder(params);\n return signOrderFull(order, signer);\n}\n\n/**\n * Create and sign an ASK order in one step\n */\nexport function createSignedAskOrder(\n params: AskOrderParams,\n signer: Keypair\n): SignedOrder {\n const order = createAskOrder(params);\n return signOrderFull(order, signer);\n}\n\n// ============================================================================\n// ORDER VALIDATION\n// ============================================================================\n\n/**\n * Check if an order has expired\n */\nexport function isOrderExpired(\n order: SignedOrder | Order,\n currentTime?: bigint\n): boolean {\n if (order.expiration === 0n) {\n return false;\n }\n const now = currentTime ?? BigInt(Math.floor(Date.now() / 1000));\n return order.expiration <= now;\n}\n\n/**\n * Validate order crossing (orders are compatible for matching)\n */\nexport function ordersCanCross(\n buyOrder: SignedOrder,\n sellOrder: SignedOrder\n): boolean {\n if (buyOrder.side !== OrderSide.BID || sellOrder.side !== OrderSide.ASK) {\n return false;\n }\n\n if (\n buyOrder.amountIn === 0n ||\n buyOrder.amountOut === 0n ||\n sellOrder.amountIn === 0n ||\n sellOrder.amountOut === 0n\n ) {\n return false;\n }\n\n return (\n buyOrder.amountIn * sellOrder.amountIn >=\n buyOrder.amountOut * sellOrder.amountOut\n );\n}\n\n/**\n * Calculate the fill amounts for a trade\n */\nexport function calculateTakerFill(\n makerOrder: SignedOrder,\n makerFillAmount: bigint\n): bigint {\n if (makerOrder.amountIn === 0n) {\n throw ProgramSdkError.divisionByZero();\n }\n\n const result = (makerFillAmount * makerOrder.amountOut) / makerOrder.amountIn;\n\n if (result > BigInt(\"18446744073709551615\")) {\n throw ProgramSdkError.overflow(\"Taker fill exceeds u64 max\");\n }\n\n return result;\n}\n\n// ============================================================================\n// SIGNED ORDER HELPERS\n// ============================================================================\n\n/**\n * Get signature as hex string (128 chars)\n */\nexport function signatureHex(order: SignedOrder): string {\n return order.signature.toString(\"hex\");\n}\n\n/**\n * Check if a signed order has a non-zero signature\n */\nexport function isSigned(order: SignedOrder): boolean {\n return !order.signature.every((b) => b === 0);\n}\n\n/**\n * Apply an external base58-encoded signature to an unsigned order.\n * Rust equivalent: OrderPayload::apply_signature()\n */\nexport function applySignature(\n order: Omit<SignedOrder, \"signature\">,\n signatureBs58: string\n): SignedOrder {\n const sigBytes = bs58.decode(signatureBs58);\n if (sigBytes.length !== 64) {\n throw ProgramSdkError.invalidSignature();\n }\n return { ...order, signature: Buffer.from(sigBytes) };\n}\n\n/**\n * Derive orderbook ID from base and quote token addresses.\n * Delegates to the canonical implementation in shared/types.\n */\nexport { deriveOrderbookId } from \"../shared/types\";\n\n// ============================================================================\n// CANCEL ORDER SIGNING\n// ============================================================================\n\n/**\n * Build the message bytes for cancelling an order.\n * The message is the order hash hex string as UTF-8 bytes (same protocol as order signing).\n */\nexport function cancelOrderMessage(orderHash: string): Uint8Array {\n return Buffer.from(orderHash, \"ascii\");\n}\n\n/**\n * Build the message bytes for cancelling a trigger order.\n * The message is the trigger order ID as UTF-8 bytes.\n */\nexport function cancelTriggerOrderMessage(triggerOrderId: string): Uint8Array {\n return Buffer.from(triggerOrderId, \"ascii\");\n}\n\n/**\n * Sign a cancel order request.\n * Returns the signature as a 128-char hex string.\n */\nexport function signCancelOrder(orderHash: string, signer: Keypair): string {\n const message = cancelOrderMessage(orderHash);\n const signature = sign.detached(message, signer.secretKey);\n return Buffer.from(signature).toString(\"hex\");\n}\n\n/**\n * Sign a cancel trigger-order request.\n * Returns the signature as a 128-char hex string.\n */\nexport function signCancelTriggerOrder(triggerOrderId: string, signer: Keypair): string {\n const message = cancelTriggerOrderMessage(triggerOrderId);\n const signature = sign.detached(message, signer.secretKey);\n return Buffer.from(signature).toString(\"hex\");\n}\n\n/**\n * Build the message string for cancelling all orders.\n * Format: \"cancel_all:{pubkey}:{orderbook_id}:{timestamp}:{salt}\"\n */\nexport function cancelAllMessage(\n userPubkey: string,\n orderbookId: string,\n timestamp: number,\n salt: string\n): string {\n return `cancel_all:${userPubkey}:${orderbookId}:${timestamp}:${salt}`;\n}\n\n/**\n * Generate a random salt for cancel-all replay protection.\n * Returns an RFC 4122 UUID v4 string.\n */\nexport function generateCancelAllSalt(): string {\n return globalThis.crypto.randomUUID();\n}\n\n/**\n * Sign a cancel-all orders request.\n * Returns the signature as a 128-char hex string.\n */\nexport function signCancelAll(\n userPubkey: string,\n orderbookId: string,\n timestamp: number,\n salt: string,\n signer: Keypair\n): string {\n const message = cancelAllMessage(userPubkey, orderbookId, timestamp, salt);\n const messageBytes = Buffer.from(message, \"ascii\");\n const signature = sign.detached(messageBytes, signer.secretKey);\n return Buffer.from(signature).toString(\"hex\");\n}\n\n// ============================================================================\n// SUBMIT REQUEST HELPERS\n// ============================================================================\n\n/**\n * Convert a SignedOrder to a SubmitOrderRequest-compatible object\n */\nexport interface SubmitRequestOptions {\n timeInForce?: TimeInForce;\n triggerPrice?: number;\n triggerType?: TriggerType;\n depositSource?: DepositSource;\n}\n\nexport function toSubmitRequest(\n order: SignedOrder,\n orderbookId: string,\n options: SubmitRequestOptions = {}\n): SubmitOrderRequest {\n return {\n maker: order.maker.toBase58(),\n nonce: order.nonce,\n salt: bigintToSafeNumber(order.salt, \"salt\"),\n market_pubkey: order.market.toBase58(),\n base_token: order.baseMint.toBase58(),\n quote_token: order.quoteMint.toBase58(),\n side: order.side,\n amount_in: bigintToSafeNumber(order.amountIn, \"amount_in\"),\n amount_out: bigintToSafeNumber(order.amountOut, \"amount_out\"),\n expiration: bigintToSafeNumber(order.expiration, \"expiration\"),\n signature: signatureHex(order),\n orderbook_id: orderbookId,\n tif: options.timeInForce,\n trigger_price: options.triggerPrice,\n trigger_type: options.triggerType,\n deposit_source: options.depositSource,\n };\n}\n\n// Rust-compatible snake_case aliases.\nexport const is_order_expired = isOrderExpired;\nexport const orders_can_cross = ordersCanCross;\nexport const calculate_taker_fill = calculateTakerFill;\nexport const cancel_order_message = cancelOrderMessage;\nexport const cancel_trigger_order_message = cancelTriggerOrderMessage;\nexport const cancel_all_message = cancelAllMessage;\nexport const generate_cancel_all_salt = generateCancelAllSalt;\nexport const derive_condition_id = deriveConditionId;\nexport const apply_signature = applySignature;\nexport const order_to_signed = orderToSigned;\n"]}
1
+ {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../src/program/orders.ts"],"names":[],"mappings":"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","sourcesContent":["import { PublicKey, Keypair } from \"@solana/web3.js\";\nimport { sign } from \"tweetnacl\";\nimport bs58 from \"bs58\";\nimport type {\n DepositSource,\n SubmitOrderRequest,\n TimeInForce,\n TriggerType,\n} from \"../shared\";\nimport {\n SignedOrder,\n Order,\n OrderSide,\n BidOrderParams,\n AskOrderParams,\n} from \"./types\";\nimport { ORDER_SIZE } from \"./constants\";\nimport {\n keccak256,\n toU64Le,\n toI64Le,\n toU8,\n toU32Le,\n fromLeBytes,\n fromI64Le,\n deriveConditionId,\n} from \"./utils\";\nimport { ProgramSdkError } from \"./error\";\n\nfunction bigintToSafeNumber(value: bigint, field: string): number {\n const max = BigInt(Number.MAX_SAFE_INTEGER);\n if (value > max || value < -max) {\n throw ProgramSdkError.overflow(`${field} exceeds Number.MAX_SAFE_INTEGER`);\n }\n return Number(value);\n}\n\n/**\n * Generate a random salt for order uniqueness.\n * Capped to Number.MAX_SAFE_INTEGER (2^53 - 1) so the value round-trips\n * through JSON without precision loss.\n */\nexport function generateSalt(): bigint {\n const buf = new Uint8Array(8);\n globalThis.crypto.getRandomValues(buf);\n const raw = fromLeBytes(Buffer.from(buf));\n return raw % (BigInt(Number.MAX_SAFE_INTEGER) + 1n);\n}\n\n\n// ============================================================================\n// ORDER HASHING\n// ============================================================================\n\n/**\n * Hash an order using keccak256\n * Layout (169 bytes - order without signature):\n * nonce (8) || salt (8) || maker (32) || market (32) || baseMint (32) || quoteMint (32) ||\n * side (1) || amountIn (8) || amountOut (8) || expiration (8)\n *\n * @returns 32-byte keccak256 hash\n */\nexport function hashOrder(order: SignedOrder): Buffer {\n const data = Buffer.concat([\n toU64Le(BigInt(order.nonce)),\n toU64Le(order.salt),\n order.maker.toBuffer(),\n order.market.toBuffer(),\n order.baseMint.toBuffer(),\n order.quoteMint.toBuffer(),\n toU8(order.side),\n toU64Le(order.amountIn),\n toU64Le(order.amountOut),\n toI64Le(order.expiration),\n ]);\n\n return keccak256(data);\n}\n\n/**\n * Get the hex-encoded hash of an order\n */\nexport function hashOrderHex(order: SignedOrder): string {\n return hashOrder(order).toString(\"hex\");\n}\n\n/**\n * Get the message to sign for an order (the order hash)\n */\nexport function getOrderMessage(order: SignedOrder): Buffer {\n return hashOrder(order);\n}\n\n// ============================================================================\n// ORDER SIGNING\n// ============================================================================\n\n/**\n * Sign an order with a Keypair.\n * Signs the hex-encoded keccak hash (64-char ASCII string) for cross-compatibility with Rust.\n * Returns 64-byte Ed25519 signature.\n */\nexport function signOrder(order: SignedOrder, signer: Keypair): Buffer {\n const hash = hashOrder(order);\n const hexString = hash.toString(\"hex\");\n const messageBytes = Buffer.from(hexString, \"ascii\");\n const signature = sign.detached(messageBytes, signer.secretKey);\n return Buffer.from(signature);\n}\n\n/**\n * Sign an order and return a new order with the signature attached\n */\nexport function signOrderFull(\n order: Omit<SignedOrder, \"signature\">,\n signer: Keypair\n): SignedOrder {\n const orderWithEmptySig: SignedOrder = {\n ...order,\n signature: Buffer.alloc(64),\n };\n const signature = signOrder(orderWithEmptySig, signer);\n return {\n ...order,\n signature,\n };\n}\n\n/**\n * Verify an order's signature.\n * Verifies against the hex-encoded keccak hash.\n */\nexport function verifyOrderSignature(order: SignedOrder): boolean {\n const hash = hashOrder(order);\n const hexString = hash.toString(\"hex\");\n const messageBytes = Buffer.from(hexString, \"ascii\");\n return sign.detached.verify(\n messageBytes,\n order.signature,\n order.maker.toBytes()\n );\n}\n\n// ============================================================================\n// SIGNED ORDER SERIALIZATION (233 bytes)\n// ============================================================================\n\n/**\n * Serialize a signed order to bytes (233 bytes)\n *\n * Layout:\n * [0..8] nonce (u64)\n * [8..16] salt (u64)\n * [16..48] maker (Pubkey)\n * [48..80] market (Pubkey)\n * [80..112] baseMint (Pubkey)\n * [112..144] quoteMint (Pubkey)\n * [144] side (u8)\n * [145..153] amountIn (u64)\n * [153..161] amountOut (u64)\n * [161..169] expiration (i64)\n * [169..233] signature (64 bytes)\n */\nexport function serializeSignedOrder(order: SignedOrder): Buffer {\n const buffer = Buffer.alloc(ORDER_SIZE.SIGNED_ORDER);\n let offset = 0;\n\n toU64Le(BigInt(order.nonce)).copy(buffer, offset);\n offset += 8;\n\n toU64Le(order.salt).copy(buffer, offset);\n offset += 8;\n\n order.maker.toBuffer().copy(buffer, offset);\n offset += 32;\n\n order.market.toBuffer().copy(buffer, offset);\n offset += 32;\n\n order.baseMint.toBuffer().copy(buffer, offset);\n offset += 32;\n\n order.quoteMint.toBuffer().copy(buffer, offset);\n offset += 32;\n\n buffer[offset] = order.side;\n offset += 1;\n\n toU64Le(order.amountIn).copy(buffer, offset);\n offset += 8;\n\n toU64Le(order.amountOut).copy(buffer, offset);\n offset += 8;\n\n toI64Le(order.expiration).copy(buffer, offset);\n offset += 8;\n\n order.signature.copy(buffer, offset);\n\n return buffer;\n}\n\n/**\n * Deserialize a signed order from bytes\n */\nexport function deserializeSignedOrder(data: Buffer): SignedOrder {\n if (data.length < ORDER_SIZE.SIGNED_ORDER) {\n throw ProgramSdkError.invalidDataLength(\"SignedOrder\", ORDER_SIZE.SIGNED_ORDER, data.length);\n }\n\n let offset = 0;\n\n const nonceU64 = fromLeBytes(data.subarray(offset, offset + 8));\n if (nonceU64 > 0xFFFFFFFFn) {\n throw ProgramSdkError.serialization(`Nonce exceeds u32 range: ${nonceU64}`);\n }\n const nonce = Number(nonceU64);\n offset += 8;\n\n const salt = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const maker = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const market = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const baseMint = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const quoteMint = new PublicKey(data.subarray(offset, offset + 32));\n offset += 32;\n\n const side = data[offset] as OrderSide;\n offset += 1;\n\n const amountIn = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const amountOut = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const expiration = fromI64Le(data.subarray(offset, offset + 8));\n offset += 8;\n\n const signature = Buffer.from(data.subarray(offset, offset + 64));\n\n return {\n nonce,\n salt,\n maker,\n market,\n baseMint,\n quoteMint,\n side,\n amountIn,\n amountOut,\n expiration,\n signature,\n };\n}\n\n// ============================================================================\n// ORDER SERIALIZATION (37 bytes)\n// ============================================================================\n\n/**\n * Serialize a compact order to bytes (37 bytes)\n *\n * Layout:\n * [0..4] nonce (u32)\n * [4..12] salt (u64)\n * [12] side (u8)\n * [13..21] amountIn (u64)\n * [21..29] amountOut (u64)\n * [29..37] expiration (i64)\n */\nexport function serializeOrder(order: Order): Buffer {\n const buffer = Buffer.alloc(ORDER_SIZE.ORDER);\n let offset = 0;\n\n toU32Le(order.nonce).copy(buffer, offset);\n offset += 4;\n\n toU64Le(order.salt).copy(buffer, offset);\n offset += 8;\n\n buffer[offset] = order.side;\n offset += 1;\n\n toU64Le(order.amountIn).copy(buffer, offset);\n offset += 8;\n\n toU64Le(order.amountOut).copy(buffer, offset);\n offset += 8;\n\n toI64Le(order.expiration).copy(buffer, offset);\n\n return buffer;\n}\n\n/**\n * Deserialize a compact order from bytes\n */\nexport function deserializeOrder(data: Buffer): Order {\n if (data.length < ORDER_SIZE.ORDER) {\n throw ProgramSdkError.invalidDataLength(\"Order\", ORDER_SIZE.ORDER, data.length);\n }\n\n let offset = 0;\n\n const nonce = data.readUInt32LE(offset);\n offset += 4;\n\n const salt = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const side = data[offset] as OrderSide;\n offset += 1;\n\n const amountIn = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const amountOut = fromLeBytes(data.subarray(offset, offset + 8));\n offset += 8;\n\n const expiration = fromI64Le(data.subarray(offset, offset + 8));\n\n return {\n nonce,\n salt,\n side,\n amountIn,\n amountOut,\n expiration,\n };\n}\n\n/**\n * Convert a SignedOrder to a compact Order (drop maker)\n */\nexport function signedOrderToOrder(order: SignedOrder): Order {\n return {\n nonce: order.nonce,\n salt: order.salt,\n side: order.side,\n amountIn: order.amountIn,\n amountOut: order.amountOut,\n expiration: order.expiration,\n };\n}\n\n/**\n * Expand a compact Order back to a full SignedOrder using provided pubkeys and signature.\n * Rust equivalent: Order::to_signed()\n */\nexport function orderToSigned(\n order: Order,\n maker: PublicKey,\n market: PublicKey,\n baseMint: PublicKey,\n quoteMint: PublicKey,\n signature: Buffer\n): SignedOrder {\n return {\n nonce: order.nonce,\n salt: order.salt,\n maker,\n market,\n baseMint,\n quoteMint,\n side: order.side,\n amountIn: order.amountIn,\n amountOut: order.amountOut,\n expiration: order.expiration,\n signature,\n };\n}\n\n// ============================================================================\n// ORDER CREATION HELPERS\n// ============================================================================\n\n/**\n * Create a BID order (buyer wants base tokens, pays with quote tokens)\n */\nexport function createBidOrder(\n params: BidOrderParams\n): Omit<SignedOrder, \"signature\"> {\n return {\n nonce: params.nonce,\n salt: params.salt ?? generateSalt(),\n maker: params.maker,\n market: params.market,\n baseMint: params.baseMint,\n quoteMint: params.quoteMint,\n side: OrderSide.BID,\n amountIn: params.amountIn,\n amountOut: params.amountOut,\n expiration: params.expiration ?? 0n,\n };\n}\n\n/**\n * Create an ASK order (seller offers base tokens, receives quote tokens)\n */\nexport function createAskOrder(\n params: AskOrderParams\n): Omit<SignedOrder, \"signature\"> {\n return {\n nonce: params.nonce,\n salt: params.salt ?? generateSalt(),\n maker: params.maker,\n market: params.market,\n baseMint: params.baseMint,\n quoteMint: params.quoteMint,\n side: OrderSide.ASK,\n amountIn: params.amountIn,\n amountOut: params.amountOut,\n expiration: params.expiration ?? 0n,\n };\n}\n\n/**\n * Create and sign a BID order in one step\n */\nexport function createSignedBidOrder(\n params: BidOrderParams,\n signer: Keypair\n): SignedOrder {\n const order = createBidOrder(params);\n return signOrderFull(order, signer);\n}\n\n/**\n * Create and sign an ASK order in one step\n */\nexport function createSignedAskOrder(\n params: AskOrderParams,\n signer: Keypair\n): SignedOrder {\n const order = createAskOrder(params);\n return signOrderFull(order, signer);\n}\n\n// ============================================================================\n// ORDER VALIDATION\n// ============================================================================\n\n/**\n * Check if an order has expired\n */\nexport function isOrderExpired(\n order: SignedOrder | Order,\n currentTime?: bigint\n): boolean {\n if (order.expiration === 0n) {\n return false;\n }\n const now = currentTime ?? BigInt(Math.floor(Date.now() / 1000));\n return order.expiration <= now;\n}\n\n/**\n * Validate order crossing (orders are compatible for matching)\n */\nexport function ordersCanCross(\n buyOrder: SignedOrder,\n sellOrder: SignedOrder\n): boolean {\n if (buyOrder.side !== OrderSide.BID || sellOrder.side !== OrderSide.ASK) {\n return false;\n }\n\n if (\n buyOrder.amountIn === 0n ||\n buyOrder.amountOut === 0n ||\n sellOrder.amountIn === 0n ||\n sellOrder.amountOut === 0n\n ) {\n return false;\n }\n\n return (\n buyOrder.amountIn * sellOrder.amountIn >=\n buyOrder.amountOut * sellOrder.amountOut\n );\n}\n\n/**\n * Calculate the fill amounts for a trade\n */\nexport function calculateTakerFill(\n makerOrder: SignedOrder,\n makerFillAmount: bigint\n): bigint {\n if (makerOrder.amountIn === 0n) {\n throw ProgramSdkError.divisionByZero();\n }\n\n const result = (makerFillAmount * makerOrder.amountOut) / makerOrder.amountIn;\n\n if (result > BigInt(\"18446744073709551615\")) {\n throw ProgramSdkError.overflow(\"Taker fill exceeds u64 max\");\n }\n\n return result;\n}\n\n// ============================================================================\n// SIGNED ORDER HELPERS\n// ============================================================================\n\n/**\n * Get signature as hex string (128 chars)\n */\nexport function signatureHex(order: SignedOrder): string {\n return order.signature.toString(\"hex\");\n}\n\n/**\n * Check if a signed order has a non-zero signature\n */\nexport function isSigned(order: SignedOrder): boolean {\n return !order.signature.every((b) => b === 0);\n}\n\n/**\n * Apply an external base58-encoded signature to an unsigned order.\n * Rust equivalent: OrderPayload::apply_signature()\n */\nexport function applySignature(\n order: Omit<SignedOrder, \"signature\">,\n signatureBs58: string\n): SignedOrder {\n const sigBytes = bs58.decode(signatureBs58);\n if (sigBytes.length !== 64) {\n throw ProgramSdkError.invalidSignature();\n }\n return { ...order, signature: Buffer.from(sigBytes) };\n}\n\n/**\n * Derive orderbook ID from base and quote token addresses.\n * Delegates to the canonical implementation in shared/types.\n */\nexport { deriveOrderbookId } from \"../shared/types\";\n\n// ============================================================================\n// CANCEL ORDER SIGNING\n// ============================================================================\n\n/**\n * Build the message bytes for cancelling an order.\n * The message is the order hash hex string as UTF-8 bytes (same protocol as order signing).\n */\nexport function cancelOrderMessage(orderHash: string): Uint8Array {\n return Buffer.from(orderHash, \"ascii\");\n}\n\n/**\n * Build the message bytes for cancelling a trigger order.\n * The message is the trigger order ID as UTF-8 bytes.\n */\nexport function cancelTriggerOrderMessage(triggerOrderId: string): Uint8Array {\n return Buffer.from(triggerOrderId, \"ascii\");\n}\n\n/**\n * Sign a cancel order request.\n * Returns the signature as a 128-char hex string.\n */\nexport function signCancelOrder(orderHash: string, signer: Keypair): string {\n const message = cancelOrderMessage(orderHash);\n const signature = sign.detached(message, signer.secretKey);\n return Buffer.from(signature).toString(\"hex\");\n}\n\n/**\n * Sign a cancel trigger-order request.\n * Returns the signature as a 128-char hex string.\n */\nexport function signCancelTriggerOrder(triggerOrderId: string, signer: Keypair): string {\n const message = cancelTriggerOrderMessage(triggerOrderId);\n const signature = sign.detached(message, signer.secretKey);\n return Buffer.from(signature).toString(\"hex\");\n}\n\n/**\n * Build the message string for cancelling all orders.\n * Format: \"cancel_all:{pubkey}:{orderbook_id}:{timestamp}:{salt}\"\n */\nexport function cancelAllMessage(\n userPubkey: string,\n orderbookId: string,\n timestamp: number,\n salt: string\n): string {\n return `cancel_all:${userPubkey}:${orderbookId}:${timestamp}:${salt}`;\n}\n\n/**\n * Generate a random salt for cancel-all replay protection.\n * Returns an RFC 4122 UUID v4 string.\n */\nexport function generateCancelAllSalt(): string {\n return globalThis.crypto.randomUUID();\n}\n\n/**\n * Sign a cancel-all orders request.\n * Returns the signature as a 128-char hex string.\n */\nexport function signCancelAll(\n userPubkey: string,\n orderbookId: string,\n timestamp: number,\n salt: string,\n signer: Keypair\n): string {\n const message = cancelAllMessage(userPubkey, orderbookId, timestamp, salt);\n const messageBytes = Buffer.from(message, \"ascii\");\n const signature = sign.detached(messageBytes, signer.secretKey);\n return Buffer.from(signature).toString(\"hex\");\n}\n\n// ============================================================================\n// SUBMIT REQUEST HELPERS\n// ============================================================================\n\n/**\n * Convert a SignedOrder to a SubmitOrderRequest-compatible object\n */\nexport interface SubmitRequestOptions {\n timeInForce?: TimeInForce;\n triggerPrice?: number;\n triggerType?: TriggerType;\n depositSource?: DepositSource;\n}\n\nexport function toSubmitRequest(\n order: SignedOrder,\n orderbookId: string,\n options: SubmitRequestOptions = {}\n): SubmitOrderRequest {\n return {\n maker: order.maker.toBase58(),\n nonce: order.nonce,\n salt: bigintToSafeNumber(order.salt, \"salt\"),\n market_pubkey: order.market.toBase58(),\n base_token: order.baseMint.toBase58(),\n quote_token: order.quoteMint.toBase58(),\n side: order.side,\n amount_in: bigintToSafeNumber(order.amountIn, \"amount_in\"),\n amount_out: bigintToSafeNumber(order.amountOut, \"amount_out\"),\n expiration: bigintToSafeNumber(order.expiration, \"expiration\"),\n signature: signatureHex(order),\n orderbook_id: orderbookId,\n tif: options.timeInForce,\n trigger_price: options.triggerPrice,\n trigger_type: options.triggerType,\n deposit_source: options.depositSource,\n };\n}\n\n// Rust-compatible snake_case aliases.\nexport const is_order_expired = isOrderExpired;\nexport const orders_can_cross = ordersCanCross;\nexport const calculate_taker_fill = calculateTakerFill;\nexport const cancel_order_message = cancelOrderMessage;\nexport const cancel_trigger_order_message = cancelTriggerOrderMessage;\nexport const cancel_all_message = cancelAllMessage;\nexport const generate_cancel_all_salt = generateCancelAllSalt;\nexport const derive_condition_id = deriveConditionId;\nexport const apply_signature = applySignature;\nexport const order_to_signed = orderToSigned;\n"]}
@@ -9,6 +9,11 @@ export declare function getExchangePda(programId?: PublicKey): [PublicKey, numbe
9
9
  * Seeds: ["market", market_id (u64 little-endian)]
10
10
  */
11
11
  export declare function getMarketPda(marketId: bigint, programId?: PublicKey): [PublicKey, number];
12
+ /**
13
+ * Derive Condition Tombstone PDA
14
+ * Seeds: ["condition", condition_id (32 bytes)]
15
+ */
16
+ export declare function getConditionTombstonePda(conditionId: Buffer, programId?: PublicKey): [PublicKey, number];
12
17
  /**
13
18
  * Derive Vault PDA (deposit token storage)
14
19
  * Seeds: ["market_deposit_token_account", deposit_mint, market]
@@ -28,6 +33,12 @@ export declare function getConditionalMintPda(market: PublicKey, depositMint: Pu
28
33
  * Derive all Conditional Mint PDAs for a market
29
34
  */
30
35
  export declare function getAllConditionalMintPdas(market: PublicKey, depositMint: PublicKey, numOutcomes: number, programId?: PublicKey): [PublicKey, number][];
36
+ /**
37
+ * Derive the Metaplex metadata PDA for a conditional mint.
38
+ * Seeds: ["metadata", MPL_TOKEN_METADATA_PROGRAM_ID, conditional_mint]
39
+ * Program: MPL_TOKEN_METADATA_PROGRAM_ID
40
+ */
41
+ export declare function getMplMetadataPda(conditionalMint: PublicKey): [PublicKey, number];
31
42
  /**
32
43
  * Derive Order Status PDA
33
44
  * Seeds: ["order_status", order_hash (32 bytes)]
@@ -43,17 +54,21 @@ export declare function getUserNoncePda(user: PublicKey, programId?: PublicKey):
43
54
  * Seeds: ["position", owner (32 bytes), market (32 bytes)]
44
55
  */
45
56
  export declare function getPositionPda(owner: PublicKey, market: PublicKey, programId?: PublicKey): [PublicKey, number];
57
+ /**
58
+ * Return mints in the canonical order used by orderbook PDAs.
59
+ */
60
+ export declare function canonicalMintPair(mintA: PublicKey, mintB: PublicKey): [PublicKey, PublicKey];
46
61
  /**
47
62
  * Derive Orderbook PDA
48
- * Seeds: ["orderbook", mint_a (32 bytes), mint_b (32 bytes)]
63
+ * Seeds: ["orderbook", canonical_mint_a (32 bytes), canonical_mint_b (32 bytes)]
49
64
  */
50
65
  export declare function getOrderbookPda(mintA: PublicKey, mintB: PublicKey, programId?: PublicKey): [PublicKey, number];
51
66
  /**
52
67
  * Derive Address Lookup Table PDA
53
- * Seeds: [orderbook (32 bytes), recent_slot (u64 little-endian)]
68
+ * Seeds: [authority (32 bytes), recent_slot (u64 little-endian)]
54
69
  * Program: ALT_PROGRAM_ID
55
70
  */
56
- export declare function getAltPda(orderbook: PublicKey, recentSlot: bigint): [PublicKey, number];
71
+ export declare function getAltPda(authority: PublicKey, recentSlot: bigint): [PublicKey, number];
57
72
  /**
58
73
  * Derive GlobalDepositToken whitelist PDA.
59
74
  * Seeds: ["global_deposit", mint]
@@ -76,13 +91,16 @@ export declare function getPositionAltPda(position: PublicKey, recentSlot: bigin
76
91
  export declare const pda: {
77
92
  getExchangePda: typeof getExchangePda;
78
93
  getMarketPda: typeof getMarketPda;
94
+ getConditionTombstonePda: typeof getConditionTombstonePda;
79
95
  getVaultPda: typeof getVaultPda;
80
96
  getMintAuthorityPda: typeof getMintAuthorityPda;
81
97
  getConditionalMintPda: typeof getConditionalMintPda;
82
98
  getAllConditionalMintPdas: typeof getAllConditionalMintPdas;
99
+ getMplMetadataPda: typeof getMplMetadataPda;
83
100
  getOrderStatusPda: typeof getOrderStatusPda;
84
101
  getUserNoncePda: typeof getUserNoncePda;
85
102
  getPositionPda: typeof getPositionPda;
103
+ canonicalMintPair: typeof canonicalMintPair;
86
104
  getOrderbookPda: typeof getOrderbookPda;
87
105
  getAltPda: typeof getAltPda;
88
106
  getGlobalDepositTokenPda: typeof getGlobalDepositTokenPda;
@@ -1 +1 @@
1
- {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../src/program/pda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAM5C;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,SAAS,EACtB,MAAM,EAAE,SAAS,EACjB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CASrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,EACtB,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAUrB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAMvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAQrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CASrB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,GACjB,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,EACnB,UAAU,EAAE,MAAM,GACjB,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;GAEG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;CAef,CAAC"}
1
+ {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../src/program/pda.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.pda = void 0;
4
4
  exports.getExchangePda = getExchangePda;
5
5
  exports.getMarketPda = getMarketPda;
6
+ exports.getConditionTombstonePda = getConditionTombstonePda;
6
7
  exports.getVaultPda = getVaultPda;
7
8
  exports.getMintAuthorityPda = getMintAuthorityPda;
8
9
  exports.getConditionalMintPda = getConditionalMintPda;
9
10
  exports.getAllConditionalMintPdas = getAllConditionalMintPdas;
11
+ exports.getMplMetadataPda = getMplMetadataPda;
10
12
  exports.getOrderStatusPda = getOrderStatusPda;
11
13
  exports.getUserNoncePda = getUserNoncePda;
12
14
  exports.getPositionPda = getPositionPda;
15
+ exports.canonicalMintPair = canonicalMintPair;
13
16
  exports.getOrderbookPda = getOrderbookPda;
14
17
  exports.getAltPda = getAltPda;
15
18
  exports.getGlobalDepositTokenPda = getGlobalDepositTokenPda;
@@ -34,6 +37,16 @@ function getExchangePda(programId = env_1.PROGRAM_ID) {
34
37
  function getMarketPda(marketId, programId = env_1.PROGRAM_ID) {
35
38
  return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.SEEDS.MARKET), (0, utils_1.toU64Le)(marketId)], programId);
36
39
  }
40
+ /**
41
+ * Derive Condition Tombstone PDA
42
+ * Seeds: ["condition", condition_id (32 bytes)]
43
+ */
44
+ function getConditionTombstonePda(conditionId, programId = env_1.PROGRAM_ID) {
45
+ if (conditionId.length !== 32) {
46
+ throw error_1.ProgramSdkError.invalidDataLength("conditionId", 32, conditionId.length);
47
+ }
48
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.SEEDS.CONDITION), conditionId], programId);
49
+ }
37
50
  /**
38
51
  * Derive Vault PDA (deposit token storage)
39
52
  * Seeds: ["market_deposit_token_account", deposit_mint, market]
@@ -74,6 +87,18 @@ function getAllConditionalMintPdas(market, depositMint, numOutcomes, programId =
74
87
  }
75
88
  return pdas;
76
89
  }
90
+ /**
91
+ * Derive the Metaplex metadata PDA for a conditional mint.
92
+ * Seeds: ["metadata", MPL_TOKEN_METADATA_PROGRAM_ID, conditional_mint]
93
+ * Program: MPL_TOKEN_METADATA_PROGRAM_ID
94
+ */
95
+ function getMplMetadataPda(conditionalMint) {
96
+ return web3_js_1.PublicKey.findProgramAddressSync([
97
+ Buffer.from(constants_1.SEEDS.MPL_METADATA),
98
+ constants_1.MPL_TOKEN_METADATA_PROGRAM_ID.toBuffer(),
99
+ conditionalMint.toBuffer(),
100
+ ], constants_1.MPL_TOKEN_METADATA_PROGRAM_ID);
101
+ }
77
102
  /**
78
103
  * Derive Order Status PDA
79
104
  * Seeds: ["order_status", order_hash (32 bytes)]
@@ -98,24 +123,33 @@ function getUserNoncePda(user, programId = env_1.PROGRAM_ID) {
98
123
  function getPositionPda(owner, market, programId = env_1.PROGRAM_ID) {
99
124
  return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.SEEDS.POSITION), owner.toBuffer(), market.toBuffer()], programId);
100
125
  }
126
+ /**
127
+ * Return mints in the canonical order used by orderbook PDAs.
128
+ */
129
+ function canonicalMintPair(mintA, mintB) {
130
+ return Buffer.compare(mintA.toBuffer(), mintB.toBuffer()) <= 0
131
+ ? [mintA, mintB]
132
+ : [mintB, mintA];
133
+ }
101
134
  /**
102
135
  * Derive Orderbook PDA
103
- * Seeds: ["orderbook", mint_a (32 bytes), mint_b (32 bytes)]
136
+ * Seeds: ["orderbook", canonical_mint_a (32 bytes), canonical_mint_b (32 bytes)]
104
137
  */
105
138
  function getOrderbookPda(mintA, mintB, programId = env_1.PROGRAM_ID) {
139
+ const [canonicalMintA, canonicalMintB] = canonicalMintPair(mintA, mintB);
106
140
  return web3_js_1.PublicKey.findProgramAddressSync([
107
141
  Buffer.from(constants_1.SEEDS.ORDERBOOK),
108
- mintA.toBuffer(),
109
- mintB.toBuffer(),
142
+ canonicalMintA.toBuffer(),
143
+ canonicalMintB.toBuffer(),
110
144
  ], programId);
111
145
  }
112
146
  /**
113
147
  * Derive Address Lookup Table PDA
114
- * Seeds: [orderbook (32 bytes), recent_slot (u64 little-endian)]
148
+ * Seeds: [authority (32 bytes), recent_slot (u64 little-endian)]
115
149
  * Program: ALT_PROGRAM_ID
116
150
  */
117
- function getAltPda(orderbook, recentSlot) {
118
- return web3_js_1.PublicKey.findProgramAddressSync([orderbook.toBuffer(), (0, utils_1.toU64Le)(recentSlot)], constants_1.ALT_PROGRAM_ID);
151
+ function getAltPda(authority, recentSlot) {
152
+ return web3_js_1.PublicKey.findProgramAddressSync([authority.toBuffer(), (0, utils_1.toU64Le)(recentSlot)], constants_1.ALT_PROGRAM_ID);
119
153
  }
120
154
  /**
121
155
  * Derive GlobalDepositToken whitelist PDA.
@@ -145,13 +179,16 @@ function getPositionAltPda(position, recentSlot) {
145
179
  exports.pda = {
146
180
  getExchangePda,
147
181
  getMarketPda,
182
+ getConditionTombstonePda,
148
183
  getVaultPda,
149
184
  getMintAuthorityPda,
150
185
  getConditionalMintPda,
151
186
  getAllConditionalMintPdas,
187
+ getMplMetadataPda,
152
188
  getOrderStatusPda,
153
189
  getUserNoncePda,
154
190
  getPositionPda,
191
+ canonicalMintPair,
155
192
  getOrderbookPda,
156
193
  getAltPda,
157
194
  getGlobalDepositTokenPda,
@@ -1 +1 @@
1
- {"version":3,"file":"pda.js","sourceRoot":"","sources":["../../src/program/pda.ts"],"names":[],"mappings":"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","sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\nimport { ALT_PROGRAM_ID, SEEDS } from \"./constants\";\nimport { PROGRAM_ID } from \"../env\";\nimport { ProgramSdkError } from \"./error\";\nimport { toU64Le, toU8 } from \"./utils\";\n\n/**\n * Derive Exchange PDA (singleton central state)\n * Seeds: [\"central_state\"]\n */\nexport function getExchangePda(\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.CENTRAL_STATE)],\n programId\n );\n}\n\n/**\n * Derive Market PDA\n * Seeds: [\"market\", market_id (u64 little-endian)]\n */\nexport function getMarketPda(\n marketId: bigint,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.MARKET), toU64Le(marketId)],\n programId\n );\n}\n\n/**\n * Derive Vault PDA (deposit token storage)\n * Seeds: [\"market_deposit_token_account\", deposit_mint, market]\n */\nexport function getVaultPda(\n depositMint: PublicKey,\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEEDS.MARKET_DEPOSIT_TOKEN_ACCOUNT),\n depositMint.toBuffer(),\n market.toBuffer(),\n ],\n programId\n );\n}\n\n/**\n * Derive Mint Authority PDA (signs mint/burn operations)\n * Seeds: [\"market_mint_authority\", market]\n */\nexport function getMintAuthorityPda(\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.MARKET_MINT_AUTHORITY), market.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive Conditional Mint PDA (per outcome)\n * Seeds: [\"conditional_mint\", market, deposit_mint, outcome_index (u8)]\n */\nexport function getConditionalMintPda(\n market: PublicKey,\n depositMint: PublicKey,\n outcomeIndex: number,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEEDS.CONDITIONAL_MINT),\n market.toBuffer(),\n depositMint.toBuffer(),\n toU8(outcomeIndex),\n ],\n programId\n );\n}\n\n/**\n * Derive all Conditional Mint PDAs for a market\n */\nexport function getAllConditionalMintPdas(\n market: PublicKey,\n depositMint: PublicKey,\n numOutcomes: number,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number][] {\n const pdas: [PublicKey, number][] = [];\n for (let i = 0; i < numOutcomes; i++) {\n pdas.push(getConditionalMintPda(market, depositMint, i, programId));\n }\n return pdas;\n}\n\n/**\n * Derive Order Status PDA\n * Seeds: [\"order_status\", order_hash (32 bytes)]\n */\nexport function getOrderStatusPda(\n orderHash: Buffer,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n if (orderHash.length !== 32) {\n throw ProgramSdkError.invalidDataLength(\"orderHash\", 32, orderHash.length);\n }\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.ORDER_STATUS), orderHash],\n programId\n );\n}\n\n/**\n * Derive User Nonce PDA\n * Seeds: [\"user_nonce\", user (32 bytes)]\n */\nexport function getUserNoncePda(\n user: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.USER_NONCE), user.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive Position PDA\n * Seeds: [\"position\", owner (32 bytes), market (32 bytes)]\n */\nexport function getPositionPda(\n owner: PublicKey,\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.POSITION), owner.toBuffer(), market.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive Orderbook PDA\n * Seeds: [\"orderbook\", mint_a (32 bytes), mint_b (32 bytes)]\n */\nexport function getOrderbookPda(\n mintA: PublicKey,\n mintB: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEEDS.ORDERBOOK),\n mintA.toBuffer(),\n mintB.toBuffer(),\n ],\n programId\n );\n}\n\n/**\n * Derive Address Lookup Table PDA\n * Seeds: [orderbook (32 bytes), recent_slot (u64 little-endian)]\n * Program: ALT_PROGRAM_ID\n */\nexport function getAltPda(\n orderbook: PublicKey,\n recentSlot: bigint\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [orderbook.toBuffer(), toU64Le(recentSlot)],\n ALT_PROGRAM_ID\n );\n}\n\n/**\n * Derive GlobalDepositToken whitelist PDA.\n * Seeds: [\"global_deposit\", mint]\n */\nexport function getGlobalDepositTokenPda(\n mint: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.GLOBAL_DEPOSIT), mint.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive User Global Deposit PDA.\n * Seeds: [\"global_deposit\", user, mint]\n */\nexport function getUserGlobalDepositPda(\n user: PublicKey,\n mint: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.GLOBAL_DEPOSIT), user.toBuffer(), mint.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive position ALT PDA used by initPositionTokens.\n * Seeds: [position, recent_slot]\n * Program: ALT_PROGRAM_ID\n */\nexport function getPositionAltPda(\n position: PublicKey,\n recentSlot: bigint\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [position.toBuffer(), toU64Le(recentSlot)],\n ALT_PROGRAM_ID\n );\n}\n\n/**\n * Collection of all PDA functions for easy access\n */\nexport const pda = {\n getExchangePda,\n getMarketPda,\n getVaultPda,\n getMintAuthorityPda,\n getConditionalMintPda,\n getAllConditionalMintPdas,\n getOrderStatusPda,\n getUserNoncePda,\n getPositionPda,\n getOrderbookPda,\n getAltPda,\n getGlobalDepositTokenPda,\n getUserGlobalDepositPda,\n getPositionAltPda,\n};\n"]}
1
+ {"version":3,"file":"pda.js","sourceRoot":"","sources":["../../src/program/pda.ts"],"names":[],"mappings":";;;AAUA,wCAOC;AAMD,oCAQC;AAMD,4DAWC;AAMD,kCAaC;AAMD,kDAQC;AAMD,sDAeC;AAKD,8DAWC;AAOD,8CAWC;AAMD,8CAWC;AAMD,0CAQC;AAMD,wCASC;AAKD,8CAOC;AAMD,0CAcC;AAOD,8BAQC;AAMD,4DAQC;AAMD,0DASC;AAOD,8CAQC;AAjRD,6CAA4C;AAC5C,2CAAmF;AACnF,gCAAoC;AACpC,mCAA0C;AAC1C,mCAAwC;AAExC;;;GAGG;AACH,SAAgB,cAAc,CAC5B,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,aAAa,CAAC,CAAC,EAClC,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAC1B,QAAgB,EAChB,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,MAAM,CAAC,EAAE,IAAA,eAAO,EAAC,QAAQ,CAAC,CAAC,EAC9C,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,WAAmB,EACnB,YAAuB,gBAAU;IAEjC,IAAI,WAAW,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,uBAAe,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,EAC3C,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CACzB,WAAsB,EACtB,MAAiB,EACjB,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC;QACE,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,4BAA4B,CAAC;QAC/C,WAAW,CAAC,QAAQ,EAAE;QACtB,MAAM,CAAC,QAAQ,EAAE;KAClB,EACD,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,MAAiB,EACjB,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAC7D,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CACnC,MAAiB,EACjB,WAAsB,EACtB,YAAoB,EACpB,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC;QACE,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,gBAAgB,CAAC;QACnC,MAAM,CAAC,QAAQ,EAAE;QACjB,WAAW,CAAC,QAAQ,EAAE;QACtB,IAAA,YAAI,EAAC,YAAY,CAAC;KACnB,EACD,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,MAAiB,EACjB,WAAsB,EACtB,WAAmB,EACnB,YAAuB,gBAAU;IAEjC,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,eAA0B;IAE1B,OAAO,mBAAS,CAAC,sBAAsB,CACrC;QACE,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,YAAY,CAAC;QAC/B,yCAA6B,CAAC,QAAQ,EAAE;QACxC,eAAe,CAAC,QAAQ,EAAE;KAC3B,EACD,yCAA6B,CAC9B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,YAAuB,gBAAU;IAEjC,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC5B,MAAM,uBAAe,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,EAC5C,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAC7B,IAAe,EACf,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAChD,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAC5B,KAAgB,EAChB,MAAiB,EACjB,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAClE,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,KAAgB,EAChB,KAAgB;IAEhB,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QAC5D,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAC7B,KAAgB,EAChB,KAAgB,EAChB,YAAuB,gBAAU;IAEjC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzE,OAAO,mBAAS,CAAC,sBAAsB,CACrC;QACE,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,SAAS,CAAC;QAC5B,cAAc,CAAC,QAAQ,EAAE;QACzB,cAAc,CAAC,QAAQ,EAAE;KAC1B,EACD,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CACvB,SAAoB,EACpB,UAAkB;IAElB,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAA,eAAO,EAAC,UAAU,CAAC,CAAC,EAC3C,0BAAc,CACf,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,IAAe,EACf,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EACpD,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,IAAe,EACf,IAAe,EACf,YAAuB,gBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAK,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EACrE,SAAS,CACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,QAAmB,EACnB,UAAkB;IAElB,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAA,eAAO,EAAC,UAAU,CAAC,CAAC,EAC1C,0BAAc,CACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACU,QAAA,GAAG,GAAG;IACjB,cAAc;IACd,YAAY;IACZ,wBAAwB;IACxB,WAAW;IACX,mBAAmB;IACnB,qBAAqB;IACrB,yBAAyB;IACzB,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,SAAS;IACT,wBAAwB;IACxB,uBAAuB;IACvB,iBAAiB;CAClB,CAAC","sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\nimport { ALT_PROGRAM_ID, MPL_TOKEN_METADATA_PROGRAM_ID, SEEDS } from \"./constants\";\nimport { PROGRAM_ID } from \"../env\";\nimport { ProgramSdkError } from \"./error\";\nimport { toU64Le, toU8 } from \"./utils\";\n\n/**\n * Derive Exchange PDA (singleton central state)\n * Seeds: [\"central_state\"]\n */\nexport function getExchangePda(\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.CENTRAL_STATE)],\n programId\n );\n}\n\n/**\n * Derive Market PDA\n * Seeds: [\"market\", market_id (u64 little-endian)]\n */\nexport function getMarketPda(\n marketId: bigint,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.MARKET), toU64Le(marketId)],\n programId\n );\n}\n\n/**\n * Derive Condition Tombstone PDA\n * Seeds: [\"condition\", condition_id (32 bytes)]\n */\nexport function getConditionTombstonePda(\n conditionId: Buffer,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n if (conditionId.length !== 32) {\n throw ProgramSdkError.invalidDataLength(\"conditionId\", 32, conditionId.length);\n }\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.CONDITION), conditionId],\n programId\n );\n}\n\n/**\n * Derive Vault PDA (deposit token storage)\n * Seeds: [\"market_deposit_token_account\", deposit_mint, market]\n */\nexport function getVaultPda(\n depositMint: PublicKey,\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEEDS.MARKET_DEPOSIT_TOKEN_ACCOUNT),\n depositMint.toBuffer(),\n market.toBuffer(),\n ],\n programId\n );\n}\n\n/**\n * Derive Mint Authority PDA (signs mint/burn operations)\n * Seeds: [\"market_mint_authority\", market]\n */\nexport function getMintAuthorityPda(\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.MARKET_MINT_AUTHORITY), market.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive Conditional Mint PDA (per outcome)\n * Seeds: [\"conditional_mint\", market, deposit_mint, outcome_index (u8)]\n */\nexport function getConditionalMintPda(\n market: PublicKey,\n depositMint: PublicKey,\n outcomeIndex: number,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEEDS.CONDITIONAL_MINT),\n market.toBuffer(),\n depositMint.toBuffer(),\n toU8(outcomeIndex),\n ],\n programId\n );\n}\n\n/**\n * Derive all Conditional Mint PDAs for a market\n */\nexport function getAllConditionalMintPdas(\n market: PublicKey,\n depositMint: PublicKey,\n numOutcomes: number,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number][] {\n const pdas: [PublicKey, number][] = [];\n for (let i = 0; i < numOutcomes; i++) {\n pdas.push(getConditionalMintPda(market, depositMint, i, programId));\n }\n return pdas;\n}\n\n/**\n * Derive the Metaplex metadata PDA for a conditional mint.\n * Seeds: [\"metadata\", MPL_TOKEN_METADATA_PROGRAM_ID, conditional_mint]\n * Program: MPL_TOKEN_METADATA_PROGRAM_ID\n */\nexport function getMplMetadataPda(\n conditionalMint: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEEDS.MPL_METADATA),\n MPL_TOKEN_METADATA_PROGRAM_ID.toBuffer(),\n conditionalMint.toBuffer(),\n ],\n MPL_TOKEN_METADATA_PROGRAM_ID\n );\n}\n\n/**\n * Derive Order Status PDA\n * Seeds: [\"order_status\", order_hash (32 bytes)]\n */\nexport function getOrderStatusPda(\n orderHash: Buffer,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n if (orderHash.length !== 32) {\n throw ProgramSdkError.invalidDataLength(\"orderHash\", 32, orderHash.length);\n }\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.ORDER_STATUS), orderHash],\n programId\n );\n}\n\n/**\n * Derive User Nonce PDA\n * Seeds: [\"user_nonce\", user (32 bytes)]\n */\nexport function getUserNoncePda(\n user: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.USER_NONCE), user.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive Position PDA\n * Seeds: [\"position\", owner (32 bytes), market (32 bytes)]\n */\nexport function getPositionPda(\n owner: PublicKey,\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.POSITION), owner.toBuffer(), market.toBuffer()],\n programId\n );\n}\n\n/**\n * Return mints in the canonical order used by orderbook PDAs.\n */\nexport function canonicalMintPair(\n mintA: PublicKey,\n mintB: PublicKey\n): [PublicKey, PublicKey] {\n return Buffer.compare(mintA.toBuffer(), mintB.toBuffer()) <= 0\n ? [mintA, mintB]\n : [mintB, mintA];\n}\n\n/**\n * Derive Orderbook PDA\n * Seeds: [\"orderbook\", canonical_mint_a (32 bytes), canonical_mint_b (32 bytes)]\n */\nexport function getOrderbookPda(\n mintA: PublicKey,\n mintB: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n const [canonicalMintA, canonicalMintB] = canonicalMintPair(mintA, mintB);\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(SEEDS.ORDERBOOK),\n canonicalMintA.toBuffer(),\n canonicalMintB.toBuffer(),\n ],\n programId\n );\n}\n\n/**\n * Derive Address Lookup Table PDA\n * Seeds: [authority (32 bytes), recent_slot (u64 little-endian)]\n * Program: ALT_PROGRAM_ID\n */\nexport function getAltPda(\n authority: PublicKey,\n recentSlot: bigint\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [authority.toBuffer(), toU64Le(recentSlot)],\n ALT_PROGRAM_ID\n );\n}\n\n/**\n * Derive GlobalDepositToken whitelist PDA.\n * Seeds: [\"global_deposit\", mint]\n */\nexport function getGlobalDepositTokenPda(\n mint: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.GLOBAL_DEPOSIT), mint.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive User Global Deposit PDA.\n * Seeds: [\"global_deposit\", user, mint]\n */\nexport function getUserGlobalDepositPda(\n user: PublicKey,\n mint: PublicKey,\n programId: PublicKey = PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(SEEDS.GLOBAL_DEPOSIT), user.toBuffer(), mint.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive position ALT PDA used by initPositionTokens.\n * Seeds: [position, recent_slot]\n * Program: ALT_PROGRAM_ID\n */\nexport function getPositionAltPda(\n position: PublicKey,\n recentSlot: bigint\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [position.toBuffer(), toU64Le(recentSlot)],\n ALT_PROGRAM_ID\n );\n}\n\n/**\n * Collection of all PDA functions for easy access\n */\nexport const pda = {\n getExchangePda,\n getMarketPda,\n getConditionTombstonePda,\n getVaultPda,\n getMintAuthorityPda,\n getConditionalMintPda,\n getAllConditionalMintPdas,\n getMplMetadataPda,\n getOrderStatusPda,\n getUserNoncePda,\n getPositionPda,\n canonicalMintPair,\n getOrderbookPda,\n getAltPda,\n getGlobalDepositTokenPda,\n getUserGlobalDepositPda,\n getPositionAltPda,\n};\n"]}