@epicentral/sos-sdk 0.1.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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +239 -0
  3. package/accounts/fetchers.ts +140 -0
  4. package/accounts/list.ts +152 -0
  5. package/accounts/pdas.ts +308 -0
  6. package/client/lookup-table.ts +32 -0
  7. package/client/program.ts +13 -0
  8. package/client/types.ts +8 -0
  9. package/generated/accounts/collateralPool.ts +217 -0
  10. package/generated/accounts/config.ts +156 -0
  11. package/generated/accounts/dualSourceContract.ts +235 -0
  12. package/generated/accounts/escrowState.ts +183 -0
  13. package/generated/accounts/index.ts +24 -0
  14. package/generated/accounts/lenderPosition.ts +211 -0
  15. package/generated/accounts/liquidityRouter.ts +223 -0
  16. package/generated/accounts/makerCollateralShare.ts +229 -0
  17. package/generated/accounts/makerPoolShare.ts +203 -0
  18. package/generated/accounts/marketDataAccount.ts +176 -0
  19. package/generated/accounts/optionAccount.ts +247 -0
  20. package/generated/accounts/optionPool.ts +253 -0
  21. package/generated/accounts/poolLoan.ts +220 -0
  22. package/generated/accounts/positionAccount.ts +187 -0
  23. package/generated/accounts/priceUpdateV2.ts +163 -0
  24. package/generated/accounts/vault.ts +304 -0
  25. package/generated/accounts/writerPosition.ts +297 -0
  26. package/generated/errors/index.ts +9 -0
  27. package/generated/errors/optionProgram.ts +392 -0
  28. package/generated/index.ts +13 -0
  29. package/generated/instructions/acceptAdmin.ts +230 -0
  30. package/generated/instructions/autoExerciseAllExpired.ts +523 -0
  31. package/generated/instructions/autoExerciseExpired.ts +623 -0
  32. package/generated/instructions/borrowFromPool.ts +554 -0
  33. package/generated/instructions/buyFromPool.ts +684 -0
  34. package/generated/instructions/claimPremium.ts +377 -0
  35. package/generated/instructions/closeLongToPool.ts +716 -0
  36. package/generated/instructions/closeOption.ts +235 -0
  37. package/generated/instructions/createEscrowV2.ts +518 -0
  38. package/generated/instructions/createLiquidityRouter.ts +361 -0
  39. package/generated/instructions/depositCollateral.ts +624 -0
  40. package/generated/instructions/depositToPool.ts +497 -0
  41. package/generated/instructions/depositToPosition.ts +429 -0
  42. package/generated/instructions/index.ts +45 -0
  43. package/generated/instructions/initCollateralPool.ts +513 -0
  44. package/generated/instructions/initConfig.ts +279 -0
  45. package/generated/instructions/initOptionPool.ts +587 -0
  46. package/generated/instructions/initializeMarketData.ts +359 -0
  47. package/generated/instructions/liquidateWriterPosition.ts +592 -0
  48. package/generated/instructions/omlpCreateVault.ts +547 -0
  49. package/generated/instructions/omlpTakeOfferWithFailover.ts +606 -0
  50. package/generated/instructions/omlpUpdateMaxLeverage.ts +304 -0
  51. package/generated/instructions/omlpUpdateProtocolFee.ts +304 -0
  52. package/generated/instructions/omlpUpdateSupplyLimit.ts +304 -0
  53. package/generated/instructions/optionExercise.ts +540 -0
  54. package/generated/instructions/optionMint.ts +1349 -0
  55. package/generated/instructions/optionValidate.ts +255 -0
  56. package/generated/instructions/repayPoolLoan.ts +499 -0
  57. package/generated/instructions/repayPoolLoanFromCollateral.ts +514 -0
  58. package/generated/instructions/settleMakerCollateral.ts +472 -0
  59. package/generated/instructions/syncWriterPosition.ts +206 -0
  60. package/generated/instructions/transferAdmin.ts +245 -0
  61. package/generated/instructions/unwindWriterUnsold.ts +668 -0
  62. package/generated/instructions/updateImpliedVolatility.ts +226 -0
  63. package/generated/instructions/updateMarketData.ts +315 -0
  64. package/generated/instructions/withdrawFromPool.ts +429 -0
  65. package/generated/instructions/withdrawFromPosition.ts +405 -0
  66. package/generated/instructions/writeToPool.ts +594 -0
  67. package/generated/programs/index.ts +9 -0
  68. package/generated/programs/optionProgram.ts +832 -0
  69. package/generated/shared/index.ts +164 -0
  70. package/generated/types/borrowedFromSAP1.ts +75 -0
  71. package/generated/types/borrowedFromSAP2.ts +83 -0
  72. package/generated/types/failoverTriggered.ts +85 -0
  73. package/generated/types/impliedVolatilityUpdated.ts +73 -0
  74. package/generated/types/index.ts +32 -0
  75. package/generated/types/liquidationExecuted.ts +73 -0
  76. package/generated/types/liquidityMetrics.ts +69 -0
  77. package/generated/types/liquidityRouterCreated.ts +79 -0
  78. package/generated/types/marketDataInitialized.ts +61 -0
  79. package/generated/types/marketDataUpdated.ts +69 -0
  80. package/generated/types/optionClosed.ts +56 -0
  81. package/generated/types/optionExercised.ts +62 -0
  82. package/generated/types/optionExpired.ts +49 -0
  83. package/generated/types/optionMinted.ts +78 -0
  84. package/generated/types/optionType.ts +38 -0
  85. package/generated/types/optionValidated.ts +82 -0
  86. package/generated/types/poolLoanCreated.ts +74 -0
  87. package/generated/types/poolLoanRepaid.ts +74 -0
  88. package/generated/types/positionDeposited.ts +73 -0
  89. package/generated/types/positionWithdrawn.ts +81 -0
  90. package/generated/types/priceFeedMessage.ts +117 -0
  91. package/generated/types/protocolFeeUpdated.ts +69 -0
  92. package/generated/types/sap2Provider.ts +38 -0
  93. package/generated/types/vaultCreated.ts +60 -0
  94. package/generated/types/verificationLevel.ts +95 -0
  95. package/index.ts +25 -0
  96. package/long/builders.ts +126 -0
  97. package/long/exercise.ts +49 -0
  98. package/long/quotes.ts +48 -0
  99. package/omlp/builders.ts +74 -0
  100. package/omlp/service.ts +94 -0
  101. package/package.json +22 -0
  102. package/shared/amounts.ts +32 -0
  103. package/shared/errors.ts +12 -0
  104. package/shared/remaining-accounts.ts +41 -0
  105. package/shared/transactions.ts +49 -0
  106. package/short/builders.ts +268 -0
  107. package/short/claim-premium.ts +37 -0
  108. package/short/close-option.ts +34 -0
  109. package/short/pool.ts +224 -0
  110. package/tsconfig.json +12 -0
