@atomiqlabs/chain-solana 13.5.13 → 13.5.14

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 (131) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +73 -73
  3. package/dist/index.d.ts +81 -81
  4. package/dist/index.js +102 -102
  5. package/dist/node/index.d.ts +9 -9
  6. package/dist/node/index.js +13 -13
  7. package/dist/solana/SolanaChainType.d.ts +15 -15
  8. package/dist/solana/SolanaChainType.js +2 -2
  9. package/dist/solana/SolanaChains.d.ts +12 -12
  10. package/dist/solana/SolanaChains.js +45 -45
  11. package/dist/solana/SolanaInitializer.d.ts +94 -94
  12. package/dist/solana/SolanaInitializer.js +174 -174
  13. package/dist/solana/btcrelay/SolanaBtcRelay.d.ts +222 -222
  14. package/dist/solana/btcrelay/SolanaBtcRelay.js +455 -455
  15. package/dist/solana/btcrelay/headers/SolanaBtcHeader.d.ts +84 -84
  16. package/dist/solana/btcrelay/headers/SolanaBtcHeader.js +70 -70
  17. package/dist/solana/btcrelay/headers/SolanaBtcStoredHeader.d.ts +92 -92
  18. package/dist/solana/btcrelay/headers/SolanaBtcStoredHeader.js +109 -109
  19. package/dist/solana/btcrelay/program/programIdl.json +671 -671
  20. package/dist/solana/chain/SolanaAction.d.ts +26 -26
  21. package/dist/solana/chain/SolanaAction.js +87 -87
  22. package/dist/solana/chain/SolanaChainInterface.d.ts +224 -224
  23. package/dist/solana/chain/SolanaChainInterface.js +275 -275
  24. package/dist/solana/chain/SolanaModule.d.ts +14 -14
  25. package/dist/solana/chain/SolanaModule.js +13 -13
  26. package/dist/solana/chain/modules/SolanaAddresses.d.ts +8 -8
  27. package/dist/solana/chain/modules/SolanaAddresses.js +22 -22
  28. package/dist/solana/chain/modules/SolanaBlocks.d.ts +32 -32
  29. package/dist/solana/chain/modules/SolanaBlocks.js +78 -78
  30. package/dist/solana/chain/modules/SolanaEvents.d.ts +68 -68
  31. package/dist/solana/chain/modules/SolanaEvents.js +238 -238
  32. package/dist/solana/chain/modules/SolanaFees.d.ts +189 -189
  33. package/dist/solana/chain/modules/SolanaFees.js +434 -434
  34. package/dist/solana/chain/modules/SolanaSignatures.d.ts +24 -24
  35. package/dist/solana/chain/modules/SolanaSignatures.js +39 -39
  36. package/dist/solana/chain/modules/SolanaSlots.d.ts +33 -33
  37. package/dist/solana/chain/modules/SolanaSlots.js +72 -72
  38. package/dist/solana/chain/modules/SolanaTokens.d.ts +123 -123
  39. package/dist/solana/chain/modules/SolanaTokens.js +242 -242
  40. package/dist/solana/chain/modules/SolanaTransactions.d.ts +149 -149
  41. package/dist/solana/chain/modules/SolanaTransactions.js +445 -445
  42. package/dist/solana/connection/ConnectionWithRetries.d.ts +35 -35
  43. package/dist/solana/connection/ConnectionWithRetries.js +86 -71
  44. package/dist/solana/events/SolanaChainEvents.d.ts +45 -45
  45. package/dist/solana/events/SolanaChainEvents.js +108 -108
  46. package/dist/solana/events/SolanaChainEventsBrowser.d.ts +205 -205
  47. package/dist/solana/events/SolanaChainEventsBrowser.js +404 -404
  48. package/dist/solana/program/SolanaProgramBase.d.ts +73 -73
  49. package/dist/solana/program/SolanaProgramBase.js +54 -54
  50. package/dist/solana/program/SolanaProgramModule.d.ts +8 -8
  51. package/dist/solana/program/SolanaProgramModule.js +11 -11
  52. package/dist/solana/program/modules/SolanaProgramEvents.d.ts +53 -53
  53. package/dist/solana/program/modules/SolanaProgramEvents.js +117 -117
  54. package/dist/solana/swaps/SolanaSwapData.d.ts +333 -333
  55. package/dist/solana/swaps/SolanaSwapData.js +535 -535
  56. package/dist/solana/swaps/SolanaSwapModule.d.ts +11 -11
  57. package/dist/solana/swaps/SolanaSwapModule.js +12 -12
  58. package/dist/solana/swaps/SolanaSwapProgram.d.ts +376 -376
  59. package/dist/solana/swaps/SolanaSwapProgram.js +769 -769
  60. package/dist/solana/swaps/SwapTypeEnum.d.ts +11 -11
  61. package/dist/solana/swaps/SwapTypeEnum.js +43 -43
  62. package/dist/solana/swaps/modules/SolanaDataAccount.d.ts +95 -95
  63. package/dist/solana/swaps/modules/SolanaDataAccount.js +232 -232
  64. package/dist/solana/swaps/modules/SolanaLpVault.d.ts +69 -69
  65. package/dist/solana/swaps/modules/SolanaLpVault.js +171 -171
  66. package/dist/solana/swaps/modules/SwapClaim.d.ts +126 -126
  67. package/dist/solana/swaps/modules/SwapClaim.js +294 -294
  68. package/dist/solana/swaps/modules/SwapInit.d.ts +213 -213
  69. package/dist/solana/swaps/modules/SwapInit.js +658 -658
  70. package/dist/solana/swaps/modules/SwapRefund.d.ts +87 -87
  71. package/dist/solana/swaps/modules/SwapRefund.js +293 -293
  72. package/dist/solana/swaps/programIdl.json +945 -945
  73. package/dist/solana/swaps/programTypes.d.ts +943 -943
  74. package/dist/solana/swaps/programTypes.js +945 -945
  75. package/dist/solana/swaps/v1/programIdl.json +945 -945
  76. package/dist/solana/swaps/v1/programTypes.d.ts +943 -943
  77. package/dist/solana/swaps/v1/programTypes.js +945 -945
  78. package/dist/solana/swaps/v2/programIdl.json +952 -952
  79. package/dist/solana/swaps/v2/programTypes.d.ts +950 -950
  80. package/dist/solana/swaps/v2/programTypes.js +952 -952
  81. package/dist/solana/wallet/SolanaKeypairWallet.d.ts +29 -29
  82. package/dist/solana/wallet/SolanaKeypairWallet.js +50 -50
  83. package/dist/solana/wallet/SolanaSigner.d.ts +30 -30
  84. package/dist/solana/wallet/SolanaSigner.js +30 -30
  85. package/dist/utils/Utils.d.ts +58 -58
  86. package/dist/utils/Utils.js +170 -170
  87. package/node/index.d.ts +1 -1
  88. package/node/index.js +3 -3
  89. package/package.json +46 -46
  90. package/src/index.ts +87 -87
  91. package/src/node/index.ts +9 -9
  92. package/src/solana/SolanaChainType.ts +32 -32
  93. package/src/solana/SolanaChains.ts +46 -46
  94. package/src/solana/SolanaInitializer.ts +278 -278
  95. package/src/solana/btcrelay/SolanaBtcRelay.ts +615 -615
  96. package/src/solana/btcrelay/headers/SolanaBtcHeader.ts +116 -116
  97. package/src/solana/btcrelay/headers/SolanaBtcStoredHeader.ts +148 -148
  98. package/src/solana/btcrelay/program/programIdl.json +670 -670
  99. package/src/solana/chain/SolanaAction.ts +109 -109
  100. package/src/solana/chain/SolanaChainInterface.ts +404 -404
  101. package/src/solana/chain/SolanaModule.ts +20 -20
  102. package/src/solana/chain/modules/SolanaAddresses.ts +20 -20
  103. package/src/solana/chain/modules/SolanaBlocks.ts +89 -89
  104. package/src/solana/chain/modules/SolanaEvents.ts +271 -271
  105. package/src/solana/chain/modules/SolanaFees.ts +522 -522
  106. package/src/solana/chain/modules/SolanaSignatures.ts +39 -39
  107. package/src/solana/chain/modules/SolanaSlots.ts +85 -85
  108. package/src/solana/chain/modules/SolanaTokens.ts +300 -300
  109. package/src/solana/chain/modules/SolanaTransactions.ts +503 -503
  110. package/src/solana/connection/ConnectionWithRetries.ts +113 -96
  111. package/src/solana/events/SolanaChainEvents.ts +127 -127
  112. package/src/solana/events/SolanaChainEventsBrowser.ts +495 -495
  113. package/src/solana/program/SolanaProgramBase.ts +119 -119
  114. package/src/solana/program/SolanaProgramModule.ts +15 -15
  115. package/src/solana/program/modules/SolanaProgramEvents.ts +157 -157
  116. package/src/solana/swaps/SolanaSwapData.ts +735 -735
  117. package/src/solana/swaps/SolanaSwapModule.ts +19 -19
  118. package/src/solana/swaps/SolanaSwapProgram.ts +1074 -1074
  119. package/src/solana/swaps/SwapTypeEnum.ts +30 -30
  120. package/src/solana/swaps/modules/SolanaDataAccount.ts +302 -302
  121. package/src/solana/swaps/modules/SolanaLpVault.ts +208 -208
  122. package/src/solana/swaps/modules/SwapClaim.ts +387 -387
  123. package/src/solana/swaps/modules/SwapInit.ts +785 -785
  124. package/src/solana/swaps/modules/SwapRefund.ts +353 -353
  125. package/src/solana/swaps/v1/programIdl.json +944 -944
  126. package/src/solana/swaps/v1/programTypes.ts +1885 -1885
  127. package/src/solana/swaps/v2/programIdl.json +951 -951
  128. package/src/solana/swaps/v2/programTypes.ts +1899 -1899
  129. package/src/solana/wallet/SolanaKeypairWallet.ts +56 -56
  130. package/src/solana/wallet/SolanaSigner.ts +43 -43
  131. package/src/utils/Utils.ts +194 -194
