Skip to content

Commit

Permalink
Fix/transfer address validation (#3092)
Browse files Browse the repository at this point in the history
* fix: transfer address validation

* fix: cross-chain callData

* fix: unused

* fix: unused
  • Loading branch information
sokolova-an authored Jan 31, 2025
1 parent 1d87175 commit 718ca6b
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { BN } from '@polkadot/util';
import { type Store } from 'effector';

import { type Account } from '@/shared/core';
import { type Account, type Chain } from '@/shared/core';
import { formatAmount, validateAddress } from '@/shared/lib/utils';
import {
type BalanceMap,
Expand Down Expand Up @@ -56,12 +56,17 @@ export const TransferRules = {
errorText: 'transfer.requiredRecipientError',
validator: Boolean,
},
incorrectRecipient: {
incorrectRecipient: (source: Store<Chain | null>) => ({
name: 'incorrectRecipient',
errorText: 'transfer.incorrectRecipientError',
source,
// Second argument for validator is form data, but we need chain
validator: (destination: string) => validateAddress(destination),
},
validator: (destination: string, _: any, chain: Chain) => {
if (!chain) return false;

return validateAddress(destination, chain);
},
}),
},
amount: {
required: {
Expand Down
2 changes: 1 addition & 1 deletion src/renderer/shared/api/xcm/service/xcmService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ function parseXcmPalletExtrinsic(args: Omit<XcmPalletTransferArgs, 'feeAssetItem
const destJunction = Object.keys(destInterior)[0];
parsedPayload.destParachain = Number(xcmUtils.toRawString(get(destInterior, `${destJunction}.Parachain`)));

if (!parsedPayload.isRelayToken) {
if (!parsedPayload.isRelayToken && assetInterior) {
const assetJunction = Object.keys(assetInterior)[0];
const cols = xcmUtils.getJunctionCols<{ GeneralIndex: string; Parachain: number }>(assetInterior, assetJunction);

Expand Down
26 changes: 13 additions & 13 deletions src/renderer/widgets/Transfer/model/form-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,18 @@ const $totalFee = combine(
({ fee, deliveryFee }) => new BN(fee).add(deliveryFee).toString(),
);

const $xcmChain = combine(
{
chains: networkModel.$chains,
xcmChainId: xcmTransferModel.$xcmChainId,
},
({ chains, xcmChainId }) => {
if (!xcmChainId) return null;

return chains[xcmChainId] ?? null;
},
);

const $transferForm = createForm<FormParams>({
fields: {
account: {
Expand Down Expand Up @@ -138,7 +150,7 @@ const $transferForm = createForm<FormParams>({
},
destination: {
init: '',
rules: [TransferRules.destination.required, TransferRules.destination.incorrectRecipient],
rules: [TransferRules.destination.required, TransferRules.destination.incorrectRecipient($xcmChain)],
},
amount: {
init: '',
Expand Down Expand Up @@ -433,18 +445,6 @@ const $extrinsic = combine(
},
);

const $xcmChain = combine(
{
chains: networkModel.$chains,
xcmChainId: xcmTransferModel.$xcmChainId,
},
({ chains, xcmChainId }) => {
if (!xcmChainId) return null;

return chains[xcmChainId] ?? null;
},
);

const getDeliveryFeeFx = createEffect(
async ({
config,
Expand Down
4 changes: 2 additions & 2 deletions src/renderer/widgets/Transfer/ui/TransferForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -199,14 +199,14 @@ const Destination = () => {
const { t } = useI18n();

const {
fields: { destination },
fields: { destination, xcmChain },
} = useForm(formModel.$transferForm);

const isMyselfXcmEnabled = useUnit(formModel.$isMyselfXcmEnabled);

const prefixElement = (
<div className="flex h-auto items-center">
{validateAddress(destination.value) ? (
{validateAddress(destination.value, xcmChain.value) ? (
<Identicon size={20} address={destination.value} background={false} />
) : (
<Icon size={20} name="emptyIdenticon" />
Expand Down

0 comments on commit 718ca6b

Please sign in to comment.