From afa201c43b7c9a790f2bb965eeb9671ac79d4d8c Mon Sep 17 00:00:00 2001 From: Francisco Date: Wed, 5 Jul 2023 09:58:30 +0200 Subject: [PATCH 1/4] add toBigNumber --- packages/bridge-ui/package.json | 1 + .../bridge-ui/src/relayer-api/RelayerAPIService.ts | 11 +++++------ packages/bridge-ui/src/utils/toBigNumber.ts | 5 +++++ 3 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 packages/bridge-ui/src/utils/toBigNumber.ts diff --git a/packages/bridge-ui/package.json b/packages/bridge-ui/package.json index 4a56cda0053..73448af8751 100644 --- a/packages/bridge-ui/package.json +++ b/packages/bridge-ui/package.json @@ -5,6 +5,7 @@ "type": "module", "scripts": { "start": "pnpm run dev", + "start:a3": "pnpm run dev --mode a3", "dev": "vite", "build": "vite build", "preview": "vite preview", diff --git a/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts b/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts index 31d61deb4ff..b0bcbeb6dd1 100644 --- a/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts +++ b/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts @@ -18,6 +18,7 @@ import type { } from '../domain/relayerApi'; import type { BridgeTransaction } from '../domain/transaction'; import { getLogger } from '../utils/logger'; +import { toBigNumber } from '../utils/toBigNumber'; import { tokenVaults } from '../vault/tokenVaults'; const log = getLogger('RelayerAPIService'); @@ -212,14 +213,12 @@ export class RelayerAPIService implements RelayerAPI { memo: tx.data.Message.Memo, owner: tx.data.Message.Owner, sender: tx.data.Message.Sender, - gasLimit: BigNumber.from(tx.data.Message.GasLimit.toString()), - callValue: BigNumber.from(tx.data.Message.CallValue.toString()), + gasLimit: toBigNumber(tx.data.Message.GasLimit), + callValue: toBigNumber(tx.data.Message.CallValue), srcChainId: tx.data.Message.SrcChainId, destChainId: tx.data.Message.DestChainId, - depositValue: BigNumber.from(tx.data.Message.DepositValue.toString()), - processingFee: BigNumber.from( - tx.data.Message.ProcessingFee.toString(), - ), + depositValue: toBigNumber(tx.data.Message.DepositValue), + processingFee: toBigNumber(tx.data.Message.ProcessingFee), refundAddress: tx.data.Message.RefundAddress, }, }; diff --git a/packages/bridge-ui/src/utils/toBigNumber.ts b/packages/bridge-ui/src/utils/toBigNumber.ts new file mode 100644 index 00000000000..82676656412 --- /dev/null +++ b/packages/bridge-ui/src/utils/toBigNumber.ts @@ -0,0 +1,5 @@ +import { BigNumber } from "ethers"; + +export function toBigNumber(value: string | number | bigint | boolean): BigNumber { + return BigNumber.from(BigInt(value).toString()); +} From 8e98f3ddce3f52608e732891109a25173126a399 Mon Sep 17 00:00:00 2001 From: Francisco Date: Wed, 5 Jul 2023 09:59:45 +0200 Subject: [PATCH 2/4] add comment --- packages/bridge-ui/src/utils/toBigNumber.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/bridge-ui/src/utils/toBigNumber.ts b/packages/bridge-ui/src/utils/toBigNumber.ts index 82676656412..c5934855b01 100644 --- a/packages/bridge-ui/src/utils/toBigNumber.ts +++ b/packages/bridge-ui/src/utils/toBigNumber.ts @@ -1,5 +1,6 @@ import { BigNumber } from "ethers"; +// This will also handle scientific notation (or e notation: 2e+21) export function toBigNumber(value: string | number | bigint | boolean): BigNumber { return BigNumber.from(BigInt(value).toString()); } From 30e5a8062a9fe58ba34c88dccede62e0d394100d Mon Sep 17 00:00:00 2001 From: Francisco Date: Wed, 5 Jul 2023 10:25:05 +0200 Subject: [PATCH 3/4] add test for toBigNumber --- packages/bridge-ui/src/utils/toBigNumber.spec.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/bridge-ui/src/utils/toBigNumber.spec.ts diff --git a/packages/bridge-ui/src/utils/toBigNumber.spec.ts b/packages/bridge-ui/src/utils/toBigNumber.spec.ts new file mode 100644 index 00000000000..d9f56c187cc --- /dev/null +++ b/packages/bridge-ui/src/utils/toBigNumber.spec.ts @@ -0,0 +1,12 @@ +import { BigNumber } from "ethers"; + +import { toBigNumber } from "./toBigNumber"; + +describe('toBigNumber', () => { + it('should handle different notation for big ints', () => { + expect(toBigNumber('1000000000000000000000').toString()).toEqual('1000000000000000000000'); + expect(toBigNumber(2e+21).toString()).toEqual('2000000000000000000000'); + expect(toBigNumber(3e21).toString()).toEqual('3000000000000000000000'); + expect(toBigNumber(1000).toString()).toEqual('1000'); + }); +}); From 0ab69ca0ddb49dddf1396066a2b0021a67549b55 Mon Sep 17 00:00:00 2001 From: Francisco Date: Wed, 5 Jul 2023 12:32:29 +0200 Subject: [PATCH 4/4] improve test --- packages/bridge-ui/src/utils/toBigNumber.spec.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/bridge-ui/src/utils/toBigNumber.spec.ts b/packages/bridge-ui/src/utils/toBigNumber.spec.ts index d9f56c187cc..2fbba2c326b 100644 --- a/packages/bridge-ui/src/utils/toBigNumber.spec.ts +++ b/packages/bridge-ui/src/utils/toBigNumber.spec.ts @@ -8,5 +8,8 @@ describe('toBigNumber', () => { expect(toBigNumber(2e+21).toString()).toEqual('2000000000000000000000'); expect(toBigNumber(3e21).toString()).toEqual('3000000000000000000000'); expect(toBigNumber(1000).toString()).toEqual('1000'); + + // Number.MAX_SAFE_INTEGER = 9007199254740991. Maximum safe integer (2^53 – 1) + expect(toBigNumber(BigInt(Number.MAX_SAFE_INTEGER) * 3n).toString()).toEqual('27021597764222973'); }); });