@metadaoproject/futarchy 0.4.0-alpha.1 → 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.
- package/package.json +4 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/v0.4/AmmClient.d.ts +0 -246
- package/dist/v0.4/AmmClient.js +0 -272
- package/dist/v0.4/AmmClient.js.map +0 -1
- package/dist/v0.4/AutocratClient.d.ts +0 -225
- package/dist/v0.4/AutocratClient.js +0 -361
- package/dist/v0.4/AutocratClient.js.map +0 -1
- package/dist/v0.4/ConditionalVaultClient.d.ts +0 -275
- package/dist/v0.4/ConditionalVaultClient.js +0 -222
- package/dist/v0.4/ConditionalVaultClient.js.map +0 -1
- package/dist/v0.4/constants.d.ts +0 -9
- package/dist/v0.4/constants.js +0 -10
- package/dist/v0.4/constants.js.map +0 -1
- package/dist/v0.4/index.d.ts +0 -6
- package/dist/v0.4/index.js +0 -7
- package/dist/v0.4/index.js.map +0 -1
- package/dist/v0.4/types/amm.d.ts +0 -542
- package/dist/v0.4/types/amm.js +0 -542
- package/dist/v0.4/types/amm.js.map +0 -1
- package/dist/v0.4/types/autocrat.d.ts +0 -636
- package/dist/v0.4/types/autocrat.js +0 -636
- package/dist/v0.4/types/autocrat.js.map +0 -1
- package/dist/v0.4/types/conditional_vault.d.ts +0 -503
- package/dist/v0.4/types/conditional_vault.js +0 -503
- package/dist/v0.4/types/conditional_vault.js.map +0 -1
- package/dist/v0.4/types/index.d.ts +0 -21
- package/dist/v0.4/types/index.js +0 -4
- package/dist/v0.4/types/index.js.map +0 -1
- package/dist/v0.4/types/utils.d.ts +0 -3
- package/dist/v0.4/types/utils.js +0 -2
- package/dist/v0.4/types/utils.js.map +0 -1
- package/dist/v0.4/utils/cu.d.ts +0 -10
- package/dist/v0.4/utils/cu.js +0 -11
- package/dist/v0.4/utils/cu.js.map +0 -1
- package/dist/v0.4/utils/filters.d.ts +0 -3
- package/dist/v0.4/utils/filters.js +0 -14
- package/dist/v0.4/utils/filters.js.map +0 -1
- package/dist/v0.4/utils/index.d.ts +0 -16
- package/dist/v0.4/utils/index.js +0 -30
- package/dist/v0.4/utils/index.js.map +0 -1
- package/dist/v0.4/utils/instruction.d.ts +0 -4
- package/dist/v0.4/utils/instruction.js +0 -10
- package/dist/v0.4/utils/instruction.js.map +0 -1
- package/dist/v0.4/utils/metadata.d.ts +0 -4
- package/dist/v0.4/utils/metadata.js +0 -26
- package/dist/v0.4/utils/metadata.js.map +0 -1
- package/dist/v0.4/utils/pda.d.ts +0 -12
- package/dist/v0.4/utils/pda.js +0 -66
- package/dist/v0.4/utils/pda.js.map +0 -1
- package/dist/v0.4/utils/priceMath.d.ts +0 -12
- package/dist/v0.4/utils/priceMath.js +0 -52
- 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.
|
|
3
|
+
"version": "0.4.0-alpha.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
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",
|
|
23
26
|
"@noble/hashes": "^1.4.0",
|
|
24
27
|
"@solana/spl-token": "^0.3.7",
|
|
25
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
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/v0.4/AmmClient.d.ts
DELETED
|
@@ -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
|
-
}
|
package/dist/v0.4/AmmClient.js
DELETED
|
@@ -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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"}
|