@xitadel-fi/sdk 0.1.2 → 0.1.4

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.
@@ -26,6 +26,13 @@ export declare class XitadelProgram {
26
26
  * @returns Transaction instruction for initializing the program configuration
27
27
  */
28
28
  initConfig(manager: PublicKey, payer?: PublicKey): Promise<TransactionInstruction>;
29
+ /**
30
+ * Transfer manager authority to a new manager
31
+ * @param currentManager The current manager's public key (must sign)
32
+ * @param newManager The new manager's public key
33
+ * @returns Transaction instruction for transferring manager authority
34
+ */
35
+ transferManager(currentManager: PublicKey, newManager: PublicKey): Promise<TransactionInstruction>;
29
36
  /**
30
37
  * Helper method to get LTT configuration PDA
31
38
  * @param lttId The LTT ID (Pubkey)
@@ -148,6 +155,7 @@ export declare class XitadelProgram {
148
155
  chainlinkDataStreamDecimals: number;
149
156
  chainlinkDataStreamVersion: number;
150
157
  positionNftMintB: PublicKey;
158
+ stakedCollateralAmount: BN;
151
159
  }>;
152
160
  /**
153
161
  * Helper method to get LP authority PDA
@@ -349,6 +357,7 @@ export declare class XitadelProgram {
349
357
  chainlinkDataStreamDecimals: number;
350
358
  chainlinkDataStreamVersion: number;
351
359
  positionNftMintB: PublicKey;
360
+ stakedCollateralAmount: BN;
352
361
  }>;
353
362
  /**
354
363
  * Redeem LTT tokens
@@ -435,4 +444,55 @@ export declare class XitadelProgram {
435
444
  * @returns Transaction instruction for claiming fees
436
445
  */
437
446
  claimFees(signer: PublicKey, lttId: PublicKey, positionNftMint: PublicKey, ammConfig: PublicKey, cpAmmProgramId: PublicKey, receiver: PublicKey): Promise<TransactionInstruction>;
447
+ /**
448
+ * Deposit stake to flash trade from collateral vault
449
+ * @param lttId The LTT ID
450
+ * @param authority The authority (manager or issuer) public key
451
+ * @param amount The amount to stake
452
+ * @param lpTokenMint The LP token mint
453
+ * @param flashTradeProgramId The flash trade program ID
454
+ * @param perpetuals The perpetuals account from flash_trade
455
+ * @param pool The pool account from flash_trade
456
+ * @param transferAuthority The transfer authority account from flash_trade
457
+ * @param flpStakeAccount The FLP stake account from flash_trade
458
+ * @param poolStakedLpVault The pool staked LP vault from flash_trade
459
+ * @param eventAuthority The event authority from flash_trade
460
+ * @returns Transaction instruction for depositing stake to flash trade
461
+ */
462
+ depositStakeFlashTrade(lttId: PublicKey, authority: PublicKey, amount: BN, lpTokenMint: PublicKey, flashTradeProgramId: PublicKey, perpetuals: PublicKey, pool: PublicKey, transferAuthority: PublicKey, flpStakeAccount: PublicKey, poolStakedLpVault: PublicKey, eventAuthority: PublicKey): Promise<TransactionInstruction>;
463
+ /**
464
+ * Claim flash trade fees to funding vault
465
+ * @param lttId The LTT ID
466
+ * @param authority The authority (manager or issuer) public key
467
+ * @param fundingTokenMint The funding token mint
468
+ * @param flashTradeProgramId The flash trade program ID
469
+ * @param transferAuthority The transfer authority (ltt_configuration PDA)
470
+ * @param perpetuals The perpetuals account from flash_trade
471
+ * @param pool The pool account from flash_trade
472
+ * @param feeCustody The fee custody account from flash_trade
473
+ * @param flpStakeAccount The FLP stake account from flash_trade
474
+ * @param feeCustodyTokenAccount The fee custody token account from flash_trade
475
+ * @param eventAuthority The event authority from flash_trade
476
+ * @param programPda The program PDA from flash_trade
477
+ * @param ixSysvar The instruction sysvar
478
+ * @returns Transaction instruction for claiming flash trade fees
479
+ */
480
+ claimFlashTradeFees(lttId: PublicKey, authority: PublicKey, fundingTokenMint: PublicKey, flashTradeProgramId: PublicKey, transferAuthority: PublicKey, perpetuals: PublicKey, pool: PublicKey, feeCustody: PublicKey, flpStakeAccount: PublicKey, feeCustodyTokenAccount: PublicKey, eventAuthority: PublicKey, ixSysvar: PublicKey): Promise<TransactionInstruction>;
481
+ /**
482
+ * Withdraw stake from flash trade (unstake instant + withdraw stake)
483
+ * @param lttId The LTT ID
484
+ * @param authority The authority (manager or issuer) public key
485
+ * @param unstakeAmount The amount to unstake
486
+ * @param lpTokenMint The LP token mint
487
+ * @param flashTradeProgramId The flash trade program ID
488
+ * @param transferAuthority The transfer authority account from flash_trade
489
+ * @param perpetuals The perpetuals account from flash_trade
490
+ * @param pool The pool account from flash_trade
491
+ * @param flpStakeAccount The FLP stake account from flash_trade
492
+ * @param poolStakedLpVault The pool staked LP vault from flash_trade
493
+ * @param rewardCustody The reward custody account from flash_trade
494
+ * @param eventAuthority The event authority from flash_trade
495
+ * @returns Transaction instruction for withdrawing stake from flash trade
496
+ */
497
+ withdrawStakeFlashTrade(lttId: PublicKey, authority: PublicKey, unstakeAmount: BN, lpTokenMint: PublicKey, flashTradeProgramId: PublicKey, transferAuthority: PublicKey, perpetuals: PublicKey, pool: PublicKey, flpStakeAccount: PublicKey, poolStakedLpVault: PublicKey, rewardCustody: PublicKey, eventAuthority: PublicKey): Promise<TransactionInstruction>;
438
498
  }
