@drift-labs/sdk 0.1.8 → 0.1.9

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 (71) hide show
  1. package/.eslintrc.json +36 -0
  2. package/.prettierignore +1 -0
  3. package/.prettierrc.js +9 -0
  4. package/lib/accounts/defaultClearingHouseAccountSubscriber.d.ts +1 -0
  5. package/lib/accounts/defaultClearingHouseAccountSubscriber.d.ts.map +1 -0
  6. package/lib/accounts/defaultHistoryAccountSubscriber.d.ts +1 -0
  7. package/lib/accounts/defaultHistoryAccountSubscriber.d.ts.map +1 -0
  8. package/lib/accounts/defaultUserAccountSubscriber.d.ts +1 -0
  9. package/lib/accounts/defaultUserAccountSubscriber.d.ts.map +1 -0
  10. package/lib/accounts/types.d.ts +1 -0
  11. package/lib/accounts/types.d.ts.map +1 -0
  12. package/lib/accounts/webSocketAccountSubscriber.d.ts +1 -0
  13. package/lib/accounts/webSocketAccountSubscriber.d.ts.map +1 -0
  14. package/lib/addresses.d.ts +1 -0
  15. package/lib/addresses.d.ts.map +1 -0
  16. package/lib/admin.d.ts +1 -0
  17. package/lib/admin.d.ts.map +1 -0
  18. package/lib/assert/assert.d.ts +1 -0
  19. package/lib/assert/assert.d.ts.map +1 -0
  20. package/lib/clearingHouse.d.ts +1 -0
  21. package/lib/clearingHouse.d.ts.map +1 -0
  22. package/lib/clearingHouseUser.d.ts +1 -0
  23. package/lib/clearingHouseUser.d.ts.map +1 -0
  24. package/lib/clearingHouseUser.js +1 -1
  25. package/lib/config.d.ts +1 -0
  26. package/lib/config.d.ts.map +1 -0
  27. package/lib/constants/markets.d.ts +1 -0
  28. package/lib/constants/markets.d.ts.map +1 -0
  29. package/lib/constants/markets.js +7 -7
  30. package/lib/constants/numericConstants.d.ts +1 -0
  31. package/lib/constants/numericConstants.d.ts.map +1 -0
  32. package/lib/examples/makeTradeExample.d.ts +1 -0
  33. package/lib/examples/makeTradeExample.d.ts.map +1 -0
  34. package/lib/idl/clearing_house.json +6 -2
  35. package/lib/index.d.ts +1 -0
  36. package/lib/index.d.ts.map +1 -0
  37. package/lib/math/amm.d.ts +1 -0
  38. package/lib/math/amm.d.ts.map +1 -0
  39. package/lib/math/conversion.d.ts +1 -0
  40. package/lib/math/conversion.d.ts.map +1 -0
  41. package/lib/math/funding.d.ts +11 -1
  42. package/lib/math/funding.d.ts.map +1 -0
  43. package/lib/math/funding.js +60 -19
  44. package/lib/math/market.d.ts +1 -0
  45. package/lib/math/market.d.ts.map +1 -0
  46. package/lib/math/position.d.ts +1 -0
  47. package/lib/math/position.d.ts.map +1 -0
  48. package/lib/math/trade.d.ts +2 -1
  49. package/lib/math/trade.d.ts.map +1 -0
  50. package/lib/math/utils.d.ts +1 -0
  51. package/lib/math/utils.d.ts.map +1 -0
  52. package/lib/mockUSDCFaucet.d.ts +1 -0
  53. package/lib/mockUSDCFaucet.d.ts.map +1 -0
  54. package/lib/pythClient.d.ts +1 -0
  55. package/lib/pythClient.d.ts.map +1 -0
  56. package/lib/tx/defaultTxSender.d.ts +1 -0
  57. package/lib/tx/defaultTxSender.d.ts.map +1 -0
  58. package/lib/tx/types.d.ts +1 -0
  59. package/lib/tx/types.d.ts.map +1 -0
  60. package/lib/tx/utils.d.ts +1 -0
  61. package/lib/tx/utils.d.ts.map +1 -0
  62. package/lib/types.d.ts +10 -1
  63. package/lib/types.d.ts.map +1 -0
  64. package/package.json +12 -2
  65. package/src/clearingHouseUser.ts +7 -4
  66. package/src/constants/markets.ts +7 -7
  67. package/src/idl/clearing_house.json +6 -2
  68. package/src/math/funding.ts +102 -55
  69. package/src/math/trade.ts +4 -3
  70. package/src/types.ts +9 -1
  71. package/tsconfig.json +2 -1