@@ -0,0 +1,308 @@
1
+ import { address, getAddressEncoder, getProgramDerivedAddress, type Address } from "@solana/kit";
2
+ import { OptionType } from "../generated/types";
3
+ import { PROGRAM_ID, toAddress } from "../client/program";
4
+ import type { AddressLike } from "../client/types";
5
+
6
+ const METADATA_PROGRAM_ADDRESS = address("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
7
+ const ASSOCIATED_TOKEN_PROGRAM_ADDRESS = address("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
8
+ const TOKEN_PROGRAM_ADDRESS = address("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
9
+
10
+ function f64ToLeBytes(value: number): Uint8Array {
11
+ const bytes = new Uint8Array(8);
12
+ const view = new DataView(bytes.buffer);
13
+ view.setFloat64(0, value, true);
14
+ return bytes;
15
+ }
16
+
17
+ function i64ToLeBytes(value: bigint | number): Uint8Array {
18
+ const bytes = new Uint8Array(8);
19
+ const view = new DataView(bytes.buffer);
20
+ view.setBigInt64(0, BigInt(value), true);
21
+ return bytes;
22
+ }
23
+
24
+ function u64ToLeBytes(value: bigint | number): Uint8Array {
25
+ const bytes = new Uint8Array(8);
26
+ const view = new DataView(bytes.buffer);
27
+ view.setBigUint64(0, BigInt(value), true);
28
+ return bytes;
29
+ }
30
+
31
+ function optionTypeToU8(optionType: OptionType): number {
32
+ return optionType === OptionType.Call ? 0 : 1;
33
+ }
34
+
35
+ export async function deriveOptionAccountPda(params: {
36
+ underlyingAsset: AddressLike;
37
+ optionType: OptionType;
38
+ strikePrice: number;
39
+ expirationDate: bigint | number;
40
+ programId?: AddressLike;
41
+ }): Promise<readonly [Address, number]> {
42
+ const addressEncoder = getAddressEncoder();
43
+ const programAddress = params.programId ? toAddress(params.programId) : PROGRAM_ID;
44
+ return getProgramDerivedAddress({
45
+ programAddress,
46
+ seeds: [
47
+ new TextEncoder().encode("option"),
48
+ addressEncoder.encode(toAddress(params.underlyingAsset)),
49
+ Uint8Array.of(optionTypeToU8(params.optionType)),
50
+ f64ToLeBytes(params.strikePrice),
51
+ i64ToLeBytes(params.expirationDate),
52
+ ],
53
+ });
54
+ }
55
+
56
+ export async function deriveLongMintPda(
57
+ optionAccount: AddressLike,
58
+ programId: AddressLike = PROGRAM_ID
59
+ ): Promise<readonly [Address, number]> {
60
+ const addressEncoder = getAddressEncoder();
61
+ return getProgramDerivedAddress({
62
+ programAddress: toAddress(programId),
63
+ seeds: [
64
+ new TextEncoder().encode("long_mint"),
65
+ addressEncoder.encode(toAddress(optionAccount)),
66
+ ],
67
+ });
68
+ }
69
+
70
+ export async function deriveShortMintPda(
71
+ optionAccount: AddressLike,
72
+ programId: AddressLike = PROGRAM_ID
73
+ ): Promise<readonly [Address, number]> {
74
+ const addressEncoder = getAddressEncoder();
75
+ return getProgramDerivedAddress({
76
+ programAddress: toAddress(programId),
77
+ seeds: [
78
+ new TextEncoder().encode("short_mint"),
79
+ addressEncoder.encode(toAddress(optionAccount)),
80
+ ],
81
+ });
82
+ }
83
+
84
+ export async function deriveMintAuthorityPda(
85
+ programId: AddressLike = PROGRAM_ID
86
+ ): Promise<readonly [Address, number]> {
87
+ return getProgramDerivedAddress({
88
+ programAddress: toAddress(programId),
89
+ seeds: [new TextEncoder().encode("mint_authority")],
90
+ });
91
+ }
92
+
93
+ export async function deriveConfigPda(
94
+ programId: AddressLike = PROGRAM_ID
95
+ ): Promise<readonly [Address, number]> {
96
+ return getProgramDerivedAddress({
97
+ programAddress: toAddress(programId),
98
+ seeds: [new TextEncoder().encode("config")],
99
+ });
100
+ }
101
+
102
+ export async function deriveOptionPoolPda(
103
+ optionAccount: AddressLike,
104
+ programId: AddressLike = PROGRAM_ID
105
+ ): Promise<readonly [Address, number]> {
106
+ const addressEncoder = getAddressEncoder();
107
+ return getProgramDerivedAddress({
108
+ programAddress: toAddress(programId),
109
+ seeds: [
110
+ new TextEncoder().encode("option_pool"),
111
+ addressEncoder.encode(toAddress(optionAccount)),
112
+ ],
113
+ });
114
+ }
115
+
116
+ export async function deriveCollateralPoolPda(
117
+ optionAccount: AddressLike,
118
+ programId: AddressLike = PROGRAM_ID
119
+ ): Promise<readonly [Address, number]> {
120
+ const addressEncoder = getAddressEncoder();
121
+ return getProgramDerivedAddress({
122
+ programAddress: toAddress(programId),
123
+ seeds: [
124
+ new TextEncoder().encode("collateral_pool"),
125
+ addressEncoder.encode(toAddress(optionAccount)),
126
+ ],
127
+ });
128
+ }
129
+
130
+ export async function deriveWriterPositionPda(
131
+ optionPool: AddressLike,
132
+ writer: AddressLike,
133
+ programId: AddressLike = PROGRAM_ID
134
+ ): Promise<readonly [Address, number]> {
135
+ const addressEncoder = getAddressEncoder();
136
+ return getProgramDerivedAddress({
137
+ programAddress: toAddress(programId),
138
+ seeds: [
139
+ new TextEncoder().encode("writer_position"),
140
+ addressEncoder.encode(toAddress(optionPool)),
141
+ addressEncoder.encode(toAddress(writer)),
142
+ ],
143
+ });
144
+ }
145
+
146
+ export async function deriveMakerCollateralSharePda(
147
+ collateralPool: AddressLike,
148
+ maker: AddressLike,
149
+ programId: AddressLike = PROGRAM_ID
150
+ ): Promise<readonly [Address, number]> {
151
+ const addressEncoder = getAddressEncoder();
152
+ return getProgramDerivedAddress({
153
+ programAddress: toAddress(programId),
154
+ seeds: [
155
+ new TextEncoder().encode("maker_collateral_share"),
156
+ addressEncoder.encode(toAddress(collateralPool)),
157
+ addressEncoder.encode(toAddress(maker)),
158
+ ],
159
+ });
160
+ }
161
+
162
+ export async function deriveMakerPoolSharePda(
163
+ optionPool: AddressLike,
164
+ maker: AddressLike,
165
+ programId: AddressLike = PROGRAM_ID
166
+ ): Promise<readonly [Address, number]> {
167
+ const addressEncoder = getAddressEncoder();
168
+ return getProgramDerivedAddress({
169
+ programAddress: toAddress(programId),
170
+ seeds: [
171
+ new TextEncoder().encode("maker_pool_share"),
172
+ addressEncoder.encode(toAddress(optionPool)),
173
+ addressEncoder.encode(toAddress(maker)),
174
+ ],
175
+ });
176
+ }
177
+
178
+ export async function deriveBuyerPositionPda(
179
+ buyer: AddressLike,
180
+ optionAccount: AddressLike,
181
+ programId: AddressLike = PROGRAM_ID
182
+ ): Promise<readonly [Address, number]> {
183
+ const addressEncoder = getAddressEncoder();
184
+ return getProgramDerivedAddress({
185
+ programAddress: toAddress(programId),
186
+ seeds: [
187
+ new TextEncoder().encode("position"),
188
+ addressEncoder.encode(toAddress(buyer)),
189
+ addressEncoder.encode(toAddress(optionAccount)),
190
+ ],
191
+ });
192
+ }
193
+
194
+ export async function deriveMetadataPda(mint: AddressLike): Promise<readonly [Address, number]> {
195
+ const addressEncoder = getAddressEncoder();
196
+ return getProgramDerivedAddress({
197
+ programAddress: METADATA_PROGRAM_ADDRESS,
198
+ seeds: [
199
+ new TextEncoder().encode("metadata"),
200
+ addressEncoder.encode(METADATA_PROGRAM_ADDRESS),
201
+ addressEncoder.encode(toAddress(mint)),
202
+ ],
203
+ });
204
+ }
205
+
206
+ export async function deriveMarketDataPda(
207
+ underlyingAsset: AddressLike,
208
+ programId: AddressLike = PROGRAM_ID
209
+ ): Promise<readonly [Address, number]> {
210
+ const addressEncoder = getAddressEncoder();
211
+ return getProgramDerivedAddress({
212
+ programAddress: toAddress(programId),
213
+ seeds: [
214
+ new TextEncoder().encode("market_data"),
215
+ addressEncoder.encode(toAddress(underlyingAsset)),
216
+ ],
217
+ });
218
+ }
219
+
220
+ export async function deriveVaultPda(
221
+ mint: AddressLike,
222
+ programId: AddressLike = PROGRAM_ID
223
+ ): Promise<readonly [Address, number]> {
224
+ const addressEncoder = getAddressEncoder();
225
+ return getProgramDerivedAddress({
226
+ programAddress: toAddress(programId),
227
+ seeds: [new TextEncoder().encode("vault"), addressEncoder.encode(toAddress(mint))],
228
+ });
229
+ }
230
+
231
+ export async function deriveLenderPositionPda(
232
+ vault: AddressLike,
233
+ lender: AddressLike,
234
+ programId: AddressLike = PROGRAM_ID
235
+ ): Promise<readonly [Address, number]> {
236
+ const addressEncoder = getAddressEncoder();
237
+ return getProgramDerivedAddress({
238
+ programAddress: toAddress(programId),
239
+ seeds: [
240
+ new TextEncoder().encode("lender_position"),
241
+ addressEncoder.encode(toAddress(vault)),
242
+ addressEncoder.encode(toAddress(lender)),
243
+ ],
244
+ });
245
+ }
246
+
247
+ export async function deriveEscrowStatePda(
248
+ maker: AddressLike,
249
+ collateralMint: AddressLike,
250
+ programId: AddressLike = PROGRAM_ID
251
+ ): Promise<readonly [Address, number]> {
252
+ const addressEncoder = getAddressEncoder();
253
+ return getProgramDerivedAddress({
254
+ programAddress: toAddress(programId),
255
+ seeds: [
256
+ new TextEncoder().encode("escrow_v2"),
257
+ addressEncoder.encode(toAddress(maker)),
258
+ addressEncoder.encode(toAddress(collateralMint)),
259
+ ],
260
+ });
261
+ }
262
+
263
+ export async function deriveEscrowAuthorityPda(
264
+ escrowState: AddressLike,
265
+ programId: AddressLike = PROGRAM_ID
266
+ ): Promise<readonly [Address, number]> {
267
+ const addressEncoder = getAddressEncoder();
268
+ return getProgramDerivedAddress({
269
+ programAddress: toAddress(programId),
270
+ seeds: [
271
+ new TextEncoder().encode("escrow_authority_v2"),
272
+ addressEncoder.encode(toAddress(escrowState)),
273
+ ],
274
+ });
275
+ }
276
+
277
+ export async function derivePoolLoanPda(
278
+ writerPosition: AddressLike,
279
+ nonce: bigint | number,
280
+ programId: AddressLike = PROGRAM_ID
281
+ ): Promise<readonly [Address, number]> {
282
+ const addressEncoder = getAddressEncoder();
283
+ return getProgramDerivedAddress({
284
+ programAddress: toAddress(programId),
285
+ seeds: [
286
+ new TextEncoder().encode("pool_loan"),
287
+ addressEncoder.encode(toAddress(writerPosition)),
288
+ u64ToLeBytes(nonce),
289
+ ],
290
+ });
291
+ }
292
+
293
+ export async function deriveAssociatedTokenAddress(
294
+ owner: AddressLike,
295
+ mint: AddressLike,
296
+ _allowOwnerOffCurve = false
297
+ ): Promise<Address> {
298
+ const addressEncoder = getAddressEncoder();
299
+ const [associatedTokenAddress] = await getProgramDerivedAddress({
300
+ programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
301
+ seeds: [
302
+ addressEncoder.encode(toAddress(owner)),
303
+ addressEncoder.encode(TOKEN_PROGRAM_ADDRESS),
304
+ addressEncoder.encode(toAddress(mint)),
305
+ ],
306
+ });
307
+ return associatedTokenAddress;
308
+ }
@@ -0,0 +1,32 @@
1
+ import { address, type Address } from "@solana/kit";
2
+ import type { KitRpc } from "./types";
3
+
4
+ export const LOOKUP_TABLE_ADDRESSES: Record<"devnet" | "mainnet", Address | null> = {
5
+ devnet: address("HsoWoDfW4yXVaXE31tEz167cjQn79TeXYxggSrXvRvri"),
6
+ mainnet: null,
7
+ };
8
+
9
+ export const LOOKUP_TABLE_ADDRESS: Address | null = LOOKUP_TABLE_ADDRESSES.devnet;
10
+
11
+ export function detectNetwork(rpcUrl: string): "devnet" | "mainnet" {
12
+ const lower = rpcUrl.toLowerCase();
13
+ return lower.includes("mainnet") ? "mainnet" : "devnet";
14
+ }
15
+
16
+ export function getLookupTableAddressForNetwork(
17
+ network: "devnet" | "mainnet"
18
+ ): Address | null {
19
+ return LOOKUP_TABLE_ADDRESSES[network];
20
+ }
21
+
22
+ export async function getLookupTableAccount(
23
+ rpc: KitRpc,
24
+ lookupTableAddress: Address | null
25
+ ): Promise<unknown | null> {
26
+ if (!lookupTableAddress) return null;
27
+ const rpcWithLookupTable = rpc as KitRpc & {
28
+ getAddressLookupTable: (address: Address) => { send: () => Promise<{ value: unknown | null }> };
29
+ };
30
+ const result = await rpcWithLookupTable.getAddressLookupTable(lookupTableAddress).send();
31
+ return result.value ?? null;
32
+ }
@@ -0,0 +1,13 @@
1
+ import { address, type Address } from "@solana/kit";
2
+ import { OPTION_PROGRAM_PROGRAM_ADDRESS } from "../generated/programs";
3
+ import type { AddressLike } from "./types";
4
+
5
+ export const PROGRAM_ADDRESS = OPTION_PROGRAM_PROGRAM_ADDRESS;
6
+ export const PROGRAM_ID = address(OPTION_PROGRAM_PROGRAM_ADDRESS);
7
+ export const getProgramId = (): Address => PROGRAM_ID;
8
+ export const getProgramIdString = (): string => PROGRAM_ID;
9
+
10
+ export function toAddress(value: AddressLike): Address {
11
+ return typeof value === "string" ? address(value) : value;
12
+ }
13
+ export { address };
@@ -0,0 +1,8 @@
1
+ import type { Address, Instruction, Rpc, SolanaRpcApi } from "@solana/kit";
2
+
3
+ export type AddressLike = Address | string;
4
+ export type KitRpc = Rpc<SolanaRpcApi>;
5
+
6
+ export interface BuiltTransaction {
7
+ instructions: Instruction<string>[];
8
+ }
@@ -0,0 +1,217 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+
9
+ import {
10
+ assertAccountExists,
11
+ assertAccountsExist,
12
+ combineCodec,
13
+ decodeAccount,
14
+ fetchEncodedAccount,
15
+ fetchEncodedAccounts,
16
+ fixDecoderSize,
17
+ fixEncoderSize,
18
+ getAddressDecoder,
19
+ getAddressEncoder,
20
+ getBooleanDecoder,
21
+ getBooleanEncoder,
22
+ getBytesDecoder,
23
+ getBytesEncoder,
24
+ getI64Decoder,
25
+ getI64Encoder,
26
+ getStructDecoder,
27
+ getStructEncoder,
28
+ getU32Decoder,
29
+ getU32Encoder,
30
+ getU64Decoder,
31
+ getU64Encoder,
32
+ getU8Decoder,
33
+ getU8Encoder,
34
+ transformEncoder,
35
+ type Account,
36
+ type Address,
37
+ type EncodedAccount,
38
+ type FetchAccountConfig,
39
+ type FetchAccountsConfig,
40
+ type FixedSizeCodec,
41
+ type FixedSizeDecoder,
42
+ type FixedSizeEncoder,
43
+ type MaybeAccount,
44
+ type MaybeEncodedAccount,
45
+ type ReadonlyUint8Array,
46
+ } from "@solana/kit";
47
+
48
+ export const COLLATERAL_POOL_DISCRIMINATOR = new Uint8Array([
49
+ 186, 4, 253, 240, 93, 243, 212, 195,
50
+ ]);
51
+
52
+ export function getCollateralPoolDiscriminatorBytes() {
53
+ return fixEncoderSize(getBytesEncoder(), 8).encode(
54
+ COLLATERAL_POOL_DISCRIMINATOR,
55
+ );
56
+ }
57
+
58
+ export type CollateralPool = {
59
+ discriminator: ReadonlyUint8Array;
60
+ optionAccount: Address;
61
+ collateralMint: Address;
62
+ collateralVault: Address;
63
+ totalCollateral: bigint;
64
+ totalMakerContribution: bigint;
65
+ totalBorrowed: bigint;
66
+ totalInterestOwed: bigint;
67
+ totalExercisedValue: bigint;
68
+ totalLenderRepaid: bigint;
69
+ totalMakerReturned: bigint;
70
+ makerCount: number;
71
+ isExercised: boolean;
72
+ isFullySettled: boolean;
73
+ createdAt: bigint;
74
+ lastUpdated: bigint;
75
+ bump: number;
76
+ };
77
+
78
+ export type CollateralPoolArgs = {
79
+ optionAccount: Address;
80
+ collateralMint: Address;
81
+ collateralVault: Address;
82
+ totalCollateral: number | bigint;
83
+ totalMakerContribution: number | bigint;
84
+ totalBorrowed: number | bigint;
85
+ totalInterestOwed: number | bigint;
86
+ totalExercisedValue: number | bigint;
87
+ totalLenderRepaid: number | bigint;
88
+ totalMakerReturned: number | bigint;
89
+ makerCount: number;
90
+ isExercised: boolean;
91
+ isFullySettled: boolean;
92
+ createdAt: number | bigint;
93
+ lastUpdated: number | bigint;
94
+ bump: number;
95
+ };
96
+
97
+ /** Gets the encoder for {@link CollateralPoolArgs} account data. */
98
+ export function getCollateralPoolEncoder(): FixedSizeEncoder<CollateralPoolArgs> {
99
+ return transformEncoder(
100
+ getStructEncoder([
101
+ ["discriminator", fixEncoderSize(getBytesEncoder(), 8)],
102
+ ["optionAccount", getAddressEncoder()],
103
+ ["collateralMint", getAddressEncoder()],
104
+ ["collateralVault", getAddressEncoder()],
105
+ ["totalCollateral", getU64Encoder()],
106
+ ["totalMakerContribution", getU64Encoder()],
107
+ ["totalBorrowed", getU64Encoder()],
108
+ ["totalInterestOwed", getU64Encoder()],
109
+ ["totalExercisedValue", getU64Encoder()],
110
+ ["totalLenderRepaid", getU64Encoder()],
111
+ ["totalMakerReturned", getU64Encoder()],
112
+ ["makerCount", getU32Encoder()],
113
+ ["isExercised", getBooleanEncoder()],
114
+ ["isFullySettled", getBooleanEncoder()],
115
+ ["createdAt", getI64Encoder()],
116
+ ["lastUpdated", getI64Encoder()],
117
+ ["bump", getU8Encoder()],
118
+ ]),
119
+ (value) => ({ ...value, discriminator: COLLATERAL_POOL_DISCRIMINATOR }),
120
+ );
121
+ }
122
+
123
+ /** Gets the decoder for {@link CollateralPool} account data. */
124
+ export function getCollateralPoolDecoder(): FixedSizeDecoder<CollateralPool> {
125
+ return getStructDecoder([
126
+ ["discriminator", fixDecoderSize(getBytesDecoder(), 8)],
127
+ ["optionAccount", getAddressDecoder()],
128
+ ["collateralMint", getAddressDecoder()],
129
+ ["collateralVault", getAddressDecoder()],
130
+ ["totalCollateral", getU64Decoder()],
131
+ ["totalMakerContribution", getU64Decoder()],
132
+ ["totalBorrowed", getU64Decoder()],
133
+ ["totalInterestOwed", getU64Decoder()],
134
+ ["totalExercisedValue", getU64Decoder()],
135
+ ["totalLenderRepaid", getU64Decoder()],
136
+ ["totalMakerReturned", getU64Decoder()],
137
+ ["makerCount", getU32Decoder()],
138
+ ["isExercised", getBooleanDecoder()],
139
+ ["isFullySettled", getBooleanDecoder()],
140
+ ["createdAt", getI64Decoder()],
141
+ ["lastUpdated", getI64Decoder()],
142
+ ["bump", getU8Decoder()],
143
+ ]);
144
+ }
145
+
146
+ /** Gets the codec for {@link CollateralPool} account data. */
147
+ export function getCollateralPoolCodec(): FixedSizeCodec<
148
+ CollateralPoolArgs,
149
+ CollateralPool
150
+ > {
151
+ return combineCodec(getCollateralPoolEncoder(), getCollateralPoolDecoder());
152
+ }
153
+
154
+ export function decodeCollateralPool<TAddress extends string = string>(
155
+ encodedAccount: EncodedAccount<TAddress>,
156
+ ): Account<CollateralPool, TAddress>;
157
+ export function decodeCollateralPool<TAddress extends string = string>(
158
+ encodedAccount: MaybeEncodedAccount<TAddress>,
159
+ ): MaybeAccount<CollateralPool, TAddress>;
160
+ export function decodeCollateralPool<TAddress extends string = string>(
161
+ encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>,
162
+ ): Account<CollateralPool, TAddress> | MaybeAccount<CollateralPool, TAddress> {
163
+ return decodeAccount(
164
+ encodedAccount as MaybeEncodedAccount<TAddress>,
165
+ getCollateralPoolDecoder(),
166
+ );
167
+ }
168
+
169
+ export async function fetchCollateralPool<TAddress extends string = string>(
170
+ rpc: Parameters<typeof fetchEncodedAccount>[0],
171
+ address: Address<TAddress>,
172
+ config?: FetchAccountConfig,
173
+ ): Promise<Account<CollateralPool, TAddress>> {
174
+ const maybeAccount = await fetchMaybeCollateralPool(rpc, address, config);
175
+ assertAccountExists(maybeAccount);
176
+ return maybeAccount;
177
+ }
178
+
179
+ export async function fetchMaybeCollateralPool<
180
+ TAddress extends string = string,
181
+ >(
182
+ rpc: Parameters<typeof fetchEncodedAccount>[0],
183
+ address: Address<TAddress>,
184
+ config?: FetchAccountConfig,
185
+ ): Promise<MaybeAccount<CollateralPool, TAddress>> {
186
+ const maybeAccount = await fetchEncodedAccount(rpc, address, config);
187
+ return decodeCollateralPool(maybeAccount);
188
+ }
189
+
190
+ export async function fetchAllCollateralPool(
191
+ rpc: Parameters<typeof fetchEncodedAccounts>[0],
192
+ addresses: Array<Address>,
193
+ config?: FetchAccountsConfig,
194
+ ): Promise<Account<CollateralPool>[]> {
195
+ const maybeAccounts = await fetchAllMaybeCollateralPool(
196
+ rpc,
197
+ addresses,
198
+ config,
199
+ );
200
+ assertAccountsExist(maybeAccounts);
201
+ return maybeAccounts;
202
+ }
203
+
204
+ export async function fetchAllMaybeCollateralPool(
205
+ rpc: Parameters<typeof fetchEncodedAccounts>[0],
206
+ addresses: Array<Address>,
207
+ config?: FetchAccountsConfig,
208
+ ): Promise<MaybeAccount<CollateralPool>[]> {
209
+ const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);
210
+ return maybeAccounts.map((maybeAccount) =>
211
+ decodeCollateralPool(maybeAccount),
212
+ );
213
+ }
214
+
215
+ export function getCollateralPoolSize(): number {
216
+ return 183;
217
+ }