@@ -61,6 +61,24 @@ class XitadelProgram {
61
61
  })
62
62
  .instruction();
63
63
  }
64
+ /**
65
+ * Transfer manager authority to a new manager
66
+ * @param currentManager The current manager's public key (must sign)
67
+ * @param newManager The new manager's public key
68
+ * @returns Transaction instruction for transferring manager authority
69
+ */
70
+ async transferManager(currentManager, newManager) {
71
+ const configPda = this.getConfigPda();
72
+ return this.program.methods
73
+ .transferManager()
74
+ .accountsPartial({
75
+ config: configPda,
76
+ currentManager,
77
+ newManager,
78
+ systemProgram: web3_js_2.SystemProgram.programId,
79
+ })
80
+ .instruction();
81
+ }
64
82
  /**
65
83
  * Helper method to get LTT configuration PDA
66
84
  * @param lttId The LTT ID (Pubkey)
@@ -866,5 +884,140 @@ class XitadelProgram {
866
884
  })
867
885
  .instruction();
868
886
  }
887
+ /**
888
+ * Deposit stake to flash trade from collateral vault
889
+ * @param lttId The LTT ID
890
+ * @param authority The authority (manager or issuer) public key
891
+ * @param amount The amount to stake
892
+ * @param lpTokenMint The LP token mint
893
+ * @param flashTradeProgramId The flash trade program ID
894
+ * @param perpetuals The perpetuals account from flash_trade
895
+ * @param pool The pool account from flash_trade
896
+ * @param transferAuthority The transfer authority account from flash_trade
897
+ * @param flpStakeAccount The FLP stake account from flash_trade
898
+ * @param poolStakedLpVault The pool staked LP vault from flash_trade
899
+ * @param eventAuthority The event authority from flash_trade
900
+ * @returns Transaction instruction for depositing stake to flash trade
901
+ */
902
+ async depositStakeFlashTrade(lttId, authority, amount, lpTokenMint, flashTradeProgramId, perpetuals, pool, transferAuthority, flpStakeAccount, poolStakedLpVault, eventAuthority) {
903
+ const configPda = this.getConfigPda();
904
+ const lttConfigPda = this.getLTTConfigPda(lttId);
905
+ const collateralVaultAta = (0, spl_token_1.getAssociatedTokenAddressSync)(lpTokenMint, lttConfigPda, true, spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
906
+ return this.program.methods
907
+ .depositStakeFlashTrade(amount)
908
+ .accountsPartial({
909
+ lttConfiguration: lttConfigPda,
910
+ config: configPda,
911
+ authority: authority,
912
+ collateralVaultAta: collateralVaultAta,
913
+ lpTokenMint: lpTokenMint,
914
+ flashTradeProgram: flashTradeProgramId,
915
+ perpetuals: perpetuals,
916
+ pool: pool,
917
+ transferAuthority: transferAuthority,
918
+ flpStakeAccount: flpStakeAccount,
919
+ poolStakedLpVault: poolStakedLpVault,
920
+ eventAuthority: eventAuthority,
921
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
922
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
923
+ systemProgram: web3_js_2.SystemProgram.programId,
924
+ })
925
+ .instruction();
926
+ }
927
+ /**
928
+ * Claim flash trade fees to funding vault
929
+ * @param lttId The LTT ID
930
+ * @param authority The authority (manager or issuer) public key
931
+ * @param fundingTokenMint The funding token mint
932
+ * @param flashTradeProgramId The flash trade program ID
933
+ * @param transferAuthority The transfer authority (ltt_configuration PDA)
934
+ * @param perpetuals The perpetuals account from flash_trade
935
+ * @param pool The pool account from flash_trade
936
+ * @param feeCustody The fee custody account from flash_trade
937
+ * @param flpStakeAccount The FLP stake account from flash_trade
938
+ * @param feeCustodyTokenAccount The fee custody token account from flash_trade
939
+ * @param eventAuthority The event authority from flash_trade
940
+ * @param programPda The program PDA from flash_trade
941
+ * @param ixSysvar The instruction sysvar
942
+ * @returns Transaction instruction for claiming flash trade fees
943
+ */
944
+ async claimFlashTradeFees(lttId, authority, fundingTokenMint, flashTradeProgramId, transferAuthority, perpetuals, pool, feeCustody, flpStakeAccount, feeCustodyTokenAccount, eventAuthority, ixSysvar) {
945
+ const configPda = this.getConfigPda();
946
+ const lttConfigPda = this.getLTTConfigPda(lttId);
947
+ const fundingVaultAta = (0, spl_token_1.getAssociatedTokenAddressSync)(fundingTokenMint, lttConfigPda, true, spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
948
+ return this.program.methods
949
+ .claimFlashTradeFees()
950
+ .accountsPartial({
951
+ lttConfiguration: lttConfigPda,
952
+ config: configPda,
953
+ authority: authority,
954
+ fundingVaultAta: fundingVaultAta,
955
+ fundingTokenMint: fundingTokenMint,
956
+ flashTradeProgram: flashTradeProgramId,
957
+ transferAuthority: transferAuthority,
958
+ perpetuals: perpetuals,
959
+ pool: pool,
960
+ feeCustody: feeCustody,
961
+ flpStakeAccount: flpStakeAccount,
962
+ feeCustodyTokenAccount: feeCustodyTokenAccount,
963
+ eventAuthority: eventAuthority,
964
+ ixSysvar: ixSysvar,
965
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
966
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
967
+ systemProgram: web3_js_2.SystemProgram.programId,
968
+ })
969
+ .instruction();
970
+ }
971
+ /**
972
+ * Withdraw stake from flash trade (unstake instant + withdraw stake)
973
+ * @param lttId The LTT ID
974
+ * @param authority The authority (manager or issuer) public key
975
+ * @param unstakeAmount The amount to unstake
976
+ * @param lpTokenMint The LP token mint
977
+ * @param flashTradeProgramId The flash trade program ID
978
+ * @param transferAuthority The transfer authority account from flash_trade
979
+ * @param perpetuals The perpetuals account from flash_trade
980
+ * @param pool The pool account from flash_trade
981
+ * @param flpStakeAccount The FLP stake account from flash_trade
982
+ * @param poolStakedLpVault The pool staked LP vault from flash_trade
983
+ * @param rewardCustody The reward custody account from flash_trade
984
+ * @param eventAuthority The event authority from flash_trade
985
+ * @returns Transaction instruction for withdrawing stake from flash trade
986
+ */
987
+ async withdrawStakeFlashTrade(lttId, authority, unstakeAmount, lpTokenMint, flashTradeProgramId, transferAuthority, perpetuals, pool, flpStakeAccount, poolStakedLpVault, rewardCustody, eventAuthority) {
988
+ const configPda = this.getConfigPda();
989
+ const lttConfigPda = this.getLTTConfigPda(lttId);
990
+ const collateralVaultAta = (0, spl_token_1.getAssociatedTokenAddressSync)(lpTokenMint, lttConfigPda, true, spl_token_1.TOKEN_PROGRAM_ID, spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
991
+ const tokenStakeAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("token_stake"), lttConfigPda.toBuffer()], flashTradeProgramId)[0];
992
+ let tokenStakeAccounts = [];
993
+ if (tokenStakeAccount && await (0, utils_1.checkIfAccountExists)(tokenStakeAccount, this.program.provider.connection)) {
994
+ tokenStakeAccounts.push({
995
+ pubkey: tokenStakeAccount,
996
+ isSigner: false,
997
+ isWritable: false,
998
+ });
999
+ }
1000
+ return this.program.methods
1001
+ .withdrawStakeFlashTrade(unstakeAmount)
1002
+ .accountsPartial({
1003
+ lttConfiguration: lttConfigPda,
1004
+ config: configPda,
1005
+ authority: authority,
1006
+ collateralVaultAta: collateralVaultAta,
1007
+ lpTokenMint: lpTokenMint,
1008
+ flashTradeProgram: flashTradeProgramId,
1009
+ transferAuthority: transferAuthority,
1010
+ perpetuals: perpetuals,
1011
+ pool: pool,
1012
+ flpStakeAccount: flpStakeAccount,
1013
+ poolStakedLpVault: poolStakedLpVault,
1014
+ rewardCustody: rewardCustody,
1015
+ eventAuthority: eventAuthority,
1016
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
1017
+ systemProgram: web3_js_2.SystemProgram.programId,
1018
+ })
1019
+ .remainingAccounts([...tokenStakeAccounts])
1020
+ .instruction();
1021
+ }
869
1022
  }
