From 3389cf5536adac3fcae0c6ce931ccfe0ba0af943 Mon Sep 17 00:00:00 2001 From: mgavillo Date: Wed, 22 May 2024 11:28:38 +0800 Subject: [PATCH] add conditional tokens to dao details --- lib/client/client.ts | 6 ++- lib/client/indexer/balances.ts | 8 +++- lib/client/indexer/dao.ts | 9 ++++ lib/client/rpc/balances.ts | 79 +++++++++++++++++++--------------- lib/types/autocrats.ts | 6 +++ 5 files changed, 69 insertions(+), 39 deletions(-) diff --git a/lib/client/client.ts b/lib/client/client.ts index 59e4be1..7effde7 100644 --- a/lib/client/client.ts +++ b/lib/client/client.ts @@ -104,9 +104,11 @@ export interface FutarchyBalancesClient { ): Array; fetchAllConditionalTokenWalletBalances( ownerWallet: PublicKey | null, - quoteToken: TokenProps, baseToken: TokenProps, - proposals: Proposal[] + quoteToken: TokenProps, + proposals: Proposal[], + passTokenUrl?: string, + failTokenUrl?: string, ): Promise; watchTokenBalance(tokenWithPDA: TokenWithPDA): Observable; } diff --git a/lib/client/indexer/balances.ts b/lib/client/indexer/balances.ts index 80c495e..6eb3e02 100644 --- a/lib/client/indexer/balances.ts +++ b/lib/client/indexer/balances.ts @@ -70,13 +70,17 @@ export class FutarchyIndexerBalancesClient implements FutarchyBalancesClient { ownerWallet: PublicKey | null, baseToken: TokenProps, quoteToken: TokenProps, - proposalsWithVaults: Proposal[] + proposalsWithVaults: Proposal[], + passTokenUrl?: string, + failtokenUrl?: string, ): Promise { return this.rpcBalancesClient.fetchAllConditionalTokenWalletBalances( ownerWallet, baseToken, quoteToken, - proposalsWithVaults + proposalsWithVaults, + passTokenUrl, + failtokenUrl, ); } watchTokenBalance(tokenWithPDA: TokenWithPDA): Observable { diff --git a/lib/client/indexer/dao.ts b/lib/client/indexer/dao.ts index 79d7235..e687584 100644 --- a/lib/client/indexer/dao.ts +++ b/lib/client/indexer/dao.ts @@ -29,6 +29,9 @@ export class FutarchyIndexerDaoClient implements FutarchyDaoClient { x_account: true, description: true, image_url: true, + fail_token_image_url: true, + pass_token_image_url: true, + lp_token_image_url: true, daos: { program_acct: true, dao_acct: true, @@ -86,6 +89,9 @@ export class FutarchyIndexerDaoClient implements FutarchyDaoClient { x_account: true, description: true, image_url: true, + fail_token_image_url: true, + pass_token_image_url: true, + lp_token_image_url: true, daos: { program_acct: true, dao_acct: true, @@ -131,6 +137,9 @@ export class FutarchyIndexerDaoClient implements FutarchyDaoClient { name: daoDetails.name ?? "", slug: daoDetails.slug ?? "", logo: daoDetails.image_url, + failTokenImageUrl: daoDetails.fail_token_image_url, + passTokenImageUrl: daoDetails.pass_token_image_url, + lpTokenImageUrl: daoDetails.lp_token_image_url, daos: daoDetails.daos .map((d) => { if (this.protocolMap.get(d.program_acct)) { diff --git a/lib/client/rpc/balances.ts b/lib/client/rpc/balances.ts index 862a783..d91ba49 100644 --- a/lib/client/rpc/balances.ts +++ b/lib/client/rpc/balances.ts @@ -17,6 +17,9 @@ import { Proposal } from "@/types/proposals"; import { BN, Provider } from "@coral-xyz/anchor"; import { Observable, retry } from "rxjs"; +const PASS_USDC_URL = "https://imagedelivery.net/HYEnlujCFMCgj6yA728xIw/f38677ab-8ec6-4706-6606-7d4e0a3cfc00/public" +const FAIL_USDC_URL = "https://imagedelivery.net/HYEnlujCFMCgj6yA728xIw/d9bfd8de-2937-419a-96f6-8d6a3a76d200/public" + export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { private rpcProvider: Provider; @@ -98,10 +101,10 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { mapping.set(dao.baseToken.publicKey, { pda: owner ? getAssociatedTokenAddressSync( - new PublicKey(dao.baseToken.publicKey), - owner, - true - ) + new PublicKey(dao.baseToken.publicKey), + owner, + true + ) : null, token: dao.baseToken }); @@ -110,10 +113,10 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { mapping.set(dao.quoteToken.publicKey, { pda: owner ? getAssociatedTokenAddressSync( - new PublicKey(dao.quoteToken.publicKey), - owner, - true - ) + new PublicKey(dao.quoteToken.publicKey), + owner, + true + ) : null, token: dao.quoteToken }); @@ -178,7 +181,9 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { ownerWallet: PublicKey | null, baseToken: TokenProps, quoteToken: TokenProps, - proposals: Proposal[] + proposals: Proposal[], + passTokenUrl?: string, + failTokenUrl?: string, ): Promise { const tokenBalances = await Promise.all( proposals.map(async (proposal) => { @@ -188,15 +193,16 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { { pda: ownerWallet ? getAssociatedTokenAddressSync( - new PublicKey( - proposal.baseVaultAccount.conditionalOnFinalizeTokenMint - ), - ownerWallet, - true - ) + new PublicKey( + proposal.baseVaultAccount.conditionalOnFinalizeTokenMint + ), + ownerWallet, + true + ) : null, token: { ...baseToken, + url: passTokenUrl ?? baseToken.url, publicKey: proposal.baseVaultAccount.conditionalOnFinalizeTokenMint.toString(), symbol: "p" + baseToken.symbol @@ -206,15 +212,16 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { { pda: ownerWallet ? getAssociatedTokenAddressSync( - new PublicKey( - proposal.baseVaultAccount.conditionalOnRevertTokenMint - ), - ownerWallet, - true - ) + new PublicKey( + proposal.baseVaultAccount.conditionalOnRevertTokenMint + ), + ownerWallet, + true + ) : null, token: { ...baseToken, + url: failTokenUrl ?? baseToken.url, publicKey: proposal.baseVaultAccount.conditionalOnRevertTokenMint.toString(), symbol: "f" + baseToken.symbol @@ -224,15 +231,16 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { { pda: ownerWallet ? getAssociatedTokenAddressSync( - new PublicKey( - proposal.quoteVaultAccount.conditionalOnFinalizeTokenMint - ), - ownerWallet, - true - ) + new PublicKey( + proposal.quoteVaultAccount.conditionalOnFinalizeTokenMint + ), + ownerWallet, + true + ) : null, token: { ...quoteToken, + url: PASS_USDC_URL, publicKey: proposal.quoteVaultAccount.conditionalOnFinalizeTokenMint.toString(), symbol: "p" + quoteToken.symbol @@ -242,15 +250,16 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { { pda: ownerWallet ? getAssociatedTokenAddressSync( - new PublicKey( - proposal.quoteVaultAccount.conditionalOnRevertTokenMint - ), - ownerWallet, - true - ) + new PublicKey( + proposal.quoteVaultAccount.conditionalOnRevertTokenMint + ), + ownerWallet, + true + ) : null, token: { ...quoteToken, + url: FAIL_USDC_URL, publicKey: proposal.quoteVaultAccount.conditionalOnRevertTokenMint.toString(), symbol: "f" + quoteToken.symbol @@ -264,8 +273,8 @@ export class FutarchyRPCBalancesClient implements FutarchyBalancesClient { try { const tokenBalance = t.pda ? await this.rpcProvider.connection.getTokenAccountBalance( - t.pda - ) + t.pda + ) : { value: { uiAmount: 0 } }; return { balance: tokenBalance.value.uiAmount ?? 0, diff --git a/lib/types/autocrats.ts b/lib/types/autocrats.ts index 15c2896..cc9ac9d 100644 --- a/lib/types/autocrats.ts +++ b/lib/types/autocrats.ts @@ -83,6 +83,9 @@ export type DaoAggregate = { slug: string; daos: Dao[]; logo?: string | null; + failTokenImageUrl?: string | null, + passTokenImageUrl?: string | null, + lpTokenImageUrl?: string | null, }; /** INDEXER GRAPHQL TYPES */ @@ -90,6 +93,9 @@ export type DaoDetails__GQL = { name: string | null; slug: string | null; image_url: string | null; + fail_token_image_url: string | null, + pass_token_image_url: string | null, + lp_token_image_url: string | null, daos: Array<{ program_acct: string; dao_acct: string;