@zcomb/programs-sdk 1.11.0 → 1.11.2

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.
@@ -1,226 +1 @@
1
- "use strict";
2
- /*
3
- * High-level client for the AMM program.
4
- * Provides ergonomic methods for pool operations with automatic PDA derivation,
5
- * native SOL wrapping/unwrapping, and compute budget management.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.AMMClient = void 0;
9
- const anchor_1 = require("@coral-xyz/anchor");
10
- const web3_js_1 = require("@solana/web3.js");
11
- const spl_token_1 = require("@solana/spl-token");
12
- const constants_1 = require("./constants");
13
- const utils_1 = require("./utils");
14
- const instructions_1 = require("./instructions");
15
- const idls_1 = require("../generated/idls");
16
- const DEFAULT_COMPUTE_UNITS = 300000;
17
- class AMMClient {
18
- constructor(provider, programId, computeUnits) {
19
- this.programId = programId ?? constants_1.PROGRAM_ID;
20
- this.computeUnits = computeUnits ?? DEFAULT_COMPUTE_UNITS;
21
- this.program = new anchor_1.Program(idls_1.AmmIDL, provider);
22
- }
23
- /* PDA Helpers */
24
- derivePoolPDA(admin, mintA, mintB) {
25
- return (0, utils_1.derivePoolPDA)(admin, mintA, mintB, this.programId);
26
- }
27
- deriveReservePDA(pool, mint) {
28
- return (0, utils_1.deriveReservePDA)(pool, mint, this.programId);
29
- }
30
- deriveFeeVaultPDA(pool) {
31
- return (0, utils_1.deriveFeeVaultPDA)(pool, this.programId);
32
- }
33
- /* State Fetching */
34
- async fetchPool(poolPda) {
35
- return (0, utils_1.fetchPoolAccount)(this.program, poolPda);
36
- }
37
- async fetchReserves(poolPda) {
38
- const pool = await this.fetchPool(poolPda);
39
- const [reserveAPda] = this.deriveReservePDA(poolPda, pool.mintA);
40
- const [reserveBPda] = this.deriveReservePDA(poolPda, pool.mintB);
41
- const connection = this.program.provider.connection;
42
- const [reserveAAccount, reserveBAccount] = await Promise.all([
43
- (0, spl_token_1.getAccount)(connection, reserveAPda),
44
- (0, spl_token_1.getAccount)(connection, reserveBPda),
45
- ]);
46
- return {
47
- reserveA: new anchor_1.BN(reserveAAccount.amount.toString()),
48
- reserveB: new anchor_1.BN(reserveBAccount.amount.toString()),
49
- };
50
- }
51
- async fetchMintDecimals(poolPda) {
52
- const pool = await this.fetchPool(poolPda);
53
- const connection = this.program.provider.connection;
54
- const [mintA, mintB] = await Promise.all([
55
- (0, spl_token_1.getMint)(connection, pool.mintA),
56
- (0, spl_token_1.getMint)(connection, pool.mintB),
57
- ]);
58
- return { decimalsA: mintA.decimals, decimalsB: mintB.decimals };
59
- }
60
- async fetchSpotPrice(poolPda) {
61
- const { reserveA, reserveB } = await this.fetchReserves(poolPda);
62
- const { decimalsA, decimalsB } = await this.fetchMintDecimals(poolPda);
63
- return (0, utils_1.calculateSpotPrice)(reserveA, reserveB, decimalsA, decimalsB);
64
- }
65
- async fetchTwap(poolPda) {
66
- const pool = await this.fetchPool(poolPda);
67
- return (0, utils_1.calculateTwap)(pool.oracle);
68
- }
69
- /* Quote */
70
- async quote(poolPda, swapAToB, inputAmount, slippagePercent = 0.5) {
71
- const pool = await this.fetchPool(poolPda);
72
- const { reserveA, reserveB } = await this.fetchReserves(poolPda);
73
- const { decimalsA, decimalsB } = await this.fetchMintDecimals(poolPda);
74
- const [reserveIn, reserveOut] = swapAToB
75
- ? [reserveA, reserveB]
76
- : [reserveB, reserveA];
77
- const [decimalsIn, decimalsOut] = swapAToB
78
- ? [decimalsA, decimalsB]
79
- : [decimalsB, decimalsA];
80
- return (0, utils_1.createSwapQuote)(inputAmount, reserveIn, reserveOut, pool.fee, decimalsIn, decimalsOut, swapAToB, slippagePercent);
81
- }
82
- /* Instruction Builders */
83
- createPool(payer, admin, mintA, mintB, fee, startingObservation, maxObservationDelta, warmupDuration, liquidityProvider = null) {
84
- const [poolPda] = this.derivePoolPDA(admin, mintA, mintB);
85
- const [reserveA] = this.deriveReservePDA(poolPda, mintA);
86
- const [reserveB] = this.deriveReservePDA(poolPda, mintB);
87
- const [feeVault] = this.deriveFeeVaultPDA(poolPda);
88
- const builder = (0, instructions_1.createPool)(this.program, payer, admin, mintA, mintB, poolPda, reserveA, reserveB, feeVault, fee, startingObservation, maxObservationDelta, warmupDuration, liquidityProvider);
89
- return {
90
- builder,
91
- poolPda,
92
- reserveA,
93
- reserveB,
94
- feeVault,
95
- };
96
- }
97
- async addLiquidity(depositor, poolPda, amountA, amountB, options) {
98
- const { autoWrapUnwrap = true, includeCuBudget = true, computeUnits } = options ?? {};
99
- const pool = await this.fetchPool(poolPda);
100
- const [reserveA] = this.deriveReservePDA(poolPda, pool.mintA);
101
- const [reserveB] = this.deriveReservePDA(poolPda, pool.mintB);
102
- const depositorTokenAccA = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintA, depositor);
103
- const depositorTokenAccB = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintB, depositor);
104
- const preIxs = [];
105
- if (includeCuBudget) {
106
- preIxs.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
107
- units: computeUnits ?? this.computeUnits,
108
- }));
109
- }
110
- if (autoWrapUnwrap && pool.mintA.equals(spl_token_1.NATIVE_MINT)) {
111
- const amountABN = typeof amountA === "number" ? new anchor_1.BN(amountA) : amountA;
112
- preIxs.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(depositor, depositorTokenAccA, depositor, pool.mintA), web3_js_1.SystemProgram.transfer({
113
- fromPubkey: depositor,
114
- toPubkey: depositorTokenAccA,
115
- lamports: BigInt(amountABN.toString()),
116
- }), (0, spl_token_1.createSyncNativeInstruction)(depositorTokenAccA));
117
- }
118
- if (autoWrapUnwrap && pool.mintB.equals(spl_token_1.NATIVE_MINT)) {
119
- const amountBBN = typeof amountB === "number" ? new anchor_1.BN(amountB) : amountB;
120
- preIxs.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(depositor, depositorTokenAccB, depositor, pool.mintB), web3_js_1.SystemProgram.transfer({
121
- fromPubkey: depositor,
122
- toPubkey: depositorTokenAccB,
123
- lamports: BigInt(amountBBN.toString()),
124
- }), (0, spl_token_1.createSyncNativeInstruction)(depositorTokenAccB));
125
- }
126
- let builder = (0, instructions_1.addLiquidity)(this.program, depositor, poolPda, reserveA, reserveB, depositorTokenAccA, depositorTokenAccB, amountA, amountB);
127
- return preIxs.length > 0 ? builder.preInstructions(preIxs) : builder;
128
- }
129
- async removeLiquidity(depositor, poolPda, amountA, amountB, options) {
130
- const { autoWrapUnwrap = true, includeCuBudget = true, computeUnits } = options ?? {};
131
- const pool = await this.fetchPool(poolPda);
132
- const [reserveA] = this.deriveReservePDA(poolPda, pool.mintA);
133
- const [reserveB] = this.deriveReservePDA(poolPda, pool.mintB);
134
- const depositorTokenAccA = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintA, depositor);
135
- const depositorTokenAccB = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintB, depositor);
136
- let builder = (0, instructions_1.removeLiquidity)(this.program, depositor, poolPda, reserveA, reserveB, depositorTokenAccA, depositorTokenAccB, amountA, amountB);
137
- if (includeCuBudget) {
138
- builder = builder.preInstructions([
139
- web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
140
- units: computeUnits ?? this.computeUnits,
141
- }),
142
- ]);
143
- }
144
- const postIxs = [];
145
- if (autoWrapUnwrap && pool.mintA.equals(spl_token_1.NATIVE_MINT)) {
146
- postIxs.push((0, spl_token_1.createCloseAccountInstruction)(depositorTokenAccA, depositor, depositor));
147
- }
148
- if (autoWrapUnwrap && pool.mintB.equals(spl_token_1.NATIVE_MINT)) {
149
- postIxs.push((0, spl_token_1.createCloseAccountInstruction)(depositorTokenAccB, depositor, depositor));
150
- }
151
- return postIxs.length > 0 ? builder.postInstructions(postIxs) : builder;
152
- }
153
- async swap(trader, poolPda, swapAToB, inputAmount, minOutputAmount, options) {
154
- const { autoCreateTokenAccounts = true, includeCuBudget = true, computeUnits } = options ?? {};
155
- const pool = await this.fetchPool(poolPda);
156
- const [reserveA] = this.deriveReservePDA(poolPda, pool.mintA);
157
- const [reserveB] = this.deriveReservePDA(poolPda, pool.mintB);
158
- const [feeVault] = this.deriveFeeVaultPDA(poolPda);
159
- const traderAccountA = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintA, trader);
160
- const traderAccountB = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintB, trader);
161
- const preIxs = [];
162
- if (includeCuBudget) {
163
- preIxs.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
164
- units: computeUnits ?? this.computeUnits,
165
- }));
166
- }
167
- if (autoCreateTokenAccounts) {
168
- preIxs.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(trader, traderAccountA, trader, pool.mintA), (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(trader, traderAccountB, trader, pool.mintB));
169
- }
170
- let builder = (0, instructions_1.swap)(this.program, trader, poolPda, reserveA, reserveB, feeVault, traderAccountA, traderAccountB, swapAToB, inputAmount, minOutputAmount);
171
- if (preIxs.length > 0) {
172
- builder = builder.preInstructions(preIxs);
173
- }
174
- return builder;
175
- }
176
- async crankTwap(poolPda) {
177
- const pool = await this.fetchPool(poolPda);
178
- const [reserveA] = this.deriveReservePDA(poolPda, pool.mintA);
179
- const [reserveB] = this.deriveReservePDA(poolPda, pool.mintB);
180
- return (0, instructions_1.crankTwap)(this.program, poolPda, reserveA, reserveB);
181
- }
182
- ceaseTrading(admin, poolPda) {
183
- return (0, instructions_1.ceaseTrading)(this.program, admin, poolPda);
184
- }
185
- /* High-Level Swap with Slippage */
186
- /**
187
- * High-level swap function that:
188
- * - Fetches current reserves and computes quote
189
- * - Calculates minOutput based on slippage tolerance
190
- * - Adds compute budget instruction (if includeCuBudget is true)
191
- * - Creates token accounts if they don't exist (if autoCreateTokenAccounts is true)
192
- */
193
- async swapWithSlippage(trader, poolPda, swapAToB, inputAmount, slippagePercent = 0.5, options) {
194
- const { autoCreateTokenAccounts = true, includeCuBudget = true, computeUnits } = options ?? {};
195
- const pool = await this.fetchPool(poolPda);
196
- const input = typeof inputAmount === "number" ? new anchor_1.BN(inputAmount) : inputAmount;
197
- // Get quote with slippage
198
- const quoteResult = await this.quote(poolPda, swapAToB, input, slippagePercent);
199
- // Derive accounts
200
- const [reserveA] = this.deriveReservePDA(poolPda, pool.mintA);
201
- const [reserveB] = this.deriveReservePDA(poolPda, pool.mintB);
202
- const [feeVault] = this.deriveFeeVaultPDA(poolPda);
203
- const traderAccountA = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintA, trader);
204
- const traderAccountB = (0, spl_token_1.getAssociatedTokenAddressSync)(pool.mintB, trader);
205
- // Build base swap instruction
206
- let builder = (0, instructions_1.swap)(this.program, trader, poolPda, reserveA, reserveB, feeVault, traderAccountA, traderAccountB, swapAToB, input, quoteResult.minOutputAmount);
207
- const preIxs = [];
208
- if (includeCuBudget) {
209
- preIxs.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
210
- units: computeUnits ?? this.computeUnits,
211
- }));
212
- }
213
- if (autoCreateTokenAccounts) {
214
- preIxs.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(trader, traderAccountA, trader, pool.mintA), (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(trader, traderAccountB, trader, pool.mintB));
215
- }
216
- if (preIxs.length > 0) {
217
- builder = builder.preInstructions(preIxs);
218
- }
219
- return {
220
- builder,
221
- quote: quoteResult,
222
- };
223
- }
224
- }
225
- exports.AMMClient = AMMClient;
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FtbS9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUVILDhDQUFnRTtBQUNoRSw2Q0FLeUI7QUFDekIsaURBUTJCO0FBQzNCLDJDQUF5QztBQUV6QyxtQ0FRaUI7QUFDakIsaURBT3dCO0FBRXhCLDRDQUEyQztBQUUzQyxNQUFNLHFCQUFxQixHQUFHLE1BQU8sQ0FBQztBQUV0QyxNQUFhLFNBQVM7SUFLcEIsWUFDRSxRQUF3QixFQUN4QixTQUFxQixFQUNyQixZQUFxQjtRQUVyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxzQkFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxJQUFJLHFCQUFxQixDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxnQkFBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsaUJBQWlCO0lBRWpCLGFBQWEsQ0FDWCxLQUFnQixFQUNoQixLQUFnQixFQUNoQixLQUFnQjtRQUVoQixPQUFPLElBQUEscUJBQWEsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQWUsRUFBRSxJQUFlO1FBQy9DLE9BQU8sSUFBQSx3QkFBZ0IsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBZTtRQUMvQixPQUFPLElBQUEseUJBQWlCLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsb0JBQW9CO0lBRXBCLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBa0I7UUFDaEMsT0FBTyxJQUFB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QUFNLENBQUMsQ0FBQztRQUV6RSw4QkFBOEI7UUFDOUIsSUFBSSxPQUFPLEdBQUcsSUFBQSxtQkFBTSxFQUNsQixJQUFJLENBQUMsT0FBTyxFQUNaLE1BQU0sRUFDTixPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixRQUFRLEVBQ1IsY0FBYyxFQUNkLGNBQWMsRUFDZCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFdBQVcsQ0FBQyxlQUFlLENBQzVCLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBNkIsRUFBRSxDQUFDO1FBRTVDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLElBQUksQ0FDVCw4QkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDdkMsS0FBSyxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWTthQUN6QyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFBLDZEQUFpRCxFQUMvQyxNQUFNLEVBQ04sY0FBYyxFQUNkLE1BQU0sRUFDTixJQUFJLENBQUMsS0FBSyxDQUNYLEVBQ0QsSUFBQSw2REFBaUQsRUFDL0MsTUFBTSxFQUNOLGNBQWMsRUFDZCxNQUFNLEVBQ04sSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTztZQUNQLEtBQUssRUFBRSxXQUFXO1NBQ25CLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF0YkQsOEJBc2JDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEhpZ2gtbGV2ZWwgY2xpZW50IGZvciB0aGUgQU1NIHByb2dyYW0uXG4gKiBQcm92aWRlcyBlcmdvbm9taWMgbWV0aG9kcyBmb3IgcG9vbCBvcGVyYXRpb25zIHdpdGggYXV0b21hdGljIFBEQSBkZXJpdmF0aW9uLFxuICogbmF0aXZlIFNPTCB3cmFwcGluZy91bndyYXBwaW5nLCBhbmQgY29tcHV0ZSBidWRnZXQgbWFuYWdlbWVudC5cbiAqL1xuXG5pbXBvcnQgeyBQcm9ncmFtLCBBbmNob3JQcm92aWRlciwgQk4gfSBmcm9tIFwiQGNvcmFsLXh5ei9hbmNob3JcIjtcbmltcG9ydCB7XG4gIFB1YmxpY0tleSxcbiAgQ29tcHV0ZUJ1ZGdldFByb2dyYW0sXG4gIFN5c3RlbVByb2dyYW0sXG4gIFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sXG59IGZyb20gXCJAc29sYW5hL3dlYjMuanNcIjtcbmltcG9ydCB7XG4gIGdldEFjY291bnQsXG4gIGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jLFxuICBnZXRNaW50LFxuICBOQVRJVkVfTUlOVCxcbiAgY3JlYXRlU3luY05hdGl2ZUluc3RydWN0aW9uLFxuICBjcmVhdGVDbG9zZUFjY291bnRJbnN0cnVjdGlvbixcbiAgY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudElkZW1wb3RlbnRJbnN0cnVjdGlvbixcbn0gZnJvbSBcIkBzb2xhbmEvc3BsLXRva2VuXCI7XG5pbXBvcnQgeyBQUk9HUkFNX0lEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBbW0sIFBvb2xBY2NvdW50LCBTd2FwUXVvdGUsIEFtbUFjdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZGVyaXZlUG9vbFBEQSxcbiAgZGVyaXZlUmVzZXJ2ZVBEQSxcbiAgZGVyaXZlRmVlVmF1bHRQREEsXG4gIGZldGNoUG9vbEFjY291bnQsXG4gIGNyZWF0ZVN3YXBRdW90ZSxcbiAgY2FsY3VsYXRlU3BvdFByaWNlLFxuICBjYWxjdWxhdGVUd2FwLFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlUG9vbCBhcyBjcmVhdGVQb29sSXgsXG4gIGFkZExpcXVpZGl0eSBhcyBhZGRMaXF1aWRpdHlJeCxcbiAgcmVtb3ZlTGlxdWlkaXR5IGFzIHJlbW92ZUxpcXVpZGl0eUl4LFxuICBzd2FwIGFzIHN3YXBJeCxcbiAgY3JhbmtUd2FwIGFzIGNyYW5rVHdhcEl4LFxuICBjZWFzZVRyYWRpbmcgYXMgY2Vhc2VUcmFkaW5nSXgsXG59IGZyb20gXCIuL2luc3RydWN0aW9uc1wiO1xuXG5pbXBvcnQgeyBBbW1JREwgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkL2lkbHNcIjtcblxuY29uc3QgREVGQVVMVF9DT01QVVRFX1VOSVRTID0gMzAwXzAwMDtcblxuZXhwb3J0IGNsYXNzIEFNTUNsaWVudCB7XG4gIHB1YmxpYyBwcm9ncmFtOiBQcm9ncmFtPEFtbT47XG4gIHB1YmxpYyBwcm9ncmFtSWQ6IFB1YmxpY0tleTtcbiAgcHVibGljIGNvbXB1dGVVbml0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3ZpZGVyOiBBbmNob3JQcm92aWRlcixcbiAgICBwcm9ncmFtSWQ/OiBQdWJsaWNLZXksXG4gICAgY29tcHV0ZVVuaXRzPzogbnVtYmVyXG4gICkge1xuICAgIHRoaXMucHJvZ3JhbUlkID0gcHJvZ3JhbUlkID8/IFBST0dSQU1fSUQ7XG4gICAgdGhpcy5jb21wdXRlVW5pdHMgPSBjb21wdXRlVW5pdHMgPz8gREVGQVVMVF9DT01QVVRFX1VOSVRTO1xuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBQcm9ncmFtKEFtbUlETCBhcyBBbW0sIHByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qIFBEQSBIZWxwZXJzICovXG5cbiAgZGVyaXZlUG9vbFBEQShcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1pbnRBOiBQdWJsaWNLZXksXG4gICAgbWludEI6IFB1YmxpY0tleVxuICApOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgICByZXR1cm4gZGVyaXZlUG9vbFBEQShhZG1pbiwgbWludEEsIG1pbnRCLCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICBkZXJpdmVSZXNlcnZlUERBKHBvb2w6IFB1YmxpY0tleSwgbWludDogUHVibGljS2V5KTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZVJlc2VydmVQREEocG9vbCwgbWludCwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG5cbiAgZGVyaXZlRmVlVmF1bHRQREEocG9vbDogUHVibGljS2V5KTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZUZlZVZhdWx0UERBKHBvb2wsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxuXG4gIC8qIFN0YXRlIEZldGNoaW5nICovXG5cbiAgYXN5bmMgZmV0Y2hQb29sKHBvb2xQZGE6IFB1YmxpY0tleSk6IFByb21pc2U8UG9vbEFjY291bnQ+IHtcbiAgICByZXR1cm4gZmV0Y2hQb29sQWNjb3VudCh0aGlzLnByb2dyYW0sIHBvb2xQZGEpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hSZXNlcnZlcyhwb29sUGRhOiBQdWJsaWNLZXkpOiBQcm9taXNlPHsgcmVzZXJ2ZUE6IEJOOyByZXNlcnZlQjogQk4gfT4ge1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmZldGNoUG9vbChwb29sUGRhKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUFQZGFdID0gdGhpcy5kZXJpdmVSZXNlcnZlUERBKHBvb2xQZGEsIHBvb2wubWludEEpO1xuICAgIGNvbnN0IFtyZXNlcnZlQlBkYV0gPSB0aGlzLmRlcml2ZVJlc2VydmVQREEocG9vbFBkYSwgcG9vbC5taW50Qik7XG5cbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyLmNvbm5lY3Rpb247XG5cbiAgICBjb25zdCBbcmVzZXJ2ZUFBY2NvdW50LCByZXNlcnZlQkFjY291bnRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZ2V0QWNjb3VudChjb25uZWN0aW9uLCByZXNlcnZlQVBkYSksXG4gICAgICBnZXRBY2NvdW50KGNvbm5lY3Rpb24sIHJlc2VydmVCUGRhKSxcbiAgICBdKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXNlcnZlQTogbmV3IEJOKHJlc2VydmVBQWNjb3VudC5hbW91bnQudG9TdHJpbmcoKSksXG4gICAgICByZXNlcnZlQjogbmV3IEJOKHJlc2VydmVCQWNjb3VudC5hbW91bnQudG9TdHJpbmcoKSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoTWludERlY2ltYWxzKHBvb2xQZGE6IFB1YmxpY0tleSk6IFByb21pc2U8eyBkZWNpbWFsc0E6IG51bWJlcjsgZGVjaW1hbHNCOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmZldGNoUG9vbChwb29sUGRhKTtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyLmNvbm5lY3Rpb247XG4gICAgY29uc3QgW21pbnRBLCBtaW50Ql0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZXRNaW50KGNvbm5lY3Rpb24sIHBvb2wubWludEEpLFxuICAgICAgZ2V0TWludChjb25uZWN0aW9uLCBwb29sLm1pbnRCKSxcbiAgICBdKTtcbiAgICByZXR1cm4geyBkZWNpbWFsc0E6IG1pbnRBLmRlY2ltYWxzLCBkZWNpbWFsc0I6IG1pbnRCLmRlY2ltYWxzIH07XG4gIH1cblxuICBhc3luYyBmZXRjaFNwb3RQcmljZShwb29sUGRhOiBQdWJsaWNLZXkpOiBQcm9taXNlPEJOPiB7XG4gICAgY29uc3QgeyByZXNlcnZlQSwgcmVzZXJ2ZUIgfSA9IGF3YWl0IHRoaXMuZmV0Y2hSZXNlcnZlcyhwb29sUGRhKTtcbiAgICBjb25zdCB7IGRlY2ltYWxzQSwgZGVjaW1hbHNCIH0gPSBhd2FpdCB0aGlzLmZldGNoTWludERlY2ltYWxzKHBvb2xQZGEpO1xuICAgIHJldHVybiBjYWxjdWxhdGVTcG90UHJpY2UocmVzZXJ2ZUEsIHJlc2VydmVCLCBkZWNpbWFsc0EsIGRlY2ltYWxzQik7XG4gIH1cblxuICBhc3luYyBmZXRjaFR3YXAocG9vbFBkYTogUHVibGljS2V5KTogUHJvbWlzZTxCTiB8IG51bGw+IHtcbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5mZXRjaFBvb2wocG9vbFBkYSk7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZVR3YXAocG9vbC5vcmFjbGUpO1xuICB9XG5cbiAgLyogUXVvdGUgKi9cblxuICBhc3luYyBxdW90ZShcbiAgICBwb29sUGRhOiBQdWJsaWNLZXksXG4gICAgc3dhcEFUb0I6IGJvb2xlYW4sXG4gICAgaW5wdXRBbW91bnQ6IEJOIHwgbnVtYmVyLFxuICAgIHNsaXBwYWdlUGVyY2VudDogbnVtYmVyID0gMC41LFxuICApOiBQcm9taXNlPFN3YXBRdW90ZT4ge1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmZldGNoUG9vbChwb29sUGRhKTtcbiAgICBjb25zdCB7IHJlc2VydmVBLCByZXNlcnZlQiB9ID0gYXdhaXQgdGhpcy5mZXRjaFJlc2VydmVzKHBvb2xQZGEpO1xuICAgIGNvbnN0IHsgZGVjaW1hbHNBLCBkZWNpbWFsc0IgfSA9IGF3YWl0IHRoaXMuZmV0Y2hNaW50RGVjaW1hbHMocG9vbFBkYSk7XG5cbiAgICBjb25zdCBbcmVzZXJ2ZUluLCByZXNlcnZlT3V0XSA9IHN3YXBBVG9CXG4gICAgICA/IFtyZXNlcnZlQSwgcmVzZXJ2ZUJdXG4gICAgICA6IFtyZXNlcnZlQiwgcmVzZXJ2ZUFdO1xuXG4gICAgY29uc3QgW2RlY2ltYWxzSW4sIGRlY2ltYWxzT3V0XSA9IHN3YXBBVG9CXG4gICAgICA/IFtkZWNpbWFsc0EsIGRlY2ltYWxzQl1cbiAgICAgIDogW2RlY2ltYWxzQiwgZGVjaW1hbHNBXTtcblxuICAgIHJldHVybiBjcmVhdGVTd2FwUXVvdGUoXG4gICAgICBpbnB1dEFtb3VudCxcbiAgICAgIHJlc2VydmVJbixcbiAgICAgIHJlc2VydmVPdXQsXG4gICAgICBwb29sLmZlZSxcbiAgICAgIGRlY2ltYWxzSW4sXG4gICAgICBkZWNpbWFsc091dCxcbiAgICAgIHN3YXBBVG9CLFxuICAgICAgc2xpcHBhZ2VQZXJjZW50LFxuICAgICk7XG4gIH1cblxuICAvKiBJbnN0cnVjdGlvbiBCdWlsZGVycyAqL1xuXG4gIGNyZWF0ZVBvb2woXG4gICAgcGF5ZXI6IFB1YmxpY0tleSxcbiAgICBhZG1pbjogUHVibGljS2V5LFxuICAgIG1pbnRBOiBQdWJsaWNLZXksXG4gICAgbWludEI6IFB1YmxpY0tleSxcbiAgICBmZWU6IG51bWJlcixcbiAgICBzdGFydGluZ09ic2VydmF0aW9uOiBCTixcbiAgICBtYXhPYnNlcnZhdGlvbkRlbHRhOiBCTixcbiAgICB3YXJtdXBEdXJhdGlvbjogbnVtYmVyLFxuICAgIGxpcXVpZGl0eVByb3ZpZGVyOiBQdWJsaWNLZXkgfCBudWxsID0gbnVsbFxuICApIHtcbiAgICBjb25zdCBbcG9vbFBkYV0gPSB0aGlzLmRlcml2ZVBvb2xQREEoYWRtaW4sIG1pbnRBLCBtaW50Qik7XG4gICAgY29uc3QgW3Jlc2VydmVBXSA9IHRoaXMuZGVyaXZlUmVzZXJ2ZVBEQShwb29sUGRhLCBtaW50QSk7XG4gICAgY29uc3QgW3Jlc2VydmVCXSA9IHRoaXMuZGVyaXZlUmVzZXJ2ZVBEQShwb29sUGRhLCBtaW50Qik7XG4gICAgY29uc3QgW2ZlZVZhdWx0XSA9IHRoaXMuZGVyaXZlRmVlVmF1bHRQREEocG9vbFBkYSk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlUG9vbEl4KFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgcGF5ZXIsXG4gICAgICBhZG1pbixcbiAgICAgIG1pbnRBLFxuICAgICAgbWludEIsXG4gICAgICBwb29sUGRhLFxuICAgICAgcmVzZXJ2ZUEsXG4gICAgICByZXNlcnZlQixcbiAgICAgIGZlZVZhdWx0LFxuICAgICAgZmVlLFxuICAgICAgc3RhcnRpbmdPYnNlcnZhdGlvbixcbiAgICAgIG1heE9ic2VydmF0aW9uRGVsdGEsXG4gICAgICB3YXJtdXBEdXJhdGlvbixcbiAgICAgIGxpcXVpZGl0eVByb3ZpZGVyXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWlsZGVyLFxuICAgICAgcG9vbFBkYSxcbiAgICAgIHJlc2VydmVBLFxuICAgICAgcmVzZXJ2ZUIsXG4gICAgICBmZWVWYXVsdCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgYWRkTGlxdWlkaXR5KFxuICAgIGRlcG9zaXRvcjogUHVibGljS2V5LFxuICAgIHBvb2xQZGE6IFB1YmxpY0tleSxcbiAgICBhbW91bnRBOiBCTiB8IG51bWJlcixcbiAgICBhbW91bnRCOiBCTiB8IG51bWJlcixcbiAgICBvcHRpb25zPzogQW1tQWN0aW9uT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGF1dG9XcmFwVW53cmFwID0gdHJ1ZSwgaW5jbHVkZUN1QnVkZ2V0ID0gdHJ1ZSwgY29tcHV0ZVVuaXRzIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZmV0Y2hQb29sKHBvb2xQZGEpO1xuICAgIGNvbnN0IFtyZXNlcnZlQV0gPSB0aGlzLmRlcml2ZVJlc2VydmVQREEocG9vbFBkYSwgcG9vbC5taW50QSk7XG4gICAgY29uc3QgW3Jlc2VydmVCXSA9IHRoaXMuZGVyaXZlUmVzZXJ2ZVBEQShwb29sUGRhLCBwb29sLm1pbnRCKTtcbiAgICBjb25zdCBkZXBvc2l0b3JUb2tlbkFjY0EgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhwb29sLm1pbnRBLCBkZXBvc2l0b3IpO1xuICAgIGNvbnN0IGRlcG9zaXRvclRva2VuQWNjQiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHBvb2wubWludEIsIGRlcG9zaXRvcik7XG5cbiAgICBjb25zdCBwcmVJeHM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSA9IFtdO1xuXG4gICAgaWYgKGluY2x1ZGVDdUJ1ZGdldCkge1xuICAgICAgcHJlSXhzLnB1c2goXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChhdXRvV3JhcFVud3JhcCAmJiBwb29sLm1pbnRBLmVxdWFscyhOQVRJVkVfTUlOVCkpIHtcbiAgICAgIGNvbnN0IGFtb3VudEFCTiA9IHR5cGVvZiBhbW91bnRBID09PSBcIm51bWJlclwiID8gbmV3IEJOKGFtb3VudEEpIDogYW1vdW50QTtcbiAgICAgIHByZUl4cy5wdXNoKFxuICAgICAgICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SWRlbXBvdGVudEluc3RydWN0aW9uKFxuICAgICAgICAgIGRlcG9zaXRvcixcbiAgICAgICAgICBkZXBvc2l0b3JUb2tlbkFjY0EsXG4gICAgICAgICAgZGVwb3NpdG9yLFxuICAgICAgICAgIHBvb2wubWludEFcbiAgICAgICAgKSxcbiAgICAgICAgU3lzdGVtUHJvZ3JhbS50cmFuc2Zlcih7XG4gICAgICAgICAgZnJvbVB1YmtleTogZGVwb3NpdG9yLFxuICAgICAgICAgIHRvUHVia2V5OiBkZXBvc2l0b3JUb2tlbkFjY0EsXG4gICAgICAgICAgbGFtcG9ydHM6IEJpZ0ludChhbW91bnRBQk4udG9TdHJpbmcoKSksXG4gICAgICAgIH0pLFxuICAgICAgICBjcmVhdGVTeW5jTmF0aXZlSW5zdHJ1Y3Rpb24oZGVwb3NpdG9yVG9rZW5BY2NBKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXV0b1dyYXBVbndyYXAgJiYgcG9vbC5taW50Qi5lcXVhbHMoTkFUSVZFX01JTlQpKSB7XG4gICAgICBjb25zdCBhbW91bnRCQk4gPSB0eXBlb2YgYW1vdW50QiA9PT0gXCJudW1iZXJcIiA/IG5ldyBCTihhbW91bnRCKSA6IGFtb3VudEI7XG4gICAgICBwcmVJeHMucHVzaChcbiAgICAgICAgY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudElkZW1wb3RlbnRJbnN0cnVjdGlvbihcbiAgICAgICAgICBkZXBvc2l0b3IsXG4gICAgICAgICAgZGVwb3NpdG9yVG9rZW5BY2NCLFxuICAgICAgICAgIGRlcG9zaXRvcixcbiAgICAgICAgICBwb29sLm1pbnRCXG4gICAgICAgICksXG4gICAgICAgIFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgICAgIGZyb21QdWJrZXk6IGRlcG9zaXRvcixcbiAgICAgICAgICB0b1B1YmtleTogZGVwb3NpdG9yVG9rZW5BY2NCLFxuICAgICAgICAgIGxhbXBvcnRzOiBCaWdJbnQoYW1vdW50QkJOLnRvU3RyaW5nKCkpLFxuICAgICAgICB9KSxcbiAgICAgICAgY3JlYXRlU3luY05hdGl2ZUluc3RydWN0aW9uKGRlcG9zaXRvclRva2VuQWNjQilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGJ1aWxkZXIgPSBhZGRMaXF1aWRpdHlJeChcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIGRlcG9zaXRvcixcbiAgICAgIHBvb2xQZGEsXG4gICAgICByZXNlcnZlQSxcbiAgICAgIHJlc2VydmVCLFxuICAgICAgZGVwb3NpdG9yVG9rZW5BY2NBLFxuICAgICAgZGVwb3NpdG9yVG9rZW5BY2NCLFxuICAgICAgYW1vdW50QSxcbiAgICAgIGFtb3VudEJcbiAgICApO1xuXG4gICAgcmV0dXJuIHByZUl4cy5sZW5ndGggPiAwID8gYnVpbGRlci5wcmVJbnN0cnVjdGlvbnMocHJlSXhzKSA6IGJ1aWxkZXI7XG4gIH1cblxuICBhc3luYyByZW1vdmVMaXF1aWRpdHkoXG4gICAgZGVwb3NpdG9yOiBQdWJsaWNLZXksXG4gICAgcG9vbFBkYTogUHVibGljS2V5LFxuICAgIGFtb3VudEE6IEJOIHwgbnVtYmVyLFxuICAgIGFtb3VudEI6IEJOIHwgbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBBbW1BY3Rpb25PcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHsgYXV0b1dyYXBVbndyYXAgPSB0cnVlLCBpbmNsdWRlQ3VCdWRnZXQgPSB0cnVlLCBjb21wdXRlVW5pdHMgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5mZXRjaFBvb2wocG9vbFBkYSk7XG4gICAgY29uc3QgW3Jlc2VydmVBXSA9IHRoaXMuZGVyaXZlUmVzZXJ2ZVBEQShwb29sUGRhLCBwb29sLm1pbnRBKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUJdID0gdGhpcy5kZXJpdmVSZXNlcnZlUERBKHBvb2xQZGEsIHBvb2wubWludEIpO1xuICAgIGNvbnN0IGRlcG9zaXRvclRva2VuQWNjQSA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHBvb2wubWludEEsIGRlcG9zaXRvcik7XG4gICAgY29uc3QgZGVwb3NpdG9yVG9rZW5BY2NCID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMocG9vbC5taW50QiwgZGVwb3NpdG9yKTtcblxuICAgIGxldCBidWlsZGVyID0gcmVtb3ZlTGlxdWlkaXR5SXgoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBkZXBvc2l0b3IsXG4gICAgICBwb29sUGRhLFxuICAgICAgcmVzZXJ2ZUEsXG4gICAgICByZXNlcnZlQixcbiAgICAgIGRlcG9zaXRvclRva2VuQWNjQSxcbiAgICAgIGRlcG9zaXRvclRva2VuQWNjQixcbiAgICAgIGFtb3VudEEsXG4gICAgICBhbW91bnRCXG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9zdEl4czogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdID0gW107XG5cbiAgICBpZiAoYXV0b1dyYXBVbndyYXAgJiYgcG9vbC5taW50QS5lcXVhbHMoTkFUSVZFX01JTlQpKSB7XG4gICAgICBwb3N0SXhzLnB1c2goY3JlYXRlQ2xvc2VBY2NvdW50SW5zdHJ1Y3Rpb24oZGVwb3NpdG9yVG9rZW5BY2NBLCBkZXBvc2l0b3IsIGRlcG9zaXRvcikpO1xuICAgIH1cblxuICAgIGlmIChhdXRvV3JhcFVud3JhcCAmJiBwb29sLm1pbnRCLmVxdWFscyhOQVRJVkVfTUlOVCkpIHtcbiAgICAgIHBvc3RJeHMucHVzaChjcmVhdGVDbG9zZUFjY291bnRJbnN0cnVjdGlvbihkZXBvc2l0b3JUb2tlbkFjY0IsIGRlcG9zaXRvciwgZGVwb3NpdG9yKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc3RJeHMubGVuZ3RoID4gMCA/IGJ1aWxkZXIucG9zdEluc3RydWN0aW9ucyhwb3N0SXhzKSA6IGJ1aWxkZXI7XG4gIH1cblxuICBhc3luYyBzd2FwKFxuICAgIHRyYWRlcjogUHVibGljS2V5LFxuICAgIHBvb2xQZGE6IFB1YmxpY0tleSxcbiAgICBzd2FwQVRvQjogYm9vbGVhbixcbiAgICBpbnB1dEFtb3VudDogQk4gfCBudW1iZXIsXG4gICAgbWluT3V0cHV0QW1vdW50OiBCTiB8IG51bWJlcixcbiAgICBvcHRpb25zPzogQW1tQWN0aW9uT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGF1dG9DcmVhdGVUb2tlbkFjY291bnRzID0gdHJ1ZSwgaW5jbHVkZUN1QnVkZ2V0ID0gdHJ1ZSwgY29tcHV0ZVVuaXRzIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZmV0Y2hQb29sKHBvb2xQZGEpO1xuICAgIGNvbnN0IFtyZXNlcnZlQV0gPSB0aGlzLmRlcml2ZVJlc2VydmVQREEocG9vbFBkYSwgcG9vbC5taW50QSk7XG4gICAgY29uc3QgW3Jlc2VydmVCXSA9IHRoaXMuZGVyaXZlUmVzZXJ2ZVBEQShwb29sUGRhLCBwb29sLm1pbnRCKTtcbiAgICBjb25zdCBbZmVlVmF1bHRdID0gdGhpcy5kZXJpdmVGZWVWYXVsdFBEQShwb29sUGRhKTtcbiAgICBjb25zdCB0cmFkZXJBY2NvdW50QSA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHBvb2wubWludEEsIHRyYWRlcik7XG4gICAgY29uc3QgdHJhZGVyQWNjb3VudEIgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhwb29sLm1pbnRCLCB0cmFkZXIpO1xuXG4gICAgY29uc3QgcHJlSXhzOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10gPSBbXTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIHByZUl4cy5wdXNoKFxuICAgICAgICBDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdExpbWl0KHtcbiAgICAgICAgICB1bml0czogY29tcHV0ZVVuaXRzID8/IHRoaXMuY29tcHV0ZVVuaXRzLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXV0b0NyZWF0ZVRva2VuQWNjb3VudHMpIHtcbiAgICAgIHByZUl4cy5wdXNoKFxuICAgICAgICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SWRlbXBvdGVudEluc3RydWN0aW9uKFxuICAgICAgICAgIHRyYWRlcixcbiAgICAgICAgICB0cmFkZXJBY2NvdW50QSxcbiAgICAgICAgICB0cmFkZXIsXG4gICAgICAgICAgcG9vbC5taW50QVxuICAgICAgICApLFxuICAgICAgICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SWRlbXBvdGVudEluc3RydWN0aW9uKFxuICAgICAgICAgIHRyYWRlcixcbiAgICAgICAgICB0cmFkZXJBY2NvdW50QixcbiAgICAgICAgICB0cmFkZXIsXG4gICAgICAgICAgcG9vbC5taW50QlxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBidWlsZGVyID0gc3dhcEl4KFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgdHJhZGVyLFxuICAgICAgcG9vbFBkYSxcbiAgICAgIHJlc2VydmVBLFxuICAgICAgcmVzZXJ2ZUIsXG4gICAgICBmZWVWYXVsdCxcbiAgICAgIHRyYWRlckFjY291bnRBLFxuICAgICAgdHJhZGVyQWNjb3VudEIsXG4gICAgICBzd2FwQVRvQixcbiAgICAgIGlucHV0QW1vdW50LFxuICAgICAgbWluT3V0cHV0QW1vdW50XG4gICAgKTtcblxuICAgIGlmIChwcmVJeHMubGVuZ3RoID4gMCkge1xuICAgICAgYnVpbGRlciA9IGJ1aWxkZXIucHJlSW5zdHJ1Y3Rpb25zKHByZUl4cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBhc3luYyBjcmFua1R3YXAocG9vbFBkYTogUHVibGljS2V5KSB7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZmV0Y2hQb29sKHBvb2xQZGEpO1xuICAgIGNvbnN0IFtyZXNlcnZlQV0gPSB0aGlzLmRlcml2ZVJlc2VydmVQREEocG9vbFBkYSwgcG9vbC5taW50QSk7XG4gICAgY29uc3QgW3Jlc2VydmVCXSA9IHRoaXMuZGVyaXZlUmVzZXJ2ZVBEQShwb29sUGRhLCBwb29sLm1pbnRCKTtcblxuICAgIHJldHVybiBjcmFua1R3YXBJeCh0aGlzLnByb2dyYW0sIHBvb2xQZGEsIHJlc2VydmVBLCByZXNlcnZlQik7XG4gIH1cblxuICBjZWFzZVRyYWRpbmcoYWRtaW46IFB1YmxpY0tleSwgcG9vbFBkYTogUHVibGljS2V5KSB7XG4gICAgcmV0dXJuIGNlYXNlVHJhZGluZ0l4KHRoaXMucHJvZ3JhbSwgYWRtaW4sIHBvb2xQZGEpO1xuICB9XG5cbiAgLyogSGlnaC1MZXZlbCBTd2FwIHdpdGggU2xpcHBhZ2UgKi9cblxuICAvKipcbiAgICogSGlnaC1sZXZlbCBzd2FwIGZ1bmN0aW9uIHRoYXQ6XG4gICAqIC0gRmV0Y2hlcyBjdXJyZW50IHJlc2VydmVzIGFuZCBjb21wdXRlcyBxdW90ZVxuICAgKiAtIENhbGN1bGF0ZXMgbWluT3V0cHV0IGJhc2VkIG9uIHNsaXBwYWdlIHRvbGVyYW5jZVxuICAgKiAtIEFkZHMgY29tcHV0ZSBidWRnZXQgaW5zdHJ1Y3Rpb24gKGlmIGluY2x1ZGVDdUJ1ZGdldCBpcyB0cnVlKVxuICAgKiAtIENyZWF0ZXMgdG9rZW4gYWNjb3VudHMgaWYgdGhleSBkb24ndCBleGlzdCAoaWYgYXV0b0NyZWF0ZVRva2VuQWNjb3VudHMgaXMgdHJ1ZSlcbiAgICovXG4gIGFzeW5jIHN3YXBXaXRoU2xpcHBhZ2UoXG4gICAgdHJhZGVyOiBQdWJsaWNLZXksXG4gICAgcG9vbFBkYTogUHVibGljS2V5LFxuICAgIHN3YXBBVG9COiBib29sZWFuLFxuICAgIGlucHV0QW1vdW50OiBCTiB8IG51bWJlcixcbiAgICBzbGlwcGFnZVBlcmNlbnQ6IG51bWJlciA9IDAuNSxcbiAgICBvcHRpb25zPzogQW1tQWN0aW9uT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGF1dG9DcmVhdGVUb2tlbkFjY291bnRzID0gdHJ1ZSwgaW5jbHVkZUN1QnVkZ2V0ID0gdHJ1ZSwgY29tcHV0ZVVuaXRzIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZmV0Y2hQb29sKHBvb2xQZGEpO1xuICAgIGNvbnN0IGlucHV0ID0gdHlwZW9mIGlucHV0QW1vdW50ID09PSBcIm51bWJlclwiID8gbmV3IEJOKGlucHV0QW1vdW50KSA6IGlucHV0QW1vdW50O1xuXG4gICAgLy8gR2V0IHF1b3RlIHdpdGggc2xpcHBhZ2VcbiAgICBjb25zdCBxdW90ZVJlc3VsdCA9IGF3YWl0IHRoaXMucXVvdGUocG9vbFBkYSwgc3dhcEFUb0IsIGlucHV0LCBzbGlwcGFnZVBlcmNlbnQpO1xuXG4gICAgLy8gRGVyaXZlIGFjY291bnRzXG4gICAgY29uc3QgW3Jlc2VydmVBXSA9IHRoaXMuZGVyaXZlUmVzZXJ2ZVBEQShwb29sUGRhLCBwb29sLm1pbnRBKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUJdID0gdGhpcy5kZXJpdmVSZXNlcnZlUERBKHBvb2xQZGEsIHBvb2wubWludEIpO1xuICAgIGNvbnN0IFtmZWVWYXVsdF0gPSB0aGlzLmRlcml2ZUZlZVZhdWx0UERBKHBvb2xQZGEpO1xuICAgIGNvbnN0IHRyYWRlckFjY291bnRBID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMocG9vbC5taW50QSwgdHJhZGVyKTtcbiAgICBjb25zdCB0cmFkZXJBY2NvdW50QiA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHBvb2wubWludEIsIHRyYWRlcik7XG5cbiAgICAvLyBCdWlsZCBiYXNlIHN3YXAgaW5zdHJ1Y3Rpb25cbiAgICBsZXQgYnVpbGRlciA9IHN3YXBJeChcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIHRyYWRlcixcbiAgICAgIHBvb2xQZGEsXG4gICAgICByZXNlcnZlQSxcbiAgICAgIHJlc2VydmVCLFxuICAgICAgZmVlVmF1bHQsXG4gICAgICB0cmFkZXJBY2NvdW50QSxcbiAgICAgIHRyYWRlckFjY291bnRCLFxuICAgICAgc3dhcEFUb0IsXG4gICAgICBpbnB1dCxcbiAgICAgIHF1b3RlUmVzdWx0Lm1pbk91dHB1dEFtb3VudFxuICAgICk7XG5cbiAgICBjb25zdCBwcmVJeHM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSA9IFtdO1xuXG4gICAgaWYgKGluY2x1ZGVDdUJ1ZGdldCkge1xuICAgICAgcHJlSXhzLnB1c2goXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChhdXRvQ3JlYXRlVG9rZW5BY2NvdW50cykge1xuICAgICAgcHJlSXhzLnB1c2goXG4gICAgICAgIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJZGVtcG90ZW50SW5zdHJ1Y3Rpb24oXG4gICAgICAgICAgdHJhZGVyLFxuICAgICAgICAgIHRyYWRlckFjY291bnRBLFxuICAgICAgICAgIHRyYWRlcixcbiAgICAgICAgICBwb29sLm1pbnRBXG4gICAgICAgICksXG4gICAgICAgIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJZGVtcG90ZW50SW5zdHJ1Y3Rpb24oXG4gICAgICAgICAgdHJhZGVyLFxuICAgICAgICAgIHRyYWRlckFjY291bnRCLFxuICAgICAgICAgIHRyYWRlcixcbiAgICAgICAgICBwb29sLm1pbnRCXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByZUl4cy5sZW5ndGggPiAwKSB7XG4gICAgICBidWlsZGVyID0gYnVpbGRlci5wcmVJbnN0cnVjdGlvbnMocHJlSXhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVpbGRlcixcbiAgICAgIHF1b3RlOiBxdW90ZVJlc3VsdCxcbiAgICB9O1xuICB9XG59XG4iXX0=
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AMMClient=void 0;const anchor_1=require("@coral-xyz/anchor"),web3_js_1=require("@solana/web3.js"),spl_token_1=require("@solana/spl-token"),constants_1=require("./constants"),utils_1=require("./utils"),instructions_1=require("./instructions"),idls_1=require("../generated/idls"),DEFAULT_COMPUTE_UNITS=3e5;class AMMClient{constructor(e,t,s){this.programId=t??constants_1.PROGRAM_ID,this.computeUnits=s??3e5,this.program=new anchor_1.Program(idls_1.AmmIDL,e)}derivePoolPDA(e,t,s){return(0,utils_1.derivePoolPDA)(e,t,s,this.programId)}deriveReservePDA(e,t){return(0,utils_1.deriveReservePDA)(e,t,this.programId)}deriveFeeVaultPDA(e){return(0,utils_1.deriveFeeVaultPDA)(e,this.programId)}async fetchPool(e){return(0,utils_1.fetchPoolAccount)(this.program,e)}async fetchReserves(e){const t=await this.fetchPool(e),[s]=this.deriveReservePDA(e,t.mintA),[n]=this.deriveReservePDA(e,t.mintB),i=this.program.provider.connection,[r,o]=await Promise.all([(0,spl_token_1.getAccount)(i,s),(0,spl_token_1.getAccount)(i,n)]);return{reserveA:new anchor_1.BN(r.amount.toString()),reserveB:new anchor_1.BN(o.amount.toString())}}async fetchMintDecimals(e){const t=await this.fetchPool(e),s=this.program.provider.connection,[n,i]=await Promise.all([(0,spl_token_1.getMint)(s,t.mintA),(0,spl_token_1.getMint)(s,t.mintB)]);return{decimalsA:n.decimals,decimalsB:i.decimals}}async fetchSpotPrice(e){const{reserveA:t,reserveB:s}=await this.fetchReserves(e),{decimalsA:n,decimalsB:i}=await this.fetchMintDecimals(e);return(0,utils_1.calculateSpotPrice)(t,s,n,i)}async fetchTwap(e){const t=await this.fetchPool(e);return(0,utils_1.calculateTwap)(t.oracle)}async quote(e,t,s,n=.5){const i=await this.fetchPool(e),{reserveA:r,reserveB:o}=await this.fetchReserves(e),{decimalsA:c,decimalsB:a}=await this.fetchMintDecimals(e),[u,l]=t?[r,o]:[o,r],[m,p]=t?[c,a]:[a,c];return(0,utils_1.createSwapQuote)(s,u,l,i.fee,m,p,t,n)}createPool(e,t,s,n,i,r,o,c,a=null){const[u]=this.derivePoolPDA(t,s,n),[l]=this.deriveReservePDA(u,s),[m]=this.deriveReservePDA(u,n),[p]=this.deriveFeeVaultPDA(u);return{builder:(0,instructions_1.createPool)(this.program,e,t,s,n,u,l,m,p,i,r,o,c,a),poolPda:u,reserveA:l,reserveB:m,feeVault:p}}async addLiquidity(e,t,s,n,i){const{autoWrapUnwrap:r=!0,includeCuBudget:o=!0,computeUnits:c}=i??{},a=await this.fetchPool(t),[u]=this.deriveReservePDA(t,a.mintA),[l]=this.deriveReservePDA(t,a.mintB),m=(0,spl_token_1.getAssociatedTokenAddressSync)(a.mintA,e),p=(0,spl_token_1.getAssociatedTokenAddressSync)(a.mintB,e),d=[];if(o&&d.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({units:c??this.computeUnits})),r&&a.mintA.equals(spl_token_1.NATIVE_MINT)){const t="number"==typeof s?new anchor_1.BN(s):s;d.push((0,spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(e,m,e,a.mintA),web3_js_1.SystemProgram.transfer({fromPubkey:e,toPubkey:m,lamports:BigInt(t.toString())}),(0,spl_token_1.createSyncNativeInstruction)(m))}if(r&&a.mintB.equals(spl_token_1.NATIVE_MINT)){const t="number"==typeof n?new anchor_1.BN(n):n;d.push((0,spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(e,p,e,a.mintB),web3_js_1.SystemProgram.transfer({fromPubkey:e,toPubkey:p,lamports:BigInt(t.toString())}),(0,spl_token_1.createSyncNativeInstruction)(p))}let _=(0,instructions_1.addLiquidity)(this.program,e,t,u,l,m,p,s,n);return d.length>0?_.preInstructions(d):_}async removeLiquidity(e,t,s,n,i){const{autoWrapUnwrap:r=!0,includeCuBudget:o=!0,computeUnits:c}=i??{},a=await this.fetchPool(t),[u]=this.deriveReservePDA(t,a.mintA),[l]=this.deriveReservePDA(t,a.mintB),m=(0,spl_token_1.getAssociatedTokenAddressSync)(a.mintA,e),p=(0,spl_token_1.getAssociatedTokenAddressSync)(a.mintB,e);let d=(0,instructions_1.removeLiquidity)(this.program,e,t,u,l,m,p,s,n);o&&(d=d.preInstructions([web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({units:c??this.computeUnits})]));const _=[];return r&&a.mintA.equals(spl_token_1.NATIVE_MINT)&&_.push((0,spl_token_1.createCloseAccountInstruction)(m,e,e)),r&&a.mintB.equals(spl_token_1.NATIVE_MINT)&&_.push((0,spl_token_1.createCloseAccountInstruction)(p,e,e)),_.length>0?d.postInstructions(_):d}async swap(e,t,s,n,i,r){const{autoCreateTokenAccounts:o=!0,includeCuBudget:c=!0,computeUnits:a}=r??{},u=await this.fetchPool(t),[l]=this.deriveReservePDA(t,u.mintA),[m]=this.deriveReservePDA(t,u.mintB),[p]=this.deriveFeeVaultPDA(t),d=(0,spl_token_1.getAssociatedTokenAddressSync)(u.mintA,e),_=(0,spl_token_1.getAssociatedTokenAddressSync)(u.mintB,e),A=[];c&&A.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({units:a??this.computeUnits})),o&&A.push((0,spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(e,d,e,u.mintA),(0,spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(e,_,e,u.mintB));let h=(0,instructions_1.swap)(this.program,e,t,l,m,p,d,_,s,n,i);return A.length>0&&(h=h.preInstructions(A)),h}async crankTwap(e){const t=await this.fetchPool(e),[s]=this.deriveReservePDA(e,t.mintA),[n]=this.deriveReservePDA(e,t.mintB);return(0,instructions_1.crankTwap)(this.program,e,s,n)}ceaseTrading(e,t){return(0,instructions_1.ceaseTrading)(this.program,e,t)}async swapWithSlippage(e,t,s,n,i=.5,r){const{autoCreateTokenAccounts:o=!0,includeCuBudget:c=!0,computeUnits:a}=r??{},u=await this.fetchPool(t),l="number"==typeof n?new anchor_1.BN(n):n,m=await this.quote(t,s,l,i),[p]=this.deriveReservePDA(t,u.mintA),[d]=this.deriveReservePDA(t,u.mintB),[_]=this.deriveFeeVaultPDA(t),A=(0,spl_token_1.getAssociatedTokenAddressSync)(u.mintA,e),h=(0,spl_token_1.getAssociatedTokenAddressSync)(u.mintB,e);let v=(0,instructions_1.swap)(this.program,e,t,p,d,_,A,h,s,l,m.minOutputAmount);const P=[];return c&&P.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({units:a??this.computeUnits})),o&&P.push((0,spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(e,A,e,u.mintA),(0,spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(e,h,e,u.mintB)),P.length>0&&(v=v.preInstructions(P)),{builder:v,quote:m}}}exports.AMMClient=AMMClient;
@@ -1,24 +1 @@
1
- "use strict";
2
- /*
3
- * Constants for the AMM program.
4
- * Parsed from the generated IDL to stay in sync with the Rust program.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.PRICE_SCALE = exports.AMM_VERSION = exports.MAX_FEE = exports.FEE_VAULT_SEED = exports.RESERVE_SEED = exports.POOL_SEED = exports.FEE_AUTHORITY = exports.PROGRAM_ID = void 0;
8
- const web3_js_1 = require("@solana/web3.js");
9
- const idls_1 = require("../generated/idls");
10
- const utils_1 = require("../utils");
11
- /* Program ID */
12
- exports.PROGRAM_ID = new web3_js_1.PublicKey(idls_1.AmmIDL.address);
13
- /* Authorities */
14
- exports.FEE_AUTHORITY = new web3_js_1.PublicKey((0, utils_1.getIdlConstant)(idls_1.AmmIDL, "FEE_AUTHORITY"));
15
- /* PDA Seeds */
16
- exports.POOL_SEED = (0, utils_1.parseIdlBytes)((0, utils_1.getIdlConstant)(idls_1.AmmIDL, "POOL_SEED"));
17
- exports.RESERVE_SEED = (0, utils_1.parseIdlBytes)((0, utils_1.getIdlConstant)(idls_1.AmmIDL, "RESERVE_SEED"));
18
- exports.FEE_VAULT_SEED = (0, utils_1.parseIdlBytes)((0, utils_1.getIdlConstant)(idls_1.AmmIDL, "FEE_VAULT_SEED"));
19
- /* Numeric Constants */
20
- exports.MAX_FEE = Number((0, utils_1.getIdlConstant)(idls_1.AmmIDL, "MAX_FEE"));
21
- exports.AMM_VERSION = Number((0, utils_1.getIdlConstant)(idls_1.AmmIDL, "AMM_VERSION"));
22
- /* Price Constants (not in IDL - internal to Rust) */
23
- exports.PRICE_SCALE = 1000000000000n;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FtbS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBRUgsNkNBQTRDO0FBQzVDLDRDQUEyQztBQUMzQyxvQ0FBeUQ7QUFFekQsZ0JBQWdCO0FBRUgsUUFBQSxVQUFVLEdBQUcsSUFBSSxtQkFBUyxDQUFDLGFBQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV4RCxpQkFBaUI7QUFFSixRQUFBLGFBQWEsR0FBRyxJQUFJLG1CQUFTLENBQUMsSUFBQSxzQkFBYyxFQUFDLGFBQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXBGLGVBQWU7QUFFRixRQUFBLFNBQVMsR0FBRyxJQUFBLHFCQUFhLEVBQUMsSUFBQSxzQkFBYyxFQUFDLGFBQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFFBQUEsWUFBWSxHQUFHLElBQUEscUJBQWEsRUFBQyxJQUFBLHNCQUFjLEVBQUMsYUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDckUsUUFBQSxjQUFjLEdBQUcsSUFBQSxxQkFBYSxFQUFDLElBQUEsc0JBQWMsRUFBQyxhQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBRXRGLHVCQUF1QjtBQUVWLFFBQUEsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFBLHNCQUFjLEVBQUMsYUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsUUFBQSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUEsc0JBQWMsRUFBQyxhQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUV6RSxxREFBcUQ7QUFFeEMsUUFBQSxXQUFXLEdBQUcsY0FBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb25zdGFudHMgZm9yIHRoZSBBTU0gcHJvZ3JhbS5cbiAqIFBhcnNlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgSURMIHRvIHN0YXkgaW4gc3luYyB3aXRoIHRoZSBSdXN0IHByb2dyYW0uXG4gKi9cblxuaW1wb3J0IHsgUHVibGljS2V5IH0gZnJvbSBcIkBzb2xhbmEvd2ViMy5qc1wiO1xuaW1wb3J0IHsgQW1tSURMIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC9pZGxzXCI7XG5pbXBvcnQgeyBwYXJzZUlkbEJ5dGVzLCBnZXRJZGxDb25zdGFudCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG4vKiBQcm9ncmFtIElEICovXG5cbmV4cG9ydCBjb25zdCBQUk9HUkFNX0lEID0gbmV3IFB1YmxpY0tleShBbW1JREwuYWRkcmVzcyk7XG5cbi8qIEF1dGhvcml0aWVzICovXG5cbmV4cG9ydCBjb25zdCBGRUVfQVVUSE9SSVRZID0gbmV3IFB1YmxpY0tleShnZXRJZGxDb25zdGFudChBbW1JREwsIFwiRkVFX0FVVEhPUklUWVwiKSk7XG5cbi8qIFBEQSBTZWVkcyAqL1xuXG5leHBvcnQgY29uc3QgUE9PTF9TRUVEID0gcGFyc2VJZGxCeXRlcyhnZXRJZGxDb25zdGFudChBbW1JREwsIFwiUE9PTF9TRUVEXCIpKTtcbmV4cG9ydCBjb25zdCBSRVNFUlZFX1NFRUQgPSBwYXJzZUlkbEJ5dGVzKGdldElkbENvbnN0YW50KEFtbUlETCwgXCJSRVNFUlZFX1NFRURcIikpO1xuZXhwb3J0IGNvbnN0IEZFRV9WQVVMVF9TRUVEID0gcGFyc2VJZGxCeXRlcyhnZXRJZGxDb25zdGFudChBbW1JREwsIFwiRkVFX1ZBVUxUX1NFRURcIikpO1xuXG4vKiBOdW1lcmljIENvbnN0YW50cyAqL1xuXG5leHBvcnQgY29uc3QgTUFYX0ZFRSA9IE51bWJlcihnZXRJZGxDb25zdGFudChBbW1JREwsIFwiTUFYX0ZFRVwiKSk7XG5leHBvcnQgY29uc3QgQU1NX1ZFUlNJT04gPSBOdW1iZXIoZ2V0SWRsQ29uc3RhbnQoQW1tSURMLCBcIkFNTV9WRVJTSU9OXCIpKTtcblxuLyogUHJpY2UgQ29uc3RhbnRzIChub3QgaW4gSURMIC0gaW50ZXJuYWwgdG8gUnVzdCkgKi9cblxuZXhwb3J0IGNvbnN0IFBSSUNFX1NDQUxFID0gMV8wMDBfMDAwXzAwMF8wMDBuO1xuIl19
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PRICE_SCALE=exports.AMM_VERSION=exports.MAX_FEE=exports.FEE_VAULT_SEED=exports.RESERVE_SEED=exports.POOL_SEED=exports.FEE_AUTHORITY=exports.PROGRAM_ID=void 0;const web3_js_1=require("@solana/web3.js"),idls_1=require("../generated/idls"),utils_1=require("../utils");exports.PROGRAM_ID=new web3_js_1.PublicKey(idls_1.AmmIDL.address),exports.FEE_AUTHORITY=new web3_js_1.PublicKey((0,utils_1.getIdlConstant)(idls_1.AmmIDL,"FEE_AUTHORITY")),exports.POOL_SEED=(0,utils_1.parseIdlBytes)((0,utils_1.getIdlConstant)(idls_1.AmmIDL,"POOL_SEED")),exports.RESERVE_SEED=(0,utils_1.parseIdlBytes)((0,utils_1.getIdlConstant)(idls_1.AmmIDL,"RESERVE_SEED")),exports.FEE_VAULT_SEED=(0,utils_1.parseIdlBytes)((0,utils_1.getIdlConstant)(idls_1.AmmIDL,"FEE_VAULT_SEED")),exports.MAX_FEE=Number((0,utils_1.getIdlConstant)(idls_1.AmmIDL,"MAX_FEE")),exports.AMM_VERSION=Number((0,utils_1.getIdlConstant)(idls_1.AmmIDL,"AMM_VERSION")),exports.PRICE_SCALE=1000000000000n;
package/dist/amm/index.js CHANGED
@@ -1,22 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./constants"), exports);
18
- __exportStar(require("./types"), exports);
19
- __exportStar(require("./utils"), exports);
20
- __exportStar(require("./instructions"), exports);
21
- __exportStar(require("./client"), exports);
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYW1tL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsMENBQXdCO0FBQ3hCLDBDQUF3QjtBQUN4QixpREFBK0I7QUFDL0IsMkNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luc3RydWN0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50XCI7XG4iXX0=
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,o)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),__exportStar=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||__createBinding(t,e,r)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./constants"),exports),__exportStar(require("./types"),exports),__exportStar(require("./utils"),exports),__exportStar(require("./instructions"),exports),__exportStar(require("./client"),exports);
@@ -1,79 +1 @@
1
- "use strict";
2
- /*
3
- * Low-level instruction builders for the AMM program.
4
- * These are thin wrappers around the program methods - use AMMClient for higher-level operations.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.createPool = createPool;
8
- exports.addLiquidity = addLiquidity;
9
- exports.removeLiquidity = removeLiquidity;
10
- exports.swap = swap;
11
- exports.crankTwap = crankTwap;
12
- exports.ceaseTrading = ceaseTrading;
13
- const anchor_1 = require("@coral-xyz/anchor");
14
- /* Instruction Builders */
15
- function createPool(program, payer, admin, mintA, mintB, pool, reserveA, reserveB, feeVault, fee, startingObservation, maxObservationDelta, warmupDuration, liquidityProvider = null) {
16
- return program.methods
17
- .createPool(fee, startingObservation, maxObservationDelta, warmupDuration, liquidityProvider)
18
- .accountsPartial({
19
- payer,
20
- admin,
21
- mintA,
22
- mintB,
23
- pool,
24
- reserveA,
25
- reserveB,
26
- feeVault,
27
- });
28
- }
29
- function addLiquidity(program, depositor, pool, reserveA, reserveB, depositorTokenAccA, depositorTokenAccB, amountA, amountB) {
30
- const amountABN = typeof amountA === "number" ? new anchor_1.BN(amountA) : amountA;
31
- const amountBBN = typeof amountB === "number" ? new anchor_1.BN(amountB) : amountB;
32
- return program.methods.addLiquidity(amountABN, amountBBN).accountsPartial({
33
- depositor,
34
- pool,
35
- reserveA,
36
- reserveB,
37
- depositorTokenAccA,
38
- depositorTokenAccB,
39
- });
40
- }
41
- function removeLiquidity(program, depositor, pool, reserveA, reserveB, depositorTokenAccA, depositorTokenAccB, amountA, amountB) {
42
- const amountABN = typeof amountA === "number" ? new anchor_1.BN(amountA) : amountA;
43
- const amountBBN = typeof amountB === "number" ? new anchor_1.BN(amountB) : amountB;
44
- return program.methods.removeLiquidity(amountABN, amountBBN).accountsPartial({
45
- depositor,
46
- pool,
47
- reserveA,
48
- reserveB,
49
- depositorTokenAccA,
50
- depositorTokenAccB,
51
- });
52
- }
53
- function swap(program, trader, pool, reserveA, reserveB, feeVault, traderAccountA, traderAccountB, swapAToB, inputAmount, minOutputAmount) {
54
- const inputAmountBN = typeof inputAmount === "number" ? new anchor_1.BN(inputAmount) : inputAmount;
55
- const minOutputAmountBN = typeof minOutputAmount === "number" ? new anchor_1.BN(minOutputAmount) : minOutputAmount;
56
- return program.methods.swap(swapAToB, inputAmountBN, minOutputAmountBN).accountsPartial({
57
- trader,
58
- pool,
59
- reserveA,
60
- reserveB,
61
- feeVault,
62
- traderAccountA,
63
- traderAccountB,
64
- });
65
- }
66
- function crankTwap(program, pool, reserveA, reserveB) {
67
- return program.methods.crankTwap().accountsPartial({
68
- pool,
69
- reserveA,
70
- reserveB,
71
- });
72
- }
73
- function ceaseTrading(program, admin, pool) {
74
- return program.methods.ceaseTrading().accountsPartial({
75
- admin,
76
- pool,
77
- });
78
- }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FtbS9pbnN0cnVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUFRSCxnQ0E0QkM7QUFFRCxvQ0FzQkM7QUFFRCwwQ0FzQkM7QUFFRCxvQkF5QkM7QUFFRCw4QkFXQztBQUVELG9DQVNDO0FBcklELDhDQUFnRDtBQUloRCwwQkFBMEI7QUFFMUIsU0FBZ0IsVUFBVSxDQUN4QixPQUFxQixFQUNyQixLQUFnQixFQUNoQixLQUFnQixFQUNoQixLQUFnQixFQUNoQixLQUFnQixFQUNoQixJQUFlLEVBQ2YsUUFBbUIsRUFDbkIsUUFBbUIsRUFDbkIsUUFBbUIsRUFDbkIsR0FBVyxFQUNYLG1CQUF1QixFQUN2QixtQkFBdUIsRUFDdkIsY0FBc0IsRUFDdEIsb0JBQXNDLElBQUk7SUFFMUMsT0FBTyxPQUFPLENBQUMsT0FBTztTQUNuQixVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQztTQUM1RixlQUFlLENBQUM7UUFDZixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsSUFBSTtRQUNKLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtLQUNULENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQzFCLE9BQXFCLEVBQ3JCLFNBQW9CLEVBQ3BCLElBQWUsRUFDZixRQUFtQixFQUNuQixRQUFtQixFQUNuQixrQkFBNkIsRUFDN0Isa0JBQTZCLEVBQzdCLE9BQW9CLEVBQ3BCLE9BQW9CO0lBRXBCLE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFFMUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ3hFLFNBQVM7UUFDVCxJQUFJO1FBQ0osUUFBUTtRQUNSLFFBQVE7UUFDUixrQkFBa0I7UUFDbEIsa0JBQWtCO0tBQ25CLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQzdCLE9BQXFCLEVBQ3JCLFNBQW9CLEVBQ3BCLElBQWUsRUFDZixRQUFtQixFQUNuQixRQUFtQixFQUNuQixrQkFBNkIsRUFDN0Isa0JBQTZCLEVBQzdCLE9BQW9CLEVBQ3BCLE9BQW9CO0lBRXBCLE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFFMUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQzNFLFNBQVM7UUFDVCxJQUFJO1FBQ0osUUFBUTtRQUNSLFFBQVE7UUFDUixrQkFBa0I7UUFDbEIsa0JBQWtCO0tBQ25CLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixJQUFJLENBQ2xCLE9BQXFCLEVBQ3JCLE1BQWlCLEVBQ2pCLElBQWUsRUFDZixRQUFtQixFQUNuQixRQUFtQixFQUNuQixRQUFtQixFQUNuQixjQUF5QixFQUN6QixjQUF5QixFQUN6QixRQUFpQixFQUNqQixXQUF3QixFQUN4QixlQUE0QjtJQUU1QixNQUFNLGFBQWEsR0FBRyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFFMUcsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ3RGLE1BQU07UUFDTixJQUFJO1FBQ0osUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsY0FBYztRQUNkLGNBQWM7S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsU0FBUyxDQUN2QixPQUFxQixFQUNyQixJQUFlLEVBQ2YsUUFBbUIsRUFDbkIsUUFBbUI7SUFFbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUNqRCxJQUFJO1FBQ0osUUFBUTtRQUNSLFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUMxQixPQUFxQixFQUNyQixLQUFnQixFQUNoQixJQUFlO0lBRWYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUNwRCxLQUFLO1FBQ0wsSUFBSTtLQUNMLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTG93LWxldmVsIGluc3RydWN0aW9uIGJ1aWxkZXJzIGZvciB0aGUgQU1NIHByb2dyYW0uXG4gKiBUaGVzZSBhcmUgdGhpbiB3cmFwcGVycyBhcm91bmQgdGhlIHByb2dyYW0gbWV0aG9kcyAtIHVzZSBBTU1DbGllbnQgZm9yIGhpZ2hlci1sZXZlbCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IFByb2dyYW0sIEJOIH0gZnJvbSBcIkBjb3JhbC14eXovYW5jaG9yXCI7XG5pbXBvcnQgeyBQdWJsaWNLZXkgfSBmcm9tIFwiQHNvbGFuYS93ZWIzLmpzXCI7XG5pbXBvcnQgeyBBbW0gfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKiBJbnN0cnVjdGlvbiBCdWlsZGVycyAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9vbChcbiAgcHJvZ3JhbTogUHJvZ3JhbTxBbW0+LFxuICBwYXllcjogUHVibGljS2V5LFxuICBhZG1pbjogUHVibGljS2V5LFxuICBtaW50QTogUHVibGljS2V5LFxuICBtaW50QjogUHVibGljS2V5LFxuICBwb29sOiBQdWJsaWNLZXksXG4gIHJlc2VydmVBOiBQdWJsaWNLZXksXG4gIHJlc2VydmVCOiBQdWJsaWNLZXksXG4gIGZlZVZhdWx0OiBQdWJsaWNLZXksXG4gIGZlZTogbnVtYmVyLFxuICBzdGFydGluZ09ic2VydmF0aW9uOiBCTixcbiAgbWF4T2JzZXJ2YXRpb25EZWx0YTogQk4sXG4gIHdhcm11cER1cmF0aW9uOiBudW1iZXIsXG4gIGxpcXVpZGl0eVByb3ZpZGVyOiBQdWJsaWNLZXkgfCBudWxsID0gbnVsbFxuKSB7XG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHNcbiAgICAuY3JlYXRlUG9vbChmZWUsIHN0YXJ0aW5nT2JzZXJ2YXRpb24sIG1heE9ic2VydmF0aW9uRGVsdGEsIHdhcm11cER1cmF0aW9uLCBsaXF1aWRpdHlQcm92aWRlcilcbiAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgIHBheWVyLFxuICAgICAgYWRtaW4sXG4gICAgICBtaW50QSxcbiAgICAgIG1pbnRCLFxuICAgICAgcG9vbCxcbiAgICAgIHJlc2VydmVBLFxuICAgICAgcmVzZXJ2ZUIsXG4gICAgICBmZWVWYXVsdCxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExpcXVpZGl0eShcbiAgcHJvZ3JhbTogUHJvZ3JhbTxBbW0+LFxuICBkZXBvc2l0b3I6IFB1YmxpY0tleSxcbiAgcG9vbDogUHVibGljS2V5LFxuICByZXNlcnZlQTogUHVibGljS2V5LFxuICByZXNlcnZlQjogUHVibGljS2V5LFxuICBkZXBvc2l0b3JUb2tlbkFjY0E6IFB1YmxpY0tleSxcbiAgZGVwb3NpdG9yVG9rZW5BY2NCOiBQdWJsaWNLZXksXG4gIGFtb3VudEE6IEJOIHwgbnVtYmVyLFxuICBhbW91bnRCOiBCTiB8IG51bWJlclxuKSB7XG4gIGNvbnN0IGFtb3VudEFCTiA9IHR5cGVvZiBhbW91bnRBID09PSBcIm51bWJlclwiID8gbmV3IEJOKGFtb3VudEEpIDogYW1vdW50QTtcbiAgY29uc3QgYW1vdW50QkJOID0gdHlwZW9mIGFtb3VudEIgPT09IFwibnVtYmVyXCIgPyBuZXcgQk4oYW1vdW50QikgOiBhbW91bnRCO1xuXG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHMuYWRkTGlxdWlkaXR5KGFtb3VudEFCTiwgYW1vdW50QkJOKS5hY2NvdW50c1BhcnRpYWwoe1xuICAgIGRlcG9zaXRvcixcbiAgICBwb29sLFxuICAgIHJlc2VydmVBLFxuICAgIHJlc2VydmVCLFxuICAgIGRlcG9zaXRvclRva2VuQWNjQSxcbiAgICBkZXBvc2l0b3JUb2tlbkFjY0IsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGlxdWlkaXR5KFxuICBwcm9ncmFtOiBQcm9ncmFtPEFtbT4sXG4gIGRlcG9zaXRvcjogUHVibGljS2V5LFxuICBwb29sOiBQdWJsaWNLZXksXG4gIHJlc2VydmVBOiBQdWJsaWNLZXksXG4gIHJlc2VydmVCOiBQdWJsaWNLZXksXG4gIGRlcG9zaXRvclRva2VuQWNjQTogUHVibGljS2V5LFxuICBkZXBvc2l0b3JUb2tlbkFjY0I6IFB1YmxpY0tleSxcbiAgYW1vdW50QTogQk4gfCBudW1iZXIsXG4gIGFtb3VudEI6IEJOIHwgbnVtYmVyXG4pIHtcbiAgY29uc3QgYW1vdW50QUJOID0gdHlwZW9mIGFtb3VudEEgPT09IFwibnVtYmVyXCIgPyBuZXcgQk4oYW1vdW50QSkgOiBhbW91bnRBO1xuICBjb25zdCBhbW91bnRCQk4gPSB0eXBlb2YgYW1vdW50QiA9PT0gXCJudW1iZXJcIiA/IG5ldyBCTihhbW91bnRCKSA6IGFtb3VudEI7XG5cbiAgcmV0dXJuIHByb2dyYW0ubWV0aG9kcy5yZW1vdmVMaXF1aWRpdHkoYW1vdW50QUJOLCBhbW91bnRCQk4pLmFjY291bnRzUGFydGlhbCh7XG4gICAgZGVwb3NpdG9yLFxuICAgIHBvb2wsXG4gICAgcmVzZXJ2ZUEsXG4gICAgcmVzZXJ2ZUIsXG4gICAgZGVwb3NpdG9yVG9rZW5BY2NBLFxuICAgIGRlcG9zaXRvclRva2VuQWNjQixcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzd2FwKFxuICBwcm9ncmFtOiBQcm9ncmFtPEFtbT4sXG4gIHRyYWRlcjogUHVibGljS2V5LFxuICBwb29sOiBQdWJsaWNLZXksXG4gIHJlc2VydmVBOiBQdWJsaWNLZXksXG4gIHJlc2VydmVCOiBQdWJsaWNLZXksXG4gIGZlZVZhdWx0OiBQdWJsaWNLZXksXG4gIHRyYWRlckFjY291bnRBOiBQdWJsaWNLZXksXG4gIHRyYWRlckFjY291bnRCOiBQdWJsaWNLZXksXG4gIHN3YXBBVG9COiBib29sZWFuLFxuICBpbnB1dEFtb3VudDogQk4gfCBudW1iZXIsXG4gIG1pbk91dHB1dEFtb3VudDogQk4gfCBudW1iZXJcbikge1xuICBjb25zdCBpbnB1dEFtb3VudEJOID0gdHlwZW9mIGlucHV0QW1vdW50ID09PSBcIm51bWJlclwiID8gbmV3IEJOKGlucHV0QW1vdW50KSA6IGlucHV0QW1vdW50O1xuICBjb25zdCBtaW5PdXRwdXRBbW91bnRCTiA9IHR5cGVvZiBtaW5PdXRwdXRBbW91bnQgPT09IFwibnVtYmVyXCIgPyBuZXcgQk4obWluT3V0cHV0QW1vdW50KSA6IG1pbk91dHB1dEFtb3VudDtcblxuICByZXR1cm4gcHJvZ3JhbS5tZXRob2RzLnN3YXAoc3dhcEFUb0IsIGlucHV0QW1vdW50Qk4sIG1pbk91dHB1dEFtb3VudEJOKS5hY2NvdW50c1BhcnRpYWwoe1xuICAgIHRyYWRlcixcbiAgICBwb29sLFxuICAgIHJlc2VydmVBLFxuICAgIHJlc2VydmVCLFxuICAgIGZlZVZhdWx0LFxuICAgIHRyYWRlckFjY291bnRBLFxuICAgIHRyYWRlckFjY291bnRCLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyYW5rVHdhcChcbiAgcHJvZ3JhbTogUHJvZ3JhbTxBbW0+LFxuICBwb29sOiBQdWJsaWNLZXksXG4gIHJlc2VydmVBOiBQdWJsaWNLZXksXG4gIHJlc2VydmVCOiBQdWJsaWNLZXlcbikge1xuICByZXR1cm4gcHJvZ3JhbS5tZXRob2RzLmNyYW5rVHdhcCgpLmFjY291bnRzUGFydGlhbCh7XG4gICAgcG9vbCxcbiAgICByZXNlcnZlQSxcbiAgICByZXNlcnZlQixcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZWFzZVRyYWRpbmcoXG4gIHByb2dyYW06IFByb2dyYW08QW1tPixcbiAgYWRtaW46IFB1YmxpY0tleSxcbiAgcG9vbDogUHVibGljS2V5XG4pIHtcbiAgcmV0dXJuIHByb2dyYW0ubWV0aG9kcy5jZWFzZVRyYWRpbmcoKS5hY2NvdW50c1BhcnRpYWwoe1xuICAgIGFkbWluLFxuICAgIHBvb2wsXG4gIH0pO1xufVxuIl19
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createPool=createPool,exports.addLiquidity=addLiquidity,exports.removeLiquidity=removeLiquidity,exports.swap=swap,exports.crankTwap=crankTwap,exports.ceaseTrading=ceaseTrading;const anchor_1=require("@coral-xyz/anchor");function createPool(e,r,o,t,n,a,c,i,s,u,d,p,l,m=null){return e.methods.createPool(u,d,p,l,m).accountsPartial({payer:r,admin:o,mintA:t,mintB:n,pool:a,reserveA:c,reserveB:i,feeVault:s})}function addLiquidity(e,r,o,t,n,a,c,i,s){const u="number"==typeof i?new anchor_1.BN(i):i,d="number"==typeof s?new anchor_1.BN(s):s;return e.methods.addLiquidity(u,d).accountsPartial({depositor:r,pool:o,reserveA:t,reserveB:n,depositorTokenAccA:a,depositorTokenAccB:c})}function removeLiquidity(e,r,o,t,n,a,c,i,s){const u="number"==typeof i?new anchor_1.BN(i):i,d="number"==typeof s?new anchor_1.BN(s):s;return e.methods.removeLiquidity(u,d).accountsPartial({depositor:r,pool:o,reserveA:t,reserveB:n,depositorTokenAccA:a,depositorTokenAccB:c})}function swap(e,r,o,t,n,a,c,i,s,u,d){const p="number"==typeof u?new anchor_1.BN(u):u,l="number"==typeof d?new anchor_1.BN(d):d;return e.methods.swap(s,p,l).accountsPartial({trader:r,pool:o,reserveA:t,reserveB:n,feeVault:a,traderAccountA:c,traderAccountB:i})}function crankTwap(e,r,o,t){return e.methods.crankTwap().accountsPartial({pool:r,reserveA:o,reserveB:t})}function ceaseTrading(e,r,o){return e.methods.ceaseTrading().accountsPartial({admin:r,pool:o})}
package/dist/amm/types.js CHANGED
@@ -1,14 +1 @@
1
- "use strict";
2
- /*
3
- * Type definitions for the AMM program.
4
- * Exports IDL-derived types and SDK-friendly enums.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.PoolState = void 0;
8
- /* Enums */
9
- var PoolState;
10
- (function (PoolState) {
11
- PoolState["Trading"] = "trading";
12
- PoolState["Finalized"] = "finalized";
13
- })(PoolState || (exports.PoolState = PoolState = {}));
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYW1tL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQXlCSCxXQUFXO0FBRVgsSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLGdDQUFtQixDQUFBO0lBQ25CLG9DQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxTQUFTLHlCQUFULFNBQVMsUUFHcEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIEFNTSBwcm9ncmFtLlxuICogRXhwb3J0cyBJREwtZGVyaXZlZCB0eXBlcyBhbmQgU0RLLWZyaWVuZGx5IGVudW1zLlxuICovXG5cbmltcG9ydCB7IEJOLCBJZGxBY2NvdW50cywgSWRsRXZlbnRzLCBJZGxUeXBlcyB9IGZyb20gXCJAY29yYWwteHl6L2FuY2hvclwiO1xuaW1wb3J0IHsgVHhPcHRpb25zIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbi8qIElETCBUeXBlIFJlLWV4cG9ydCAqL1xuXG5leHBvcnQgeyBBbW0gfSBmcm9tIFwiLi4vZ2VuZXJhdGVkL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFtbSB9IGZyb20gXCIuLi9nZW5lcmF0ZWQvdHlwZXNcIjtcblxuLyogSURMLWRlcml2ZWQgVHlwZXMgKi9cblxuZXhwb3J0IHR5cGUgUG9vbEFjY291bnQgPSBJZGxBY2NvdW50czxBbW0+W1wicG9vbEFjY291bnRcIl07XG5leHBvcnQgdHlwZSBQb29sU3RhdGVSYXcgPSBJZGxUeXBlczxBbW0+W1wicG9vbFN0YXRlXCJdO1xuZXhwb3J0IHR5cGUgVHdhcE9yYWNsZSA9IElkbFR5cGVzPEFtbT5bXCJ0d2FwT3JhY2xlXCJdO1xuZXhwb3J0IHR5cGUgUG9vbEJ1bXBzID0gSWRsVHlwZXM8QW1tPltcInBvb2xCdW1wc1wiXTtcblxuLyogRXZlbnQgVHlwZXMgKi9cblxuZXhwb3J0IHR5cGUgUG9vbENyZWF0ZWRFdmVudCA9IElkbEV2ZW50czxBbW0+W1wicG9vbENyZWF0ZWRcIl07XG5leHBvcnQgdHlwZSBMaXF1aWRpdHlBZGRlZEV2ZW50ID0gSWRsRXZlbnRzPEFtbT5bXCJsaXF1aWRpdHlBZGRlZFwiXTtcbmV4cG9ydCB0eXBlIExpcXVpZGl0eVJlbW92ZWRFdmVudCA9IElkbEV2ZW50czxBbW0+W1wibGlxdWlkaXR5UmVtb3ZlZFwiXTtcbmV4cG9ydCB0eXBlIENvbmRTd2FwRXZlbnQgPSBJZGxFdmVudHM8QW1tPltcImNvbmRTd2FwXCJdO1xuZXhwb3J0IHR5cGUgVFdBUFVwZGF0ZUV2ZW50ID0gSWRsRXZlbnRzPEFtbT5bXCJ0d2FwVXBkYXRlXCJdO1xuXG4vKiBFbnVtcyAqL1xuXG5leHBvcnQgZW51bSBQb29sU3RhdGUge1xuICBUcmFkaW5nID0gXCJ0cmFkaW5nXCIsXG4gIEZpbmFsaXplZCA9IFwiZmluYWxpemVkXCIsXG59XG5cbi8qIFF1b3RlIFR5cGVzICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3dhcFF1b3RlIHtcbiAgaW5wdXRBbW91bnQ6IEJOO1xuICBvdXRwdXRBbW91bnQ6IEJOO1xuICBtaW5PdXRwdXRBbW91bnQ6IEJOO1xuICBmZWVBbW91bnQ6IEJOO1xuICBwcmljZUltcGFjdDogbnVtYmVyO1xuICBzcG90UHJpY2VCZWZvcmU6IEJOO1xuICBzcG90UHJpY2VBZnRlcjogQk47XG59XG5cbi8qIEV2ZW50IFVuaW9uIFR5cGUgKi9cblxuZXhwb3J0IHR5cGUgQU1NRXZlbnQgPVxuICB8IHsgbmFtZTogXCJQb29sQ3JlYXRlZFwiOyBkYXRhOiBQb29sQ3JlYXRlZEV2ZW50IH1cbiAgfCB7IG5hbWU6IFwiTGlxdWlkaXR5QWRkZWRcIjsgZGF0YTogTGlxdWlkaXR5QWRkZWRFdmVudCB9XG4gIHwgeyBuYW1lOiBcIkxpcXVpZGl0eVJlbW92ZWRcIjsgZGF0YTogTGlxdWlkaXR5UmVtb3ZlZEV2ZW50IH1cbiAgfCB7IG5hbWU6IFwiQ29uZFN3YXBcIjsgZGF0YTogQ29uZFN3YXBFdmVudCB9XG4gIHwgeyBuYW1lOiBcIlRXQVBVcGRhdGVcIjsgZGF0YTogVFdBUFVwZGF0ZUV2ZW50IH07XG5cbi8qIE9wdGlvbnMgKi9cblxuZXhwb3J0IGludGVyZmFjZSBBbW1BY3Rpb25PcHRpb25zIGV4dGVuZHMgVHhPcHRpb25zIHtcbiAgYXV0b1dyYXBVbndyYXA/OiBib29sZWFuOyAvLyBBdXRvIHdyYXAvdW53cmFwIG5hdGl2ZSBTT0wgKGRlZmF1bHQ6IHRydWUpIC0gZm9yIGxpcXVpZGl0eSBvcGVyYXRpb25zXG4gIGF1dG9DcmVhdGVUb2tlbkFjY291bnRzPzogYm9vbGVhbjsgLy8gQXV0byBjcmVhdGUgdG9rZW4gYWNjb3VudHMgKGRlZmF1bHQ6IHRydWUpIC0gZm9yIHN3YXBzXG59XG4iXX0=
1
+ "use strict";var PoolState;Object.defineProperty(exports,"__esModule",{value:!0}),exports.PoolState=void 0,function(t){t.Trading="trading",t.Finalized="finalized"}(PoolState||(exports.PoolState=PoolState={}));