diff --git a/src/components/ManaCalculator/components/RoleSection.tsx b/src/components/ManaCalculator/components/RoleSection.tsx
index 45e554e6eca..9ace248c180 100644
--- a/src/components/ManaCalculator/components/RoleSection.tsx
+++ b/src/components/ManaCalculator/components/RoleSection.tsx
@@ -8,8 +8,12 @@ import { DelegatorSettings } from './DelegatorSettings';
import { ManaCalculatorInput } from '.';
export function RoleSection() {
- const { state, handleUserChange, handleOwnHoldChange, maxTotalSupply } =
- useManaState();
+ const {
+ state,
+ handleUserChange,
+ handleOwnHoldChange,
+ maxAvailableOwnedAmount,
+ } = useManaState();
return (
Role configuration
@@ -31,7 +35,7 @@ export function RoleSection() {
Validator {id + 1}
@@ -27,7 +33,7 @@ export function ValidatorCard({
handleStakeChange(value, id)}
/>
@@ -36,7 +42,7 @@ export function ValidatorCard({
handleDelegatedStakeChange(value, id)}
/>
diff --git a/src/components/ManaCalculator/components/ValidatorSettings.tsx b/src/components/ManaCalculator/components/ValidatorSettings.tsx
index 5efe5b2979d..f39a62f4ac6 100644
--- a/src/components/ManaCalculator/components/ValidatorSettings.tsx
+++ b/src/components/ManaCalculator/components/ValidatorSettings.tsx
@@ -11,8 +11,13 @@ export function ValidatorSettings() {
handleOwnFCChange,
handleOwnStakeChange,
handleAttractedNewDelegatedStakeChange,
- maxTotalSupply,
+ maxAvailableSupply,
} = useManaState();
+
+ const maxAttractedNewDelegatedStake =
+ fromMicro(maxAvailableSupply) +
+ fromMicro(state.validator.attractedNewDelegatedStake);
+
return (
a + b.lockedStake, 0) +
- state.validators.reduce((a, b) => a + b.delegatedStake, 0);
+ const networkSupply = getNetworkSupply(state.network);
+
+ const userOwnedTokens = state.heldTokens;
+
+ const totalValidatorsLockedStake = state.validators.reduce(
+ (a, b) => a + b.lockedStake,
+ 0,
+ );
+ const totalValidatorsDelegatedStake = state.validators.reduce(
+ (a, b) => a + b.delegatedStake,
+ 0,
+ );
+
+ const totalValidatorsStake =
+ totalValidatorsLockedStake + totalValidatorsDelegatedStake;
+
+ const totalStake = userOwnedTokens + totalValidatorsStake;
+
+ const maxAvailableOwnedAmount = networkSupply - totalValidatorsStake;
+
+ const maxAvailableSupply = Math.max(networkSupply - totalStake, 0);
return {
state: {
@@ -200,7 +218,8 @@ export function useGivenManaState(
generationPerSlot,
stakedOrDelegatedTokens,
} as ManaState,
- maxTotalSupply,
+ maxAvailableOwnedAmount,
+ maxAvailableSupply,
handleDelete,
handleStakeChange,
handleAddValidator,
@@ -221,29 +240,6 @@ export function useGivenManaState(
};
}
-function getValidInputValue(
- num: string,
- transformNumber?: (number) => number,
-): number {
- let value = inputValuetoNumber(num);
-
- if (transformNumber) {
- value = transformNumber(value);
- }
-
- const isInvalid = isNaN(value);
-
- if (isInvalid) {
- throw new Error('Invalid number');
- }
-
- return value;
-}
-
-function inputValuetoNumber(value: string) {
- return Number(Number(value).toString());
-}
-
export function getDefaultParameters(
network: NetworkType,
): ManaCalculatorProps {
diff --git a/src/components/ManaCalculator/utils.ts b/src/components/ManaCalculator/utils.ts
index 5d1f2f870f8..326ac8f9560 100644
--- a/src/components/ManaCalculator/utils.ts
+++ b/src/components/ManaCalculator/utils.ts
@@ -89,3 +89,24 @@ export function getStakedOrDelegated(userType: UserType) {
export const roundMax = function (num: number, places: number) {
return +(Math.round(Number(num + 'e+' + places)) + 'e-' + places);
};
+
+
+export function getValidInputValue(
+ num: string,
+ transformNumber?: (number: number) => number,
+): number {
+ let value = Number(Number(num).toString());
+
+ if (transformNumber) {
+ value = transformNumber(value);
+ }
+
+ const isInvalid = isNaN(value);
+
+ if (isInvalid) {
+ throw new Error('Invalid number');
+ }
+
+ return value;
+}
+