diff --git a/web-wallet/src/lib/components/Allocate/Allocate.svelte b/web-wallet/src/lib/components/Allocate/Allocate.svelte
index bbba78145..134f1bacf 100644
--- a/web-wallet/src/lib/components/Allocate/Allocate.svelte
+++ b/web-wallet/src/lib/components/Allocate/Allocate.svelte
@@ -84,7 +84,7 @@
});
$: luxFee = gasLimit * gasPrice;
- $: fee = formatter(luxToDusk(luxFee));
+ $: fee = formatter(luxToDusk(BigInt(luxFee)));
$: isFromUnshielded = shieldedAmount > shieldedBalance;
$: isFromShielded = unshieldedAmount > unshieldedBalance;
$: isNextButtonDisabled = !(isFromUnshielded || isFromShielded);
@@ -229,8 +229,8 @@
{isFromUnshielded
- ? `${formatter(luxToDusk(unshieldedBalance - BigInt(duskToLux(unshieldedAmount))))} DUSK`
- : `${formatter(luxToDusk(shieldedBalance - BigInt(duskToLux(shieldedAmount))))} DUSK`}
+ ? `${formatter(luxToDusk(unshieldedBalance - duskToLux(unshieldedAmount)))} DUSK`
+ : `${formatter(luxToDusk(shieldedBalance - duskToLux(shieldedAmount)))} DUSK`}
= minAmount && amount <= maxSpendable;
- $: totalLuxFee = luxFee + (amount ? duskToLux(amount) : 0);
- $: isFeeWithinLimit = BigInt(totalLuxFee) <= spendable;
+ $: totalLuxFee = BigInt(luxFee) + (amount ? duskToLux(amount) : 0n);
+ $: isFeeWithinLimit = totalLuxFee <= spendable;
$: isNextButtonDisabled = !(isAmountValid && isGasValid && isFeeWithinLimit);
$: addressValidationResult = validateAddress(address);
diff --git a/web-wallet/src/lib/components/Stake/Stake.svelte b/web-wallet/src/lib/components/Stake/Stake.svelte
index e0fe0d000..d07c1a095 100644
--- a/web-wallet/src/lib/components/Stake/Stake.svelte
+++ b/web-wallet/src/lib/components/Stake/Stake.svelte
@@ -125,7 +125,7 @@
});
$: luxFee = gasLimit * gasPrice;
- $: fee = formatter(luxToDusk(luxFee));
+ $: fee = formatter(luxToDusk(BigInt(luxFee)));
$: maxSpendable = deductLuxFeeFrom(luxToDusk(spendable), luxFee);
$: minStake =
maxSpendable > 0
@@ -133,8 +133,8 @@
: minAllowedStake;
$: isStakeAmountValid =
stakeAmount >= minStake && stakeAmount <= maxSpendable;
- $: totalLuxFee = luxFee + duskToLux(stakeAmount);
- $: isFeeWithinLimit = BigInt(totalLuxFee) <= spendable;
+ $: totalLuxFee = BigInt(luxFee) + duskToLux(stakeAmount);
+ $: isFeeWithinLimit = totalLuxFee <= spendable;
$: isNextButtonDisabled =
flow === "stake"
? !(isStakeAmountValid && isGasValid && isFeeWithinLimit)
diff --git a/web-wallet/src/lib/contracts/deductLuxFeeFrom.js b/web-wallet/src/lib/contracts/deductLuxFeeFrom.js
index 651ba81a3..bcdd173fe 100644
--- a/web-wallet/src/lib/contracts/deductLuxFeeFrom.js
+++ b/web-wallet/src/lib/contracts/deductLuxFeeFrom.js
@@ -11,6 +11,6 @@ import { duskToLux, luxToDusk } from "$lib/dusk/currency";
* @returns {number}
*/
const deductLuxFeeFrom = (duskAmount, luxFee) =>
- +luxToDusk(duskToLux(duskAmount) - luxFee).toFixed(9);
+ +luxToDusk(duskToLux(duskAmount) - BigInt(luxFee)).toFixed(9);
export default deductLuxFeeFrom;
diff --git a/web-wallet/src/lib/contracts/executeSend.js b/web-wallet/src/lib/contracts/executeSend.js
index f7603dedf..0e8a49b55 100644
--- a/web-wallet/src/lib/contracts/executeSend.js
+++ b/web-wallet/src/lib/contracts/executeSend.js
@@ -2,25 +2,7 @@ import { getKey } from "lamb";
import { Gas } from "$lib/vendor/w3sper.js/src/mod";
import { walletStore } from "$lib/stores";
-
-const scaleFactor = BigInt(1e9);
-
-/**
- * This `duskToLux` function will replace the one
- * in `$lib/dusk/currency` when the migration to
- * `w3sper.js` advances.
- *
- * @param {number} n
- * @returns {bigint}
- */
-function duskToLux(n) {
- const [integerPart, decimalPart] = n.toString().split(".");
-
- return (
- BigInt(integerPart) * scaleFactor +
- (decimalPart ? BigInt(decimalPart.padEnd(9, "0")) : 0n)
- );
-}
+import { duskToLux } from "$lib/dusk/currency";
/** @type {(to: string, amount: number, gasPrice:number, gasLimit:number) => Promise} */
const executeSend = (to, amount, gasPrice, gasLimit) => {
diff --git a/web-wallet/src/lib/dusk/currency/__tests__/duskToLux.spec.js b/web-wallet/src/lib/dusk/currency/__tests__/duskToLux.spec.js
index 51a8a549b..d7b849785 100644
--- a/web-wallet/src/lib/dusk/currency/__tests__/duskToLux.spec.js
+++ b/web-wallet/src/lib/dusk/currency/__tests__/duskToLux.spec.js
@@ -4,7 +4,7 @@ import { duskToLux } from "..";
describe("duskToLux", () => {
it("should convert an amount in Dusk to Lux", () => {
- expect(duskToLux(1)).toBe(1e9);
- expect(duskToLux(3_456_789.012)).toBe(3_456_789_012_000_000);
+ expect(duskToLux(1)).toBe(BigInt(1e9));
+ expect(duskToLux(3_456_789.012)).toBe(BigInt(3_456_789_012_000_000));
});
});
diff --git a/web-wallet/src/lib/dusk/currency/__tests__/luxToDusk.spec.js b/web-wallet/src/lib/dusk/currency/__tests__/luxToDusk.spec.js
index 8c15f4703..53803e8d9 100644
--- a/web-wallet/src/lib/dusk/currency/__tests__/luxToDusk.spec.js
+++ b/web-wallet/src/lib/dusk/currency/__tests__/luxToDusk.spec.js
@@ -3,12 +3,7 @@ import { describe, expect, it } from "vitest";
import { luxToDusk } from "..";
describe("luxToDusk", () => {
- it("should convert a number amount in Lux to Dusk", () => {
- expect(luxToDusk(1e9)).toBe(1);
- expect(luxToDusk(123_456_789_012)).toBe(123.456789012);
- });
-
- it("should accept `BigInt`s as input", () => {
+ it("should take a lux value, as a bigInt, and return Dusk (as a number)", () => {
expect(luxToDusk(BigInt(1e9))).toBe(1);
expect(luxToDusk(123_456_789_012n)).toBe(123.456789012);
});
diff --git a/web-wallet/src/lib/dusk/currency/duskToLux.js b/web-wallet/src/lib/dusk/currency/duskToLux.js
index 01457c7ff..d7805d9f9 100644
--- a/web-wallet/src/lib/dusk/currency/duskToLux.js
+++ b/web-wallet/src/lib/dusk/currency/duskToLux.js
@@ -1,10 +1,16 @@
+const scaleFactor = BigInt(1e9);
+
/**
- * Temporary conversion function until
- * `dusk-wallet-js` exposes its own.
- *
* @param {number} n
- * @returns {number}
+ * @returns {bigint}
*/
-const duskToLux = (n) => n * 1e9;
+function duskToLux(n) {
+ const [integerPart, decimalPart] = n.toString().split(".");
+
+ return (
+ BigInt(integerPart) * scaleFactor +
+ (decimalPart ? BigInt(decimalPart.padEnd(9, "0")) : 0n)
+ );
+}
export default duskToLux;
diff --git a/web-wallet/src/lib/dusk/currency/luxToDusk.js b/web-wallet/src/lib/dusk/currency/luxToDusk.js
index 1e9700a86..9a13f9430 100644
--- a/web-wallet/src/lib/dusk/currency/luxToDusk.js
+++ b/web-wallet/src/lib/dusk/currency/luxToDusk.js
@@ -1,8 +1,3 @@
-import { isType } from "lamb";
-
-/** @type {(n: any) => n is number} */
-const isNumber = isType("Number");
-
const scaleFactorAsNumber = 1e9;
const scaleFactorAsBigInt = BigInt(scaleFactorAsNumber);
@@ -10,18 +5,14 @@ const scaleFactorAsBigInt = BigInt(scaleFactorAsNumber);
* Temporary conversion: in the near future
* we will accept only BigInt as input.
*
- * @param {bigint | number} n
+ * @param {bigint} n
* @returns {number}
*/
function luxToDusk(n) {
- if (isNumber(n)) {
- return n / scaleFactorAsNumber;
- } else {
- const integerPart = Number(n / scaleFactorAsBigInt);
- const decimalPart = Number(n % scaleFactorAsBigInt);
+ const integerPart = Number(n / scaleFactorAsBigInt);
+ const decimalPart = Number(n % scaleFactorAsBigInt);
- return integerPart + decimalPart / scaleFactorAsNumber;
- }
+ return integerPart + decimalPart / scaleFactorAsNumber;
}
export default luxToDusk;