@lightconexyz/lightcone-sdk 0.5.2 → 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.
- package/README.md +39 -5
- package/dist/auth/client.d.ts.map +1 -1
- package/dist/auth/client.js +2 -0
- package/dist/auth/client.js.map +1 -1
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +10 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/client.d.ts +43 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +70 -9
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +7 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +60 -6
- package/dist/context.js.map +1 -1
- package/dist/domain/admin/client.d.ts +21 -2
- package/dist/domain/admin/client.d.ts.map +1 -1
- package/dist/domain/admin/client.js +90 -4
- package/dist/domain/admin/client.js.map +1 -1
- package/dist/domain/admin/wire.d.ts +292 -7
- package/dist/domain/admin/wire.d.ts.map +1 -1
- package/dist/domain/admin/wire.js.map +1 -1
- package/dist/domain/faucet.d.ts +25 -0
- package/dist/domain/faucet.d.ts.map +1 -0
- package/dist/domain/faucet.js +3 -0
- package/dist/domain/faucet.js.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +3 -1
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/market/client.d.ts +23 -2
- package/dist/domain/market/client.d.ts.map +1 -1
- package/dist/domain/market/client.js +31 -1
- package/dist/domain/market/client.js.map +1 -1
- package/dist/domain/market/convert.d.ts +10 -0
- package/dist/domain/market/convert.d.ts.map +1 -1
- package/dist/domain/market/convert.js +44 -5
- package/dist/domain/market/convert.js.map +1 -1
- package/dist/domain/market/icon.d.ts +17 -0
- package/dist/domain/market/icon.d.ts.map +1 -0
- package/dist/domain/market/icon.js +25 -0
- package/dist/domain/market/icon.js.map +1 -0
- package/dist/domain/market/index.d.ts +21 -5
- package/dist/domain/market/index.d.ts.map +1 -1
- package/dist/domain/market/index.js +15 -1
- package/dist/domain/market/index.js.map +1 -1
- package/dist/domain/market/outcome.d.ts +4 -1
- package/dist/domain/market/outcome.d.ts.map +1 -1
- package/dist/domain/market/outcome.js +8 -7
- package/dist/domain/market/outcome.js.map +1 -1
- package/dist/domain/market/tokens.d.ts +55 -3
- package/dist/domain/market/tokens.d.ts.map +1 -1
- package/dist/domain/market/tokens.js +105 -9
- package/dist/domain/market/tokens.js.map +1 -1
- package/dist/domain/market/wire.d.ts +69 -10
- package/dist/domain/market/wire.d.ts.map +1 -1
- package/dist/domain/market/wire.js +5 -0
- package/dist/domain/market/wire.js.map +1 -1
- package/dist/domain/metrics/client.d.ts +66 -0
- package/dist/domain/metrics/client.d.ts.map +1 -0
- package/dist/domain/metrics/client.js +124 -0
- package/dist/domain/metrics/client.js.map +1 -0
- package/dist/domain/metrics/index.d.ts +3 -0
- package/dist/domain/metrics/index.d.ts.map +1 -0
- package/dist/domain/metrics/index.js +19 -0
- package/dist/domain/metrics/index.js.map +1 -0
- package/dist/domain/metrics/wire.d.ts +346 -0
- package/dist/domain/metrics/wire.d.ts.map +1 -0
- package/dist/domain/metrics/wire.js +3 -0
- package/dist/domain/metrics/wire.js.map +1 -0
- package/dist/domain/notification/client.d.ts +6 -0
- package/dist/domain/notification/client.d.ts.map +1 -1
- package/dist/domain/notification/client.js +10 -0
- package/dist/domain/notification/client.js.map +1 -1
- package/dist/domain/notification/index.d.ts +6 -2
- package/dist/domain/notification/index.d.ts.map +1 -1
- package/dist/domain/notification/index.js.map +1 -1
- package/dist/domain/order/client.d.ts +34 -6
- package/dist/domain/order/client.d.ts.map +1 -1
- package/dist/domain/order/client.js +88 -21
- package/dist/domain/order/client.js.map +1 -1
- package/dist/domain/order/convert.d.ts +5 -5
- package/dist/domain/order/convert.d.ts.map +1 -1
- package/dist/domain/order/convert.js +3 -3
- package/dist/domain/order/convert.js.map +1 -1
- package/dist/domain/order/index.d.ts +3 -2
- package/dist/domain/order/index.d.ts.map +1 -1
- package/dist/domain/order/index.js +11 -3
- package/dist/domain/order/index.js.map +1 -1
- package/dist/domain/order/state.d.ts +9 -7
- package/dist/domain/order/state.d.ts.map +1 -1
- package/dist/domain/order/state.js +81 -28
- package/dist/domain/order/state.js.map +1 -1
- package/dist/domain/orderbook/client.d.ts +6 -2
- package/dist/domain/orderbook/client.d.ts.map +1 -1
- package/dist/domain/orderbook/client.js +17 -0
- package/dist/domain/orderbook/client.js.map +1 -1
- package/dist/domain/orderbook/index.d.ts +1 -1
- package/dist/domain/orderbook/index.d.ts.map +1 -1
- package/dist/domain/orderbook/index.js +3 -8
- package/dist/domain/orderbook/index.js.map +1 -1
- package/dist/domain/orderbook/state.d.ts +30 -7
- package/dist/domain/orderbook/state.d.ts.map +1 -1
- package/dist/domain/orderbook/state.js +41 -12
- package/dist/domain/orderbook/state.js.map +1 -1
- package/dist/domain/position/builders.d.ts +11 -8
- package/dist/domain/position/builders.d.ts.map +1 -1
- package/dist/domain/position/builders.js +31 -25
- package/dist/domain/position/builders.js.map +1 -1
- package/dist/domain/position/client.d.ts +66 -5
- package/dist/domain/position/client.d.ts.map +1 -1
- package/dist/domain/position/client.js +101 -9
- package/dist/domain/position/client.js.map +1 -1
- package/dist/domain/position/index.d.ts +3 -2
- package/dist/domain/position/index.d.ts.map +1 -1
- package/dist/domain/position/index.js.map +1 -1
- package/dist/domain/price_history/client.d.ts +12 -1
- package/dist/domain/price_history/client.d.ts.map +1 -1
- package/dist/domain/price_history/client.js +14 -0
- package/dist/domain/price_history/client.js.map +1 -1
- package/dist/domain/price_history/wire.d.ts +27 -0
- package/dist/domain/price_history/wire.d.ts.map +1 -1
- package/dist/domain/price_history/wire.js.map +1 -1
- package/dist/domain/referral/client.d.ts +6 -0
- package/dist/domain/referral/client.d.ts.map +1 -1
- package/dist/domain/referral/client.js +22 -9
- package/dist/domain/referral/client.js.map +1 -1
- package/dist/domain/trade/client.d.ts +1 -0
- package/dist/domain/trade/client.d.ts.map +1 -1
- package/dist/domain/trade/client.js +14 -0
- package/dist/domain/trade/client.js.map +1 -1
- package/dist/domain/trade/wire.d.ts +6 -0
- package/dist/domain/trade/wire.d.ts.map +1 -1
- package/dist/domain/trade/wire.js.map +1 -1
- package/dist/env.d.ts +6 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +19 -9
- package/dist/env.js.map +1 -1
- package/dist/http/client.d.ts +9 -0
- package/dist/http/client.d.ts.map +1 -1
- package/dist/http/client.js +29 -11
- package/dist/http/client.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/prelude.d.ts +16 -7
- package/dist/prelude.d.ts.map +1 -1
- package/dist/prelude.js +10 -7
- package/dist/prelude.js.map +1 -1
- package/dist/privy/index.d.ts +1 -1
- package/dist/privy/index.js.map +1 -1
- package/dist/program/accounts.d.ts +12 -7
- package/dist/program/accounts.d.ts.map +1 -1
- package/dist/program/accounts.js +38 -16
- package/dist/program/accounts.js.map +1 -1
- package/dist/program/builder.d.ts +0 -4
- package/dist/program/builder.d.ts.map +1 -1
- package/dist/program/builder.js +0 -8
- package/dist/program/builder.js.map +1 -1
- package/dist/program/constants.d.ts +20 -7
- package/dist/program/constants.d.ts.map +1 -1
- package/dist/program/constants.js +21 -8
- package/dist/program/constants.js.map +1 -1
- package/dist/program/error.d.ts +25 -1
- package/dist/program/error.d.ts.map +1 -1
- package/dist/program/error.js +72 -0
- package/dist/program/error.js.map +1 -1
- package/dist/program/index.d.ts +7 -7
- package/dist/program/index.d.ts.map +1 -1
- package/dist/program/index.js +36 -9
- package/dist/program/index.js.map +1 -1
- package/dist/program/instructions.d.ts +184 -71
- package/dist/program/instructions.d.ts.map +1 -1
- package/dist/program/instructions.js +573 -140
- package/dist/program/instructions.js.map +1 -1
- package/dist/program/orders.js +2 -2
- package/dist/program/orders.js.map +1 -1
- package/dist/program/pda.d.ts +21 -3
- package/dist/program/pda.d.ts.map +1 -1
- package/dist/program/pda.js +43 -6
- package/dist/program/pda.js.map +1 -1
- package/dist/program/types.d.ts +139 -21
- package/dist/program/types.d.ts.map +1 -1
- package/dist/program/types.js.map +1 -1
- package/dist/program/utils.d.ts +31 -2
- package/dist/program/utils.d.ts.map +1 -1
- package/dist/program/utils.js +132 -5
- package/dist/program/utils.js.map +1 -1
- package/dist/rpc.d.ts +6 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +9 -7
- package/dist/rpc.js.map +1 -1
- package/dist/rpcFailover.d.ts +22 -0
- package/dist/rpcFailover.d.ts.map +1 -0
- package/dist/rpcFailover.js +71 -0
- package/dist/rpcFailover.js.map +1 -0
- package/dist/shared/fmt/constants.d.ts +5 -0
- package/dist/shared/fmt/constants.d.ts.map +1 -0
- package/dist/shared/fmt/constants.js +25 -0
- package/dist/shared/fmt/constants.js.map +1 -0
- package/dist/shared/fmt/decimal.d.ts +7 -0
- package/dist/shared/fmt/decimal.d.ts.map +1 -1
- package/dist/shared/fmt/decimal.js +32 -24
- package/dist/shared/fmt/decimal.js.map +1 -1
- package/dist/shared/fmt/num.d.ts +7 -0
- package/dist/shared/fmt/num.d.ts.map +1 -1
- package/dist/shared/fmt/num.js +27 -15
- package/dist/shared/fmt/num.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +2 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +19 -0
- package/dist/shared/types.js.map +1 -1
- package/dist/ws/client.node.js +1 -1
- package/dist/ws/client.node.js.map +1 -1
- package/dist/ws/index.d.ts +12 -1
- package/dist/ws/index.d.ts.map +1 -1
- package/dist/ws/index.js +20 -0
- package/dist/ws/index.js.map +1 -1
- package/dist/ws/subscriptions.d.ts +6 -0
- package/dist/ws/subscriptions.d.ts.map +1 -1
- package/dist/ws/subscriptions.js +4 -0
- package/dist/ws/subscriptions.js.map +1 -1
- 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"]}
|
package/dist/program/pda.d.ts
CHANGED
|
@@ -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",
|
|
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: [
|
|
68
|
+
* Seeds: [authority (32 bytes), recent_slot (u64 little-endian)]
|
|
54
69
|
* Program: ALT_PROGRAM_ID
|
|
55
70
|
*/
|
|
56
|
-
export declare function getAltPda(
|
|
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,
|
|
1
|
+
{"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../src/program/pda.ts"],"names":[],"mappings":"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"}
|
package/dist/program/pda.js
CHANGED
|
@@ -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",
|
|
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
|
-
|
|
109
|
-
|
|
142
|
+
canonicalMintA.toBuffer(),
|
|
143
|
+
canonicalMintB.toBuffer(),
|
|
110
144
|
], programId);
|
|
111
145
|
}
|
|
112
146
|
/**
|
|
113
147
|
* Derive Address Lookup Table PDA
|
|
114
|
-
* Seeds: [
|
|
148
|
+
* Seeds: [authority (32 bytes), recent_slot (u64 little-endian)]
|
|
115
149
|
* Program: ALT_PROGRAM_ID
|
|
116
150
|
*/
|
|
117
|
-
function getAltPda(
|
|
118
|
-
return web3_js_1.PublicKey.findProgramAddressSync([
|
|
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,
|
package/dist/program/pda.js.map
CHANGED
|
@@ -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":"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","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"]}
|