@drift-labs/sdk 0.1.28 → 0.1.29

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 (64) hide show
  1. package/lib/accounts/bulkAccountLoader.js +13 -3
  2. package/lib/clearingHouse.d.ts +4 -1
  3. package/lib/clearingHouse.js +49 -0
  4. package/lib/constants/markets.js +11 -0
  5. package/lib/idl/clearing_house.json +63 -2
  6. package/lib/index.d.ts +1 -0
  7. package/lib/index.js +1 -0
  8. package/lib/math/amm.d.ts +0 -20
  9. package/lib/math/amm.js +1 -151
  10. package/lib/math/repeg.d.ts +32 -0
  11. package/lib/math/repeg.js +178 -0
  12. package/lib/oracles/pythClient.js +1 -1
  13. package/lib/orderParams.d.ts +1 -1
  14. package/lib/orderParams.js +2 -2
  15. package/package.json +1 -1
  16. package/src/accounts/bulkAccountLoader.ts +14 -4
  17. package/src/clearingHouse.ts +71 -0
  18. package/src/constants/markets.ts +12 -1
  19. package/src/idl/clearing_house.json +63 -2
  20. package/src/index.ts +1 -0
  21. package/src/math/amm.ts +1 -212
  22. package/src/math/repeg.ts +253 -0
  23. package/src/oracles/pythClient.ts +1 -1
  24. package/src/orderParams.ts +3 -2
  25. package/src/accounts/bulkAccountLoader.js +0 -180
  26. package/src/accounts/bulkAccountLoader.js.map +0 -1
  27. package/src/accounts/bulkUserSubscription.js +0 -56
  28. package/src/accounts/bulkUserSubscription.js.map +0 -1
  29. package/src/accounts/pollingUserAccountSubscriber.js +0 -139
  30. package/src/accounts/pollingUserAccountSubscriber.js.map +0 -1
  31. package/src/accounts/types.js +0 -11
  32. package/src/accounts/types.js.map +0 -1
  33. package/src/accounts/webSocketUserAccountSubscriber.js +0 -78
  34. package/src/accounts/webSocketUserAccountSubscriber.js.map +0 -1
  35. package/src/addresses.js +0 -59
  36. package/src/addresses.js.map +0 -1
  37. package/src/admin.js +0 -443
  38. package/src/admin.js.map +0 -1
  39. package/src/clearingHouseUser.js +0 -581
  40. package/src/clearingHouseUser.js.map +0 -1
  41. package/src/config.js +0 -37
  42. package/src/config.js.map +0 -1
  43. package/src/factory/clearingHouse.js +0 -65
  44. package/src/factory/clearingHouse.js.map +0 -1
  45. package/src/factory/clearingHouseUser.js +0 -35
  46. package/src/factory/clearingHouseUser.js.map +0 -1
  47. package/src/factory/oracleClient.js +0 -17
  48. package/src/factory/oracleClient.js.map +0 -1
  49. package/src/index.js +0 -56
  50. package/src/index.js.map +0 -1
  51. package/src/math/amm.js +0 -285
  52. package/src/math/amm.js.map +0 -1
  53. package/src/mockUSDCFaucet.js +0 -143
  54. package/src/mockUSDCFaucet.js.map +0 -1
  55. package/src/oracles/pythClient.js +0 -39
  56. package/src/oracles/pythClient.js.map +0 -1
  57. package/src/orderParams.js +0 -109
  58. package/src/orderParams.js.map +0 -1
  59. package/src/orders.js +0 -172
  60. package/src/orders.js.map +0 -1
  61. package/src/types.js +0 -61
  62. package/src/types.js.map +0 -1
  63. package/src/wallet.js +0 -23
  64. package/src/wallet.js.map +0 -1