package/.eslintrc.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "root": true,
3
+ "parser": "@typescript-eslint/parser",
4
+ "env": {
5
+ "browser": true
6
+ },
7
+ "ignorePatterns": ["**/lib"],
8
+ "plugins": [],
9
+ "extends": [
10
+ "eslint:recommended",
11
+ "plugin:@typescript-eslint/eslint-recommended",
12
+ "plugin:@typescript-eslint/recommended"
13
+ ],
14
+ "rules": {
15
+ "@typescript-eslint/explicit-function-return-type": "off",
16
+ "@typescript-eslint/ban-ts-ignore": "off",
17
+ "@typescript-eslint/ban-ts-comment": "off",
18
+ "@typescript-eslint/no-explicit-any": "off",
19
+ "@typescript-eslint/no-unused-vars": [
20
+ 2,
21
+ {
22
+ "argsIgnorePattern": "^_",
23
+ "varsIgnorePattern": "^_"
24
+ }
25
+ ],
26
+ "@typescript-eslint/no-var-requires": 0,
27
+ "@typescript-eslint/no-empty-function": 0,
28
+ "no-mixed-spaces-and-tabs": [2, "smart-tabs"],
29
+ "semi": 2
30
+ },
31
+ "settings": {
32
+ "react": {
33
+ "version": "detect"
34
+ }
35
+ }
36
+ }
@@ -0,0 +1 @@
1
+ **/node_modules/**
package/.prettierrc.js ADDED
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ semi: true,
3
+ trailingComma: 'es5',
4
+ singleQuote: true,
5
+ printWidth: 80,
6
+ tabWidth: 2,
7
+ useTabs: true,
8
+ bracketSameLine: false,
9
+ };
@@ -35,3 +35,4 @@ export declare class DefaultClearingHouseAccountSubscriber implements ClearingHo
35
35
  getCurveHistoryAccount(): CurveHistoryAccount;
36
36
  getLiquidationHistoryAccount(): LiquidationHistoryAccount;
37
37
  }
38
+ //# sourceMappingURL=defaultClearingHouseAccountSubscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultClearingHouseAccountSubscriber.d.ts","sourceRoot":"","sources":["../../src/accounts/defaultClearingHouseAccountSubscriber.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,8BAA8B,EAC9B,0BAA0B,EAC1B,yBAAyB,EACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAsB,MAAM,SAAS,CAAC;AAChE,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,qBAAa,qCACZ,YAAW,8BAA8B;IAEzC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAC3E,sBAAsB,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACzD,wBAAwB,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC7D,6BAA6B,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACvE,+BAA+B,CAAC,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC3E,sCAAsC,CAAC,EAAE,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;IACzF,mCAAmC,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IACnF,6BAA6B,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACvE,mCAAmC,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IAEnF,0BAA0B,EAAE,yBAAyB,EAAE,CAAM;IAE7D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,mBAAmB,CAAmB;IAC9C,OAAO,CAAC,2BAA2B,CAAyB;gBAEzC,OAAO,EAAE,OAAO;IAMtB,SAAS,CACrB,qBAAqB,CAAC,EAAE,yBAAyB,EAAE,GACjD,OAAO,CAAC,OAAO,CAAC;IAiJN,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCzC,kBAAkB,IAAI,IAAI;IAQ1B,0BAA0B,CACzB,oBAAoB,EAAE,yBAAyB,GAC7C,IAAI;IAcA,eAAe,IAAI,YAAY;IAK/B,iBAAiB,IAAI,cAAc;IAKnC,sBAAsB,IAAI,mBAAmB;IAM7C,wBAAwB,IAAI,qBAAqB;IAMjD,+BAA+B,IAAI,4BAA4B;IAM/D,4BAA4B,IAAI,yBAAyB;IAMzD,sBAAsB,IAAI,mBAAmB;IAM7C,4BAA4B,IAAI,yBAAyB;CAKhE"}
@@ -26,3 +26,4 @@ export declare class DefaultHistoryAccountSubscriber implements HistoryAccountSu
26
26
  getCurveHistoryAccount(): CurveHistoryAccount;
27
27
  getLiquidationHistoryAccount(): LiquidationHistoryAccount;
28
28
  }
29
+ //# sourceMappingURL=defaultHistoryAccountSubscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultHistoryAccountSubscriber.d.ts","sourceRoot":"","sources":["../../src/accounts/defaultHistoryAccountSubscriber.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAsB,MAAM,SAAS,CAAC;AAChE,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EAEzB,mBAAmB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,qBAAa,+BACZ,YAAW,wBAAwB;IAEnC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAC3E,6BAA6B,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACvE,+BAA+B,CAAC,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC3E,sCAAsC,CAAC,EAAE,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;IACzF,mCAAmC,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IACnF,6BAA6B,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACvE,mCAAmC,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;gBAEhE,OAAO,EAAE,OAAO;IAMtB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IA2F7B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAczC,kBAAkB,IAAI,IAAI;IAQnB,sBAAsB,IAAI,mBAAmB;IAK7C,wBAAwB,IAAI,qBAAqB;IAKjD,+BAA+B,IAAI,4BAA4B;IAK/D,4BAA4B,IAAI,yBAAyB;IAKzD,sBAAsB,IAAI,mBAAmB;IAK7C,4BAA4B,IAAI,yBAAyB;CAIhE"}
@@ -18,3 +18,4 @@ export declare class DefaultUserAccountSubscriber implements UserAccountSubscrib
18
18
  getUserAccount(): UserAccount;
19
19
  getUserPositionsAccount(): UserPositionsAccount;
20
20
  }
21
+ //# sourceMappingURL=defaultUserAccountSubscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultUserAccountSubscriber.d.ts","sourceRoot":"","sources":["../../src/accounts/defaultUserAccountSubscriber.ts"],"names":[],"mappings":";AAAA,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE7D,qBAAa,4BAA6B,YAAW,qBAAqB;IACzE,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAClE,SAAS,EAAE,SAAS,CAAC;IAErB,yBAAyB,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC1D,8BAA8B,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;gBAErD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;IAOnD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAsC7B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,cAAc,IAAI,WAAW;IAI7B,uBAAuB,IAAI,oBAAoB;CAGtD"}
@@ -71,3 +71,4 @@ export interface UserAccountSubscriber {
71
71
  getUserAccount(): UserAccount;
72
72
  getUserPositionsAccount(): UserPositionsAccount;
73
73
  }
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/accounts/types.ts"],"names":[],"mappings":"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"}
@@ -10,3 +10,4 @@ export declare class WebSocketAccountSubscriber<T> implements AccountSubscriber<
10
10
  subscribe(onChange: (data: T) => void): Promise<void>;
11
11
  unsubscribe(): Promise<void>;
12
12
  }
13
+ //# sourceMappingURL=webSocketAccountSubscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webSocketAccountSubscriber.d.ts","sourceRoot":"","sources":["../../src/accounts/webSocketAccountSubscriber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,0BAA0B,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,SAAS,CAAC;gBAG3B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,SAAS;IAOtB,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3D,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
@@ -3,3 +3,4 @@ export declare function getClearingHouseStateAccountPublicKeyAndNonce(programId:
3
3
  export declare function getClearingHouseStateAccountPublicKey(programId: PublicKey): Promise<PublicKey>;
4
4
  export declare function getUserAccountPublicKeyAndNonce(programId: PublicKey, authority: PublicKey): Promise<[PublicKey, number]>;
5
5
  export declare function getUserAccountPublicKey(programId: PublicKey, authority: PublicKey): Promise<PublicKey>;
6
+ //# sourceMappingURL=addresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAsB,6CAA6C,CAClE,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAK9B;AAED,wBAAsB,qCAAqC,CAC1D,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,SAAS,CAAC,CAEpB;AAED,wBAAsB,+BAA+B,CACpD,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAK9B;AAED,wBAAsB,uBAAuB,CAC5C,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,SAAS,CAAC,CAEpB"}
package/lib/admin.d.ts CHANGED
@@ -32,3 +32,4 @@ export declare class Admin extends ClearingHouse {
32
32
  updateExchangePaused(exchangePaused: boolean): Promise<TransactionSignature>;
33
33
  disableAdminControlsPrices(): Promise<TransactionSignature>;
34
34
  }
35
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export declare function assert(condition: boolean, error?: string): void;
2
+ //# sourceMappingURL=assert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/assert/assert.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAI/D"}
@@ -107,3 +107,4 @@ export declare class ClearingHouse {
107
107
  getSettleFundingPaymentIx(userAccount: PublicKey, userPositionsAccount: PublicKey): Promise<TransactionInstruction>;
108
108
  triggerEvent(eventName: keyof ClearingHouseAccountEvents, data?: any): void;
109
109
  }
110
+ //# sourceMappingURL=clearingHouse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearingHouse.d.ts","sourceRoot":"","sources":["../src/clearingHouse.ts"],"names":[],"mappings":"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"}
@@ -139,3 +139,4 @@ export declare class ClearingHouseUser {
139
139
  */
140
140
  private getTotalPositionValueExcludingMarket;
141
141
  }
