From f8f242314ac355a97c7ea6b327ffc3e572d04066 Mon Sep 17 00:00:00 2001 From: asgarovf Date: Sat, 17 Aug 2024 15:38:35 +0300 Subject: [PATCH 1/3] feat: allow string amount on link creation --- src/consts/interfaces.consts.ts | 2 +- src/index.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/consts/interfaces.consts.ts b/src/consts/interfaces.consts.ts index c64f456..503d7cd 100644 --- a/src/consts/interfaces.consts.ts +++ b/src/consts/interfaces.consts.ts @@ -30,7 +30,7 @@ export enum EPeanutLinkType { export interface IPeanutLinkDetails { chainId: string - tokenAmount: number + tokenAmount: number | string tokenType?: EPeanutLinkType tokenAddress?: string tokenId?: number diff --git a/src/index.ts b/src/index.ts index 8ce17f8..3fd878d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -793,6 +793,14 @@ function trim_decimal_overflow(_n: number, decimals: number) { return arr[0] + '.' + fraction } +function getStringAmount(amount: number | string, decimals: number) { + if (typeof amount === 'string') { + return amount + } else { + return trim_decimal_overflow(amount, decimals) + } +} + /** * Returns an array of transactions necessary to create a link (e.g. 1. approve, 2. makeDeposit) * all values obligatory. @@ -827,7 +835,7 @@ async function prepareDepositTxs({ 'Error validating link details: please make sure all required fields are provided and valid' ) } - const tokenAmountString = trim_decimal_overflow(linkDetails.tokenAmount, linkDetails.tokenDecimals!) + const tokenAmountString = getStringAmount(linkDetails.tokenAmount, linkDetails.tokenDecimals!) const tokenAmountBigNum = ethers.utils.parseUnits(tokenAmountString, linkDetails.tokenDecimals) const totalTokenAmount = tokenAmountBigNum.mul(numberOfLinks) @@ -1267,7 +1275,7 @@ async function validateLinkDetails( throw new Error('need to provide tokenAddress if tokenType is not 0') } - const tokenAmountString = trim_decimal_overflow(linkDetails.tokenAmount, linkDetails.tokenDecimals!) + const tokenAmountString = getStringAmount(linkDetails.tokenAmount, linkDetails.tokenDecimals!) const tokenAmountBigNum = ethers.utils.parseUnits(tokenAmountString, linkDetails.tokenDecimals) // v5 assert(tokenAmountBigNum.gt(0), 'tokenAmount must be greater than 0') From 08a32ca5c0c6663416a95a4f13ca8a581b727c24 Mon Sep 17 00:00:00 2001 From: asgarovf Date: Sat, 17 Aug 2024 15:46:01 +0300 Subject: [PATCH 2/3] refactor: make the getStringAmount util input type same as `IPeanutLinkDetails.amount` --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 3fd878d..c974813 100644 --- a/src/index.ts +++ b/src/index.ts @@ -793,7 +793,7 @@ function trim_decimal_overflow(_n: number, decimals: number) { return arr[0] + '.' + fraction } -function getStringAmount(amount: number | string, decimals: number) { +function getStringAmount(amount: interfaces.IPeanutLinkDetails['tokenAmount'], decimals: number) { if (typeof amount === 'string') { return amount } else { From 89d8969d6fa305948558e70e3d22bb3e5dd34384 Mon Sep 17 00:00:00 2001 From: asgarovf Date: Sat, 17 Aug 2024 15:54:03 +0300 Subject: [PATCH 3/3] fix: raffle type compatibility --- src/index.ts | 1 + src/raffle.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index c974813..879fb95 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3225,4 +3225,5 @@ export { getTxReceiptFromHash, getTokenBalance, compareVersions, + getStringAmount, } diff --git a/src/raffle.ts b/src/raffle.ts index 306dabf..6ea79d4 100644 --- a/src/raffle.ts +++ b/src/raffle.ts @@ -15,7 +15,7 @@ import { getLinksFromTx, interfaces, prepareApproveERC20Tx, - trim_decimal_overflow, + getStringAmount, } from '.' import { getRawParamsFromLink, validateUserName, compareVersions } from './util' import { @@ -174,7 +174,7 @@ export async function prepareRaffleDepositTxs({ // Convert linkDetails.tokenAmount to BigNumber. // Used only for ETH and ERC20 raffles. - const tokenAmountString = trim_decimal_overflow(linkDetails.tokenAmount, linkDetails.tokenDecimals) + const tokenAmountString = getStringAmount(linkDetails.tokenAmount, linkDetails.tokenDecimals) const tokenAmountBigNum = ethers.utils.parseUnits(tokenAmountString, linkDetails.tokenDecimals) const peanutVaultAddress = getContractAddress(linkDetails.chainId, peanutContractVersion)