@@ -1,65 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getAdmin = exports.getClearingHouse = exports.getPollingClearingHouseConfig = exports.getWebSocketClearingHouseConfig = void 0;
7
- const anchor_1 = require("@project-serum/anchor");
8
- const clearingHouse_1 = require("../clearingHouse");
9
- const clearing_house_json_1 = __importDefault(require("../idl/clearing_house.json"));
10
- const webSocketClearingHouseAccountSubscriber_1 = require("../accounts/webSocketClearingHouseAccountSubscriber");
11
- const defaultTxSender_1 = require("../tx/defaultTxSender");
12
- const pollingClearingHouseAccountSubscriber_1 = require("../accounts/pollingClearingHouseAccountSubscriber");
13
- const admin_1 = require("../admin");
14
- function getWebSocketClearingHouseConfig(connection, wallet, programID, opts = anchor_1.Provider.defaultOptions(), txSender) {
15
- return {
16
- type: 'websocket',
17
- connection,
18
- wallet,
19
- programID,
20
- opts,
21
- txSender,
22
- };
23
- }
24
- exports.getWebSocketClearingHouseConfig = getWebSocketClearingHouseConfig;
25
- function getPollingClearingHouseConfig(connection, wallet, programID, accountLoader, opts = anchor_1.Provider.defaultOptions(), txSender) {
26
- return {
27
- type: 'polling',
28
- connection,
29
- wallet,
30
- programID,
31
- accountLoader,
32
- opts,
33
- txSender,
34
- };
35
- }
36
- exports.getPollingClearingHouseConfig = getPollingClearingHouseConfig;
37
- function getClearingHouse(config) {
38
- const provider = new anchor_1.Provider(config.connection, config.wallet, config.opts);
39
- const program = new anchor_1.Program(clearing_house_json_1.default, config.programID, provider);
40
- let accountSubscriber;
41
- if (config.type === 'websocket') {
42
- accountSubscriber = new webSocketClearingHouseAccountSubscriber_1.WebSocketClearingHouseAccountSubscriber(program);
43
- }
44
- else if (config.type === 'polling') {
45
- accountSubscriber = new pollingClearingHouseAccountSubscriber_1.PollingClearingHouseAccountSubscriber(program, config.accountLoader);
46
- }
47
- const txSender = config.txSender || new defaultTxSender_1.DefaultTxSender(provider);
48
- return new clearingHouse_1.ClearingHouse(config.connection, config.wallet, program, accountSubscriber, txSender, config.opts);
49
- }
50
- exports.getClearingHouse = getClearingHouse;
51
- function getAdmin(config) {
52
- const provider = new anchor_1.Provider(config.connection, config.wallet, config.opts);
53
- const program = new anchor_1.Program(clearing_house_json_1.default, config.programID, provider);
54
- let accountSubscriber;
55
- if (config.type === 'websocket') {
56
- accountSubscriber = new webSocketClearingHouseAccountSubscriber_1.WebSocketClearingHouseAccountSubscriber(program);
57
- }
58
- else if (config.type === 'polling') {
59
- accountSubscriber = new pollingClearingHouseAccountSubscriber_1.PollingClearingHouseAccountSubscriber(program, config.accountLoader);
60
- }
61
- const txSender = config.txSender || new defaultTxSender_1.DefaultTxSender(provider);
62
- return new admin_1.Admin(config.connection, config.wallet, program, accountSubscriber, txSender, config.opts);
63
- }
64
- exports.getAdmin = getAdmin;
65
- //# sourceMappingURL=clearingHouse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clearingHouse.js","sourceRoot":"","sources":["clearingHouse.ts"],"names":[],"mappings":";;;;;;AAIA,kDAA+D;AAC/D,oDAAiD;AACjD,qFAA0D;AAC1D,iHAA8G;AAC9G,2DAAwD;AAExD,6GAA0G;AAC1G,oCAAiC;AAuBjC,SAAgB,+BAA+B,CAC9C,UAAsB,EACtB,MAAe,EACf,SAAoB,EACpB,OAAuB,iBAAQ,CAAC,cAAc,EAAE,EAChD,QAAmB;IAEnB,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,UAAU;QACV,MAAM;QACN,SAAS;QACT,IAAI;QACJ,QAAQ;KACR,CAAC;AACH,CAAC;AAfD,0EAeC;AAED,SAAgB,6BAA6B,CAC5C,UAAsB,EACtB,MAAe,EACf,SAAoB,EACpB,aAAgC,EAChC,OAAuB,iBAAQ,CAAC,cAAc,EAAE,EAChD,QAAmB;IAEnB,OAAO;QACN,IAAI,EAAE,SAAS;QACf,UAAU;QACV,MAAM;QACN,SAAS;QACT,aAAa;QACb,IAAI;QACJ,QAAQ;KACR,CAAC;AACH,CAAC;AAjBD,sEAiBC;AAED,SAAgB,gBAAgB,CAAC,MAA2B;IAC3D,MAAM,QAAQ,GAAG,IAAI,iBAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,gBAAO,CAC1B,6BAAuB,EACvB,MAAM,CAAC,SAAS,EAChB,QAAQ,CACR,CAAC;IACF,IAAI,iBAAiD,CAAC;IACtD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;QAChC,iBAAiB,GAAG,IAAI,iFAAuC,CAAC,OAAO,CAAC,CAAC;KACzE;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;QACrC,iBAAiB,GAAG,IAAI,6EAAqC,CAC5D,OAAO,EACN,MAA4C,CAAC,aAAa,CAC3D,CAAC;KACF;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,iCAAe,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,6BAAa,CACvB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,MAAM,CAAC,IAAI,CACX,CAAC;AACH,CAAC;AA1BD,4CA0BC;AAED,SAAgB,QAAQ,CAAC,MAA2B;IACnD,MAAM,QAAQ,GAAG,IAAI,iBAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,gBAAO,CAC1B,6BAAuB,EACvB,MAAM,CAAC,SAAS,EAChB,QAAQ,CACR,CAAC;IACF,IAAI,iBAAiD,CAAC;IACtD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;QAChC,iBAAiB,GAAG,IAAI,iFAAuC,CAAC,OAAO,CAAC,CAAC;KACzE;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;QACrC,iBAAiB,GAAG,IAAI,6EAAqC,CAC5D,OAAO,EACN,MAA4C,CAAC,aAAa,CAC3D,CAAC;KACF;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,iCAAe,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,aAAK,CACf,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,MAAM,CAAC,IAAI,CACX,CAAC;AACH,CAAC;AA1BD,4BA0BC"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getClearingHouseUser = exports.getPollingClearingHouseUserConfig = exports.getWebSocketClearingHouseUserConfig = void 0;
4
- const clearingHouseUser_1 = require("../clearingHouseUser");
5
- const webSocketUserAccountSubscriber_1 = require("../accounts/webSocketUserAccountSubscriber");
6
- const pollingUserAccountSubscriber_1 = require("../accounts/pollingUserAccountSubscriber");
7
- function getWebSocketClearingHouseUserConfig(clearingHouse, authority) {
8
- return {
9
- type: 'websocket',
10
- clearingHouse,
11
- authority,
12
- };
13
- }
14
- exports.getWebSocketClearingHouseUserConfig = getWebSocketClearingHouseUserConfig;
15
- function getPollingClearingHouseUserConfig(clearingHouse, authority, accountLoader) {
16
- return {
17
- type: 'polling',
18
- clearingHouse,
19
- authority,
20
- accountLoader,
21
- };
22
- }
23
- exports.getPollingClearingHouseUserConfig = getPollingClearingHouseUserConfig;
24
- function getClearingHouseUser(config) {
25
- let accountSubscriber;
26
- if (config.type === 'websocket') {
27
- accountSubscriber = new webSocketUserAccountSubscriber_1.WebSocketUserAccountSubscriber(config.clearingHouse.program, config.authority);
28
- }
29
- else if (config.type === 'polling') {
30
- accountSubscriber = new pollingUserAccountSubscriber_1.PollingUserAccountSubscriber(config.clearingHouse.program, config.authority, config.accountLoader);
31
- }
32
- return new clearingHouseUser_1.ClearingHouseUser(config.clearingHouse, config.authority, accountSubscriber);
33
- }
34
- exports.getClearingHouseUser = getClearingHouseUser;
35
- //# sourceMappingURL=clearingHouseUser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clearingHouseUser.js","sourceRoot":"","sources":["clearingHouseUser.ts"],"names":[],"mappings":";;;AAGA,4DAAyD;AAEzD,+FAA4F;AAC5F,2FAAwF;AAoBxF,SAAgB,mCAAmC,CAClD,aAA4B,EAC5B,SAAoB;IAEpB,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,aAAa;QACb,SAAS;KACT,CAAC;AACH,CAAC;AATD,kFASC;AAED,SAAgB,iCAAiC,CAChD,aAA4B,EAC5B,SAAoB,EACpB,aAAgC;IAEhC,OAAO;QACN,IAAI,EAAE,SAAS;QACf,aAAa;QACb,SAAS;QACT,aAAa;KACb,CAAC;AACH,CAAC;AAXD,8EAWC;AAED,SAAgB,oBAAoB,CACnC,MAA+B;IAE/B,IAAI,iBAAwC,CAAC;IAC7C,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;QAChC,iBAAiB,GAAG,IAAI,+DAA8B,CACrD,MAAM,CAAC,aAAa,CAAC,OAAO,EAC5B,MAAM,CAAC,SAAS,CAChB,CAAC;KACF;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;QACrC,iBAAiB,GAAG,IAAI,2DAA4B,CACnD,MAAM,CAAC,aAAa,CAAC,OAAO,EAC5B,MAAM,CAAC,SAAS,EACf,MAAyC,CAAC,aAAa,CACxD,CAAC;KACF;IAED,OAAO,IAAI,qCAAiB,CAC3B,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,SAAS,EAChB,iBAAiB,CACjB,CAAC;AACH,CAAC;AAtBD,oDAsBC"}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOracleClient = void 0;
4
- const types_1 = require("../types");
5
- const pythClient_1 = require("../oracles/pythClient");
6
- const switchboardClient_1 = require("../oracles/switchboardClient");
7
- function getOracleClient(oracleSource, connection, env) {
8
- if ((0, types_1.isVariant)(oracleSource, 'pyth')) {
9
- return new pythClient_1.PythClient(connection);
10
- }
11
- if ((0, types_1.isVariant)(oracleSource, 'switchboard')) {
12
- return new switchboardClient_1.SwitchboardClient(connection, env);
13
- }
14
- throw new Error(`Unknown oracle source ${oracleSource}`);
15
- }
16
- exports.getOracleClient = getOracleClient;
17
- //# sourceMappingURL=oracleClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oracleClient.js","sourceRoot":"","sources":["oracleClient.ts"],"names":[],"mappings":";;;AAAA,oCAAmD;AAInD,sDAAmD;AACnD,oEAAiE;AAEjE,SAAgB,eAAe,CAC9B,YAA0B,EAC1B,UAAsB,EACtB,GAAa;IAEb,IAAI,IAAA,iBAAS,EAAC,YAAY,EAAE,MAAM,CAAC,EAAE;QACpC,OAAO,IAAI,uBAAU,CAAC,UAAU,CAAC,CAAC;KAClC;IAED,IAAI,IAAA,iBAAS,EAAC,YAAY,EAAE,aAAa,CAAC,EAAE;QAC3C,OAAO,IAAI,qCAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;KAC9C;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;AAC1D,CAAC;AAdD,0CAcC"}
package/src/index.js DELETED
@@ -1,56 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.PublicKey = exports.BN = void 0;
14
- const anchor_1 = require("@project-serum/anchor");
15
- Object.defineProperty(exports, "BN", { enumerable: true, get: function () { return anchor_1.BN; } });
16
- const web3_js_1 = require("@solana/web3.js");
17
- Object.defineProperty(exports, "PublicKey", { enumerable: true, get: function () { return web3_js_1.PublicKey; } });
18
- __exportStar(require("./mockUSDCFaucet"), exports);
19
- __exportStar(require("./oracles/types"), exports);
20
- __exportStar(require("./oracles/pythClient"), exports);
21
- __exportStar(require("./oracles/switchboardClient"), exports);
22
- __exportStar(require("./types"), exports);
23
- __exportStar(require("./constants/markets"), exports);
24
- __exportStar(require("./accounts/webSocketClearingHouseAccountSubscriber"), exports);
25
- __exportStar(require("./accounts/bulkAccountLoader"), exports);
26
- __exportStar(require("./accounts/bulkUserSubscription"), exports);
27
- __exportStar(require("./accounts/pollingClearingHouseAccountSubscriber"), exports);
28
- __exportStar(require("./accounts/pollingOracleSubscriber"), exports);
29
- __exportStar(require("./accounts/pollingTokenAccountSubscriber"), exports);
30
- __exportStar(require("./accounts/types"), exports);
31
- __exportStar(require("./addresses"), exports);
32
- __exportStar(require("./admin"), exports);
33
- __exportStar(require("./clearingHouseUser"), exports);
34
- __exportStar(require("./clearingHouse"), exports);
35
- __exportStar(require("./factory/clearingHouse"), exports);
36
- __exportStar(require("./factory/clearingHouseUser"), exports);
37
- __exportStar(require("./factory/oracleClient"), exports);
38
- __exportStar(require("./math/conversion"), exports);
39
- __exportStar(require("./math/funding"), exports);
40
- __exportStar(require("./math/insuranceFund"), exports);
41
- __exportStar(require("./math/market"), exports);
42
- __exportStar(require("./math/position"), exports);
43
- __exportStar(require("./math/amm"), exports);
44
- __exportStar(require("./math/trade"), exports);
45
- __exportStar(require("./math/orders"), exports);
46
- __exportStar(require("./orders"), exports);
47
- __exportStar(require("./orderParams"), exports);
48
- __exportStar(require("./wallet"), exports);
49
- __exportStar(require("./types"), exports);
50
- __exportStar(require("./math/utils"), exports);
51
- __exportStar(require("./config"), exports);
52
- __exportStar(require("./constants/numericConstants"), exports);
53
- __exportStar(require("./tx/retryTxSender"), exports);
54
- __exportStar(require("./util/computeUnits"), exports);
55
- __exportStar(require("./util/tps"), exports);
56
- //# sourceMappingURL=index.js.map
package/src/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,kDAA2C;AA0ClC,mFA1CA,WAAE,OA0CA;AAzCX,6CAA4C;AAyC/B,0FAzCJ,mBAAS,OAyCI;AAvCtB,mDAAiC;AACjC,kDAAgC;AAChC,uDAAqC;AACrC,8DAA4C;AAC5C,0CAAwB;AACxB,sDAAoC;AACpC,qFAAmE;AACnE,+DAA6C;AAC7C,kEAAgD;AAChD,mFAAiE;AACjE,qEAAmD;AACnD,2EAAyD;AACzD,mDAAiC;AACjC,8CAA4B;AAC5B,0CAAwB;AACxB,sDAAoC;AACpC,kDAAgC;AAChC,0DAAwC;AACxC,8DAA4C;AAC5C,yDAAuC;AACvC,oDAAkC;AAClC,iDAA+B;AAC/B,uDAAqC;AACrC,gDAA8B;AAC9B,kDAAgC;AAChC,6CAA2B;AAC3B,+CAA6B;AAC7B,gDAA8B;AAC9B,2CAAyB;AACzB,gDAA8B;AAC9B,2CAAyB;AACzB,0CAAwB;AACxB,+CAA6B;AAC7B,2CAAyB;AACzB,+DAA6C;AAC7C,qDAAmC;AACnC,sDAAoC;AACpC,6CAA2B"}
package/src/math/amm.js DELETED
@@ -1,285 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateBudgetedPeg = exports.calculateBudgetedK = exports.calculateMaxBaseAssetAmountToTrade = exports.calculateTerminalPrice = exports.calculateRepegCost = exports.calculateAdjustKCost = exports.getSwapDirection = exports.calculateSwapOutput = exports.calculateAmmReservesAfterSwap = exports.calculatePrice = void 0;
4
- const anchor_1 = require("@project-serum/anchor");
5
- const numericConstants_1 = require("../constants/numericConstants");
6
- const position_1 = require("./position");
7
- const types_1 = require("../types");
8
- const assert_1 = require("../assert/assert");
9
- const __1 = require("..");
10
- /**
11
- * Calculates a price given an arbitrary base and quote amount (they must have the same precision)
12
- *
13
- * @param baseAssetAmount
14
- * @param quoteAssetAmount
15
- * @param peg_multiplier
16
- * @returns price : Precision MARK_PRICE_PRECISION
17
- */
18
- function calculatePrice(baseAssetAmount, quoteAssetAmount, peg_multiplier) {
19
- if (baseAssetAmount.abs().lte(numericConstants_1.ZERO)) {
20
- return new anchor_1.BN(0);
21
- }
22
- return quoteAssetAmount
23
- .mul(numericConstants_1.MARK_PRICE_PRECISION)
24
- .mul(peg_multiplier)
25
- .div(numericConstants_1.PEG_PRECISION)
26
- .div(baseAssetAmount);
27
- }
28
- exports.calculatePrice = calculatePrice;
29
- /**
30
- * Calculates what the amm reserves would be after swapping a quote or base asset amount.
31
- *
32
- * @param amm
33
- * @param inputAssetType
34
- * @param swapAmount
35
- * @param swapDirection
36
- * @returns quoteAssetReserve and baseAssetReserve after swap. : Precision AMM_RESERVE_PRECISION
37
- */
38
- function calculateAmmReservesAfterSwap(amm, inputAssetType, swapAmount, swapDirection) {
39
- (0, assert_1.assert)(swapAmount.gte(numericConstants_1.ZERO), 'swapAmount must be greater than 0');
40
- let newQuoteAssetReserve;
41
- let newBaseAssetReserve;
42
- if (inputAssetType === 'quote') {
43
- swapAmount = swapAmount
44
- .mul(numericConstants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO)
45
- .div(amm.pegMultiplier);
46
- [newQuoteAssetReserve, newBaseAssetReserve] = calculateSwapOutput(amm.quoteAssetReserve, swapAmount, swapDirection, amm.sqrtK.mul(amm.sqrtK));
47
- }
48
- else {
49
- [newBaseAssetReserve, newQuoteAssetReserve] = calculateSwapOutput(amm.baseAssetReserve, swapAmount, swapDirection, amm.sqrtK.mul(amm.sqrtK));
50
- }
51
- return [newQuoteAssetReserve, newBaseAssetReserve];
52
- }
53
- exports.calculateAmmReservesAfterSwap = calculateAmmReservesAfterSwap;
54
- /**
55
- * Helper function calculating constant product curve output. Agnostic to whether input asset is quote or base
56
- *
57
- * @param inputAssetReserve
58
- * @param swapAmount
59
- * @param swapDirection
60
- * @param invariant
61
- * @returns newInputAssetReserve and newOutputAssetReserve after swap. : Precision AMM_RESERVE_PRECISION
62
- */
63
- function calculateSwapOutput(inputAssetReserve, swapAmount, swapDirection, invariant) {
64
- let newInputAssetReserve;
65
- if (swapDirection === types_1.SwapDirection.ADD) {
66
- newInputAssetReserve = inputAssetReserve.add(swapAmount);
67
- }
68
- else {
69
- newInputAssetReserve = inputAssetReserve.sub(swapAmount);
70
- }
71
- const newOutputAssetReserve = invariant.div(newInputAssetReserve);
72
- return [newInputAssetReserve, newOutputAssetReserve];
73
- }
74
- exports.calculateSwapOutput = calculateSwapOutput;
75
- /**
76
- * Translate long/shorting quote/base asset into amm operation
77
- *
78
- * @param inputAssetType
79
- * @param positionDirection
80
- */
81
- function getSwapDirection(inputAssetType, positionDirection) {
82
- if ((0, types_1.isVariant)(positionDirection, 'long') && inputAssetType === 'base') {
83
- return types_1.SwapDirection.REMOVE;
84
- }
85
- if ((0, types_1.isVariant)(positionDirection, 'short') && inputAssetType === 'quote') {
86
- return types_1.SwapDirection.REMOVE;
87
- }
88
- return types_1.SwapDirection.ADD;
89
- }
90
- exports.getSwapDirection = getSwapDirection;
91
- /**
92
- * Helper function calculating adjust k cost
93
- * @param market
94
- * @param marketIndex
95
- * @param numerator
96
- * @param denomenator
97
- * @returns cost : Precision QUOTE_ASSET_PRECISION
98
- */
99
- function calculateAdjustKCost(market, marketIndex, numerator, denomenator) {
100
- const netUserPosition = {
101
- baseAssetAmount: market.baseAssetAmount,
102
- lastCumulativeFundingRate: market.amm.cumulativeFundingRate,
103
- marketIndex: new anchor_1.BN(marketIndex),
104
- quoteAssetAmount: new anchor_1.BN(0),
105
- openOrders: new anchor_1.BN(0),
106
- };
107
- const currentValue = (0, position_1.calculateBaseAssetValue)(market, netUserPosition);
108
- const marketNewK = Object.assign({}, market);
109
- marketNewK.amm = Object.assign({}, market.amm);
110
- marketNewK.amm.baseAssetReserve = market.amm.baseAssetReserve
111
- .mul(numerator)
112
- .div(denomenator);
113
- marketNewK.amm.quoteAssetReserve = market.amm.quoteAssetReserve
114
- .mul(numerator)
115
- .div(denomenator);
116
- marketNewK.amm.sqrtK = market.amm.sqrtK.mul(numerator).div(denomenator);
117
- netUserPosition.quoteAssetAmount = currentValue;
118
- const cost = (0, __1.calculatePositionPNL)(marketNewK, netUserPosition);
119
- const p = numericConstants_1.PEG_PRECISION.mul(numerator).div(denomenator);
120
- const x = market.amm.baseAssetReserve;
121
- const y = market.amm.quoteAssetReserve;
122
- const delta = market.baseAssetAmount;
123
- const k = market.amm.sqrtK.mul(market.amm.sqrtK);
124
- const numer1 = numericConstants_1.PEG_PRECISION.sub(p).mul(y).div(numericConstants_1.PEG_PRECISION);
125
- const numer20 = k
126
- .mul(p)
127
- .mul(p)
128
- .div(numericConstants_1.PEG_PRECISION)
129
- .div(numericConstants_1.PEG_PRECISION)
130
- .div(x.mul(p).div(numericConstants_1.PEG_PRECISION).add(delta));
131
- const numer21 = k.div(x.add(delta));
132
- const formulaCost = numer21
133
- .sub(numer20)
134
- .sub(numer1)
135
- .mul(market.amm.pegMultiplier)
136
- .div(numericConstants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO);
137
- console.log((0, __1.convertToNumber)(formulaCost, numericConstants_1.QUOTE_PRECISION));
138
- // p.div(p.mul(x).add(delta)).sub()
139
- return cost;
140
- }
141
- exports.calculateAdjustKCost = calculateAdjustKCost;
142
- /**
143
- * Helper function calculating adjust pegMultiplier (repeg) cost
144
- *
145
- * @param market
146
- * @param marketIndex
147
- * @param newPeg
148
- * @returns cost : Precision QUOTE_ASSET_PRECISION
149
- */
150
- function calculateRepegCost(market, marketIndex, newPeg) {
151
- const netUserPosition = {
152
- baseAssetAmount: market.baseAssetAmount,
153
- lastCumulativeFundingRate: market.amm.cumulativeFundingRate,
154
- marketIndex: new anchor_1.BN(marketIndex),
155
- quoteAssetAmount: new anchor_1.BN(0),
156
- openOrders: new anchor_1.BN(0),
157
- };
158
- const currentValue = (0, position_1.calculateBaseAssetValue)(market, netUserPosition);
159
- netUserPosition.quoteAssetAmount = currentValue;
160
- const prevMarketPrice = (0, __1.calculateMarkPrice)(market);
161
- const marketNewPeg = Object.assign({}, market);
162
- marketNewPeg.amm = Object.assign({}, market.amm);
163
- // const marketNewPeg = JSON.parse(JSON.stringify(market));
164
- marketNewPeg.amm.pegMultiplier = newPeg;
165
- console.log('Price moves from', (0, __1.convertToNumber)(prevMarketPrice), 'to', (0, __1.convertToNumber)((0, __1.calculateMarkPrice)(marketNewPeg)));
166
- const cost = (0, __1.calculatePositionPNL)(marketNewPeg, netUserPosition);
167
- const k = market.amm.sqrtK.mul(market.amm.sqrtK);
168
- const newQuoteAssetReserve = k.div(market.amm.baseAssetReserve.add(netUserPosition.baseAssetAmount));
169
- const deltaQuoteAssetReserves = newQuoteAssetReserve.sub(market.amm.quoteAssetReserve);
170
- const cost2 = deltaQuoteAssetReserves
171
- .mul(market.amm.pegMultiplier.sub(newPeg))
172
- .div(numericConstants_1.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO);
173
- console.log((0, __1.convertToNumber)(cost2, numericConstants_1.QUOTE_PRECISION));
174
- return cost;
175
- }
176
- exports.calculateRepegCost = calculateRepegCost;
177
- /**
178
- * Helper function calculating terminal price of amm
179
- *
180
- * @param market
181
- * @returns cost : Precision MARK_PRICE_PRECISION
182
- */
183
- function calculateTerminalPrice(market) {
184
- const directionToClose = market.baseAssetAmount.gt(numericConstants_1.ZERO)
185
- ? types_1.PositionDirection.SHORT
186
- : types_1.PositionDirection.LONG;
187
- const [newQuoteAssetReserve, newBaseAssetReserve] = calculateAmmReservesAfterSwap(market.amm, 'base', market.baseAssetAmount.abs(), getSwapDirection('base', directionToClose));
188
- const terminalPrice = newQuoteAssetReserve
189
- .mul(numericConstants_1.MARK_PRICE_PRECISION)
190
- .mul(market.amm.pegMultiplier)
191
- .div(numericConstants_1.PEG_PRECISION)
192
- .div(newBaseAssetReserve);
193
- return terminalPrice;
194
- }
195
- exports.calculateTerminalPrice = calculateTerminalPrice;
196
- function calculateMaxBaseAssetAmountToTrade(amm, limit_price) {
197
- const invariant = amm.sqrtK.mul(amm.sqrtK);
198
- const newBaseAssetReserveSquared = invariant
199
- .mul(numericConstants_1.MARK_PRICE_PRECISION)
200
- .mul(amm.pegMultiplier)
201
- .div(limit_price)
202
- .div(numericConstants_1.PEG_PRECISION);
203
- const newBaseAssetReserve = (0, __1.squareRootBN)(newBaseAssetReserveSquared);
204
- if (newBaseAssetReserve.gt(amm.baseAssetReserve)) {
205
- return [
206
- newBaseAssetReserve.sub(amm.baseAssetReserve),
207
- types_1.PositionDirection.SHORT,
208
- ];
209
- }
210
- else if (newBaseAssetReserve.lt(amm.baseAssetReserve)) {
211
- return [
212
- amm.baseAssetReserve.sub(newBaseAssetReserve),
213
- types_1.PositionDirection.LONG,
214
- ];
215
- }
216
- else {
217
- console.log('tradeSize Too Small');
218
- return [new anchor_1.BN(0), types_1.PositionDirection.LONG];
219
- }
220
- }
221
- exports.calculateMaxBaseAssetAmountToTrade = calculateMaxBaseAssetAmountToTrade;
222
- function calculateBudgetedK(market, cost) {
223
- // wolframalpha.com
224
- // (1/(x+d) - p/(x*p+d))*y*d*Q = C solve for p
225
- // p = (d(y*d*Q - C(x+d))) / (C*x(x+d) + y*y*d*Q)
226
- // todo: assumes k = x * y
227
- // otherwise use: (y(1-p) + (kp^2/(x*p+d)) - k/(x+d)) * Q = C solve for p
228
- // const k = market.amm.sqrtK.mul(market.amm.sqrtK);
229
- const x = market.amm.baseAssetReserve;
230
- const y = market.amm.quoteAssetReserve;
231
- const d = market.baseAssetAmount;
232
- const Q = market.amm.pegMultiplier;
233
- const C = cost.mul(new anchor_1.BN(-1));
234
- const numer1 = y.mul(d).mul(Q).div(numericConstants_1.AMM_RESERVE_PRECISION).div(numericConstants_1.PEG_PRECISION);
235
- const numer2 = C.mul(x.add(d)).div(numericConstants_1.QUOTE_PRECISION);
236
- const denom1 = C.mul(x)
237
- .mul(x.add(d))
238
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
239
- .div(numericConstants_1.QUOTE_PRECISION);
240
- const denom2 = y
241
- .mul(d)
242
- .mul(d)
243
- .mul(Q)
244
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
245
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
246
- .div(numericConstants_1.PEG_PRECISION);
247
- const numerator = d
248
- .mul(numer1.add(numer2))
249
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
250
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
251
- .div(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO);
252
- const denominator = denom1
253
- .add(denom2)
254
- .div(numericConstants_1.AMM_RESERVE_PRECISION)
255
- .div(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO);
256
- console.log(numerator, denominator);
257
- // const p = (numerator).div(denominator);
258
- // const formulaCost = (numer21.sub(numer20).sub(numer1)).mul(market.amm.pegMultiplier).div(AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO)
259
- // console.log(convertToNumber(formulaCost, QUOTE_PRECISION))
260
- return [numerator, denominator];
261
- }
262
- exports.calculateBudgetedK = calculateBudgetedK;
263
- function calculateBudgetedPeg(market, cost) {
264
- // wolframalpha.com
265
- // (1/(x+d) - p/(x*p+d))*y*d*Q = C solve for p
266
- // p = (d(y*d*Q - C(x+d))) / (C*x(x+d) + y*y*d*Q)
267
- // todo: assumes k = x * y
268
- // otherwise use: (y(1-p) + (kp^2/(x*p+d)) - k/(x+d)) * Q = C solve for p
269
- const k = market.amm.sqrtK.mul(market.amm.sqrtK);
270
- const x = market.amm.baseAssetReserve;
271
- const y = market.amm.quoteAssetReserve;
272
- const d = market.baseAssetAmount;
273
- const Q = market.amm.pegMultiplier;
274
- const C = cost.mul(new anchor_1.BN(-1));
275
- const deltaQuoteAssetReserves = y.sub(k.div(x.add(d)));
276
- const deltaPegMultiplier = C.mul(numericConstants_1.MARK_PRICE_PRECISION)
277
- .div(deltaQuoteAssetReserves.div(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO))
278
- .mul(numericConstants_1.PEG_PRECISION)
279
- .div(numericConstants_1.QUOTE_PRECISION);
280
- console.log(Q.toNumber(), 'change by', deltaPegMultiplier.toNumber() / numericConstants_1.MARK_PRICE_PRECISION.toNumber());
281
- const newPeg = Q.sub(deltaPegMultiplier.mul(numericConstants_1.PEG_PRECISION).div(numericConstants_1.MARK_PRICE_PRECISION));
282
- return newPeg;
283
- }
284
- exports.calculateBudgetedPeg = calculateBudgetedPeg;
285
- //# sourceMappingURL=amm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"amm.js","sourceRoot":"","sources":["amm.ts"],"names":[],"mappings":"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"}
@@ -1,143 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.MockUSDCFaucet = void 0;
26
- const anchor = __importStar(require("@project-serum/anchor"));
27
- const anchor_1 = require("@project-serum/anchor");
28
- const spl_token_1 = require("@solana/spl-token");
29
- const web3_js_1 = require("@solana/web3.js");
30
- const mock_usdc_faucet_json_1 = __importDefault(require("./idl/mock_usdc_faucet.json"));
31
- class MockUSDCFaucet {
32
- constructor(connection, wallet, programId, opts) {
33
- this.connection = connection;
34
- this.wallet = wallet;
35
- this.opts = opts || anchor_1.Provider.defaultOptions();
36
- const provider = new anchor_1.Provider(connection, wallet, this.opts);
37
- this.provider = provider;
38
- this.program = new anchor_1.Program(mock_usdc_faucet_json_1.default, programId, provider);
39
- }
40
- async getMockUSDCFaucetStatePublicKeyAndNonce() {
41
- return anchor.web3.PublicKey.findProgramAddress([Buffer.from(anchor.utils.bytes.utf8.encode('mock_usdc_faucet'))], this.program.programId);
42
- }
43
- async getMockUSDCFaucetStatePublicKey() {
44
- if (this.mockUSDCFaucetStatePublicKey) {
45
- return this.mockUSDCFaucetStatePublicKey;
46
- }
47
- this.mockUSDCFaucetStatePublicKey = (await this.getMockUSDCFaucetStatePublicKeyAndNonce())[0];
48
- return this.mockUSDCFaucetStatePublicKey;
49
- }
50
- async initialize() {
51
- const stateAccountRPCResponse = await this.connection.getParsedAccountInfo(await this.getMockUSDCFaucetStatePublicKey());
52
- if (stateAccountRPCResponse.value !== null) {
53
- throw new Error('Faucet already initialized');
54
- }
55
- const fakeUSDCMint = anchor.web3.Keypair.generate();
56
- const createUSDCMintAccountIx = web3_js_1.SystemProgram.createAccount({
57
- fromPubkey: this.wallet.publicKey,
58
- newAccountPubkey: fakeUSDCMint.publicKey,
59
- lamports: await spl_token_1.Token.getMinBalanceRentForExemptMint(this.connection),
60
- space: spl_token_1.MintLayout.span,
61
- programId: spl_token_1.TOKEN_PROGRAM_ID,
62
- });
63
- const [mintAuthority, _mintAuthorityNonce] = await web3_js_1.PublicKey.findProgramAddress([fakeUSDCMint.publicKey.toBuffer()], this.program.programId);
64
- const initUSDCMintIx = spl_token_1.Token.createInitMintInstruction(spl_token_1.TOKEN_PROGRAM_ID, fakeUSDCMint.publicKey, 6, mintAuthority, null);
65
- const [mockUSDCFaucetStatePublicKey, mockUSDCFaucetStateNonce] = await this.getMockUSDCFaucetStatePublicKeyAndNonce();
66
- return await this.program.rpc.initialize(mockUSDCFaucetStateNonce, {
67
- accounts: {
68
- mockUsdcFaucetState: mockUSDCFaucetStatePublicKey,
69
- admin: this.wallet.publicKey,
70
- mintAccount: fakeUSDCMint.publicKey,
71
- rent: web3_js_1.SYSVAR_RENT_PUBKEY,
72
- systemProgram: anchor.web3.SystemProgram.programId,
73
- },
74
- instructions: [createUSDCMintAccountIx, initUSDCMintIx],
75
- signers: [fakeUSDCMint],
76
- });
77
- }
78
- async fetchState() {
79
- return await this.program.account.mockUsdcFaucetState.fetch(await this.getMockUSDCFaucetStatePublicKey());
80
- }
81
- async mintToUser(userTokenAccount, amount) {
82
- const state = await this.fetchState();
83
- return await this.program.rpc.mintToUser(amount, {
84
- accounts: {
85
- mockUsdcFaucetState: await this.getMockUSDCFaucetStatePublicKey(),
86
- mintAccount: state.mint,
87
- userTokenAccount,
88
- mintAuthority: state.mintAuthority,
89
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
90
- },
91
- });
92
- }
93
- async createAssociatedTokenAccountAndMintTo(userPublicKey, amount) {
94
- const [associatedTokenPublicKey, createAssociatedAccountIx, mintToTx] = await this.createAssociatedTokenAccountAndMintToInstructions(userPublicKey, amount);
95
- const tx = new web3_js_1.Transaction().add(createAssociatedAccountIx).add(mintToTx);
96
- const txSig = await this.program.provider.send(tx, [], this.opts);
97
- return [associatedTokenPublicKey, txSig];
98
- }
99
- async createAssociatedTokenAccountAndMintToInstructions(userPublicKey, amount) {
100
- const state = await this.fetchState();
101
- const associateTokenPublicKey = await this.getAssosciatedMockUSDMintAddress({ userPubKey: userPublicKey });
102
- const createAssociatedAccountIx = spl_token_1.Token.createAssociatedTokenAccountInstruction(spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID, spl_token_1.TOKEN_PROGRAM_ID, state.mint, associateTokenPublicKey, userPublicKey, this.wallet.publicKey);
103
- const mintToIx = await this.program.instruction.mintToUser(amount, {
104
- accounts: {
105
- mockUsdcFaucetState: await this.getMockUSDCFaucetStatePublicKey(),
106
- mintAccount: state.mint,
107
- userTokenAccount: associateTokenPublicKey,
108
- mintAuthority: state.mintAuthority,
109
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
110
- },
111
- });
112
- return [associateTokenPublicKey, createAssociatedAccountIx, mintToIx];
113
- }
114
- async getAssosciatedMockUSDMintAddress(props) {
115
- const state = await this.fetchState();
116
- return spl_token_1.Token.getAssociatedTokenAddress(spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID, spl_token_1.TOKEN_PROGRAM_ID, state.mint, props.userPubKey);
117
- }
118
- async getTokenAccountInfo(props) {
119
- const assosciatedKey = await this.getAssosciatedMockUSDMintAddress(props);
120
- const state = await this.fetchState();
121
- const token = new spl_token_1.Token(this.connection, state.mint, spl_token_1.TOKEN_PROGRAM_ID,
122
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
123
- // @ts-ignore
124
- this.provider.payer);
125
- return await token.getAccountInfo(assosciatedKey);
126
- }
127
- async subscribeToTokenAccount(props) {
128
- try {
129
- const tokenAccountKey = await this.getAssosciatedMockUSDMintAddress(props);
130
- props.callback(await this.getTokenAccountInfo(props));
131
- // Couldn't find a way to do it using anchor framework subscription, someone on serum discord recommended this way
132
- this.connection.onAccountChange(tokenAccountKey, async (_accountInfo /* accountInfo is a buffer which we don't know how to deserialize */) => {
133
- props.callback(await this.getTokenAccountInfo(props));
134
- });
135
- return true;
136
- }
137
- catch (e) {
138
- return false;
139
- }
140
- }
141
- }
142
- exports.MockUSDCFaucet = MockUSDCFaucet;
143
- //# sourceMappingURL=mockUSDCFaucet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mockUSDCFaucet.js","sourceRoot":"","sources":["mockUSDCFaucet.ts"],"names":[],"mappings":"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"}