142
+ //# sourceMappingURL=clearingHouseUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearingHouseUser.d.ts","sourceRoot":"","sources":["../src/clearingHouseUser.ts"],"names":[],"mappings":"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"}
@@ -298,7 +298,7 @@ class ClearingHouseUser {
298
298
  // total position value after trade
299
299
  const targetTotalPositionValueUSDC = totalCurrentPositionValueIgnoringTargetUSDC.add(proposedMarketPositionValueUSDC);
300
300
  // if the position value after the trade is less than total collateral, there is no liq price
301
- if (targetTotalPositionValueUSDC.lte(totalCollateralUSDC)) {
301
+ if (targetTotalPositionValueUSDC.lte(totalCollateralUSDC) && proposedMarketPosition.baseAssetAmount.gt(numericConstants_1.ZERO)) {
302
302
  return new bn_js_1.default(-1);
303
303
  }
304
304
  // proportion of proposed market position to overall position
package/lib/config.d.ts CHANGED
@@ -21,3 +21,4 @@ export declare const initialize: (props: {
21
21
  overrideEnv?: Partial<DriftConfig>;
22
22
  }) => DriftConfig;
23
23
  export {};
24
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,aAAK,WAAW,GAAG;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,2BAA2B,EAAE,MAAM,CAAC;IACpC,yBAAyB,EAAE,MAAM,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,oBAAY,QAAQ,GAAG,QAAQ,GAAG,cAAc,CAAC;AAEjD,eAAO,MAAM,OAAO,EAAE;KAAG,GAAG,IAAI,QAAQ,GAAG,WAAW;CAarD,CAAC;AAIF,eAAO,MAAM,SAAS,QAAO,WAA4B,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,UAAW;IACjC,GAAG,EAAE,QAAQ,CAAC;IACd,WAAW,CAAC,EAAE,QAAQ,WAAW,CAAC,CAAC;CACnC,KAAG,WAQH,CAAC"}
@@ -8,3 +8,4 @@ declare type Market = {
8
8
  };
9
9
  export declare const Markets: Market[];
10
10
  export {};
11
+ //# sourceMappingURL=markets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../src/constants/markets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,aAAK,MAAM,GAAG;IACb,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAAM,EA6B3B,CAAC"}
@@ -27,11 +27,11 @@ exports.Markets = [
27
27
  devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
28
28
  mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
29
29
  },
30
- // {
31
- // symbol: 'COPE-PERP',
32
- // baseAssetSymbol: 'COPE',
33
- // marketIndex: new BN(3),
34
- // devnetPythOracle: 'BAXDJUXtz6P5ARhHH1aPwgv4WENzHwzyhmLYK4daFwiM',
35
- // mainnetPythOracle: '9xYBiDWYsh2fHzpsz3aaCnNHCKWBNtfEDLtU6kS4aFD9',
36
- // },
30
+ {
31
+ symbol: 'LUNA-PERP',
32
+ baseAssetSymbol: 'LUNA',
33
+ marketIndex: new bn_js_1.default(3),
34
+ devnetPythOracle: '8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3',
35
+ mainnetPythOracle: '5bmWuR1dgP4avtGYMNKLuxumZTVKGgoN2BCMXWDNL9nY',
36
+ },
37
37
  ];
@@ -13,3 +13,4 @@ export declare const PEG_PRECISION: BN;
13
13
  export declare const AMM_RESERVE_PRECISION: BN;
14
14
  export declare const AMM_TO_QUOTE_PRECISION_RATIO: BN;
15
15
  export declare const PRICE_TO_QUOTE_PRECISION: BN;
16
+ //# sourceMappingURL=numericConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numericConstants.d.ts","sourceRoot":"","sources":["../../src/constants/numericConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,eAAO,MAAM,IAAI,IAAY,CAAC;AAC9B,eAAO,MAAM,GAAG,IAAY,CAAC;AAC7B,eAAO,MAAM,YAAY,IAAgB,CAAC;AAC1C,eAAO,MAAM,MAAM,IAAkC,CAAC;AAEtD,eAAO,MAAM,YAAY,IAAY,CAAC;AACtC,eAAO,MAAM,sBAAsB,IAAc,CAAC;AAClD,eAAO,MAAM,yBAAyB,IAAc,CAAC;AAErD,eAAO,MAAM,eAAe,IAAkB,CAAC;AAC/C,eAAO,MAAM,oBAAoB,IAAmB,CAAC;AACrD,eAAO,MAAM,yBAAyB,IAAgB,CAAC;AACvD,eAAO,MAAM,aAAa,IAAe,CAAC;AAE1C,eAAO,MAAM,qBAAqB,IAAmB,CAAC;AACtD,eAAO,MAAM,4BAA4B,IACE,CAAC;AAC5C,eAAO,MAAM,wBAAwB,IACK,CAAC"}
@@ -1,2 +1,3 @@
1
1
  import { PublicKey } from '@solana/web3.js';
2
2
  export declare const getTokenAddress: (mintAddress: string, userPubKey: string) => Promise<PublicKey>;
3
+ //# sourceMappingURL=makeTradeExample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeTradeExample.d.ts","sourceRoot":"","sources":["../../src/examples/makeTradeExample.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAcjE,eAAO,MAAM,eAAe,gBACd,MAAM,cACP,MAAM,KAChB,QAAQ,SAAS,CAOnB,CAAC"}
@@ -2140,7 +2140,7 @@
2140
2140
  "type": "i64"
2141
2141
  },
2142
2142
  {
2143
- "name": "lastOracleMarkSpreadTwap",
2143
+ "name": "lastOraclePriceTwap",
2144
2144
  "type": "i128"
2145
2145
  },
2146
2146
  {
@@ -2175,9 +2175,13 @@
2175
2175
  "name": "minimumTradeSize",
2176
2176
  "type": "u128"
2177
2177
  },
2178
+ {
2179
+ "name": "lastOraclePriceTwapTs",
2180
+ "type": "i64"
2181
+ },
2178
2182
  {
2179
2183
  "name": "padding0",
2180
- "type": "u128"
2184
+ "type": "u64"
2181
2185
  },
