@kamino-finance/klend-sdk 7.1.3 → 7.1.4-beta.0

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 (230) hide show
  1. package/dist/@codegen/klend/accounts/LendingMarket.d.ts +144 -3
  2. package/dist/@codegen/klend/accounts/LendingMarket.d.ts.map +1 -1
  3. package/dist/@codegen/klend/accounts/LendingMarket.js +105 -3
  4. package/dist/@codegen/klend/accounts/LendingMarket.js.map +1 -1
  5. package/dist/@codegen/klend/accounts/Obligation.d.ts +30 -15
  6. package/dist/@codegen/klend/accounts/Obligation.d.ts.map +1 -1
  7. package/dist/@codegen/klend/accounts/Obligation.js +31 -21
  8. package/dist/@codegen/klend/accounts/Obligation.js.map +1 -1
  9. package/dist/@codegen/klend/accounts/PoolState.d.ts +53 -0
  10. package/dist/@codegen/klend/accounts/PoolState.d.ts.map +1 -0
  11. package/dist/@codegen/klend/accounts/PoolState.js +167 -0
  12. package/dist/@codegen/klend/accounts/PoolState.js.map +1 -0
  13. package/dist/@codegen/klend/accounts/Reserve.d.ts +6 -0
  14. package/dist/@codegen/klend/accounts/Reserve.d.ts.map +1 -1
  15. package/dist/@codegen/klend/accounts/Reserve.js +9 -2
  16. package/dist/@codegen/klend/accounts/Reserve.js.map +1 -1
  17. package/dist/@codegen/klend/accounts/UnstakeTicket.d.ts +41 -0
  18. package/dist/@codegen/klend/accounts/UnstakeTicket.d.ts.map +1 -0
  19. package/dist/@codegen/klend/accounts/UnstakeTicket.js +143 -0
  20. package/dist/@codegen/klend/accounts/UnstakeTicket.js.map +1 -0
  21. package/dist/@codegen/klend/accounts/UserState.d.ts +0 -75
  22. package/dist/@codegen/klend/accounts/UserState.d.ts.map +1 -1
  23. package/dist/@codegen/klend/accounts/UserState.js +0 -25
  24. package/dist/@codegen/klend/accounts/UserState.js.map +1 -1
  25. package/dist/@codegen/klend/accounts/WithdrawTicket.d.ts +132 -0
  26. package/dist/@codegen/klend/accounts/WithdrawTicket.d.ts.map +1 -0
  27. package/dist/@codegen/klend/accounts/WithdrawTicket.js +191 -0
  28. package/dist/@codegen/klend/accounts/WithdrawTicket.js.map +1 -0
  29. package/dist/@codegen/klend/accounts/index.d.ts +6 -0
  30. package/dist/@codegen/klend/accounts/index.d.ts.map +1 -1
  31. package/dist/@codegen/klend/accounts/index.js +7 -1
  32. package/dist/@codegen/klend/accounts/index.js.map +1 -1
  33. package/dist/@codegen/klend/errors/custom.d.ts +226 -2
  34. package/dist/@codegen/klend/errors/custom.d.ts.map +1 -1
  35. package/dist/@codegen/klend/errors/custom.js +396 -3
  36. package/dist/@codegen/klend/errors/custom.js.map +1 -1
  37. package/dist/@codegen/klend/instructions/enqueueToWithdraw.d.ts +39 -0
  38. package/dist/@codegen/klend/instructions/enqueueToWithdraw.d.ts.map +1 -0
  39. package/dist/@codegen/klend/instructions/enqueueToWithdraw.js +67 -0
  40. package/dist/@codegen/klend/instructions/enqueueToWithdraw.js.map +1 -0
  41. package/dist/@codegen/klend/instructions/fillBorrowOrder.d.ts +36 -0
  42. package/dist/@codegen/klend/instructions/fillBorrowOrder.d.ts.map +1 -0
  43. package/dist/@codegen/klend/instructions/fillBorrowOrder.js +49 -0
  44. package/dist/@codegen/klend/instructions/fillBorrowOrder.js.map +1 -0
  45. package/dist/@codegen/klend/instructions/idlMissingTypes.d.ts +1 -2
  46. package/dist/@codegen/klend/instructions/idlMissingTypes.d.ts.map +1 -1
  47. package/dist/@codegen/klend/instructions/idlMissingTypes.js +6 -2
  48. package/dist/@codegen/klend/instructions/idlMissingTypes.js.map +1 -1
  49. package/dist/@codegen/klend/instructions/index.d.ts +16 -0
  50. package/dist/@codegen/klend/instructions/index.d.ts.map +1 -1
  51. package/dist/@codegen/klend/instructions/index.js +18 -1
  52. package/dist/@codegen/klend/instructions/index.js.map +1 -1
  53. package/dist/@codegen/klend/instructions/initReserve.d.ts +1 -1
  54. package/dist/@codegen/klend/instructions/initReserve.d.ts.map +1 -1
  55. package/dist/@codegen/klend/instructions/initReserve.js +1 -5
  56. package/dist/@codegen/klend/instructions/initReserve.js.map +1 -1
  57. package/dist/@codegen/klend/instructions/liquidateObligationAndRedeemReserveCollateral.js +1 -1
  58. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.d.ts +47 -0
  59. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.d.ts.map +1 -0
  60. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.js +66 -0
  61. package/dist/@codegen/klend/instructions/recoverInvalidTicketCollateral.js.map +1 -0
  62. package/dist/@codegen/klend/instructions/setBorrowOrder.d.ts +31 -0
  63. package/dist/@codegen/klend/instructions/setBorrowOrder.d.ts.map +1 -0
  64. package/dist/@codegen/klend/instructions/setBorrowOrder.js +64 -0
  65. package/dist/@codegen/klend/instructions/setBorrowOrder.js.map +1 -0
  66. package/dist/@codegen/klend/instructions/unstakeLstCollateralEnd.d.ts +53 -0
  67. package/dist/@codegen/klend/instructions/unstakeLstCollateralEnd.d.ts.map +1 -0
  68. package/dist/@codegen/klend/instructions/unstakeLstCollateralEnd.js +190 -0
  69. package/dist/@codegen/klend/instructions/unstakeLstCollateralEnd.js.map +1 -0
  70. package/dist/@codegen/klend/instructions/unstakeLstCollateralStart.d.ts +70 -0
  71. package/dist/@codegen/klend/instructions/unstakeLstCollateralStart.d.ts.map +1 -0
  72. package/dist/@codegen/klend/instructions/unstakeLstCollateralStart.js +261 -0
  73. package/dist/@codegen/klend/instructions/unstakeLstCollateralStart.js.map +1 -0
  74. package/dist/@codegen/klend/instructions/updateGlobalConfig.d.ts +1 -1
  75. package/dist/@codegen/klend/instructions/updateGlobalConfig.d.ts.map +1 -1
  76. package/dist/@codegen/klend/instructions/updateGlobalConfig.js +1 -0
  77. package/dist/@codegen/klend/instructions/updateGlobalConfig.js.map +1 -1
  78. package/dist/@codegen/klend/instructions/updateReserveConfig.d.ts +1 -1
  79. package/dist/@codegen/klend/instructions/updateReserveConfig.d.ts.map +1 -1
  80. package/dist/@codegen/klend/instructions/updateReserveConfig.js +1 -0
  81. package/dist/@codegen/klend/instructions/updateReserveConfig.js.map +1 -1
  82. package/dist/@codegen/klend/instructions/withdrawObligationCollateral.js +1 -1
  83. package/dist/@codegen/klend/instructions/withdrawObligationCollateralV2.js +1 -1
  84. package/dist/@codegen/klend/instructions/withdrawObligationUsol.d.ts +41 -0
  85. package/dist/@codegen/klend/instructions/withdrawObligationUsol.d.ts.map +1 -0
  86. package/dist/@codegen/klend/instructions/withdrawObligationUsol.js +135 -0
  87. package/dist/@codegen/klend/instructions/withdrawObligationUsol.js.map +1 -0
  88. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.d.ts +51 -0
  89. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.d.ts.map +1 -0
  90. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.js +28 -0
  91. package/dist/@codegen/klend/instructions/withdrawQueuedLiquidity.js.map +1 -0
  92. package/dist/@codegen/klend/types/BorrowOrder.d.ts +192 -0
  93. package/dist/@codegen/klend/types/BorrowOrder.d.ts.map +1 -0
  94. package/dist/@codegen/klend/types/BorrowOrder.js +194 -0
  95. package/dist/@codegen/klend/types/BorrowOrder.js.map +1 -0
  96. package/dist/@codegen/klend/types/BorrowOrderConfigArgs.d.ts +39 -0
  97. package/dist/@codegen/klend/types/BorrowOrderConfigArgs.d.ts.map +1 -0
  98. package/dist/@codegen/klend/types/BorrowOrderConfigArgs.js +100 -0
  99. package/dist/@codegen/klend/types/BorrowOrderConfigArgs.js.map +1 -0
  100. package/dist/@codegen/klend/types/ObligationLiquidity.d.ts +35 -5
  101. package/dist/@codegen/klend/types/ObligationLiquidity.d.ts.map +1 -1
  102. package/dist/@codegen/klend/types/ObligationLiquidity.js +17 -7
  103. package/dist/@codegen/klend/types/ObligationLiquidity.js.map +1 -1
  104. package/dist/@codegen/klend/types/ObligationOrder.d.ts +4 -4
  105. package/dist/@codegen/klend/types/ObligationOrder.js +2 -2
  106. package/dist/@codegen/klend/types/ReserveConfig.d.ts +141 -29
  107. package/dist/@codegen/klend/types/ReserveConfig.d.ts.map +1 -1
  108. package/dist/@codegen/klend/types/ReserveConfig.js +89 -25
  109. package/dist/@codegen/klend/types/ReserveConfig.js.map +1 -1
  110. package/dist/@codegen/klend/types/ReserveFees.d.ts +8 -8
  111. package/dist/@codegen/klend/types/ReserveFees.d.ts.map +1 -1
  112. package/dist/@codegen/klend/types/ReserveFees.js +8 -8
  113. package/dist/@codegen/klend/types/ReserveFees.js.map +1 -1
  114. package/dist/@codegen/klend/types/ReserveLiquidity.d.ts +26 -8
  115. package/dist/@codegen/klend/types/ReserveLiquidity.d.ts.map +1 -1
  116. package/dist/@codegen/klend/types/ReserveLiquidity.js +14 -8
  117. package/dist/@codegen/klend/types/ReserveLiquidity.js.map +1 -1
  118. package/dist/@codegen/klend/types/UpdateConfigMode.d.ts +92 -14
  119. package/dist/@codegen/klend/types/UpdateConfigMode.d.ts.map +1 -1
  120. package/dist/@codegen/klend/types/UpdateConfigMode.js +168 -23
  121. package/dist/@codegen/klend/types/UpdateConfigMode.js.map +1 -1
  122. package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts +130 -0
  123. package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts.map +1 -1
  124. package/dist/@codegen/klend/types/UpdateLendingMarketMode.js +241 -1
  125. package/dist/@codegen/klend/types/UpdateLendingMarketMode.js.map +1 -1
  126. package/dist/@codegen/klend/types/WithdrawQueue.d.ts +64 -0
  127. package/dist/@codegen/klend/types/WithdrawQueue.d.ts.map +1 -0
  128. package/dist/@codegen/klend/types/WithdrawQueue.js +104 -0
  129. package/dist/@codegen/klend/types/WithdrawQueue.js.map +1 -0
  130. package/dist/@codegen/klend/types/index.d.ts +10 -8
  131. package/dist/@codegen/klend/types/index.d.ts.map +1 -1
  132. package/dist/@codegen/klend/types/index.js +7 -3
  133. package/dist/@codegen/klend/types/index.js.map +1 -1
  134. package/dist/@codegen/klend/zero_padding/ObligationZP.d.ts +9 -4
  135. package/dist/@codegen/klend/zero_padding/ObligationZP.d.ts.map +1 -1
  136. package/dist/@codegen/klend/zero_padding/ObligationZP.js +22 -13
  137. package/dist/@codegen/klend/zero_padding/ObligationZP.js.map +1 -1
  138. package/dist/classes/action.d.ts +30 -3
  139. package/dist/classes/action.d.ts.map +1 -1
  140. package/dist/classes/action.js +364 -10
  141. package/dist/classes/action.js.map +1 -1
  142. package/dist/classes/manager.d.ts.map +1 -1
  143. package/dist/classes/manager.js +10 -0
  144. package/dist/classes/manager.js.map +1 -1
  145. package/dist/classes/market.d.ts +6 -2
  146. package/dist/classes/market.d.ts.map +1 -1
  147. package/dist/classes/market.js +26 -6
  148. package/dist/classes/market.js.map +1 -1
  149. package/dist/classes/obligation.js +1 -1
  150. package/dist/classes/obligation.js.map +1 -1
  151. package/dist/classes/reserve.d.ts.map +1 -1
  152. package/dist/classes/reserve.js +13 -7
  153. package/dist/classes/reserve.js.map +1 -1
  154. package/dist/classes/unstakingPool.d.ts +20 -3
  155. package/dist/classes/unstakingPool.d.ts.map +1 -1
  156. package/dist/classes/unstakingPool.js +62 -8
  157. package/dist/classes/unstakingPool.js.map +1 -1
  158. package/dist/idl/klend.json +2125 -232
  159. package/dist/lending_operations/index.d.ts +1 -0
  160. package/dist/lending_operations/index.d.ts.map +1 -1
  161. package/dist/lending_operations/index.js +1 -0
  162. package/dist/lending_operations/index.js.map +1 -1
  163. package/dist/lending_operations/unstake_lst_collateral.d.ts +12 -0
  164. package/dist/lending_operations/unstake_lst_collateral.d.ts.map +1 -0
  165. package/dist/lending_operations/unstake_lst_collateral.js +104 -0
  166. package/dist/lending_operations/unstake_lst_collateral.js.map +1 -0
  167. package/dist/manager/client_kamino_manager.js +11 -8
  168. package/dist/manager/client_kamino_manager.js.map +1 -1
  169. package/dist/utils/managerTypes.d.ts.map +1 -1
  170. package/dist/utils/managerTypes.js +9 -4
  171. package/dist/utils/managerTypes.js.map +1 -1
  172. package/dist/utils/seeds.d.ts +10 -14
  173. package/dist/utils/seeds.d.ts.map +1 -1
  174. package/dist/utils/seeds.js +25 -22
  175. package/dist/utils/seeds.js.map +1 -1
  176. package/package.json +1 -1
  177. package/src/@codegen/klend/accounts/LendingMarket.ts +210 -5
  178. package/src/@codegen/klend/accounts/Obligation.ts +53 -31
  179. package/src/@codegen/klend/accounts/PoolState.ts +192 -0
  180. package/src/@codegen/klend/accounts/Reserve.ts +13 -2
  181. package/src/@codegen/klend/accounts/UnstakeTicket.ts +160 -0
  182. package/src/@codegen/klend/accounts/UserState.ts +0 -75
  183. package/src/@codegen/klend/accounts/WithdrawTicket.ts +256 -0
  184. package/src/@codegen/klend/accounts/index.ts +6 -0
  185. package/src/@codegen/klend/errors/custom.ts +427 -2
  186. package/src/@codegen/klend/instructions/enqueueToWithdraw.ts +89 -0
  187. package/src/@codegen/klend/instructions/fillBorrowOrder.ts +96 -0
  188. package/src/@codegen/klend/instructions/idlMissingTypes.ts +7 -4
  189. package/src/@codegen/klend/instructions/index.ts +34 -0
  190. package/src/@codegen/klend/instructions/initReserve.ts +2 -6
  191. package/src/@codegen/klend/instructions/liquidateObligationAndRedeemReserveCollateral.ts +1 -1
  192. package/src/@codegen/klend/instructions/recoverInvalidTicketCollateral.ts +96 -0
  193. package/src/@codegen/klend/instructions/setBorrowOrder.ts +77 -0
  194. package/src/@codegen/klend/instructions/unstakeLstCollateralEnd.ts +251 -0
  195. package/src/@codegen/klend/instructions/unstakeLstCollateralStart.ts +353 -0
  196. package/src/@codegen/klend/instructions/updateGlobalConfig.ts +2 -1
  197. package/src/@codegen/klend/instructions/updateReserveConfig.ts +2 -1
  198. package/src/@codegen/klend/instructions/withdrawObligationCollateral.ts +1 -1
  199. package/src/@codegen/klend/instructions/withdrawObligationCollateralV2.ts +1 -1
  200. package/src/@codegen/klend/instructions/withdrawObligationUsol.ts +168 -0
  201. package/src/@codegen/klend/instructions/withdrawQueuedLiquidity.ts +92 -0
  202. package/src/@codegen/klend/types/BorrowOrder.ts +267 -0
  203. package/src/@codegen/klend/types/BorrowOrderConfigArgs.ts +87 -0
  204. package/src/@codegen/klend/types/ObligationLiquidity.ts +39 -9
  205. package/src/@codegen/klend/types/ObligationOrder.ts +4 -4
  206. package/src/@codegen/klend/types/ReserveConfig.ts +171 -39
  207. package/src/@codegen/klend/types/ReserveFees.ts +12 -12
  208. package/src/@codegen/klend/types/ReserveLiquidity.ts +30 -12
  209. package/src/@codegen/klend/types/UpdateConfigMode.ts +206 -26
  210. package/src/@codegen/klend/types/UpdateLendingMarketMode.ts +300 -0
  211. package/src/@codegen/klend/types/WithdrawQueue.ts +117 -0
  212. package/src/@codegen/klend/types/index.ts +45 -16
  213. package/src/@codegen/klend/zero_padding/ObligationZP.ts +22 -13
  214. package/src/classes/action.ts +577 -8
  215. package/src/classes/manager.ts +11 -0
  216. package/src/classes/market.ts +36 -5
  217. package/src/classes/obligation.ts +1 -1
  218. package/src/classes/reserve.ts +13 -8
  219. package/src/classes/unstakingPool.ts +83 -6
  220. package/src/idl/klend.json +2126 -233
  221. package/src/lending_operations/index.ts +1 -0
  222. package/src/lending_operations/unstake_lst_collateral.ts +174 -0
  223. package/src/manager/client_kamino_manager.ts +11 -8
  224. package/src/utils/managerTypes.ts +9 -4
  225. package/src/utils/seeds.ts +28 -26
  226. package/dist/@codegen/klend/types/AssetTier.d.ts +0 -45
  227. package/dist/@codegen/klend/types/AssetTier.d.ts.map +0 -1
  228. package/dist/@codegen/klend/types/AssetTier.js +0 -132
  229. package/dist/@codegen/klend/types/AssetTier.js.map +0 -1
  230. package/src/@codegen/klend/types/AssetTier.ts +0 -119
