Skip to content

Commit

Permalink
Merge pull request #33 from spacemeshos/tweak-prefill-vault-args
Browse files Browse the repository at this point in the history
Tweak: prefill vault arguments for genesis accounts
  • Loading branch information
brusherru authored Jul 15, 2024
2 parents 6b443ab + b19b680 commit d4c3134
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 35 deletions.
2 changes: 1 addition & 1 deletion src/components/AccountSelection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ function AccountSelection(): JSX.Element {
>
Switch
</MenuButton>
<MenuList minWidth={240}>
<MenuList minWidth={240} maxW="100vw" maxH="80vh" overflow="auto">
<MenuOptionGroup
type="radio"
value={String(selectedAccount)}
Expand Down
58 changes: 44 additions & 14 deletions src/components/CreateAccountModal.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { useEffect } from 'react';
import { Form, useForm } from 'react-hook-form';
import { z } from 'zod';

Expand All @@ -23,6 +24,12 @@ import { useCurrentHRP } from '../hooks/useNetworkSelectors';
import { useAccountsList } from '../hooks/useWalletSelectors';
import usePassword from '../store/usePassword';
import useWallet from '../store/useWallet';
import {
GENESIS_VESTING_ACCOUNTS,
GENESIS_VESTING_END,
GENESIS_VESTING_START,
} from '../utils/constants';
import { noop } from '../utils/func';
import { AnySpawnArguments, getTemplateNameByKey } from '../utils/templates';

import FormAddressSelect from './FormAddressSelect';
Expand Down Expand Up @@ -57,8 +64,8 @@ const VaultSchema = z.object({
displayName: DisplayNameSchema,
templateAddress: z.literal(StdPublicKeys.Vault),
owner: Bech32AddressSchema,
totalAmount: z.number().min(0),
initialUnlockAmount: z.number().min(0),
totalAmount: z.string().min(0),
initialUnlockAmount: z.string().min(0),
vestingStart: z.number().min(0),
vestingEnd: z.number().min(0),
});
Expand Down Expand Up @@ -138,6 +145,38 @@ function CreateAccountModal({
defaultValues,
});
const selectedTemplate = watch('templateAddress');
const selectedOwner = watch('owner');
const totalAmount = watch('totalAmount');

useEffect(() => {
if (selectedTemplate === StdPublicKeys.Vault) {
register('initialUnlockAmount', {
required: 'Please specify the initial unlock amount',
});
return () => unregister('initialUnlockAmount');
}
return noop;
}, [register, selectedTemplate, unregister]);

useEffect(() => {
const owner = selectedOwner || getValues('owner');
if (Object.hasOwn(GENESIS_VESTING_ACCOUNTS, owner)) {
const amount =
GENESIS_VESTING_ACCOUNTS[
owner as keyof typeof GENESIS_VESTING_ACCOUNTS
];
setValue('totalAmount', String(amount));
setValue('initialUnlockAmount', String(amount / 4n));
setValue('vestingStart', GENESIS_VESTING_START);
setValue('vestingEnd', GENESIS_VESTING_END);
}
}, [getValues, selectedOwner, selectedTemplate, setValue]);

useEffect(() => {
if (totalAmount) {
setValue('initialUnlockAmount', String(BigInt(totalAmount) / 4n));
}
}, [totalAmount, setValue]);

const submit = handleSubmit(async (data) => {
const success = await withPassword(
Expand Down Expand Up @@ -172,7 +211,9 @@ function CreateAccountModal({
</Text>
<FormAddressSelect
fieldName="owner"
accounts={accounts}
accounts={accounts.filter(
(acc) => acc.templateAddress === StdPublicKeys.Vesting
)}
register={register}
unregister={unregister}
errors={errors}
Expand All @@ -186,17 +227,6 @@ function CreateAccountModal({
inputProps={{ type: 'number' }}
register={register('totalAmount', {
required: 'Please specify total amount locked in the vault',
valueAsNumber: true,
})}
errors={errors}
isSubmitted={isSubmitted}
/>
<FormInput
label="Initial unlock amount"
inputProps={{ type: 'number' }}
register={register('initialUnlockAmount', {
required: 'Please specify the initial unlock amount',
valueAsNumber: true,
})}
errors={errors}
isSubmitted={isSubmitted}
Expand Down
34 changes: 22 additions & 12 deletions src/components/KeyManager.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import {
} from '../types/wallet';
import { BUTTON_ICON_SIZE } from '../utils/constants';
import {
AnySpawnArguments,
getTemplateNameByKey,
MultiSigSpawnArguments,
SingleSigSpawnArguments,
Expand Down Expand Up @@ -152,6 +153,15 @@ function KeyManager({ isOpen, onClose }: KeyManagerProps): JSX.Element {
}
};

const withoutInitialUnlockAmount = (args: AnySpawnArguments) => {
if (Object.hasOwn(args, 'InitialUnlockAmount')) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { InitialUnlockAmount, ...rest } = args as VaultSpawnArguments;
return rest;
}
return args;
};

return (
<>
<Portal>
Expand Down Expand Up @@ -328,18 +338,18 @@ function KeyManager({ isOpen, onClose }: KeyManagerProps): JSX.Element {
</Text>

<Box color="grey">
{Object.entries(acc.spawnArguments).map(
([k, v]) => (
<Box
key={`${safeKeyForAccount(acc)}_${k}_wtf`}
mt={1}
fontSize="xx-small"
wordBreak="break-all"
>
{k}: {JSON.stringify(v)}
</Box>
)
)}
{Object.entries(
withoutInitialUnlockAmount(acc.spawnArguments)
).map(([k, v]) => (
<Box
key={`${safeKeyForAccount(acc)}_${k}_wtf`}
mt={1}
fontSize="xx-small"
wordBreak="break-all"
>
{k}: {JSON.stringify(v)}
</Box>
))}
</Box>
</Box>
);
Expand Down
3 changes: 2 additions & 1 deletion src/components/sendTx/SendTxModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1180,7 +1180,8 @@ function SendTxModal({ isOpen, onClose }: SendTxModalProps): JSX.Element {
isSubmitted={isSubmitted}
// eslint-disable-next-line max-len
hint="The number is used only once to ensure each transaction is unique.
It increments automatically, but can also be set manually if needed."
It increments automatically,
but can also be set manually if needed."
/>
</Box>
</Flex>
Expand Down
5 changes: 0 additions & 5 deletions src/components/sendTx/VaultSpawn.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,6 @@ function VaultSpawn({
inputProps={{ type: 'number' }}
value={String(args.TotalAmount)}
/>
<FormInputViewOnly
label="Initial unlock amount"
inputProps={{ type: 'number' }}
value={String(args.InitialUnlockAmount)}
/>
<FormInputViewOnly
label="Vesting Start (layer)"
inputProps={{ type: 'number' }}
Expand Down
32 changes: 32 additions & 0 deletions src/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,35 @@ export const DEFAULT_EXPLORER_URL = 'https://explorer.spacemesh.io';
export const BUTTON_ICON_SIZE = 16;

export const MAX_MULTISIG_AMOUNT = 10;

export const GENESIS_VESTING_ACCOUNTS = {
sm1qqqqqqpdvm9pwx07d99ajgnuj8rp250u90xt4jczwd873: 2743200000000000n,
sm1qqqqqqx4shtr69586rtnx2j69hvsp9yeen0q8asqv7duy: 5867100000000000n,
sm1qqqqqqqg5232gg5xytss9z0rwj5pw4k39c9e3ugqt6s9a: 1022800000000000n,
sm1qqqqqqx35amk872dx5z3le6rzm56qxfm6fea4qsclrtrz: 409000000000000n,
sm1qqqqqq8dp9dd27ym74p5e3c0xjyem6079xvfwfsk2hlwh: 2045400000000000n,
sm1qqqqqqxg3ymt0zga3h6vexf2d6ak7n94yamck6qfk98m8: 270600000000000n,
sm1qqqqqqygvd32u5g8a6tvccjx38ecmnakw576j0g0dsh9n: 4090900000000000n,
sm1qqqqqqqqgh8qhqh3ltv9uq0klm404lwjsf9jdagh7kyj0: 333300000000000n,
sm1qqqqqq8upt9xtyt5lclxneqmdpaus6j37ma2ecc4fp5qq: 859100000000000n,
sm1qqqqqqrfa0yrzehxujdn7w400afw2e7pv4na2ac8sya0k: 293300000000000n,
sm1qqqqqqz2ja3vag3xwqdx9z2mukgdx3qdvqh2jequjn5t2: 1990600000000000n,
sm1qqqqqqxehnxnamgm5cqdtuqvg7jnhnsq5ug3s4g3d2xa7: 409100000000000n,
sm1qqqqqqz43tzlzqyp695je2tk68a7r707vzxuc0ghj8awp: 4909100000000000n,
sm1qqqqqqqm5aejp8saqp0mq7z5tkxw6vfd9v2nu2gekut5s: 191800000000000n,
sm1qqqqqqq79464hj2atpy6qv8unnaxnm8aqy7t6ygf4hrgf: 2933540000000000n,
sm1qqqqqqz8egxnx83k8kehaqpdjmz3dy88xsgawggmcfxnf: 2933540000000000n,
sm1qqqqqqqqyatumnx5e0nqgzt38yq7f5x4vlu5uugeyyst4: 2933540000000000n,
sm1qqqqqq85pglqtxzjy63h9edgxnh5uellc95xwsqhlgzd2: 2933540000000000n,
sm1qqqqqq93xns99ssc9ctu5jr7ss7ehy55gjut3uq9kfd9c: 2933540000000000n,
sm1qqqqqqxf6g4xetjunwkfdrlj0ns88zxzkhfd0dg5wrnul: 3303792000000000n,
sm1qqqqqqr7pfnc4e9mgwhvnwwl6fg20hu023f27jqss3545: 455300000000000n,
sm1qqqqqqxm7vhlzs8uxse3tjypnma2pkre60fuawclhkryu: 831250000000000n,
sm1qqqqqq9ww5yvweyvpnz8lfmavarn9wgjwtphvrslej2hk: 184375000000000n,
sm1qqqqqq9mcx6ekgn95gh86pwcvcfyhekzkkfawsqpm2uud: 15000000000000n,
sm1qqqqqqxy58hpd7hqdzt97ce3qlqar2j3wrnh4csu2f0wl: 100000000000000n,
sm1qqqqqqz85un25dd5gaahjeqgxu46aefq3wsxrpsjttk6u: 500000000000000n,
sm1qqqqqqzlqnewes9h04ruzfxny982yf7dunz984q09ej4x: 15688500000000000n,
};
export const GENESIS_VESTING_START = 105120;
export const GENESIS_VESTING_END = 420480;
4 changes: 2 additions & 2 deletions src/utils/templates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ export type VestingSpawnArguments = MultiSigSpawnArguments;

export type VaultSpawnArguments = {
Owner: HexString;
TotalAmount: number;
InitialUnlockAmount: number;
TotalAmount: string;
InitialUnlockAmount: string;
VestingStart: number;
VestingEnd: number;
};
Expand Down

0 comments on commit d4c3134

Please sign in to comment.