870
1023
  exports.XitadelProgram = XitadelProgram;
@@ -1,4 +1,4 @@
1
- import { PublicKey } from '@solana/web3.js';
1
+ import { PublicKey, Connection } from '@solana/web3.js';
2
2
  import { BN } from '@coral-xyz/anchor';
3
3
  export declare const getSqrtPriceFromPrice: (price: string, tokenADecimal: number, tokenBDecimal: number) => BN;
4
4
  export declare const getFirstKey: (key1: PublicKey, key2: PublicKey) => PublicKey;
@@ -15,3 +15,4 @@ export declare const getLiquidityDelta: (params: {
15
15
  sqrtPrice: BN;
16
16
  }) => BN;
17
17
  export declare function calculateTotalStableAmountRequiredForMaturity(lttSupply: any, lpSupplyAmount: any, stableInterestAmount: any, interestTokenDecimals: number): any;
18
+ export declare function checkIfAccountExists(account: PublicKey, connection: Connection): Promise<boolean>;
@@ -7,6 +7,7 @@ exports.getLiquidityDelta = exports.getVaultPda = exports.derivePoolKey = export
7
7
  exports.deriveProtocolFeeKey = deriveProtocolFeeKey;
8
8
  exports.deriveMintMetadata = deriveMintMetadata;
9
9
  exports.calculateTotalStableAmountRequiredForMaturity = calculateTotalStableAmountRequiredForMaturity;
10
+ exports.checkIfAccountExists = checkIfAccountExists;
10
11
  const web3_js_1 = require("@solana/web3.js");
11
12
  const constants_1 = require("./constants");
12
13
  const anchor_1 = require("@coral-xyz/anchor");
@@ -73,3 +74,12 @@ function calculateTotalStableAmountRequiredForMaturity(lttSupply, lpSupplyAmount
73
74
  const initializeLpValue = normalizedLpSupply.mul(new anchor_1.BN(2));
74
75
  return stableInterestAmount.add(normalizedLttSupply).sub(initializeLpValue);
75
76
  }
77
+ async function checkIfAccountExists(account, connection) {
78
+ let bal = await connection.getBalance(account);
79
+ if (bal > 0) {
80
+ return true;
81
+ }
82
+ else {
83
+ return false;
84
+ }
85
+ }