@@ -19,42 +19,17 @@ export interface UserStateFields {
19
19
  userId: BN
20
20
  farmState: Address
21
21
  owner: Address
22
- /** Indicate if this user state is part of a delegated farm */
23
22
  isFarmDelegated: number
24
23
  padding0: Array<number>
25
- /**
26
- * Rewards tally used for computation of gained rewards
27
- * (scaled from `Decimal` representation).
28
- */
29
24
  rewardsTallyScaled: Array<BN>
30
- /** Number of reward tokens ready for claim */
31
25
  rewardsIssuedUnclaimed: Array<BN>
32
26
  lastClaimTs: Array<BN>
33
- /**
34
- * User stake deposited and usable, generating rewards and fees.
35
- * (scaled from `Decimal` representation).
36
- */
37
27
  activeStakeScaled: BN
38
- /**
39
- * User stake deposited but not usable and not generating rewards yet.
40
- * (scaled from `Decimal` representation).
41
- */
42
28
  pendingDepositStakeScaled: BN
43
- /**
44
- * After this timestamp, pending user stake can be moved to user stake
45
- * Initialized to now() + delayed user stake period
46
- */
47
29
  pendingDepositStakeTs: BN
48
- /**
49
- * User deposits unstaked, pending for withdrawal, not usable and not generating rewards.
50
- * (scaled from `Decimal` representation).
51
- */
52
30
  pendingWithdrawalUnstakeScaled: BN
53
- /** After this timestamp, user can withdraw their deposit. */
54
31
  pendingWithdrawalUnstakeTs: BN
55
- /** User bump used for account address validation */
56
32
  bump: BN
57
- /** Delegatee used for initialisation - useful to check against */
58
33
  delegatee: Address
59
34
  lastStakeTs: BN
60
35
  padding1: Array<BN>
@@ -64,42 +39,17 @@ export interface UserStateJSON {
64
39
  userId: string
65
40
  farmState: string
66
41
  owner: string
67
- /** Indicate if this user state is part of a delegated farm */
68
42
  isFarmDelegated: number
69
43
  padding0: Array<number>
70
- /**
71
- * Rewards tally used for computation of gained rewards
72
- * (scaled from `Decimal` representation).
73
- */
74
44
  rewardsTallyScaled: Array<string>
75
- /** Number of reward tokens ready for claim */
76
45
  rewardsIssuedUnclaimed: Array<string>
77
46
  lastClaimTs: Array<string>
78
- /**
79
- * User stake deposited and usable, generating rewards and fees.
80
- * (scaled from `Decimal` representation).
81
- */
82
47
  activeStakeScaled: string
83
- /**
84
- * User stake deposited but not usable and not generating rewards yet.
85
- * (scaled from `Decimal` representation).
86
- */
87
48
  pendingDepositStakeScaled: string
88
- /**
89
- * After this timestamp, pending user stake can be moved to user stake
90
- * Initialized to now() + delayed user stake period
91
- */
92
49
  pendingDepositStakeTs: string
93
- /**
94
- * User deposits unstaked, pending for withdrawal, not usable and not generating rewards.
95
- * (scaled from `Decimal` representation).
96
- */
97
50
  pendingWithdrawalUnstakeScaled: string
98
- /** After this timestamp, user can withdraw their deposit. */
99
51
  pendingWithdrawalUnstakeTs: string
100
- /** User bump used for account address validation */
101
52
  bump: string
102
- /** Delegatee used for initialisation - useful to check against */
103
53
  delegatee: string
104
54
  lastStakeTs: string
105
55
  padding1: Array<string>
@@ -109,42 +59,17 @@ export class UserState {
109
59
  readonly userId: BN
110
60
  readonly farmState: Address
111
61
  readonly owner: Address
112
- /** Indicate if this user state is part of a delegated farm */
113
62
  readonly isFarmDelegated: number
114
63
  readonly padding0: Array<number>
115
- /**
116
- * Rewards tally used for computation of gained rewards
117
- * (scaled from `Decimal` representation).
118
- */
119
64
  readonly rewardsTallyScaled: Array<BN>
120
- /** Number of reward tokens ready for claim */
121
65
  readonly rewardsIssuedUnclaimed: Array<BN>
122
66
  readonly lastClaimTs: Array<BN>
123
- /**
124
- * User stake deposited and usable, generating rewards and fees.
125
- * (scaled from `Decimal` representation).
126
- */
127
67
  readonly activeStakeScaled: BN
128
- /**
129
- * User stake deposited but not usable and not generating rewards yet.
130
- * (scaled from `Decimal` representation).
131
- */
132
68
  readonly pendingDepositStakeScaled: BN
133
- /**
134
- * After this timestamp, pending user stake can be moved to user stake
135
- * Initialized to now() + delayed user stake period
136
- */
137
69
  readonly pendingDepositStakeTs: BN
138
- /**
139
- * User deposits unstaked, pending for withdrawal, not usable and not generating rewards.
140
- * (scaled from `Decimal` representation).
141
- */
142
70
  readonly pendingWithdrawalUnstakeScaled: BN
143
- /** After this timestamp, user can withdraw their deposit. */
144
71
  readonly pendingWithdrawalUnstakeTs: BN
145
- /** User bump used for account address validation */
146
72
  readonly bump: BN
147
- /** Delegatee used for initialisation - useful to check against */
148
73
  readonly delegatee: Address
149
74
  readonly lastStakeTs: BN
150
75
  readonly padding1: Array<BN>
@@ -0,0 +1,256 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import {
3
+ address,
4
+ Address,
5
+ fetchEncodedAccount,
6
+ fetchEncodedAccounts,
7
+ GetAccountInfoApi,
8
+ GetMultipleAccountsApi,
9
+ Rpc,
10
+ } from "@solana/kit"
11
+ /* eslint-enable @typescript-eslint/no-unused-vars */
12
+ import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars
13
+ import * as borsh from "@coral-xyz/borsh" // eslint-disable-line @typescript-eslint/no-unused-vars
14
+ import { borshAddress } from "../utils" // eslint-disable-line @typescript-eslint/no-unused-vars
15
+ import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars
16
+ import { PROGRAM_ID } from "../programId"
17
+
18
+ export interface WithdrawTicketFields {
19
+ /** This ticket's place in the queue; the same as used for PDA derivation. */
20
+ sequenceNumber: BN
21
+ /** The funds' owner (the user who called the `enqueue_to_withdraw` handler). */
22
+ owner: Address
23
+ /** The reserve to withdraw from. */
24
+ reserve: Address
25
+ /**
26
+ * The token account to which the finally-available liquidity should be transferred (by the
27
+ * `withdraw_queued_liquidity` handler).
28
+ */
29
+ userDestinationLiquidityTa: Address
30
+ /** The amount of collateral still waiting to be withdrawn using this ticket. */
31
+ queuedCollateralAmount: BN
32
+ /**
33
+ * The timestamp at which the queue was entered.
34
+ *
35
+ * This is currently only a piece of metadata, not used by the logic.
36
+ */
37
+ createdAtTimestamp: BN
38
+ /**
39
+ * Whether the ticket has been found to be invalid (e.g. the [Self::user_destination_liquidity]
40
+ * has been repurposed) by the `withdraw_queued_liquidity` handler.
41
+ * To be specific: valid = `0`, invalid = `1`.
42
+ *
43
+ * An invalid ticket cannot be made valid again, and can only be passed to the
44
+ * `recover_invalid_ticket_collateral` handler.
45
+ */
46
+ invalid: number
47
+ /** Inner padding, for alignment. */
48
+ alignmentPadding: Array<number>
49
+ /** Trailing padding, for future developments. */
50
+ endPadding: Array<BN>
51
+ }
52
+
53
+ export interface WithdrawTicketJSON {
54
+ /** This ticket's place in the queue; the same as used for PDA derivation. */
55
+ sequenceNumber: string
56
+ /** The funds' owner (the user who called the `enqueue_to_withdraw` handler). */
57
+ owner: string
58
+ /** The reserve to withdraw from. */
59
+ reserve: string
60
+ /**
61
+ * The token account to which the finally-available liquidity should be transferred (by the
62
+ * `withdraw_queued_liquidity` handler).
63
+ */
64
+ userDestinationLiquidityTa: string
65
+ /** The amount of collateral still waiting to be withdrawn using this ticket. */
66
+ queuedCollateralAmount: string
67
+ /**
68
+ * The timestamp at which the queue was entered.
69
+ *
70
+ * This is currently only a piece of metadata, not used by the logic.
71
+ */
72
+ createdAtTimestamp: string
73
+ /**
74
+ * Whether the ticket has been found to be invalid (e.g. the [Self::user_destination_liquidity]
75
+ * has been repurposed) by the `withdraw_queued_liquidity` handler.
76
+ * To be specific: valid = `0`, invalid = `1`.
77
+ *
78
+ * An invalid ticket cannot be made valid again, and can only be passed to the
79
+ * `recover_invalid_ticket_collateral` handler.
80
+ */
81
+ invalid: number
82
+ /** Inner padding, for alignment. */
83
+ alignmentPadding: Array<number>
84
+ /** Trailing padding, for future developments. */
85
+ endPadding: Array<string>
86
+ }
87
+
88
+ /**
89
+ * A finite-lifecycle account representing a specific depositor's place in the withdraw queue of
90
+ * a specific reserve.
91
+ *
92
+ * The lifecycle:
93
+ * 1. The depositor holding ctokens wants to withdraw funds from the reserve, and finds out that
94
+ * the required amount is not available (due to high utilization).
95
+ * 2. The depositor calls the `enqueue_to_withdraw` handler.
96
+ * 3. The handler transfers the depositor's ctokens to the reserve's internal "pending" vault.
97
+ * 4. The handler initializes a new [WithdrawTicket] account, with the next available sequence
98
+ * number.
99
+ * 5. The depositor waits until his ticket is the next expected one for actual withdraw, and until
100
+ * the reserve has enough liquidity.
101
+ * 6. Anyone (the depositor or a bot) calls the permissionless `withdraw_queued_liquidity`
102
+ * handler. If the ticket became invalid (e.g. destination account no longer exists), then the
103
+ * depositor can call the `recover_invalid_ticket_collateral` handler instead.
104
+ * 7. The handler transfers the liquidity amount according to the current exchange rate.
105
+ * 8. The handler closes the ticket account.
106
+ */
107
+ export class WithdrawTicket {
108
+ /** This ticket's place in the queue; the same as used for PDA derivation. */
109
+ readonly sequenceNumber: BN
110
+ /** The funds' owner (the user who called the `enqueue_to_withdraw` handler). */
111
+ readonly owner: Address
112
+ /** The reserve to withdraw from. */
113
+ readonly reserve: Address
114
+ /**
115
+ * The token account to which the finally-available liquidity should be transferred (by the
116
+ * `withdraw_queued_liquidity` handler).
117
+ */
118
+ readonly userDestinationLiquidityTa: Address
119
+ /** The amount of collateral still waiting to be withdrawn using this ticket. */
120
+ readonly queuedCollateralAmount: BN
121
+ /**
122
+ * The timestamp at which the queue was entered.
123
+ *
124
+ * This is currently only a piece of metadata, not used by the logic.
125
+ */
126
+ readonly createdAtTimestamp: BN
127
+ /**
128
+ * Whether the ticket has been found to be invalid (e.g. the [Self::user_destination_liquidity]
129
+ * has been repurposed) by the `withdraw_queued_liquidity` handler.
130
+ * To be specific: valid = `0`, invalid = `1`.
131
+ *
132
+ * An invalid ticket cannot be made valid again, and can only be passed to the
133
+ * `recover_invalid_ticket_collateral` handler.
134
+ */
135
+ readonly invalid: number
136
+ /** Inner padding, for alignment. */
137
+ readonly alignmentPadding: Array<number>
138
+ /** Trailing padding, for future developments. */
139
+ readonly endPadding: Array<BN>
140
+
141
+ static readonly discriminator = Buffer.from([
142
+ 237, 23, 164, 58, 53, 248, 240, 94,
143
+ ])
144
+
145
+ static readonly layout = borsh.struct<WithdrawTicket>([
146
+ borsh.u64("sequenceNumber"),
147
+ borshAddress("owner"),
148
+ borshAddress("reserve"),
149
+ borshAddress("userDestinationLiquidityTa"),
150
+ borsh.u64("queuedCollateralAmount"),
151
+ borsh.u64("createdAtTimestamp"),
152
+ borsh.u8("invalid"),
153
+ borsh.array(borsh.u8(), 7, "alignmentPadding"),
154
+ borsh.array(borsh.u64(), 48, "endPadding"),
155
+ ])
156
+
157
+ constructor(fields: WithdrawTicketFields) {
158
+ this.sequenceNumber = fields.sequenceNumber
159
+ this.owner = fields.owner
160
+ this.reserve = fields.reserve
161
+ this.userDestinationLiquidityTa = fields.userDestinationLiquidityTa
162
+ this.queuedCollateralAmount = fields.queuedCollateralAmount
163
+ this.createdAtTimestamp = fields.createdAtTimestamp
164
+ this.invalid = fields.invalid
165
+ this.alignmentPadding = fields.alignmentPadding
166
+ this.endPadding = fields.endPadding
167
+ }
168
+
169
+ static async fetch(
170
+ rpc: Rpc<GetAccountInfoApi>,
171
+ address: Address,
172
+ programId: Address = PROGRAM_ID
173
+ ): Promise<WithdrawTicket | null> {
174
+ const info = await fetchEncodedAccount(rpc, address)
175
+
176
+ if (!info.exists) {
177
+ return null
178
+ }
179
+ if (info.programAddress !== programId) {
180
+ throw new Error(
181
+ `WithdrawTicketFields account ${address} belongs to wrong program ${info.programAddress}, expected ${programId}`
182
+ )
183
+ }
184
+
185
+ return this.decode(Buffer.from(info.data))
186
+ }
187
+
188
+ static async fetchMultiple(
189
+ rpc: Rpc<GetMultipleAccountsApi>,
190
+ addresses: Address[],
191
+ programId: Address = PROGRAM_ID
192
+ ): Promise<Array<WithdrawTicket | null>> {
193
+ const infos = await fetchEncodedAccounts(rpc, addresses)
194
+
195
+ return infos.map((info) => {
196
+ if (!info.exists) {
197
+ return null
198
+ }
199
+ if (info.programAddress !== programId) {
200
+ throw new Error(
201
+ `WithdrawTicketFields account ${info.address} belongs to wrong program ${info.programAddress}, expected ${programId}`
202
+ )
203
+ }
204
+
205
+ return this.decode(Buffer.from(info.data))
206
+ })
207
+ }
208
+
209
+ static decode(data: Buffer): WithdrawTicket {
210
+ if (!data.slice(0, 8).equals(WithdrawTicket.discriminator)) {
211
+ throw new Error("invalid account discriminator")
212
+ }
213
+
214
+ const dec = WithdrawTicket.layout.decode(data.slice(8))
215
+
216
+ return new WithdrawTicket({
217
+ sequenceNumber: dec.sequenceNumber,
218
+ owner: dec.owner,
219
+ reserve: dec.reserve,
220
+ userDestinationLiquidityTa: dec.userDestinationLiquidityTa,
221
+ queuedCollateralAmount: dec.queuedCollateralAmount,
222
+ createdAtTimestamp: dec.createdAtTimestamp,
223
+ invalid: dec.invalid,
224
+ alignmentPadding: dec.alignmentPadding,
225
+ endPadding: dec.endPadding,
226
+ })
227
+ }
228
+
229
+ toJSON(): WithdrawTicketJSON {
230
+ return {
231
+ sequenceNumber: this.sequenceNumber.toString(),
232
+ owner: this.owner,
233
+ reserve: this.reserve,
234
+ userDestinationLiquidityTa: this.userDestinationLiquidityTa,
235
+ queuedCollateralAmount: this.queuedCollateralAmount.toString(),
236
+ createdAtTimestamp: this.createdAtTimestamp.toString(),
237
+ invalid: this.invalid,
238
+ alignmentPadding: this.alignmentPadding,
239
+ endPadding: this.endPadding.map((item) => item.toString()),
240
+ }
241
+ }
242
+
243
+ static fromJSON(obj: WithdrawTicketJSON): WithdrawTicket {
244
+ return new WithdrawTicket({
245
+ sequenceNumber: new BN(obj.sequenceNumber),
246
+ owner: address(obj.owner),
247
+ reserve: address(obj.reserve),
248
+ userDestinationLiquidityTa: address(obj.userDestinationLiquidityTa),
249
+ queuedCollateralAmount: new BN(obj.queuedCollateralAmount),
250
+ createdAtTimestamp: new BN(obj.createdAtTimestamp),
251
+ invalid: obj.invalid,
252
+ alignmentPadding: obj.alignmentPadding,
253
+ endPadding: obj.endPadding.map((item) => new BN(item)),
254
+ })
255
+ }
256
+ }
@@ -19,3 +19,9 @@ export { UserMetadata } from "./UserMetadata"
19
19
  export type { UserMetadataFields, UserMetadataJSON } from "./UserMetadata"
20
20
  export { Reserve } from "./Reserve"
21
21
  export type { ReserveFields, ReserveJSON } from "./Reserve"
22
+ export { WithdrawTicket } from "./WithdrawTicket"
23
+ export type { WithdrawTicketFields, WithdrawTicketJSON } from "./WithdrawTicket"
24
+ export { PoolState } from "./PoolState"
25
+ export type { PoolStateFields, PoolStateJSON } from "./PoolState"
26
+ export { UnstakeTicket } from "./UnstakeTicket"
27
+ export type { UnstakeTicketFields, UnstakeTicketJSON } from "./UnstakeTicket"