2182
2186
  {
2183
2187
  "name": "padding1",
package/lib/index.d.ts CHANGED
@@ -21,3 +21,4 @@ export * from './math/utils';
21
21
  export * from './config';
22
22
  export * from './constants/numericConstants';
23
23
  export { BN };
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAE7C,OAAO,EAAE,EAAE,EAAE,CAAC"}
package/lib/math/amm.d.ts CHANGED
@@ -38,3 +38,4 @@ export declare function calculateSwapOutput(inputAssetReserve: BN, swapAmount: B
38
38
  * @param positionDirection
39
39
  */
40
40
  export declare function getSwapDirection(inputAssetType: AssetType, positionDirection: PositionDirection): SwapDirection;
41
+ //# sourceMappingURL=amm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amm.d.ts","sourceRoot":"","sources":["../../src/math/amm.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAO3C,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC7B,eAAe,EAAE,EAAE,EACnB,gBAAgB,EAAE,EAAE,EACpB,cAAc,EAAE,EAAE,GAChB,EAAE,CAUJ;AAED,oBAAY,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC5C,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,SAAS,EACzB,UAAU,EAAE,EAAE,EACd,aAAa,EAAE,aAAa,GAC1B,CAAC,EAAE,EAAE,EAAE,CAAC,CAmCV;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAClC,iBAAiB,EAAE,EAAE,EACrB,UAAU,EAAE,EAAE,EACd,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,EAAE,GACX,CAAC,EAAE,EAAE,EAAE,CAAC,CASV;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,cAAc,EAAE,SAAS,EACzB,iBAAiB,EAAE,iBAAiB,GAClC,aAAa,CAgBf"}
@@ -1,3 +1,4 @@
1
1
  import BN from 'bn.js';
2
2
  export declare const convertToNumber: (bigNumber: BN, precision?: BN) => number;
3
3
  export declare const convertBaseAssetAmountToNumber: (baseAssetAmount: BN) => number;
4
+ //# sourceMappingURL=conversion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../src/math/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAMvB,eAAO,MAAM,eAAe,cAChB,EAAE,cACF,EAAE,WAOb,CAAC;AAEF,eAAO,MAAM,8BAA8B,oBAAqB,EAAE,WAKjE,CAAC"}
@@ -9,7 +9,7 @@ import { Market } from '../types';
9
9
  * @param periodAdjustment
10
10
  * @returns Estimated funding rate. : Precision //TODO-PRECISION
11
11
  */
12
- export declare function calculateAllEstimatedFundingRate(market: Market, pythClient: PythClient, periodAdjustment?: BN): Promise<[BN, BN, BN]>;
12
+ export declare function calculateAllEstimatedFundingRate(market: Market, pythClient: PythClient, periodAdjustment?: BN): Promise<[BN, BN, BN, BN, BN]>;
13
13
  /**
14
14
  *
15
15
  * @param market
@@ -28,9 +28,19 @@ export declare function calculateEstimatedFundingRate(market: Market, pythClient
28
28
  * @returns Estimated funding rate. : Precision //TODO-PRECISION
29
29
  */
30
30
  export declare function calculateLongShortFundingRate(market: Market, pythClient: PythClient, periodAdjustment?: BN): Promise<[BN, BN]>;
31
+ /**
32
+ *
33
+ * @param market
34
+ * @param pythClient
35
+ * @param periodAdjustment
36
+ * @param estimationMethod
37
+ * @returns Estimated funding rate. : Precision //TODO-PRECISION
38
+ */
39
+ export declare function calculateLongShortFundingRateAndLiveTwaps(market: Market, pythClient: PythClient, periodAdjustment?: BN): Promise<[BN, BN, BN, BN]>;
31
40
  /**
32
41
  *
33
42
  * @param market
34
43
  * @returns Estimated fee pool size
35
44
  */
36
45
  export declare function calculateFundingPool(market: Market): BN;
46
+ //# sourceMappingURL=funding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../src/math/funding.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAO3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACrD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAoH/B;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,EAAc,EAChC,gBAAgB,EAAE,cAAc,GAAG,YAAY,GAAG,QAAQ,GACxD,OAAO,CAAC,EAAE,CAAC,CAgBb;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAcnB;AAED;;;;;;;GAOG;AACF,wBAAsB,yCAAyC,CAC/D,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAY3B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAKvD"}
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.calculateFundingPool = exports.calculateLongShortFundingRate = exports.calculateEstimatedFundingRate = exports.calculateAllEstimatedFundingRate = void 0;
12
+ exports.calculateFundingPool = exports.calculateLongShortFundingRateAndLiveTwaps = exports.calculateLongShortFundingRate = exports.calculateEstimatedFundingRate = exports.calculateAllEstimatedFundingRate = void 0;
13
13
  const anchor_1 = require("@project-serum/anchor");
14
14
  const numericConstants_1 = require("../constants/numericConstants");
15
15
  const market_1 = require("./market");
@@ -29,22 +29,34 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
29
29
  const secondsInHour = new anchor_1.BN(3600);
30
30
  const hoursInDay = new anchor_1.BN(24);
31
31
  if (!market.initialized) {
32
- return [new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(0)];
32
+ return [numericConstants_1.ZERO, numericConstants_1.ZERO, numericConstants_1.ZERO, numericConstants_1.ZERO, numericConstants_1.ZERO];
33
33
  }
34
34
  const payFreq = new anchor_1.BN(market.amm.fundingPeriod);
35
- const oraclePriceData = yield pythClient.getPriceData(market.amm.oracle);
36
- const oracleTwapWithMantissa = new anchor_1.BN(oraclePriceData.twap.value * numericConstants_1.MARK_PRICE_PRECISION.toNumber());
35
+ // todo: sufficiently differs from blockchain timestamp?
37
36
  const now = new anchor_1.BN((Date.now() / 1000).toFixed(0));
38
37
  const timeSinceLastUpdate = now.sub(market.amm.lastFundingRateTs);
38
+ // calculate real-time mark twap
39
39
  const lastMarkTwapWithMantissa = market.amm.lastMarkPriceTwap;
40
40
  const lastMarkPriceTwapTs = market.amm.lastMarkPriceTwapTs;
41
41
  const timeSinceLastMarkChange = now.sub(lastMarkPriceTwapTs);
42
- const markTwapTimeSinceLastUpdate = lastMarkPriceTwapTs.sub(market.amm.lastFundingRateTs);
42
+ const markTwapTimeSinceLastUpdate = anchor_1.BN.max(secondsInHour, secondsInHour.sub(timeSinceLastMarkChange));
43
43
  const baseAssetPriceWithMantissa = market_1.calculateMarkPrice(market);
44
44
  const markTwapWithMantissa = markTwapTimeSinceLastUpdate
45
45
  .mul(lastMarkTwapWithMantissa)
46
46
  .add(timeSinceLastMarkChange.mul(baseAssetPriceWithMantissa))
47
47
  .div(timeSinceLastMarkChange.add(markTwapTimeSinceLastUpdate));
48
+ // calculate real-time (predicted) oracle twap
49
+ // note: oracle twap depends on `when the chord is struck` (market is trade)
50
+ const lastOracleTwapWithMantissa = market.amm.lastOraclePriceTwap;
51
+ const lastOraclePriceTwapTs = market.amm.lastOraclePriceTwapTs;
52
+ const timeSinceLastOracleTwapUpdate = now.sub(lastOraclePriceTwapTs);
53
+ const oracleTwapTimeSinceLastUpdate = anchor_1.BN.max(secondsInHour, secondsInHour.sub(timeSinceLastOracleTwapUpdate));
54
+ const oraclePriceData = yield pythClient.getPriceData(market.amm.oracle);
55
+ const oraclePriceStableWithMantissa = new anchor_1.BN(((oraclePriceData.price + oraclePriceData.previousPrice) / 2) * numericConstants_1.MARK_PRICE_PRECISION.toNumber());
56
+ const oracleTwapWithMantissa = oracleTwapTimeSinceLastUpdate
57
+ .mul(lastOracleTwapWithMantissa)
58
+ .add(timeSinceLastMarkChange.mul(oraclePriceStableWithMantissa))
59
+ .div(timeSinceLastOracleTwapUpdate.add(oracleTwapTimeSinceLastUpdate));
48
60
  const twapSpread = markTwapWithMantissa.sub(oracleTwapWithMantissa);
49
61
  const twapSpreadPct = twapSpread
50
62
  .mul(numericConstants_1.MARK_PRICE_PRECISION)
@@ -58,7 +70,9 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
58
70
  .div(secondsInHour)
59
71
  .div(hoursInDay);
60
72
  const interpEst = twapSpreadPct.mul(periodAdjustment).div(hoursInDay);
61
- const interpRateQuote = twapSpreadPct.mul(periodAdjustment).div(hoursInDay)
73
+ const interpRateQuote = twapSpreadPct
74
+ .mul(periodAdjustment)
75
+ .div(hoursInDay)
62
76
  .div(numericConstants_1.MARK_PRICE_PRECISION.div(numericConstants_1.QUOTE_PRECISION));
63
77
  let feePoolSize = calculateFundingPool(market);
64
78
  if (interpRateQuote.lt(new anchor_1.BN(0))) {
@@ -67,32 +81,36 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
67
81
  let cappedAltEst;
68
82
  let largerSide;
69
83
  let smallerSide;
70
- if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort)) {
84
+ if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
71
85
  largerSide = market.baseAssetAmountLong.abs();
72
86
  smallerSide = market.baseAssetAmountShort.abs();
73
87
  if (twapSpread.gt(new anchor_1.BN(0))) {
74
- return [lowerboundEst, interpEst, interpEst];
88
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
75
89
  }
76
90
  }
77
- else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort)) {
91
+ else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
78
92
  largerSide = market.baseAssetAmountShort.abs();
79
93
  smallerSide = market.baseAssetAmountLong.abs();
80
94
  if (twapSpread.lt(new anchor_1.BN(0))) {
81
- return [lowerboundEst, interpEst, interpEst];
95
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
82
96
  }
83
97
  }
84
98
  else {
85
- return [lowerboundEst, interpEst, interpEst];
99
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
86
100
  }
87
101
  if (largerSide.gt(numericConstants_1.ZERO)) {
88
102
  cappedAltEst = smallerSide.mul(twapSpread).div(largerSide);
89
- const feePoolTopOff = feePoolSize.mul(numericConstants_1.MARK_PRICE_PRECISION.div(numericConstants_1.QUOTE_PRECISION))
90
- .mul(numericConstants_1.AMM_RESERVE_PRECISION).div(largerSide);
103
+ const feePoolTopOff = feePoolSize
104
+ .mul(numericConstants_1.MARK_PRICE_PRECISION.div(numericConstants_1.QUOTE_PRECISION))
105
+ .mul(numericConstants_1.AMM_RESERVE_PRECISION)
106
+ .div(largerSide);
91
107
  cappedAltEst = cappedAltEst.add(feePoolTopOff);
92
- cappedAltEst = cappedAltEst.mul(numericConstants_1.MARK_PRICE_PRECISION)
108
+ cappedAltEst = cappedAltEst
109
+ .mul(numericConstants_1.MARK_PRICE_PRECISION)
93
110
  .mul(new anchor_1.BN(100))
94
111
  .div(oracleTwapWithMantissa)
95
- .mul(periodAdjustment).div(hoursInDay);
112
+ .mul(periodAdjustment)
113
+ .div(hoursInDay);
96
114
  if (cappedAltEst.abs().gt(interpEst.abs())) {
97
115
  cappedAltEst = interpEst;
98
116
  }
@@ -100,7 +118,7 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
100
118
  else {
101
119
  cappedAltEst = interpEst;
102
120
  }
103
- return [lowerboundEst, cappedAltEst, interpEst];
121
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, cappedAltEst, interpEst];
104
122
  });
105
123
  }
106
124
  exports.calculateAllEstimatedFundingRate = calculateAllEstimatedFundingRate;
@@ -114,7 +132,7 @@ exports.calculateAllEstimatedFundingRate = calculateAllEstimatedFundingRate;
114
132
  */
