@molecularlabs/nucleus-frontend
Version:
Nucleus BoringVault Frontend SDK
1 lines • 6.36 kB
Source Map (JSON)
{"version":3,"sources":["../../src/display/exchange-rate.ts"],"sourcesContent":["import { getRateInQuoteWithAssetDecimals } from \"../api/accountant\";\nimport type { ChainId } from \"../api/vault-config\";\nimport { bigIntToNumberAsString } from \"../utils/bigint\";\nimport { getVaultByKey } from \"../vaults\";\nimport type { VaultKey } from \"../vaults/config\";\n\ninterface GetDepositExchangeRateParams {\n vaultKey: VaultKey;\n sourceChainId: ChainId;\n depositTokenSymbol: string;\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n}\n\n/**\n * Gets the deposit exchange rate for a vault (tokens per share)\n * @throws {Error} If the token address is not found or if there's an error fetching the rate\n * @returns Promise<string> The exchange rate as a formatted string representing how many deposit tokens are worth 1 share\n */\nconst getDepositExchangeRate = async ({\n vaultKey,\n sourceChainId,\n depositTokenSymbol,\n minimumFractionDigits,\n maximumFractionDigits = 3,\n}: GetDepositExchangeRateParams) => {\n const vault = await getVaultByKey(vaultKey);\n\n const sourceChain = vault.deposit.sourceChains[sourceChainId];\n if (!sourceChain) {\n throw new Error(\n `Source chain ${sourceChainId} not found for vault ${vaultKey}`\n );\n }\n\n const depositToken = sourceChain.depositTokens?.[depositTokenSymbol];\n if (!depositToken) {\n throw new Error(\n `Deposit token ${depositTokenSymbol} not found for chain ${sourceChainId}`\n );\n }\n\n const tokenAddress = depositToken.address;\n if (!tokenAddress) {\n throw new Error(`Token address not found for ${depositTokenSymbol}`);\n }\n\n const [decimals, rate] = await getRateInQuoteWithAssetDecimals({\n assetAddress: tokenAddress,\n accountantAddress: vault.contracts.accountant,\n chainId: sourceChainId,\n });\n\n if (rate.status === \"failure\") {\n throw new Error(`Failed to get rate: ${rate.error.message}`);\n }\n if (decimals.status === \"failure\") {\n throw new Error(`Failed to get decimals: ${decimals.error.message}`);\n }\n\n return bigIntToNumberAsString(rate.result, {\n decimals: decimals.result,\n minimumFractionDigits,\n maximumFractionDigits,\n });\n};\n\ninterface GetWithdrawExchangeRateParams {\n vaultKey: VaultKey;\n sourceChainId: ChainId;\n destinationChainId: ChainId;\n wantTokenSymbol: string;\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n}\n\n/**\n * Gets the withdraw exchange rate for a vault (tokens per share)\n * @throws {Error} If the token address is not found or if there's an error fetching the rate\n * @returns Promise<string> The exchange rate as a formatted string representing how many want tokens are worth 1 share\n */\nconst getWithdrawExchangeRate = async ({\n vaultKey,\n sourceChainId,\n destinationChainId,\n wantTokenSymbol,\n minimumFractionDigits,\n maximumFractionDigits = 3,\n}: GetWithdrawExchangeRateParams) => {\n const vault = await getVaultByKey(vaultKey);\n\n const sourceChain = vault.withdraw.sourceChains[sourceChainId];\n if (!sourceChain) {\n throw new Error(\n `Source chain ${sourceChainId} not found for vault ${vaultKey}`\n );\n }\n\n const destinationChain = sourceChain.destinationChains[destinationChainId];\n if (!destinationChain) {\n throw new Error(\n `Destination chain ${destinationChainId} not found for source chain ${sourceChainId}`\n );\n }\n\n const wantToken = destinationChain.wantTokens?.[wantTokenSymbol];\n if (!wantToken) {\n throw new Error(\n `Want token ${wantTokenSymbol} not found for chain ${destinationChainId}`\n );\n }\n\n const tokenAddress = wantToken.address;\n if (!tokenAddress) {\n throw new Error(`Token address not found for ${wantTokenSymbol}`);\n }\n\n const [decimals, rate] = await getRateInQuoteWithAssetDecimals({\n assetAddress: tokenAddress,\n accountantAddress: vault.contracts.accountant,\n chainId: sourceChainId,\n });\n\n if (rate.status === \"failure\") {\n throw new Error(`Failed to get rate: ${rate.error.message}`);\n }\n if (decimals.status === \"failure\") {\n throw new Error(`Failed to get decimals: ${decimals.error.message}`);\n }\n\n return bigIntToNumberAsString(rate.result, {\n decimals: decimals.result,\n minimumFractionDigits,\n maximumFractionDigits,\n });\n};\n\nexport { getDepositExchangeRate, getWithdrawExchangeRate };\n"],"mappings":"AAAA,SAAS,uCAAuC;AAEhD,SAAS,8BAA8B;AACvC,SAAS,qBAAqB;AAgB9B,MAAM,yBAAyB,OAAO;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,wBAAwB;AAC1B,MAAoC;AAClC,QAAM,QAAQ,MAAM,cAAc,QAAQ;AAE1C,QAAM,cAAc,MAAM,QAAQ,aAAa,aAAa;AAC5D,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR,gBAAgB,aAAa,wBAAwB,QAAQ;AAAA,IAC/D;AAAA,EACF;AAEA,QAAM,eAAe,YAAY,gBAAgB,kBAAkB;AACnE,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;AAAA,MACR,iBAAiB,kBAAkB,wBAAwB,aAAa;AAAA,IAC1E;AAAA,EACF;AAEA,QAAM,eAAe,aAAa;AAClC,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,+BAA+B,kBAAkB,EAAE;AAAA,EACrE;AAEA,QAAM,CAAC,UAAU,IAAI,IAAI,MAAM,gCAAgC;AAAA,IAC7D,cAAc;AAAA,IACd,mBAAmB,MAAM,UAAU;AAAA,IACnC,SAAS;AAAA,EACX,CAAC;AAED,MAAI,KAAK,WAAW,WAAW;AAC7B,UAAM,IAAI,MAAM,uBAAuB,KAAK,MAAM,OAAO,EAAE;AAAA,EAC7D;AACA,MAAI,SAAS,WAAW,WAAW;AACjC,UAAM,IAAI,MAAM,2BAA2B,SAAS,MAAM,OAAO,EAAE;AAAA,EACrE;AAEA,SAAO,uBAAuB,KAAK,QAAQ;AAAA,IACzC,UAAU,SAAS;AAAA,IACnB;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAgBA,MAAM,0BAA0B,OAAO;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,wBAAwB;AAC1B,MAAqC;AACnC,QAAM,QAAQ,MAAM,cAAc,QAAQ;AAE1C,QAAM,cAAc,MAAM,SAAS,aAAa,aAAa;AAC7D,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR,gBAAgB,aAAa,wBAAwB,QAAQ;AAAA,IAC/D;AAAA,EACF;AAEA,QAAM,mBAAmB,YAAY,kBAAkB,kBAAkB;AACzE,MAAI,CAAC,kBAAkB;AACrB,UAAM,IAAI;AAAA,MACR,qBAAqB,kBAAkB,+BAA+B,aAAa;AAAA,IACrF;AAAA,EACF;AAEA,QAAM,YAAY,iBAAiB,aAAa,eAAe;AAC/D,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR,cAAc,eAAe,wBAAwB,kBAAkB;AAAA,IACzE;AAAA,EACF;AAEA,QAAM,eAAe,UAAU;AAC/B,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,+BAA+B,eAAe,EAAE;AAAA,EAClE;AAEA,QAAM,CAAC,UAAU,IAAI,IAAI,MAAM,gCAAgC;AAAA,IAC7D,cAAc;AAAA,IACd,mBAAmB,MAAM,UAAU;AAAA,IACnC,SAAS;AAAA,EACX,CAAC;AAED,MAAI,KAAK,WAAW,WAAW;AAC7B,UAAM,IAAI,MAAM,uBAAuB,KAAK,MAAM,OAAO,EAAE;AAAA,EAC7D;AACA,MAAI,SAAS,WAAW,WAAW;AACjC,UAAM,IAAI,MAAM,2BAA2B,SAAS,MAAM,OAAO,EAAE;AAAA,EACrE;AAEA,SAAO,uBAAuB,KAAK,QAAQ;AAAA,IACzC,UAAU,SAAS;AAAA,IACnB;AAAA,IACA;AAAA,EACF,CAAC;AACH;","names":[]}