@@ -1,209 +1,209 @@
1
- import {SolanaSwapModule} from "../SolanaSwapModule";
2
- import {SolanaAction} from "../../chain/SolanaAction";
3
- import {PublicKey, SystemProgram} from "@solana/web3.js";
4
- import {
5
- Account,
6
- getAssociatedTokenAddress,
7
- getAssociatedTokenAddressSync,
8
- TOKEN_PROGRAM_ID
9
- } from "@solana/spl-token";
10
- import {SolanaTx} from "../../chain/modules/SolanaTransactions";
11
- import {toBigInt, toBN} from "../../../utils/Utils";
12
- import { IntermediaryReputationType } from "@atomiqlabs/base";
13
- import {SolanaTokens} from "../../chain/modules/SolanaTokens";
14
-
15
- export class SolanaLpVault extends SolanaSwapModule {
16
-
17
- private static readonly CUCosts = {
18
- WITHDRAW: 50000,
19
- DEPOSIT: 50000
20
- };
21
-
22
- /**
23
- * Action for withdrawing funds from the LP vault
24
- *
25
- * @param signer
26
- * @param token
27
- * @param amount
28
- * @private
29
- */
30
- private async Withdraw(signer: PublicKey, token: PublicKey, amount: bigint): Promise<SolanaAction> {
31
- const ata = getAssociatedTokenAddressSync(token, signer);
32
- return new SolanaAction(signer, this.root,
33
- await this.swapProgram.methods
34
- .withdraw(toBN(amount))
35
- .accounts({
36
- signer,
37
- signerAta: ata,
38
- userData: this.program._SwapUserVault(signer, token),
39
- vault: this.program._SwapVault(token),
40
- vaultAuthority: this.program._SwapVaultAuthority, // Only necessary for V1 program
41
- mint: token,
42
- tokenProgram: TOKEN_PROGRAM_ID
43
- })
44
- .instruction(),
45
- SolanaLpVault.CUCosts.WITHDRAW
46
- );
47
- }
48
-
49
- /**
50
- * Action for depositing funds to the LP vault
51
- *
52
- * @param signer
53
- * @param token
54
- * @param amount
55
- * @private
56
- */
57
- private async Deposit(signer: PublicKey, token: PublicKey, amount: bigint): Promise<SolanaAction> {
58
- const ata = getAssociatedTokenAddressSync(token, signer);
59
- return new SolanaAction(signer, this.root,
60
- await this.swapProgram.methods
61
- .deposit(toBN(amount))
62
- .accounts({
63
- signer,
64
- signerAta: ata,
65
- userData: this.program._SwapUserVault(signer, token),
66
- vault: this.program._SwapVault(token),
67
- vaultAuthority: this.program._SwapVaultAuthority, // Only necessary for V1 program
68
- mint: token,
69
- systemProgram: SystemProgram.programId,
70
- tokenProgram: TOKEN_PROGRAM_ID
71
- })
72
- .instruction(),
73
- SolanaLpVault.CUCosts.DEPOSIT
74
- );
75
- }
76
-
77
- /**
78
- * Returns intermediary's reputation & vault balance for a specific token
79
- *
80
- * @param address
81
- * @param token
82
- */
83
- public async getIntermediaryData(address: PublicKey, token: PublicKey): Promise<{
84
- balance: bigint,
85
- reputation: IntermediaryReputationType
86
- } | null> {
87
- const data = await this.swapProgram.account.userAccount.fetchNullable(
88
- this.program._SwapUserVault(address, token)
89
- );
90
-
91
- if(data==null) return null;
92
-
93
- const response: any = [];
94
-
95
- for(let i=0;i<data.successVolume.length;i++) {
96
- response[i] = {
97
- successVolume: data.successVolume[i],
98
- successCount: data.successCount[i],
99
- failVolume: data.failVolume[i],
100
- failCount: data.failCount[i],
101
- coopCloseVolume: data.coopCloseVolume[i],
102
- coopCloseCount: data.coopCloseCount[i]
103
- };
104
- }
105
-
106
- return {
107
- balance: toBigInt(data.amount),
108
- reputation: response
109
- };
110
- }
111
-
112
- /**
113
- * Returns intermediary's reputation for a specific token
114
- *
115
- * @param address
116
- * @param token
117
- */
118
- public async getIntermediaryReputation(address: PublicKey, token: PublicKey): Promise<IntermediaryReputationType | null> {
119
- const intermediaryData = await this.getIntermediaryData(address, token);
120
- return intermediaryData?.reputation ?? null;
121
- }
122
-
123
- /**
124
- * Returns the balance of the token an intermediary has in his LP vault
125
- *
126
- * @param address
127
- * @param token
128
- */
129
- public async getIntermediaryBalance(address: PublicKey, token: PublicKey): Promise<bigint> {
130
- const intermediaryData = await this.getIntermediaryData(address, token);
131
- const balance: bigint = intermediaryData?.balance ?? 0n;
132
-
133
- this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: "+token.toString()+
134
- " address: "+address+" amount: "+balance.toString());
135
-
136
- return balance;
137
- }
138
-
139
- /**
140
- * Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
141
- * WSOL to SOL if required
142
- *
143
- * @param signer
144
- * @param token
145
- * @param amount
146
- * @param feeRate
147
- */
148
- public async txsWithdraw(signer: PublicKey, token: PublicKey, amount: bigint, feeRate?: string): Promise<SolanaTx[]> {
149
- const ata = await getAssociatedTokenAddress(token, signer);
150
-
151
- feeRate = feeRate || await this.getFeeRate(signer, token);
152
-
153
- const action = new SolanaAction(signer, this.root);
154
- if(!await this.root.Tokens.ataExists(ata)) {
155
- action.add(this.root.Tokens.InitAta(signer, signer, token));
156
- }
157
- action.add(await this.Withdraw(signer, token, amount));
158
- const shouldUnwrap = token.equals(SolanaTokens.WSOL_ADDRESS);
159
- if(shouldUnwrap) action.add(this.root.Tokens.Unwrap(signer));
160
-
161
- this.logger.debug("txsWithdraw(): withdraw TX created, token: "+token.toString()+
162
- " amount: "+amount.toString(10)+" unwrapping: "+shouldUnwrap);
163
-
164
- return [await action.tx(feeRate)];
165
- }
166
-
167
- /**
168
- * Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
169
- *
170
- * @param signer
171
- * @param token
172
- * @param amount
173
- * @param feeRate
174
- */
175
- public async txsDeposit(signer: PublicKey, token: PublicKey, amount: bigint, feeRate?: string): Promise<SolanaTx[]> {
176
- const ata = getAssociatedTokenAddressSync(token, signer);
177
-
178
- feeRate = feeRate || await this.getFeeRate(signer, token);
179
-
180
- const action = new SolanaAction(signer, this.root);
181
-
182
- let wrapping: boolean = false;
183
- if(token.equals(SolanaTokens.WSOL_ADDRESS)) {
184
- const account = await this.root.Tokens.getATAOrNull(ata);
185
- let balance: bigint = account==null ? 0n : account.amount;
186
- if(balance < amount) {
187
- action.add(this.root.Tokens.Wrap(signer, amount - balance, account==null));
188
- wrapping = true;
189
- }
190
- }
191
- action.addAction(await this.Deposit(signer, token, amount));
192
-
193
- this.logger.debug("txsDeposit(): deposit TX created, token: "+token.toString()+
194
- " amount: "+amount.toString(10)+" wrapping: "+wrapping);
195
-
196
- return [await action.tx(feeRate)];
197
- }
198
-
199
- public getFeeRate(signer: PublicKey, token: PublicKey) {
200
- const ata = getAssociatedTokenAddressSync(token, signer);
201
- return this.root.Fees.getFeeRate([
202
- signer,
203
- ata,
204
- this.program._SwapUserVault(signer, token),
205
- this.program._SwapVault(token)
206
- ])
207
- }
208
-
1
+ import {SolanaSwapModule} from "../SolanaSwapModule";
2
+ import {SolanaAction} from "../../chain/SolanaAction";
3
+ import {PublicKey, SystemProgram} from "@solana/web3.js";
4
+ import {
5
+ Account,
6
+ getAssociatedTokenAddress,
7
+ getAssociatedTokenAddressSync,
8
+ TOKEN_PROGRAM_ID
9
+ } from "@solana/spl-token";
10
+ import {SolanaTx} from "../../chain/modules/SolanaTransactions";
11
+ import {toBigInt, toBN} from "../../../utils/Utils";
12
+ import { IntermediaryReputationType } from "@atomiqlabs/base";
13
+ import {SolanaTokens} from "../../chain/modules/SolanaTokens";
14
+
15
+ export class SolanaLpVault extends SolanaSwapModule {
16
+
17
+ private static readonly CUCosts = {
18
+ WITHDRAW: 50000,
19
+ DEPOSIT: 50000
20
+ };
21
+
22
+ /**
23
+ * Action for withdrawing funds from the LP vault
24
+ *
25
+ * @param signer
26
+ * @param token
27
+ * @param amount
28
+ * @private
29
+ */
30
+ private async Withdraw(signer: PublicKey, token: PublicKey, amount: bigint): Promise<SolanaAction> {
31
+ const ata = getAssociatedTokenAddressSync(token, signer);
32
+ return new SolanaAction(signer, this.root,
33
+ await this.swapProgram.methods
34
+ .withdraw(toBN(amount))
35
+ .accounts({
36
+ signer,
37
+ signerAta: ata,
38
+ userData: this.program._SwapUserVault(signer, token),
39
+ vault: this.program._SwapVault(token),
40
+ vaultAuthority: this.program._SwapVaultAuthority, // Only necessary for V1 program
41
+ mint: token,
42
+ tokenProgram: TOKEN_PROGRAM_ID
43
+ })
44
+ .instruction(),
45
+ SolanaLpVault.CUCosts.WITHDRAW
46
+ );
47
+ }
48
+
49
+ /**
50
+ * Action for depositing funds to the LP vault
51
+ *
52
+ * @param signer
53
+ * @param token
54
+ * @param amount
55
+ * @private
56
+ */
57
+ private async Deposit(signer: PublicKey, token: PublicKey, amount: bigint): Promise<SolanaAction> {
58
+ const ata = getAssociatedTokenAddressSync(token, signer);
59
+ return new SolanaAction(signer, this.root,
60
+ await this.swapProgram.methods
61
+ .deposit(toBN(amount))
62
+ .accounts({
63
+ signer,
64
+ signerAta: ata,
65
+ userData: this.program._SwapUserVault(signer, token),
66
+ vault: this.program._SwapVault(token),
67
+ vaultAuthority: this.program._SwapVaultAuthority, // Only necessary for V1 program
68
+ mint: token,
69
+ systemProgram: SystemProgram.programId,
70
+ tokenProgram: TOKEN_PROGRAM_ID
71
+ })
72
+ .instruction(),
73
+ SolanaLpVault.CUCosts.DEPOSIT
74
+ );
75
+ }
76
+
77
+ /**
78
+ * Returns intermediary's reputation & vault balance for a specific token
79
+ *
80
+ * @param address
81
+ * @param token
82
+ */
83
+ public async getIntermediaryData(address: PublicKey, token: PublicKey): Promise<{
84
+ balance: bigint,
85
+ reputation: IntermediaryReputationType
86
+ } | null> {
87
+ const data = await this.swapProgram.account.userAccount.fetchNullable(
88
+ this.program._SwapUserVault(address, token)
89
+ );
90
+
91
+ if(data==null) return null;
92
+
93
+ const response: any = [];
94
+
95
+ for(let i=0;i<data.successVolume.length;i++) {
96
+ response[i] = {
97
+ successVolume: data.successVolume[i],
98
+ successCount: data.successCount[i],
99
+ failVolume: data.failVolume[i],
100
+ failCount: data.failCount[i],
101
+ coopCloseVolume: data.coopCloseVolume[i],
102
+ coopCloseCount: data.coopCloseCount[i]
103
+ };
104
+ }
105
+
106
+ return {
107
+ balance: toBigInt(data.amount),
108
+ reputation: response
109
+ };
110
+ }
111
+
112
+ /**
113
+ * Returns intermediary's reputation for a specific token
114
+ *
115
+ * @param address
116
+ * @param token
117
+ */
118
+ public async getIntermediaryReputation(address: PublicKey, token: PublicKey): Promise<IntermediaryReputationType | null> {
119
+ const intermediaryData = await this.getIntermediaryData(address, token);
120
+ return intermediaryData?.reputation ?? null;
121
+ }
122
+
123
+ /**
124
+ * Returns the balance of the token an intermediary has in his LP vault
125
+ *
126
+ * @param address
127
+ * @param token
128
+ */
129
+ public async getIntermediaryBalance(address: PublicKey, token: PublicKey): Promise<bigint> {
130
+ const intermediaryData = await this.getIntermediaryData(address, token);
131
+ const balance: bigint = intermediaryData?.balance ?? 0n;
132
+
133
+ this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: "+token.toString()+
134
+ " address: "+address+" amount: "+balance.toString());
135
+
136
+ return balance;
137
+ }
138
+
139
+ /**
140
+ * Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
141
+ * WSOL to SOL if required
142
+ *
143
+ * @param signer
144
+ * @param token
145
+ * @param amount
146
+ * @param feeRate
147
+ */
148
+ public async txsWithdraw(signer: PublicKey, token: PublicKey, amount: bigint, feeRate?: string): Promise<SolanaTx[]> {
149
+ const ata = await getAssociatedTokenAddress(token, signer);
150
+
151
+ feeRate = feeRate || await this.getFeeRate(signer, token);
152
+
153
+ const action = new SolanaAction(signer, this.root);
154
+ if(!await this.root.Tokens.ataExists(ata)) {
155
+ action.add(this.root.Tokens.InitAta(signer, signer, token));
156
+ }
157
+ action.add(await this.Withdraw(signer, token, amount));
158
+ const shouldUnwrap = token.equals(SolanaTokens.WSOL_ADDRESS);
159
+ if(shouldUnwrap) action.add(this.root.Tokens.Unwrap(signer));
160
+
161
+ this.logger.debug("txsWithdraw(): withdraw TX created, token: "+token.toString()+
162
+ " amount: "+amount.toString(10)+" unwrapping: "+shouldUnwrap);
163
+
164
+ return [await action.tx(feeRate)];
165
+ }
166
+
167
+ /**
168
+ * Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
169
+ *
170
+ * @param signer
171
+ * @param token
172
+ * @param amount
173
+ * @param feeRate
174
+ */
175
+ public async txsDeposit(signer: PublicKey, token: PublicKey, amount: bigint, feeRate?: string): Promise<SolanaTx[]> {
176
+ const ata = getAssociatedTokenAddressSync(token, signer);
177
+
178
+ feeRate = feeRate || await this.getFeeRate(signer, token);
179
+
180
+ const action = new SolanaAction(signer, this.root);
181
+
182
+ let wrapping: boolean = false;
183
+ if(token.equals(SolanaTokens.WSOL_ADDRESS)) {
184
+ const account = await this.root.Tokens.getATAOrNull(ata);
185
+ let balance: bigint = account==null ? 0n : account.amount;
186
+ if(balance < amount) {
187
+ action.add(this.root.Tokens.Wrap(signer, amount - balance, account==null));
188
+ wrapping = true;
189
+ }
190
+ }
191
+ action.addAction(await this.Deposit(signer, token, amount));
192
+
193
+ this.logger.debug("txsDeposit(): deposit TX created, token: "+token.toString()+
194
+ " amount: "+amount.toString(10)+" wrapping: "+wrapping);
195
+
196
+ return [await action.tx(feeRate)];
197
+ }
198
+
199
+ public getFeeRate(signer: PublicKey, token: PublicKey) {
200
+ const ata = getAssociatedTokenAddressSync(token, signer);
201
+ return this.root.Fees.getFeeRate([
202
+ signer,
203
+ ata,
204
+ this.program._SwapUserVault(signer, token),
205
+ this.program._SwapVault(token)
206
+ ])
207
+ }
208
+
209
209
  }