@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.
- package/.eslintrc.json +36 -0
- package/.prettierignore +1 -0
- package/.prettierrc.js +9 -0
- package/lib/accounts/defaultClearingHouseAccountSubscriber.d.ts +1 -0
- package/lib/accounts/defaultClearingHouseAccountSubscriber.d.ts.map +1 -0
- package/lib/accounts/defaultHistoryAccountSubscriber.d.ts +1 -0
- package/lib/accounts/defaultHistoryAccountSubscriber.d.ts.map +1 -0
- package/lib/accounts/defaultUserAccountSubscriber.d.ts +1 -0
- package/lib/accounts/defaultUserAccountSubscriber.d.ts.map +1 -0
- package/lib/accounts/types.d.ts +1 -0
- package/lib/accounts/types.d.ts.map +1 -0
- package/lib/accounts/webSocketAccountSubscriber.d.ts +1 -0
- package/lib/accounts/webSocketAccountSubscriber.d.ts.map +1 -0
- package/lib/addresses.d.ts +1 -0
- package/lib/addresses.d.ts.map +1 -0
- package/lib/admin.d.ts +1 -0
- package/lib/admin.d.ts.map +1 -0
- package/lib/assert/assert.d.ts +1 -0
- package/lib/assert/assert.d.ts.map +1 -0
- package/lib/clearingHouse.d.ts +1 -0
- package/lib/clearingHouse.d.ts.map +1 -0
- package/lib/clearingHouseUser.d.ts +1 -0
- package/lib/clearingHouseUser.d.ts.map +1 -0
- package/lib/clearingHouseUser.js +1 -1
- package/lib/config.d.ts +1 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/constants/markets.d.ts +1 -0
- package/lib/constants/markets.d.ts.map +1 -0
- package/lib/constants/markets.js +7 -7
- package/lib/constants/numericConstants.d.ts +1 -0
- package/lib/constants/numericConstants.d.ts.map +1 -0
- package/lib/examples/makeTradeExample.d.ts +1 -0
- package/lib/examples/makeTradeExample.d.ts.map +1 -0
- package/lib/idl/clearing_house.json +6 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/math/amm.d.ts +1 -0
- package/lib/math/amm.d.ts.map +1 -0
- package/lib/math/conversion.d.ts +1 -0
- package/lib/math/conversion.d.ts.map +1 -0
- package/lib/math/funding.d.ts +11 -1
- package/lib/math/funding.d.ts.map +1 -0
- package/lib/math/funding.js +60 -19
- package/lib/math/market.d.ts +1 -0
- package/lib/math/market.d.ts.map +1 -0
- package/lib/math/position.d.ts +1 -0
- package/lib/math/position.d.ts.map +1 -0
- package/lib/math/trade.d.ts +2 -1
- package/lib/math/trade.d.ts.map +1 -0
- package/lib/math/utils.d.ts +1 -0
- package/lib/math/utils.d.ts.map +1 -0
- package/lib/mockUSDCFaucet.d.ts +1 -0
- package/lib/mockUSDCFaucet.d.ts.map +1 -0
- package/lib/pythClient.d.ts +1 -0
- package/lib/pythClient.d.ts.map +1 -0
- package/lib/tx/defaultTxSender.d.ts +1 -0
- package/lib/tx/defaultTxSender.d.ts.map +1 -0
- package/lib/tx/types.d.ts +1 -0
- package/lib/tx/types.d.ts.map +1 -0
- package/lib/tx/utils.d.ts +1 -0
- package/lib/tx/utils.d.ts.map +1 -0
- package/lib/types.d.ts +10 -1
- package/lib/types.d.ts.map +1 -0
- package/package.json +12 -2
- package/src/clearingHouseUser.ts +7 -4
- package/src/constants/markets.ts +7 -7
- package/src/idl/clearing_house.json +6 -2
- package/src/math/funding.ts +102 -55
- package/src/math/trade.ts +4 -3
- package/src/types.ts +9 -1
- 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
|
+
}
|
package/.prettierignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
**/node_modules/**
|
package/.prettierrc.js
ADDED
|
@@ -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"}
|
|
@@ -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"}
|
|
@@ -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"}
|
package/lib/accounts/types.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/accounts/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
package/lib/addresses.d.ts
CHANGED
|
@@ -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/lib/assert/assert.d.ts
CHANGED
|
@@ -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"}
|
package/lib/clearingHouse.d.ts
CHANGED
|
@@ -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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearingHouseUser.d.ts","sourceRoot":"","sources":["../src/clearingHouseUser.ts"],"names":[],"mappings":"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"}
|
package/lib/clearingHouseUser.js
CHANGED
|
@@ -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
|
@@ -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"}
|
|
@@ -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"}
|
package/lib/constants/markets.js
CHANGED
|
@@ -27,11 +27,11 @@ exports.Markets = [
|
|
|
27
27
|
devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
|
|
28
28
|
mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
|
|
29
29
|
},
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
];
|
|
@@ -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"}
|
|
@@ -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": "
|
|
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": "
|
|
2184
|
+
"type": "u64"
|
|
2181
2185
|
},
|
|
2182
2186
|
{
|
|
2183
2187
|
"name": "padding1",
|
package/lib/index.d.ts
CHANGED
|
@@ -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"}
|
package/lib/math/conversion.d.ts
CHANGED
|
@@ -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"}
|
package/lib/math/funding.d.ts
CHANGED
|
@@ -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"}
|
package/lib/math/funding.js
CHANGED
|
@@ -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 [
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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
|
|
90
|
-
.mul(numericConstants_1.
|
|
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
|
|
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)
|
|
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;
|
package/lib/math/market.d.ts
CHANGED
|
@@ -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"}
|
package/lib/math/position.d.ts
CHANGED
|
@@ -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"}
|
package/lib/math/trade.d.ts
CHANGED
|
@@ -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"}
|
package/lib/math/utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/math/utils.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,YAAY,8CA0BxB,CAAC"}
|
package/lib/mockUSDCFaucet.d.ts
CHANGED
|
@@ -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"}
|
package/lib/pythClient.d.ts
CHANGED
|
@@ -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"}
|
|
@@ -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
|
@@ -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
|
@@ -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
|
-
|
|
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.
|
|
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"
|
package/src/clearingHouseUser.ts
CHANGED
|
@@ -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(
|
|
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
|
|
package/src/constants/markets.ts
CHANGED
|
@@ -30,11 +30,11 @@ export const Markets: Market[] = [
|
|
|
30
30
|
devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
|
|
31
31
|
mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
|
|
32
32
|
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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": "
|
|
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": "
|
|
2184
|
+
"type": "u64"
|
|
2181
2185
|
},
|
|
2182
2186
|
{
|
|
2183
2187
|
"name": "padding1",
|
package/src/math/funding.ts
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { BN } from '@project-serum/anchor';
|
|
2
2
|
import {
|
|
3
|
-
AMM_RESERVE_PRECISION,
|
|
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
|
-
|
|
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 [
|
|
32
|
+
return [ZERO, ZERO, ZERO, ZERO, ZERO];
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
const payFreq = new BN(market.amm.fundingPeriod);
|
|
33
36
|
|
|
34
|
-
|
|
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 =
|
|
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
|
-
|
|
77
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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(
|
|
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
|
|
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 [
|
|
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
|
-
|
|
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
|