115
133
  function calculateEstimatedFundingRate(market, pythClient, periodAdjustment = new anchor_1.BN(1), estimationMethod) {
116
134
  return __awaiter(this, void 0, void 0, function* () {
117
- const [lowerboundEst, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
135
+ const [_1, _2, lowerboundEst, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
118
136
  if (estimationMethod == 'lowerbound') {
119
137
  //assuming remaining funding period has no gap
120
138
  return lowerboundEst;
@@ -138,7 +156,7 @@ exports.calculateEstimatedFundingRate = calculateEstimatedFundingRate;
138
156
  */
139
157
  function calculateLongShortFundingRate(market, pythClient, periodAdjustment = new anchor_1.BN(1)) {
140
158
  return __awaiter(this, void 0, void 0, function* () {
141
- const [_, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
159
+ const [_1, _2, _, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
142
160
  if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort)) {
143
161
  return [cappedAltEst, interpEst];
144
162
  }
@@ -151,15 +169,38 @@ function calculateLongShortFundingRate(market, pythClient, periodAdjustment = ne
151
169
  });
152
170
  }
153
171
  exports.calculateLongShortFundingRate = calculateLongShortFundingRate;
172
+ /**
173
+ *
174
+ * @param market
175
+ * @param pythClient
176
+ * @param periodAdjustment
177
+ * @param estimationMethod
178
+ * @returns Estimated funding rate. : Precision //TODO-PRECISION
179
+ */
180
+ function calculateLongShortFundingRateAndLiveTwaps(market, pythClient, periodAdjustment = new anchor_1.BN(1)) {
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ const [markTwapLive, oracleTwapLive, _2, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
183
+ if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
184
+ return [markTwapLive, oracleTwapLive, cappedAltEst, interpEst];
185
+ }
186
+ else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
187
+ return [markTwapLive, oracleTwapLive, interpEst, cappedAltEst];
188
+ }
189
+ else {
190
+ return [markTwapLive, oracleTwapLive, interpEst, interpEst];
191
+ }
192
+ });
193
+ }
194
+ exports.calculateLongShortFundingRateAndLiveTwaps = calculateLongShortFundingRateAndLiveTwaps;
154
195
  /**
155
196
  *
156
197
  * @param market
157
198
  * @returns Estimated fee pool size
158
199
  */
159
200
  function calculateFundingPool(market) {
201
+ // todo
160
202
  const totalFeeLB = market.amm.totalFee.div(new anchor_1.BN(2));
161
203
  const feePool = market.amm.totalFeeMinusDistributions.sub(totalFeeLB);
162
- // return new BN(QUOTE_PRECISION.mul(new BN(2400)));
163
204
  return feePool;
164
205
  }
165
206
  exports.calculateFundingPool = calculateFundingPool;
@@ -8,3 +8,4 @@ import { Market } from '../types';
8
8
  * @return markPrice : Precision MARK_PRICE_PRECISION
9
9
  */
10
10
  export declare function calculateMarkPrice(market: Market): BN;
11
+ //# sourceMappingURL=market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../src/math/market.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAMrD"}
@@ -24,3 +24,4 @@ export declare function calculatePositionPNL(market: Market, marketPosition: Use
24
24
  * @returns // TODO-PRECISION
25
25
  */
26
26
  export declare function calculatePositionFundingPNL(market: Market, marketPosition: UserPosition): BN;
27
+ //# sourceMappingURL=position.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/math/position.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,YAAY,EAAE,MAAM,UAAU,CAAC;AAMnE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQvB;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GACxB,EAAE,CA+BJ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,YAAY,EAC5B,WAAW,UAAQ,GACjB,EAAE,CAgCJ;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,YAAY,GAC1B,EAAE,CAoBJ"}
@@ -2,7 +2,7 @@
2
2
  import { Market, PositionDirection } from '../types';
3
3
  import { BN } from '@project-serum/anchor';
4
4
  import { AssetType } from './amm';
5
- export declare type PriceImpactUnit = 'entryPrice' | 'maxPrice' | 'priceDelta' | 'priceDeltaAsNumber' | 'pctAvg' | 'pctMax' | 'quoteAssetAmount' | 'quoteAssetAmountPeg' | 'acquiredBaseAssetAmount' | 'acquiredQuoteAssetAmount';
5
+ export declare type PriceImpactUnit = 'entryPrice' | 'maxPrice' | 'priceDelta' | 'priceDeltaAsNumber' | 'pctAvg' | 'pctMax' | 'quoteAssetAmount' | 'quoteAssetAmountPeg' | 'acquiredBaseAssetAmount' | 'acquiredQuoteAssetAmount' | 'all';
6
6
  /**
7
7
  * Calculates avg/max slippage (price impact) for candidate trade
8
8
  * @param direction
@@ -45,3 +45,4 @@ export declare function calculateTradeAcquiredAmounts(direction: PositionDirecti
45
45
  * ]
46
46
  */
47
47
  export declare function calculateTargetPriceTrade(market: Market, targetPrice: BN, pct?: BN): [PositionDirection, BN, BN, BN];
48
+ //# sourceMappingURL=trade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../src/math/trade.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAS3C,OAAO,EAIN,SAAS,EACT,MAAM,OAAO,CAAC;AAKf,oBAAY,eAAe,GACxB,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,oBAAoB,GACpB,QAAQ,GACR,QAAQ,GACR,kBAAkB,GAClB,qBAAqB,GACrB,yBAAyB,GACzB,0BAA0B,GAC1B,KAAK,CAAC;AAET;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,SAAmB,GACjC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CA0ClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,SAAmB,GACjC,CAAC,EAAE,EAAE,EAAE,CAAC,CAiBV;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,EAAE,EACf,GAAG,GAAE,EAAW,GACd,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CA6GjC"}
@@ -1,2 +1,3 @@
1
1
  /// <reference types="bn.js" />
2
2
  export declare const squareRootBN: (n: any, closeness?: import("bn.js")) => any;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/math/utils.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,YAAY,8CA0BxB,CAAC"}
@@ -33,3 +33,4 @@ export declare class MockUSDCFaucet {
33
33
  callback: (accountInfo: AccountInfo) => void;
34
34
  }): Promise<boolean>;
35
35
  }
36
+ //# sourceMappingURL=mockUSDCFaucet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockUSDCFaucet.d.ts","sourceRoot":"","sources":["../src/mockUSDCFaucet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAO,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACN,WAAW,EAKX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,cAAc,EACd,UAAU,EACV,SAAS,EAIT,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,qBAAa,cAAc;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC;gBAGrB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,CAAC,EAAE,cAAc;IAUT,uCAAuC,IAAI,OAAO,CAC9D;QAAC,SAAS;QAAE,MAAM;KAAC,CACnB;IAOD,4BAA4B,CAAC,EAAE,SAAS,CAAC;IAC5B,+BAA+B,IAAI,OAAO,CAAC,SAAS,CAAC;IAUrD,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC;IA8C3C,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAM1B,UAAU,CACtB,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,EAAE,GACR,OAAO,CAAC,oBAAoB,CAAC;IAanB,qCAAqC,CACjD,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE,EAAE,GACR,OAAO,CAAC,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAWhC,iDAAiD,CAC7D,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE,EAAE,GACR,OAAO,CAAC,CAAC,SAAS,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;IA8B1D,gCAAgC,CAAC,KAAK,EAAE;QACpD,UAAU,EAAE,SAAS,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAWrB,mBAAmB,CAAC,KAAK,EAAE;QACvC,UAAU,EAAE,SAAS,CAAC;KACtB,GAAG,OAAO,CAAC,WAAW,CAAC;IAiBX,uBAAuB,CAAC,KAAK,EAAE;QAC3C,UAAU,EAAE,SAAS,CAAC;QACtB,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;KAC7C,GAAG,OAAO,CAAC,OAAO,CAAC;CAuBpB"}
@@ -5,3 +5,4 @@ export declare class PythClient {
5
5
  constructor(connection: Connection);
6
6
  getPriceData(pricePublicKey: PublicKey): Promise<PriceData>;
7
7
  }
8
+ //# sourceMappingURL=pythClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pythClient.d.ts","sourceRoot":"","sources":["../src/pythClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAExD,qBAAa,UAAU;IACtB,OAAO,CAAC,UAAU,CAAa;gBAEZ,UAAU,EAAE,UAAU;IAI5B,YAAY,CAAC,cAAc,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;CAIxE"}
@@ -6,3 +6,4 @@ export declare class DefaultTxSender implements TxSender {
6
6
  constructor(provider: Provider);
7
7
  send(tx: Transaction, additionalSigners?: Array<Signer>, opts?: ConfirmOptions): Promise<TransactionSignature>;
8
8
  }
9
+ //# sourceMappingURL=defaultTxSender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultTxSender.d.ts","sourceRoot":"","sources":["../../src/tx/defaultTxSender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EACN,cAAc,EACd,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,QAAQ,EAAE,QAAQ,CAAC;gBAEA,QAAQ,EAAE,QAAQ;IAIrC,IAAI,CACH,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,oBAAoB,CAAC;CAGhC"}
package/lib/tx/types.d.ts CHANGED
@@ -2,3 +2,4 @@ import { ConfirmOptions, Signer, Transaction, TransactionSignature } from '@sola
2
2
  export interface TxSender {
3
3
  send(tx: Transaction, additionalSigners?: Array<Signer>, opts?: ConfirmOptions): Promise<TransactionSignature>;
4
4
  }
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tx/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,EACd,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,QAAQ;IACxB,IAAI,CACH,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACjC"}
package/lib/tx/utils.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import { Transaction, TransactionInstruction } from '@solana/web3.js';
2
2
  export declare function wrapInTx(instruction: TransactionInstruction): Transaction;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tx/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,sBAAsB,GAAG,WAAW,CAEzE"}
package/lib/types.d.ts CHANGED
@@ -203,6 +203,8 @@ export declare type AMM = {
203
203
  lastFundingRateTs: BN;
204
204
  lastMarkPriceTwap: BN;
205
205
  lastMarkPriceTwapTs: BN;
206
+ lastOraclePriceTwap: BN;
207
+ lastOraclePriceTwapTs: BN;
206
208
  oracle: PublicKey;
207
209
  oracleSource: OracleSource;
208
210
  fundingPeriod: BN;
@@ -240,6 +242,7 @@ export interface Trade {
240
242
  afterPrice: number;
241
243
  side: TradeSide;
242
244
  size: number;
245
+ quoteSize: number;
243
246
  ts: number;
244
247
  fee: number;
245
248
  marketIndex: number;
@@ -274,9 +277,14 @@ export declare type Candle = {
274
277
  };
275
278
  export interface FundingPayment {
276
279
  userPublicKey: string;
277
- ts: number;
280
+ serverTs: number;
278
281
  marketIndex: number;
279
282
  amount: string;
283
+ blockchainTs: number;
284
+ baseAssetAmount: string;
285
+ userLastCumulativeFunding: string;
286
+ userLastFundingRateTs: string;
287
+ rate: number;
280
288
  }
281
289
  export interface IWallet {
282
290
  signTransaction(tx: Transaction): Promise<Transaction>;
@@ -327,3 +335,4 @@ export declare type OracleGuardRails = {
327
335
  };
328
336
  useForLiquidations: boolean;
329
337
  };
338
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "author": "crispheaney",
@@ -12,7 +12,9 @@
12
12
  "scripts": {
13
13
  "build": "yarn clean && tsc",
14
14
  "clean": "rm -rf lib",
15
- "patch-and-pub": "npm version patch --force && npm publish"
15
+ "patch-and-pub": "npm version patch --force && npm publish",
16
+ "prettify": "prettier --write './src/**/*.{ts,tsx}'",
17
+ "lint": "eslint . --ext ts --ext tsx --ext js --quiet"
16
18
  },
17
19
  "keywords": [
18
20
  "drift-labs",
@@ -34,6 +36,14 @@
34
36
  "@types/bn.js": "^5.1.0",
35
37
  "strict-event-emitter-types": "^2.0.0"
36
38
  },
39
+ "devDependencies": {
40
+ "@typescript-eslint/eslint-plugin": "^4.28.0",
41
+ "@typescript-eslint/parser": "^4.28.0",
42
+ "eslint": "^7.29.0",
43
+ "eslint-config-prettier": "^8.3.0",
44
+ "eslint-plugin-prettier": "^3.4.0",
45
+ "prettier": "^2.4.1"
46
+ },
37
47
  "description": "SDK for Drift Protocol v1",
38
48
  "engines": {
39
49
  "node": ">=12"
@@ -224,11 +224,14 @@ export class ClearingHouseUser {
224
224
  * calculates average exit price for closing 100% of position
225
225
  * @returns : Precision MARK_PRICE_PRECISION
226
226
  */
227
- public getPositionEstimatedExitPrice(position: UserPosition, amountToClose?: BN): BN {
227
+ public getPositionEstimatedExitPrice(
228
+ position: UserPosition,
229
+ amountToClose?: BN
230
+ ): BN {
228
231
  const market = this.clearingHouse.getMarket(position.marketIndex);
229
232
 
230
- if(amountToClose){
231
- if(amountToClose.eq(ZERO)){
233
+ if (amountToClose) {
234
+ if (amountToClose.eq(ZERO)) {
232
235
  return calculateMarkPrice(market);
233
236
  }
234
237
  position = {
@@ -408,7 +411,7 @@ export class ClearingHouseUser {
408
411
  );
409
412
 
410
413
  // if the position value after the trade is less than total collateral, there is no liq price
411
- if (targetTotalPositionValueUSDC.lte(totalCollateralUSDC)) {
414
+ if (targetTotalPositionValueUSDC.lte(totalCollateralUSDC) && proposedMarketPosition.baseAssetAmount.gt(ZERO)) {
412
415
  return new BN(-1);
413
416
  }
414
417
 
@@ -30,11 +30,11 @@ export const Markets: Market[] = [
30
30
  devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
31
31
  mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
32
32
  },
33
- // {
34
- // symbol: 'COPE-PERP',
35
- // baseAssetSymbol: 'COPE',
36
- // marketIndex: new BN(3),
37
- // devnetPythOracle: 'BAXDJUXtz6P5ARhHH1aPwgv4WENzHwzyhmLYK4daFwiM',
38
- // mainnetPythOracle: '9xYBiDWYsh2fHzpsz3aaCnNHCKWBNtfEDLtU6kS4aFD9',
39
- // },
33
+ {
34
+ symbol: 'LUNA-PERP',
35
+ baseAssetSymbol: 'LUNA',
36
+ marketIndex: new BN(3),
37
+ devnetPythOracle: '8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3',
38
+ mainnetPythOracle: '5bmWuR1dgP4avtGYMNKLuxumZTVKGgoN2BCMXWDNL9nY',
39
+ },
40
40
  ];
@@ -2140,7 +2140,7 @@
2140
2140
  "type": "i64"
2141
2141
  },
2142
2142
  {
2143
- "name": "lastOracleMarkSpreadTwap",
2143
+ "name": "lastOraclePriceTwap",
2144
2144
  "type": "i128"
2145
2145
  },
2146
2146
  {
@@ -2175,9 +2175,13 @@
2175
2175
  "name": "minimumTradeSize",
2176
2176
  "type": "u128"
2177
2177
  },
2178
+ {
2179
+ "name": "lastOraclePriceTwapTs",
2180
+ "type": "i64"
2181
+ },
2178
2182
  {
2179
2183
  "name": "padding0",
2180
- "type": "u128"
2184
+ "type": "u64"
2181
2185
  },
2182
2186
  {
2183
2187
  "name": "padding1",
@@ -1,23 +1,26 @@
1
1
  import { BN } from '@project-serum/anchor';
2
2
  import {
3
- AMM_RESERVE_PRECISION, MARK_PRICE_PRECISION, QUOTE_PRECISION, ZERO
3
+ AMM_RESERVE_PRECISION,
4
+ MARK_PRICE_PRECISION,
5
+ QUOTE_PRECISION,
6
+ ZERO,
4
7
  } from '../constants/numericConstants';
5
8
  import { PythClient } from '../pythClient';
6
9
  import { Market } from '../types';
7
10
  import { calculateMarkPrice } from './market';
8
11
 
9
12
  /**
10
- *
11
- * @param market
12
- * @param pythClient
13
- * @param periodAdjustment
13
+ *
14
+ * @param market
15
+ * @param pythClient
16
+ * @param periodAdjustment
14
17
  * @returns Estimated funding rate. : Precision //TODO-PRECISION
15
18
  */
16
- export async function calculateAllEstimatedFundingRate(
19
+ export async function calculateAllEstimatedFundingRate(
17
20
  market: Market,
18
21
  pythClient: PythClient,
19
- periodAdjustment: BN = new BN(1),
20
- ): Promise<[BN, BN, BN]> {
22
+ periodAdjustment: BN = new BN(1)
23
+ ): Promise<[BN, BN, BN, BN, BN]> {
21
24
  // periodAdjustment
22
25
  // 1: hourly
23
26
  // 24: daily
@@ -26,34 +29,43 @@ import { calculateMarkPrice } from './market';
26
29
  const hoursInDay = new BN(24);
27
30
 
28
31
  if (!market.initialized) {
29
- return [new BN(0), new BN(0), new BN(0)];
32
+ return [ZERO, ZERO, ZERO, ZERO, ZERO];
30
33
  }
31
34
 
32
35
  const payFreq = new BN(market.amm.fundingPeriod);
33
36
 
34
- const oraclePriceData = await pythClient.getPriceData(market.amm.oracle);
35
- const oracleTwapWithMantissa = new BN(
36
- oraclePriceData.twap.value * MARK_PRICE_PRECISION.toNumber()
37
- );
38
-
37
+ // todo: sufficiently differs from blockchain timestamp?
39
38
  const now = new BN((Date.now() / 1000).toFixed(0));
40
39
  const timeSinceLastUpdate = now.sub(market.amm.lastFundingRateTs);
41
40
 
41
+ // calculate real-time mark twap
42
42
  const lastMarkTwapWithMantissa = market.amm.lastMarkPriceTwap;
43
43
  const lastMarkPriceTwapTs = market.amm.lastMarkPriceTwapTs;
44
44
 
45
45
  const timeSinceLastMarkChange = now.sub(lastMarkPriceTwapTs);
46
- const markTwapTimeSinceLastUpdate = lastMarkPriceTwapTs.sub(
47
- market.amm.lastFundingRateTs
48
- );
49
-
46
+ const markTwapTimeSinceLastUpdate = BN.max(secondsInHour, secondsInHour.sub(timeSinceLastMarkChange));
50
47
  const baseAssetPriceWithMantissa = calculateMarkPrice(market);
51
-
48
+
52
49
  const markTwapWithMantissa = markTwapTimeSinceLastUpdate
53
50
  .mul(lastMarkTwapWithMantissa)
54
51
  .add(timeSinceLastMarkChange.mul(baseAssetPriceWithMantissa))
55
52
  .div(timeSinceLastMarkChange.add(markTwapTimeSinceLastUpdate));
56
53
 
54
+ // calculate real-time (predicted) oracle twap
55
+ // note: oracle twap depends on `when the chord is struck` (market is trade)
56
+ const lastOracleTwapWithMantissa = market.amm.lastOraclePriceTwap;
57
+ const lastOraclePriceTwapTs = market.amm.lastOraclePriceTwapTs;
58
+
59
+ const timeSinceLastOracleTwapUpdate = now.sub(lastOraclePriceTwapTs);
60
+ const oracleTwapTimeSinceLastUpdate = BN.max(secondsInHour, secondsInHour.sub(timeSinceLastOracleTwapUpdate));
61
+ const oraclePriceData = await pythClient.getPriceData(market.amm.oracle);
62
+ const oraclePriceStableWithMantissa = new BN(((oraclePriceData.price + oraclePriceData.previousPrice)/2) * MARK_PRICE_PRECISION.toNumber());
63
+
64
+ const oracleTwapWithMantissa = oracleTwapTimeSinceLastUpdate
65
+ .mul(lastOracleTwapWithMantissa)
66
+ .add(timeSinceLastMarkChange.mul(oraclePriceStableWithMantissa))
67
+ .div(timeSinceLastOracleTwapUpdate.add(oracleTwapTimeSinceLastUpdate));
68
+
57
69
  const twapSpread = markTwapWithMantissa.sub(oracleTwapWithMantissa);
58
70
 
59
71
  const twapSpreadPct = twapSpread
@@ -61,7 +73,6 @@ import { calculateMarkPrice } from './market';
61
73
  .mul(new BN(100))
62
74
  .div(oracleTwapWithMantissa);
63
75
 
64
-
65
76
  const lowerboundEst = twapSpreadPct
66
77
  .mul(payFreq)
67
78
  .mul(BN.min(secondsInHour, timeSinceLastUpdate))
@@ -72,54 +83,59 @@ import { calculateMarkPrice } from './market';
72
83
 
73
84
  const interpEst = twapSpreadPct.mul(periodAdjustment).div(hoursInDay);
74
85
 
75
-
76
- const interpRateQuote = twapSpreadPct.mul(periodAdjustment).div(hoursInDay)
77
- .div(MARK_PRICE_PRECISION.div(QUOTE_PRECISION));
86
+ const interpRateQuote = twapSpreadPct
87
+ .mul(periodAdjustment)
88
+ .div(hoursInDay)
89
+ .div(MARK_PRICE_PRECISION.div(QUOTE_PRECISION));
78
90
  let feePoolSize = calculateFundingPool(market);
79
- if(interpRateQuote.lt(new BN(0))){
91
+ if (interpRateQuote.lt(new BN(0))) {
80
92
  feePoolSize = feePoolSize.mul(new BN(-1));
81
93
  }
82
94
 
83
95
  let cappedAltEst: BN;
84
96
  let largerSide: BN;
85
97
  let smallerSide: BN;
86
-
87
- if(market.baseAssetAmountLong.gt(market.baseAssetAmountShort)){
98
+ if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
88
99
  largerSide = market.baseAssetAmountLong.abs();
89
100
  smallerSide = market.baseAssetAmountShort.abs();
90
- if(twapSpread.gt(new BN(0))){
91
- return [lowerboundEst, interpEst, interpEst];
101
+ if(twapSpread.gt(new BN(0))) {
102
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
92
103
  }
93
- } else if(market.baseAssetAmountLong.lt(market.baseAssetAmountShort)){
104
+ } else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
94
105
  largerSide = market.baseAssetAmountShort.abs();
95
106
  smallerSide = market.baseAssetAmountLong.abs();
96
107
  if(twapSpread.lt(new BN(0))){
97
- return [lowerboundEst, interpEst, interpEst];
108
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
98
109
  }
99
110
  } else{
100
- return [lowerboundEst, interpEst, interpEst];
111
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
101
112
  }
102
113
 
103
- if(largerSide.gt(ZERO)){
114
+ if (largerSide.gt(ZERO)) {
104
115
  cappedAltEst = smallerSide.mul(twapSpread).div(largerSide);
105
- const feePoolTopOff = feePoolSize.mul(MARK_PRICE_PRECISION.div(QUOTE_PRECISION))
106
- .mul(AMM_RESERVE_PRECISION).div(largerSide);
107
- cappedAltEst = cappedAltEst.add(feePoolTopOff);
108
-
109
- cappedAltEst = cappedAltEst.mul(MARK_PRICE_PRECISION)
110
- .mul(new BN(100))
111
- .div(oracleTwapWithMantissa)
112
- .mul(periodAdjustment).div(hoursInDay);
113
-
114
- if(cappedAltEst.abs().gt(interpEst.abs())){
116
+
117
+ const feePoolTopOff = feePoolSize
118
+ .mul(MARK_PRICE_PRECISION.div(QUOTE_PRECISION))
119
+ .mul(AMM_RESERVE_PRECISION)
120
+ .div(largerSide);
121
+
122
+ cappedAltEst = cappedAltEst.add(feePoolTopOff);
123
+
124
+ cappedAltEst = cappedAltEst
125
+ .mul(MARK_PRICE_PRECISION)
126
+ .mul(new BN(100))
127
+ .div(oracleTwapWithMantissa)
128
+ .mul(periodAdjustment)
129
+ .div(hoursInDay);
130
+ if (cappedAltEst.abs().gt(interpEst.abs())) {
115
131
  cappedAltEst = interpEst;
116
132
  }
117
- } else{
133
+ } else {
118
134
  cappedAltEst = interpEst;
119
135
  }
120
136
 
121
137
 
122
- return [lowerboundEst, cappedAltEst, interpEst];
138
+ return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, cappedAltEst, interpEst];
123
139
  }
124
140
 
125
141
  /**
@@ -136,8 +152,12 @@ export async function calculateEstimatedFundingRate(
136
152
  periodAdjustment: BN = new BN(1),
137
153
  estimationMethod: 'interpolated' | 'lowerbound' | 'capped'
138
154
  ): Promise<BN> {
139
- const [lowerboundEst, cappedAltEst, interpEst] =
140
- await calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
155
+ const [_1, _2, lowerboundEst, cappedAltEst, interpEst] =
156
+ await calculateAllEstimatedFundingRate(
157
+ market,
158
+ pythClient,
159
+ periodAdjustment
160
+ );
141
161
 
142
162
  if (estimationMethod == 'lowerbound') {
143
163
  //assuming remaining funding period has no gap
@@ -149,6 +169,33 @@ export async function calculateEstimatedFundingRate(
149
169
  }
150
170
  }
151
171
 
172
+ /**
173
+ *
174
+ * @param market
175
+ * @param pythClient
176
+ * @param periodAdjustment
177
+ * @param estimationMethod
178
+ * @returns Estimated funding rate. : Precision //TODO-PRECISION
179
+ */
180
+ export async function calculateLongShortFundingRate(
181
+ market: Market,
182
+ pythClient: PythClient,
183
+ periodAdjustment: BN = new BN(1)
184
+ ): Promise<[BN, BN]> {
185
+ const [_1, _2, _, cappedAltEst, interpEst] = await calculateAllEstimatedFundingRate(
186
+ market,
187
+ pythClient,
188
+ periodAdjustment
189
+ );
190
+
191
+ if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort)) {
192
+ return [cappedAltEst, interpEst];
193
+ } else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort)) {
194
+ return [interpEst, cappedAltEst];
195
+ } else {
196
+ return [interpEst, interpEst];
197
+ }
198
+ }
152
199
 
153
200
  /**
154
201
  *
@@ -158,20 +205,20 @@ export async function calculateEstimatedFundingRate(
158
205
  * @param estimationMethod
159
206
  * @returns Estimated funding rate. : Precision //TODO-PRECISION
160
207
  */
161
- export async function calculateLongShortFundingRate(
208
+ export async function calculateLongShortFundingRateAndLiveTwaps(
162
209
  market: Market,
163
210
  pythClient: PythClient,
164
211
  periodAdjustment: BN = new BN(1),
165
- ): Promise<[BN, BN]> {
166
- const [_, cappedAltEst, interpEst] =
212
+ ): Promise<[BN, BN, BN, BN]> {
213
+ const [markTwapLive, oracleTwapLive, _2, cappedAltEst, interpEst] =
167
214
  await calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
168
215
 
169
- if(market.baseAssetAmountLong.gt(market.baseAssetAmountShort)){
170
- return [cappedAltEst, interpEst];
171
- } else if(market.baseAssetAmountLong.lt(market.baseAssetAmountShort)){
172
- return [interpEst, cappedAltEst];
216
+ if(market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())){
217
+ return [markTwapLive, oracleTwapLive, cappedAltEst, interpEst];
218
+ } else if(market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())){
219
+ return [markTwapLive, oracleTwapLive, interpEst, cappedAltEst];
173
220
  } else{
174
- return [interpEst, interpEst];
221
+ return [markTwapLive, oracleTwapLive, interpEst, interpEst];
175
222
  }
176
223
 
177
224
  }
@@ -182,8 +229,8 @@ export async function calculateEstimatedFundingRate(
182
229
  * @returns Estimated fee pool size
183
230
  */
184
231
  export function calculateFundingPool(market: Market): BN {
232
+ // todo
185
233
  const totalFeeLB = market.amm.totalFee.div(new BN(2));
186
234
  const feePool = market.amm.totalFeeMinusDistributions.sub(totalFeeLB);
187
- // return new BN(QUOTE_PRECISION.mul(new BN(2400)));
188
235
  return feePool;
189
236
  }
package/src/math/trade.ts CHANGED
@@ -28,7 +28,8 @@ export type PriceImpactUnit =
28
28
  | 'quoteAssetAmount'
29
29
  | 'quoteAssetAmountPeg'
30
30
  | 'acquiredBaseAssetAmount'
31
- | 'acquiredQuoteAssetAmount';
31
+ | 'acquiredQuoteAssetAmount'
32
+ | 'all';
32
33
 
33
34
  /**
34
35
  * Calculates avg/max slippage (price impact) for candidate trade
@@ -49,7 +50,7 @@ export function calculateTradeSlippage(
49
50
  direction: PositionDirection,
50
51
  amount: BN,
51
52
  market: Market,
52
- inputAssetType: AssetType = 'quote',
53
+ inputAssetType: AssetType = 'quote'
53
54
  ): [BN, BN, BN, BN] {
54
55
  const oldPrice = calculateMarkPrice(market);
55
56
  if (amount.eq(ZERO)) {
@@ -107,7 +108,7 @@ export function calculateTradeAcquiredAmounts(
107
108
  direction: PositionDirection,
108
109
  amount: BN,
109
110
  market: Market,
110
- inputAssetType: AssetType = 'quote',
111
+ inputAssetType: AssetType = 'quote'
111
112
  ): [BN, BN] {
112
113
  if (amount.eq(ZERO)) {
113
114
  return [ZERO, ZERO];
package/src/types.ts CHANGED
@@ -221,6 +221,8 @@ export type AMM = {
221
221
  lastFundingRateTs: BN;
222
222
  lastMarkPriceTwap: BN;
223
223
  lastMarkPriceTwapTs: BN;
224
+ lastOraclePriceTwap: BN;
225
+ lastOraclePriceTwapTs: BN;
224
226
  oracle: PublicKey;
225
227
  oracleSource: OracleSource;
226
228
  fundingPeriod: BN;
@@ -264,6 +266,7 @@ export interface Trade {
264
266
  afterPrice: number;
265
267
  side: TradeSide;
266
268
  size: number;
269
+ quoteSize: number;
267
270
  ts: number;
268
271
  fee: number;
269
272
  marketIndex: number;
@@ -300,9 +303,14 @@ export type Candle = {
300
303
  };
301
304
  export interface FundingPayment {
302
305
  userPublicKey: string;
303
- ts: number;
306
+ serverTs: number;
304
307
  marketIndex: number;
305
308
  amount: string;
309
+ blockchainTs: number;
310
+ baseAssetAmount: string;
311
+ userLastCumulativeFunding: string;
312
+ userLastFundingRateTs: string;
313
+ rate: number;
306
314
  }
307
315
 
308
316
  // # Misc Types
package/tsconfig.json CHANGED
@@ -6,7 +6,8 @@
6
6
  "declaration": true,
7
7
  "outDir": "./lib",
8
8
  "resolveJsonModule": true,
9
- "skipLibCheck": true
9
+ "skipLibCheck": true,
10
+ "declarationMap": true
10
11
  },
11
12
  "include": ["src"],
12
13
  "exclude": ["node_modules"]