@metadaoproject/futarchy 0.4.0-alpha.0 → 0.4.0-alpha.10

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 (55) hide show
  1. package/package.json +5 -1
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.js +0 -16
  4. package/dist/index.js.map +0 -1
  5. package/dist/v0.4/AmmClient.d.ts +0 -246
  6. package/dist/v0.4/AmmClient.js +0 -272
  7. package/dist/v0.4/AmmClient.js.map +0 -1
  8. package/dist/v0.4/AutocratClient.d.ts +0 -225
  9. package/dist/v0.4/AutocratClient.js +0 -361
  10. package/dist/v0.4/AutocratClient.js.map +0 -1
  11. package/dist/v0.4/ConditionalVaultClient.d.ts +0 -275
  12. package/dist/v0.4/ConditionalVaultClient.js +0 -222
  13. package/dist/v0.4/ConditionalVaultClient.js.map +0 -1
  14. package/dist/v0.4/constants.d.ts +0 -9
  15. package/dist/v0.4/constants.js +0 -10
  16. package/dist/v0.4/constants.js.map +0 -1
  17. package/dist/v0.4/index.d.ts +0 -6
  18. package/dist/v0.4/index.js +0 -7
  19. package/dist/v0.4/index.js.map +0 -1
  20. package/dist/v0.4/types/amm.d.ts +0 -542
  21. package/dist/v0.4/types/amm.js +0 -542
  22. package/dist/v0.4/types/amm.js.map +0 -1
  23. package/dist/v0.4/types/autocrat.d.ts +0 -636
  24. package/dist/v0.4/types/autocrat.js +0 -636
  25. package/dist/v0.4/types/autocrat.js.map +0 -1
  26. package/dist/v0.4/types/conditional_vault.d.ts +0 -503
  27. package/dist/v0.4/types/conditional_vault.js +0 -503
  28. package/dist/v0.4/types/conditional_vault.js.map +0 -1
  29. package/dist/v0.4/types/index.d.ts +0 -21
  30. package/dist/v0.4/types/index.js +0 -4
  31. package/dist/v0.4/types/index.js.map +0 -1
  32. package/dist/v0.4/types/utils.d.ts +0 -3
  33. package/dist/v0.4/types/utils.js +0 -2
  34. package/dist/v0.4/types/utils.js.map +0 -1
  35. package/dist/v0.4/utils/cu.d.ts +0 -10
  36. package/dist/v0.4/utils/cu.js +0 -11
  37. package/dist/v0.4/utils/cu.js.map +0 -1
  38. package/dist/v0.4/utils/filters.d.ts +0 -3
  39. package/dist/v0.4/utils/filters.js +0 -14
  40. package/dist/v0.4/utils/filters.js.map +0 -1
  41. package/dist/v0.4/utils/index.d.ts +0 -16
  42. package/dist/v0.4/utils/index.js +0 -30
  43. package/dist/v0.4/utils/index.js.map +0 -1
  44. package/dist/v0.4/utils/instruction.d.ts +0 -4
  45. package/dist/v0.4/utils/instruction.js +0 -10
  46. package/dist/v0.4/utils/instruction.js.map +0 -1
  47. package/dist/v0.4/utils/metadata.d.ts +0 -4
  48. package/dist/v0.4/utils/metadata.js +0 -26
  49. package/dist/v0.4/utils/metadata.js.map +0 -1
  50. package/dist/v0.4/utils/pda.d.ts +0 -12
  51. package/dist/v0.4/utils/pda.js +0 -66
  52. package/dist/v0.4/utils/pda.js.map +0 -1
  53. package/dist/v0.4/utils/priceMath.d.ts +0 -12
  54. package/dist/v0.4/utils/priceMath.js +0 -52
  55. package/dist/v0.4/utils/priceMath.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metadaoproject/futarchy",
3
- "version": "0.4.0-alpha.0",
3
+ "version": "0.4.0-alpha.10",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -10,6 +10,7 @@
10
10
  ],
11
11
  "exports": {
12
12
  ".": "./dist/index.js",
13
+ "./v0.3": "./dist/v0.3/index.js",
13
14
  "./v0.4": "./dist/v0.4/index.js"
14
15
  },
15
16
  "scripts": {
@@ -19,6 +20,9 @@
19
20
  },
