From a2df9691638f8a469f417bad19470938b456647e Mon Sep 17 00:00:00 2001 From: Kollan House Date: Tue, 14 Jan 2025 08:10:33 -0800 Subject: [PATCH] feat: adds conditional balance with check for swap --- sdk/package.json | 2 +- sdk/src/v0.3/FutarchyClient.ts | 31 +++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/sdk/package.json b/sdk/package.json index 346fefdb..1dda1194 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@metadaoproject/futarchy", - "version": "0.4.0-alpha.33", + "version": "0.4.0-alpha.34", "type": "module", "main": "dist/index.js", "module": "dist/index.js", diff --git a/sdk/src/v0.3/FutarchyClient.ts b/sdk/src/v0.3/FutarchyClient.ts index 6427d4ee..f0c48a5f 100644 --- a/sdk/src/v0.3/FutarchyClient.ts +++ b/sdk/src/v0.3/FutarchyClient.ts @@ -43,6 +43,7 @@ export class FutarchyClient { payer, swapType, outcome, + conditionalAmount, }: { proposal: PublicKey; inputAmount: BN; @@ -52,6 +53,7 @@ export class FutarchyClient { payer: PublicKey; swapType: SwapType; outcome: "pass" | "fail"; + conditionalAmount?: BN; }): Promise { const [baseVault] = getVaultAddr( this.conditionalVaultClient.vaultProgram.programId, @@ -67,16 +69,25 @@ export class FutarchyClient { const [underlyingVault, underlyingTokenMint] = swapType.buy ? [quoteVault, quoteMint] : [baseVault, baseMint]; + + let mintTx: Transaction | undefined; - const mintTx = await this.conditionalVaultClient - .mintConditionalTokensIx( - underlyingVault, - underlyingTokenMint, - inputAmount, - user, - payer - ) - .transaction(); + // Check to see if we need to mint conditional tokens + // If conditionalAmount is not passed we will mint all of the input amount + // If conditionalAmount is passed we will mint the difference between the input amount and the conditional amount + if (!conditionalAmount || (conditionalAmount && conditionalAmount.lt(inputAmount))) { + const mintAmount = conditionalAmount ? inputAmount.sub(conditionalAmount) : inputAmount; + + mintTx = await this.conditionalVaultClient + .mintConditionalTokensIx( + underlyingVault, + underlyingTokenMint, + mintAmount, + user, + payer + ) + .transaction(); + } const [pUSDC] = getVaultFinalizeMintAddr( this.conditionalVaultClient.vaultProgram.programId, @@ -125,6 +136,6 @@ export class FutarchyClient { ) .transaction(); - return new Transaction().add(mintTx, swapTx); + return mintTx ? new Transaction().add(mintTx, swapTx) : swapTx; } }