Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add getHumanPriceFromReserves #257

Merged
merged 16 commits into from
Dec 12, 2024
Merged
2 changes: 1 addition & 1 deletion sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@metadaoproject/futarchy",
"version": "0.4.0-alpha.23",
"version": "0.4.0-alpha.33",
"type": "module",
"main": "dist/index.js",
"module": "dist/index.js",
Expand Down
27 changes: 9 additions & 18 deletions sdk/src/v0.3/AmmClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,9 @@ export class AmmClient {
quoteMint: PublicKey,
swapType: SwapType,
inputAmount: BN,
outputAmountMin: BN
outputAmountMin: BN,
user: PublicKey = this.provider.publicKey,
payer: PublicKey = this.provider.publicKey
) {
const receivingToken = swapType.buy ? baseMint : quoteMint;

Expand All @@ -320,30 +322,19 @@ export class AmmClient {
outputAmountMin,
})
.accounts({
user: this.provider.publicKey,
user,
amm,
userBaseAccount: getAssociatedTokenAddressSync(
baseMint,
this.provider.publicKey,
true
),
userQuoteAccount: getAssociatedTokenAddressSync(
quoteMint,
this.provider.publicKey,
true
),
userBaseAccount: getAssociatedTokenAddressSync(baseMint, user, true),
userQuoteAccount: getAssociatedTokenAddressSync(quoteMint, user, true),
vaultAtaBase: getAssociatedTokenAddressSync(baseMint, amm, true),
vaultAtaQuote: getAssociatedTokenAddressSync(quoteMint, amm, true),
})
.preInstructions([
// create the receiving token account if it doesn't exist
createAssociatedTokenAccountIdempotentInstruction(
this.provider.publicKey,
getAssociatedTokenAddressSync(
receivingToken,
this.provider.publicKey
),
this.provider.publicKey,
payer,
getAssociatedTokenAddressSync(receivingToken, user),
user,
receivingToken
),
]);
Expand Down
4 changes: 0 additions & 4 deletions sdk/src/v0.3/AutocratClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ import { PriceMath } from "./utils/ammMath.js";
import { ProposalInstruction, InitializeDaoParams } from "./types/index.js";

import { Autocrat, IDL as AutocratIDL } from "./types/autocrat.js";
import {
ConditionalVault,
IDL as ConditionalVaultIDL,
} from "./types/conditional_vault.js";