20
21
  "dependencies": {
21
22
  "@coral-xyz/anchor": "^0.29.0",
23
+ "@metaplex-foundation/umi": "^0.9.2",
24
+ "@metaplex-foundation/umi-bundle-defaults": "^0.9.2",
25
+ "@metaplex-foundation/umi-uploader-bundlr": "^0.9.2",
22
26
  "@noble/hashes": "^1.4.0",
23
27
  "@solana/spl-token": "^0.3.7",
24
28
  "@solana/web3.js": "^1.74.0",
package/dist/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export { sha256 } from "@noble/hashes/sha256";
package/dist/index.js DELETED
@@ -1,16 +0,0 @@
1
- // export * from "./v0.3";
2
- // export * from "./v0.4";
3
- // import * as v0_3 from "./v0.3";
4
- // import * as v0_4 from "./v0.4";
5
- // export const versions = {
6
- // "0.3": v0_3,
7
- // "0.4": v0_4,
8
- // } as const;
9
- // export type VersionKey = keyof typeof versions;
10
- // export function getVersion(version: VersionKey) {
11
- // return versions[version];
12
- // }
13
- export { sha256 } from "@noble/hashes/sha256";
14
- // export { v0_3, v0_4 };
15
- // export * from "./common/utils";
16
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,0BAA0B;AAE1B,kCAAkC;AAClC,kCAAkC;AAElC,4BAA4B;AAC5B,iBAAiB;AACjB,iBAAiB;AACjB,cAAc;AAEd,kDAAkD;AAElD,oDAAoD;AACpD,8BAA8B;AAC9B,IAAI;AAEJ,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,yBAAyB;AAEzB,kCAAkC"}
@@ -1,246 +0,0 @@
1
- import { AnchorProvider, IdlTypes, Program } from "@coral-xyz/anchor";
2
- import { AddressLookupTableAccount, PublicKey } from "@solana/web3.js";
3
- import { Amm as AmmIDLType } from "./types/amm.js";
4
- import BN from "bn.js";
5
- import { AmmAccount, LowercaseKeys } from "./types/index.js";
6
- export type SwapType = LowercaseKeys<IdlTypes<AmmIDLType>["SwapType"]>;
7
- export type CreateAmmClientParams = {
8
- provider: AnchorProvider;
9
- ammProgramId?: PublicKey;
10
- };
11
- export type AddLiquiditySimulation = {
12
- baseAmount: BN;
13
- quoteAmount: BN;
14
- expectedLpTokens: BN;
15
- minLpTokens?: BN;
16
- maxBaseAmount?: BN;
17
- };
18
- export type SwapSimulation = {
19
- expectedOut: BN;
20
- newBaseReserves: BN;
21
- newQuoteReserves: BN;
22
- minExpectedOut?: BN;
23
- };
24
- export type RemoveLiquiditySimulation = {
25
- expectedBaseOut: BN;
26
- expectedQuoteOut: BN;
27
- minBaseOut?: BN;
28
- minQuoteOut?: BN;
29
- };
30
- export declare class AmmClient {
31
- readonly provider: AnchorProvider;
32
- readonly program: Program<AmmIDLType>;
33
- readonly luts: AddressLookupTableAccount[];
34
- constructor(provider: AnchorProvider, ammProgramId: PublicKey, luts: AddressLookupTableAccount[]);
35
- static createClient(createAutocratClientParams: CreateAmmClientParams): AmmClient;
36
- getProgramId(): PublicKey;
37
- createAmm(proposal: PublicKey, baseMint: PublicKey, quoteMint: PublicKey, twapInitialObservation: number, twapMaxObservationChangePerUpdate?: number): Promise<PublicKey>;
38
- createAmmIx(baseMint: PublicKey, quoteMint: PublicKey, twapInitialObservation: BN, twapMaxObservationChangePerUpdate: BN): import("@coral-xyz/anchor/dist/cjs/program/namespace/methods.js").MethodsBuilder<AmmIDLType, {
39
- name: "createAmm";
40
- accounts: [{
41
- name: "user";
42
- isMut: true;
43
- isSigner: true;
44
- }, {
45
- name: "amm";
46
- isMut: true;
47
- isSigner: false;
48
- }, {
49
- name: "lpMint";
50
- isMut: true;
51
- isSigner: false;
52
- }, {
53
- name: "baseMint";
54
- isMut: false;
55
- isSigner: false;
56
- }, {
57
- name: "quoteMint";
58
- isMut: false;
59
- isSigner: false;
60
- }, {
61
- name: "vaultAtaBase";
62
- isMut: true;
63
- isSigner: false;
64
- }, {
65
- name: "vaultAtaQuote";
66
- isMut: true;
67
- isSigner: false;
68
- }, {
69
- name: "associatedTokenProgram";
70
- isMut: false;
71
- isSigner: false;
72
- }, {
73
- name: "tokenProgram";
74
- isMut: false;
75
- isSigner: false;
76
- }, {
77
- name: "systemProgram";
78
- isMut: false;
79
- isSigner: false;
80
- }];
81
- args: [{
82
- name: "args";
83
- type: {
84
- defined: "CreateAmmArgs";
85
- };
86
- }];
87
- } & {
88
- name: "createAmm";
89
- }>;
90
- addLiquidity(amm: PublicKey, quoteAmount?: number, baseAmount?: number): Promise<string | undefined>;
91
- addLiquidityIx(amm: PublicKey, baseMint: PublicKey, quoteMint: PublicKey, quoteAmount: BN, maxBaseAmount: BN, minLpTokens: BN, user?: PublicKey): import("@coral-xyz/anchor/dist/cjs/program/namespace/methods.js").MethodsBuilder<AmmIDLType, {
92
- name: "addLiquidity";
93
- accounts: [{
94
- name: "user";
95
- isMut: true;
96
- isSigner: true;
97
- }, {
98
- name: "amm";
99
- isMut: true;
100
- isSigner: false;
101
- }, {
102
- name: "lpMint";
103
- isMut: true;
104
- isSigner: false;
105
- }, {
106
- name: "userLpAccount";
107
- isMut: true;
108
- isSigner: false;
109
- }, {
110
- name: "userBaseAccount";
111
- isMut: true;
112
- isSigner: false;
113
- }, {
114
- name: "userQuoteAccount";
115
- isMut: true;
116
- isSigner: false;
117
- }, {
118
- name: "vaultAtaBase";
119
- isMut: true;
120
- isSigner: false;
121
- }, {
122
- name: "vaultAtaQuote";
123
- isMut: true;
124
- isSigner: false;
125
- }, {
126
- name: "tokenProgram";
127
- isMut: false;
128
- isSigner: false;
129
- }];
130
- args: [{
131
- name: "args";
132
- type: {
133
- defined: "AddLiquidityArgs";
134
- };
135
- }];
136
- } & {
137
- name: "addLiquidity";
138
- }>;
139
- removeLiquidityIx(ammAddr: PublicKey, baseMint: PublicKey, quoteMint: PublicKey, lpTokensToBurn: BN, minBaseAmount: BN, minQuoteAmount: BN): import("@coral-xyz/anchor/dist/cjs/program/namespace/methods.js").MethodsBuilder<AmmIDLType, {
140
- name: "removeLiquidity";
141
- accounts: [{
142
- name: "user";
143
- isMut: true;
144
- isSigner: true;
145
- }, {
146
- name: "amm";
147
- isMut: true;
148
- isSigner: false;
149
- }, {
150
- name: "lpMint";
151
- isMut: true;
152
- isSigner: false;
153
- }, {
154
- name: "userLpAccount";
155
- isMut: true;
156
- isSigner: false;
157
- }, {
158
- name: "userBaseAccount";
159
- isMut: true;
160
- isSigner: false;
161
- }, {
162
- name: "userQuoteAccount";
163
- isMut: true;
164
- isSigner: false;
165
- }, {
166
- name: "vaultAtaBase";
167
- isMut: true;
168
- isSigner: false;
169
- }, {
170
- name: "vaultAtaQuote";
171
- isMut: true;
172
- isSigner: false;
173
- }, {
174
- name: "tokenProgram";
175
- isMut: false;
176
- isSigner: false;
177
- }];
178
- args: [{
179
- name: "args";
180
- type: {
181
- defined: "RemoveLiquidityArgs";
182
- };
183
- }];
184
- } & {
185
- name: "removeLiquidity";
186
- }>;
187
- swap(amm: PublicKey, swapType: SwapType, inputAmount: number, outputAmountMin: number): Promise<string>;
188
- swapIx(amm: PublicKey, baseMint: PublicKey, quoteMint: PublicKey, swapType: SwapType, inputAmount: BN, outputAmountMin: BN): import("@coral-xyz/anchor/dist/cjs/program/namespace/methods.js").MethodsBuilder<AmmIDLType, {
189
- name: "swap";
190
- accounts: [{
191
- name: "user";
192
- isMut: true;
193
- isSigner: true;
194
- }, {
195
- name: "amm";
196
- isMut: true;
197
- isSigner: false;
198
- }, {
199
- name: "userBaseAccount";
200
- isMut: true;
201
- isSigner: false;
202
- }, {
203
- name: "userQuoteAccount";
204
- isMut: true;
205
- isSigner: false;
206
- }, {
207
- name: "vaultAtaBase";
208
- isMut: true;
209
- isSigner: false;
210
- }, {
211
- name: "vaultAtaQuote";
212
- isMut: true;
213
- isSigner: false;
214
- }, {
215
- name: "tokenProgram";
216
- isMut: false;
217
- isSigner: false;
218
- }];
219
- args: [{
220
- name: "args";
221
- type: {
222
- defined: "SwapArgs";
223
- };
224
- }];
225
- } & {
226
- name: "swap";
227
- }>;
228
- crankThatTwap(amm: PublicKey): Promise<string>;
229
- crankThatTwapIx(amm: PublicKey): import("@coral-xyz/anchor/dist/cjs/program/namespace/methods.js").MethodsBuilder<AmmIDLType, {
230
- name: "crankThatTwap";
231
- accounts: [{
232
- name: "amm";
233
- isMut: true;
234
- isSigner: false;
235
- }];
236
- args: [];
237
- } & {
238
- name: "crankThatTwap";
239
- }>;
240
- getAmm(amm: PublicKey): Promise<AmmAccount>;
241
- getTwap(amm: AmmAccount): BN;
242
- simulateAddLiquidity(baseReserves: BN, quoteReserves: BN, lpMintSupply: number, baseAmount?: BN, quoteAmount?: BN, slippageBps?: BN): AddLiquiditySimulation;
243
- simulateSwap(inputAmount: BN, swapType: SwapType, baseReserves: BN, quoteReserves: BN, slippageBps?: BN): SwapSimulation;
244
- simulateRemoveLiquidity(lpTokensToBurn: BN, baseReserves: BN, quoteReserves: BN, lpTotalSupply: BN, slippageBps?: BN): RemoveLiquiditySimulation;
245
- getDecimals(mint: PublicKey): Promise<number>;
246
- }
@@ -1,272 +0,0 @@
1
- import { Program } from "@coral-xyz/anchor";
2
- import { IDL as AmmIDL } from "./types/amm.js";
3
- import BN from "bn.js";
4
- import { AMM_PROGRAM_ID } from "./constants.js";
5
- import { getAmmLpMintAddr, getAmmAddr } from "./utils/pda.js";
6
- // import { MethodsBuilder } from "@coral-xyz/anchor/dist/cjs/program/namespace/methods";
7
- import { unpackMint, getAssociatedTokenAddressSync, createAssociatedTokenAccountIdempotentInstruction, } from "@solana/spl-token";
8
- import { PriceMath } from "./utils/priceMath.js";
9
- export class AmmClient {
10
- provider;
11
- program;
12
- luts;
13
- constructor(provider, ammProgramId, luts) {
14
- this.provider = provider;
15
- this.program = new Program(AmmIDL, ammProgramId, provider);
16
- this.luts = luts;
17
- }
18
- static createClient(createAutocratClientParams) {
19
- let { provider, ammProgramId: programId } = createAutocratClientParams;
20
- const luts = [];
21
- return new AmmClient(provider, programId || AMM_PROGRAM_ID, luts);
22
- }
23
- getProgramId() {
24
- return this.program.programId;
25
- }
26
- async createAmm(proposal, baseMint, quoteMint, twapInitialObservation, twapMaxObservationChangePerUpdate) {
27
- if (!twapMaxObservationChangePerUpdate) {
28
- twapMaxObservationChangePerUpdate = twapInitialObservation * 0.02;
29
- }
30
- let [amm] = getAmmAddr(this.getProgramId(), baseMint, quoteMint);
31
- let baseDecimals = unpackMint(baseMint, await this.provider.connection.getAccountInfo(baseMint)).decimals;
32
- let quoteDecimals = unpackMint(quoteMint, await this.provider.connection.getAccountInfo(quoteMint)).decimals;
33
- let [twapFirstObservationScaled, twapMaxObservationChangePerUpdateScaled] = PriceMath.getAmmPrices(baseDecimals, quoteDecimals, twapInitialObservation, twapMaxObservationChangePerUpdate);
34
- await this.createAmmIx(baseMint, quoteMint, twapFirstObservationScaled, twapMaxObservationChangePerUpdateScaled).rpc();
35
- return amm;
36
- }
37
- // both twap values need to be scaled beforehand
38
- createAmmIx(baseMint, quoteMint, twapInitialObservation, twapMaxObservationChangePerUpdate) {
39
- let [amm] = getAmmAddr(this.getProgramId(), baseMint, quoteMint);
40
- let [lpMint] = getAmmLpMintAddr(this.getProgramId(), amm);
41
- let vaultAtaBase = getAssociatedTokenAddressSync(baseMint, amm, true);
42
- let vaultAtaQuote = getAssociatedTokenAddressSync(quoteMint, amm, true);
43
- return this.program.methods
44
- .createAmm({
45
- twapInitialObservation,
46
- twapMaxObservationChangePerUpdate,
47
- })
48
- .accounts({
49
- user: this.provider.publicKey,
50
- amm,
51
- lpMint,
52
- baseMint,
53
- quoteMint,
54
- vaultAtaBase,
55
- vaultAtaQuote,
56
- });
57
- }
58
- async addLiquidity(amm, quoteAmount, baseAmount) {
59
- let storedAmm = await this.getAmm(amm);
60
- let lpMintSupply = unpackMint(storedAmm.lpMint, await this.provider.connection.getAccountInfo(storedAmm.lpMint)).supply;
61
- let quoteAmountCasted;
62
- let baseAmountCasted;
63
- if (quoteAmount != undefined) {
64
- let quoteDecimals = unpackMint(storedAmm.quoteMint, await this.provider.connection.getAccountInfo(storedAmm.quoteMint)).decimals;
65
- quoteAmountCasted = new BN(quoteAmount).mul(new BN(10).pow(new BN(quoteDecimals)));
66
- }
67
- if (baseAmount != undefined) {
68
- let baseDecimals = unpackMint(storedAmm.baseMint, await this.provider.connection.getAccountInfo(storedAmm.baseMint)).decimals;
69
- baseAmountCasted = new BN(baseAmount).mul(new BN(10).pow(new BN(baseDecimals)));
70
- }
71
- if (lpMintSupply == 0n) {
72
- if (quoteAmount == undefined || baseAmount == undefined) {
73
- throw new Error("No pool created yet, you need to specify both base and quote");
74
- }
75
- // console.log(quoteAmountCasted?.toString());
76
- // console.log(baseAmountCasted?.toString())
77
- return await this.addLiquidityIx(amm, storedAmm.baseMint, storedAmm.quoteMint, quoteAmountCasted, baseAmountCasted, new BN(0)).rpc();
78
- }
79
- // quoteAmount == undefined ? undefined : new BN(quoteAmount);
80
- // let baseAmountCasted: BN | undefined =
81
- // baseAmount == undefined ? undefined : new BN(baseAmount);
82
- let sim = this.simulateAddLiquidity(storedAmm.baseAmount, storedAmm.quoteAmount, Number(lpMintSupply), baseAmountCasted, quoteAmountCasted);
83
- await this.addLiquidityIx(amm, storedAmm.baseMint, storedAmm.quoteMint, sim.quoteAmount, sim.baseAmount, sim.expectedLpTokens).rpc();
84
- }
85
- addLiquidityIx(amm, baseMint, quoteMint, quoteAmount, maxBaseAmount, minLpTokens, user = this.provider.publicKey) {
86
- const [lpMint] = getAmmLpMintAddr(this.program.programId, amm);
87
- const userLpAccount = getAssociatedTokenAddressSync(lpMint, user);
88
- return this.program.methods
89
- .addLiquidity({
90
- quoteAmount,
91
- maxBaseAmount,
92
- minLpTokens,
93
- })
94
- .accounts({
95
- user,
96
- amm,
97
- lpMint,
98
- userLpAccount,
99
- userBaseAccount: getAssociatedTokenAddressSync(baseMint, user),
100
- userQuoteAccount: getAssociatedTokenAddressSync(quoteMint, user),
101
- vaultAtaBase: getAssociatedTokenAddressSync(baseMint, amm, true),
102
- vaultAtaQuote: getAssociatedTokenAddressSync(quoteMint, amm, true),
103
- })
104
- .preInstructions([
105
- createAssociatedTokenAccountIdempotentInstruction(this.provider.publicKey, userLpAccount, this.provider.publicKey, lpMint),
106
- ]);
107
- }
108
- removeLiquidityIx(ammAddr, baseMint, quoteMint, lpTokensToBurn, minBaseAmount, minQuoteAmount) {
109
- const [lpMint] = getAmmLpMintAddr(this.program.programId, ammAddr);
110
- return this.program.methods
111
- .removeLiquidity({
112
- lpTokensToBurn,
113
- minBaseAmount,
114
- minQuoteAmount,
115
- })
116
- .accounts({
117
- user: this.provider.publicKey,
118
- amm: ammAddr,
119
- lpMint,
120
- userLpAccount: getAssociatedTokenAddressSync(lpMint, this.provider.publicKey),
121
- userBaseAccount: getAssociatedTokenAddressSync(baseMint, this.provider.publicKey),
122
- userQuoteAccount: getAssociatedTokenAddressSync(quoteMint, this.provider.publicKey),
123
- vaultAtaBase: getAssociatedTokenAddressSync(baseMint, ammAddr, true),
124
- vaultAtaQuote: getAssociatedTokenAddressSync(quoteMint, ammAddr, true),
125
- });
126
- }
127
- async swap(amm, swapType, inputAmount, outputAmountMin) {
128
- const storedAmm = await this.getAmm(amm);
129
- let quoteDecimals = await this.getDecimals(storedAmm.quoteMint);
130
- let baseDecimals = await this.getDecimals(storedAmm.baseMint);
131
- let inputAmountScaled;
132
- let outputAmountMinScaled;
133
- if (swapType.buy) {
134
- inputAmountScaled = PriceMath.scale(inputAmount, quoteDecimals);
135
- outputAmountMinScaled = PriceMath.scale(outputAmountMin, baseDecimals);
136
- }
137
- else {
138
- inputAmountScaled = PriceMath.scale(inputAmount, baseDecimals);
139
- outputAmountMinScaled = PriceMath.scale(outputAmountMin, quoteDecimals);
140
- }
141
- return await this.swapIx(amm, storedAmm.baseMint, storedAmm.quoteMint, swapType, inputAmountScaled, outputAmountMinScaled).rpc();
142
- }
143
- swapIx(amm, baseMint, quoteMint, swapType, inputAmount, outputAmountMin) {
144
- const receivingToken = swapType.buy ? baseMint : quoteMint;
145
- return this.program.methods
146
- .swap({
147
- swapType,
148
- inputAmount,
149
- outputAmountMin,
150
- })
151
- .accounts({
152
- user: this.provider.publicKey,
153
- amm,
154
- userBaseAccount: getAssociatedTokenAddressSync(baseMint, this.provider.publicKey, true),
155
- userQuoteAccount: getAssociatedTokenAddressSync(quoteMint, this.provider.publicKey, true),
156
- vaultAtaBase: getAssociatedTokenAddressSync(baseMint, amm, true),
157
- vaultAtaQuote: getAssociatedTokenAddressSync(quoteMint, amm, true),
158
- })
159
- .preInstructions([
160
- // create the receiving token account if it doesn't exist
161
- createAssociatedTokenAccountIdempotentInstruction(this.provider.publicKey, getAssociatedTokenAddressSync(receivingToken, this.provider.publicKey), this.provider.publicKey, receivingToken),
162
- ]);
163
- }
164
- async crankThatTwap(amm) {
165
- return this.crankThatTwapIx(amm).rpc();
166
- }
167
- crankThatTwapIx(amm) {
168
- return this.program.methods.crankThatTwap().accounts({
169
- amm,
170
- });
171
- }
172
- // getter functions
173
- // async getLTWAP(ammAddr: PublicKey): Promise<number> {
174
- // const amm = await this.program.account.amm.fetch(ammAddr);
175
- // return amm.twapLastObservationUq64X32
176
- // .div(new BN(2).pow(new BN(32)))
177
- // .toNumber();
178
- // }
179
- async getAmm(amm) {
180
- return await this.program.account.amm.fetch(amm);
181
- }
182
- getTwap(amm) {
183
- return amm.oracle.aggregator.div(amm.oracle.lastUpdatedSlot.sub(amm.createdAtSlot));
184
- }
185
- simulateAddLiquidity(baseReserves, quoteReserves, lpMintSupply, baseAmount, quoteAmount, slippageBps) {
186
- if (lpMintSupply == 0) {
187
- throw new Error("This AMM doesn't have existing liquidity so we can't fill in the blanks");
188
- }
189
- if (baseAmount == undefined && quoteAmount == undefined) {
190
- throw new Error("Must specify either a base amount or a quote amount");
191
- }
192
- let expectedLpTokens;
193
- if (quoteAmount == undefined) {
194
- quoteAmount = baseAmount?.mul(quoteReserves).div(baseReserves);
195
- }
196
- baseAmount = quoteAmount?.mul(baseReserves).div(quoteReserves).addn(1);
197
- expectedLpTokens = quoteAmount
198
- ?.mul(new BN(lpMintSupply))
199
- .div(quoteReserves);
200
- let minLpTokens, maxBaseAmount;
201
- if (slippageBps) {
202
- minLpTokens = PriceMath.subtractSlippage(expectedLpTokens, slippageBps);
203
- maxBaseAmount = PriceMath.addSlippage(baseAmount, slippageBps);
204
- }
205
- return {
206
- quoteAmount: quoteAmount,
207
- baseAmount: baseAmount,
208
- expectedLpTokens,
209
- minLpTokens,
210
- maxBaseAmount,
211
- };
212
- }
213
- simulateSwap(inputAmount, swapType, baseReserves, quoteReserves, slippageBps) {
214
- if (baseReserves.eqn(0) || quoteReserves.eqn(0)) {
215
- throw new Error("reserves must be non-zero");
216
- }
217
- let inputReserves, outputReserves;
218
- if (swapType.buy) {
219
- inputReserves = quoteReserves;
220
- outputReserves = baseReserves;
221
- }
222
- else {
223
- inputReserves = baseReserves;
224
- outputReserves = quoteReserves;
225
- }
226
- let inputAmountWithFee = inputAmount.muln(990);
227
- let numerator = inputAmountWithFee.mul(outputReserves);
228
- let denominator = inputReserves.muln(1000).add(inputAmountWithFee);
229
- let expectedOut = numerator.div(denominator);
230
- let minExpectedOut;
231
- if (slippageBps) {
232
- minExpectedOut = PriceMath.subtractSlippage(expectedOut, slippageBps);
233
- }
234
- let newBaseReserves, newQuoteReserves;
235
- if (swapType.buy) {
236
- newBaseReserves = baseReserves.sub(expectedOut);
237
- newQuoteReserves = quoteReserves.add(inputAmount);
238
- }
239
- else {
240
- newBaseReserves = baseReserves.add(inputAmount);
241
- newQuoteReserves = quoteReserves.sub(expectedOut);
242
- }
243
- return {
244
- expectedOut,
245
- newBaseReserves,
246
- newQuoteReserves,
247
- minExpectedOut,
248
- };
249
- }
250
- simulateRemoveLiquidity(lpTokensToBurn, baseReserves, quoteReserves, lpTotalSupply, slippageBps) {
251
- const expectedBaseOut = lpTokensToBurn.mul(baseReserves).div(lpTotalSupply);
252
- const expectedQuoteOut = lpTokensToBurn
253
- .mul(quoteReserves)
254
- .div(lpTotalSupply);
255
- let minBaseOut, minQuoteOut;
256
- if (slippageBps) {
257
- minBaseOut = PriceMath.subtractSlippage(expectedBaseOut, slippageBps);
258
- minQuoteOut = PriceMath.subtractSlippage(expectedQuoteOut, slippageBps);
259
- }
260
- return {
261
- expectedBaseOut,
262
- expectedQuoteOut,
263
- minBaseOut,
264
- minQuoteOut,
265
- };
266
- }
267
- async getDecimals(mint) {
268
- return unpackMint(mint, await this.provider.connection.getAccountInfo(mint))
269
- .decimals;
270
- }
271
- }
272
- //# sourceMappingURL=AmmClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AmmClient.js","sourceRoot":"","sources":["../../src/v0.4/AmmClient.ts"],"names":[],"mappings":"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"}