import BN from "bn.js";
import {
Expand Down
74 changes: 36 additions & 38 deletions sdk/src/v0.3/ConditionalVaultClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export class ConditionalVaultClient {
async mintConditionalTokens(
vault: PublicKey,
uiAmount: number,
user?: PublicKey | Keypair
user: PublicKey = this.provider.publicKey
) {
const storedVault = await this.getVault(vault);

Expand All @@ -90,17 +90,9 @@ export class ConditionalVaultClient {
vault: PublicKey,
underlyingTokenMint: PublicKey,
amount: BN,
user?: PublicKey | Keypair
user: PublicKey = this.provider.publicKey,
payer: PublicKey = this.provider.publicKey
) {
let userPubkey;
if (!user) {
userPubkey = this.provider.publicKey;
} else if (user instanceof Keypair) {
userPubkey = user.publicKey;
} else {
userPubkey = user;
}

const [conditionalOnFinalizeTokenMint] = getVaultFinalizeMintAddr(
this.vaultProgram.programId,
vault
Expand All @@ -112,18 +104,18 @@ export class ConditionalVaultClient {

let userConditionalOnFinalizeTokenAccount = getAssociatedTokenAddressSync(
conditionalOnFinalizeTokenMint,
userPubkey
user
);

let userConditionalOnRevertTokenAccount = getAssociatedTokenAddressSync(
conditionalOnRevertTokenMint,
userPubkey
user
);

let ix = this.vaultProgram.methods
.mintConditionalTokens(amount)
.accounts({
authority: userPubkey,
authority: user,
vault,
vaultUnderlyingTokenAccount: getAssociatedTokenAddressSync(
underlyingTokenMint,
Expand All @@ -132,7 +124,7 @@ export class ConditionalVaultClient {
),
userUnderlyingTokenAccount: getAssociatedTokenAddressSync(
underlyingTokenMint,
userPubkey,
user,
true
),
conditionalOnFinalizeTokenMint,
Expand All @@ -142,28 +134,26 @@ export class ConditionalVaultClient {
})
.preInstructions([
createAssociatedTokenAccountIdempotentInstruction(
userPubkey,
payer,
userConditionalOnFinalizeTokenAccount,
userPubkey,
user,
conditionalOnFinalizeTokenMint
),
createAssociatedTokenAccountIdempotentInstruction(
userPubkey,
payer,
userConditionalOnRevertTokenAccount,
userPubkey,
user,
conditionalOnRevertTokenMint
),
]);
if (user instanceof Keypair) {
ix = ix.signers([user]);
}

return ix;
}

initializeVaultIx(
settlementAuthority: PublicKey,
underlyingTokenMint: PublicKey
underlyingTokenMint: PublicKey,
payer: PublicKey = this.provider.publicKey
) {
const [vault] = getVaultAddr(
this.vaultProgram.programId,
Expand Down Expand Up @@ -197,7 +187,7 @@ export class ConditionalVaultClient {
})
.preInstructions([
createAssociatedTokenAccountIdempotentInstruction(
this.provider.publicKey,
payer,
vaultUnderlyingTokenAccount,
vault,
underlyingTokenMint
Expand All @@ -210,7 +200,8 @@ export class ConditionalVaultClient {
underlyingTokenMint: PublicKey,
proposalNumber: number,
onFinalizeUri: string,
onRevertUri: string
onRevertUri: string,
payer: PublicKey = this.provider.publicKey
) {
const [underlyingTokenMetadata] = getMetadataAddr(underlyingTokenMint);

Expand Down Expand Up @@ -238,7 +229,7 @@ export class ConditionalVaultClient {
onRevertUri,
})
.accounts({
payer: this.provider.publicKey,
payer,
vault,
underlyingTokenMint,
underlyingTokenMetadata,
Expand All @@ -250,7 +241,11 @@ export class ConditionalVaultClient {
});
}

redeemConditionalTokensIx(vault: PublicKey, underlyingTokenMint: PublicKey) {
redeemConditionalTokensIx(
vault: PublicKey,
underlyingTokenMint: PublicKey,
user: PublicKey = this.provider.publicKey
) {
const [conditionalOnFinalizeTokenMint] = getVaultFinalizeMintAddr(
this.vaultProgram.programId,
vault
Expand All @@ -263,7 +258,7 @@ export class ConditionalVaultClient {
return this.vaultProgram.methods
.redeemConditionalTokensForUnderlyingTokens()
.accounts({
authority: this.provider.publicKey,
authority: user,
vault,
vaultUnderlyingTokenAccount: getAssociatedTokenAddressSync(
underlyingTokenMint,
Expand All @@ -272,26 +267,27 @@ export class ConditionalVaultClient {
),
userUnderlyingTokenAccount: getAssociatedTokenAddressSync(
underlyingTokenMint,
this.provider.publicKey,
user,
true
),
conditionalOnFinalizeTokenMint,
userConditionalOnFinalizeTokenAccount: getAssociatedTokenAddressSync(
conditionalOnFinalizeTokenMint,
this.provider.publicKey
user
),
conditionalOnRevertTokenMint,
userConditionalOnRevertTokenAccount: getAssociatedTokenAddressSync(
conditionalOnRevertTokenMint,
this.provider.publicKey
user
),
});
}

mergeConditionalTokensIx(
vault: PublicKey,
underlyingTokenMint: PublicKey,
amount: BN
amount: BN,
user: PublicKey = this.provider.publicKey
) {
const [conditionalOnFinalizeTokenMint] = getVaultFinalizeMintAddr(
this.vaultProgram.programId,
Expand All @@ -305,7 +301,7 @@ export class ConditionalVaultClient {
return this.vaultProgram.methods
.mergeConditionalTokensForUnderlyingTokens(amount)
.accounts({
authority: this.provider.publicKey,
authority: user,
vault,
vaultUnderlyingTokenAccount: getAssociatedTokenAddressSync(
underlyingTokenMint,
Expand All @@ -314,25 +310,26 @@ export class ConditionalVaultClient {
),
userUnderlyingTokenAccount: getAssociatedTokenAddressSync(
underlyingTokenMint,
this.provider.publicKey,
user,
true
),
conditionalOnFinalizeTokenMint,
userConditionalOnFinalizeTokenAccount: getAssociatedTokenAddressSync(
conditionalOnFinalizeTokenMint,
this.provider.publicKey
user
),
conditionalOnRevertTokenMint,
userConditionalOnRevertTokenAccount: getAssociatedTokenAddressSync(
conditionalOnRevertTokenMint,
this.provider.publicKey
user
),
});
}

async initializeVault(
settlementAuthority: PublicKey,
underlyingTokenMint: PublicKey
underlyingTokenMint: PublicKey,
payer: PublicKey = this.provider.publicKey
): Promise<PublicKey> {
const [vault] = getVaultAddr(
this.vaultProgram.programId,
Expand All @@ -342,7 +339,8 @@ export class ConditionalVaultClient {

await this.initializeVaultIx(
settlementAuthority,
underlyingTokenMint
underlyingTokenMint,
payer
).rpc();

return vault;
Expand Down
Loading
Loading