Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions electron/main/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { TrxConsolidationRecoveryOptions } from '../types';
import { EthRecoveryConsolidationRecoveryOptions, TrxConsolidationRecoveryOptions } from '../types';
import EthereumCommon from '@ethereumjs/common';

process.env.DIST_ELECTRON = join(__dirname, '../..');
Expand All @@ -12,7 +12,7 @@ import { AbstractUtxoCoin } from '@bitgo/abstract-utxo';
import { BitGoAPI } from '@bitgo/sdk-api';
import { Ada, Tada } from '@bitgo/sdk-coin-ada';
import { Dot, Tdot } from '@bitgo/sdk-coin-dot';
import { AbstractEthLikeNewCoins } from '@bitgo/sdk-coin-eth';
import { AbstractEthLikeNewCoins, Eth, Hteth } from '@bitgo/sdk-coin-eth';
import { Sol, Tsol, SolToken } from '@bitgo/sdk-coin-sol';
import { Trx, Ttrx, TrxToken } from '@bitgo/sdk-coin-trx';
import { BaseCoin } from '@bitgo/sdk-core';
Expand Down Expand Up @@ -270,6 +270,11 @@ async function createWindow() {
params as TrxConsolidationRecoveryOptions
);
}
case 'eth':
case 'hteth': {
const ethLikeCoin = sdk.coin(coin) as unknown as Eth | Hteth;
return await ethLikeCoin.recoverConsolidations(params as EthRecoveryConsolidationRecoveryOptions);
}
default:
throw new Error(
`Coin: ${coin} does not support consolidation recovery`
Expand Down
6 changes: 6 additions & 0 deletions electron/preload/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import {
SolRecoveryConsolidationRecoveryOptions,
SuiRecoverConsolidationRecoveryBatch,
SuiRecoveryConsolidationRecoveryOptions,
EthRecoveryConsolidationRecoveryOptions,
EthRecoverConsolidationRecoveryBatch,
} from '../types';

import type * as EthLikeCommon from '@ethereumjs/common';
Expand Down Expand Up @@ -61,6 +63,7 @@ type Commands = {
| TaoRecoveryConsolidationRecoveryOptions
| SolRecoveryConsolidationRecoveryOptions
| SuiRecoveryConsolidationRecoveryOptions
| EthRecoveryConsolidationRecoveryOptions
): Promise<
| Error
| TrxConsolidationRecoveryBatch
Expand All @@ -69,6 +72,7 @@ type Commands = {
| TaoRecoverConsolidationRecoveryBatch
| SolRecoverConsolidationRecoveryBatch
| SuiRecoverConsolidationRecoveryBatch
| EthRecoverConsolidationRecoveryBatch
>;
writeFile(
file: string,
Expand Down Expand Up @@ -185,13 +189,15 @@ const commands: Commands = {
| DotRecoveryConsolidationRecoveryOptions
| TaoRecoveryConsolidationRecoveryOptions
| SolRecoveryConsolidationRecoveryOptions
| EthRecoveryConsolidationRecoveryOptions
): Promise<
| Error
| TrxConsolidationRecoveryBatch
| AdaRecoveryConsolidationRecoveryBatch
| DotRecoverConsolidationRecoveryBatch
| TaoRecoverConsolidationRecoveryBatch
| SolRecoverConsolidationRecoveryBatch
| EthRecoverConsolidationRecoveryBatch
> {
return ipcRenderer.invoke('recoverConsolidations', coin, params);
},
Expand Down
8 changes: 8 additions & 0 deletions electron/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ export type SuiRecoveryConsolidationRecoveryOptions =
| Parameters<Tsui['recoverConsolidations']>[0];
export type TrxConsolidationRecoveryOptions = ConsolidationRecoveryOptions;

export type EthRecoveryConsolidationRecoveryOptions =
| Parameters<Eth['recoverConsolidations']>[0]
| Parameters<Hteth['recoverConsolidations']>[0];

export type AdaRecoveryConsolidationRecoveryBatch = Awaited<
ReturnType<Ada['recoverConsolidations'] | Tada['recoverConsolidations']>
>;
Expand All @@ -85,3 +89,7 @@ export type SuiRecoverConsolidationRecoveryBatch = Awaited<
ReturnType<Sui['recoverConsolidations'] | Tsui['recoverConsolidations']>
>;
export type TrxConsolidationRecoveryBatch = ConsolidationRecoveryBatch;

export type EthRecoverConsolidationRecoveryBatch = Awaited<
ReturnType<Eth['recoverConsolidations'] | Hteth['recoverConsolidations']>
>;
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { useNavigate, useParams } from 'react-router-dom';
import {
assert,
BitgoEnv,
getEip1559Params,
getEthLikeRecoveryChainId,
includePubsFor,
safeEnv,
updateKeysFromIds,
Expand All @@ -17,6 +19,7 @@ import { GenericEcdsaForm } from '~/containers/BuildUnsignedConsolidation/Generi
import { SolForm } from '~/containers/BuildUnsignedConsolidation/SolForm';
import { SolTokenForm } from '~/containers/BuildUnsignedConsolidation/SolTokenForm';
import { SuiTokenForm } from '~/containers/BuildUnsignedConsolidation/SuiTokenForm';
import { EthLikeForm } from './EthLikeForm';

type ConsolidationFormProps = {
coin?: string;
Expand Down Expand Up @@ -361,11 +364,11 @@ function ConsolidationForm({ coin, environment }: ConsolidationFormProps) {
const parentCoin = tokenParentCoins[coin];
const chainData = await window.queries.getChain(parentCoin);
const consolidateData = await window.commands.recoverConsolidations(parentCoin, {
...(await updateKeysFromIds(parentCoin, values)),
bitgoKey: values.bitgoKey.replace(/\s+/g, ''),
tokenContractAddress: values.packageId,
seed: values.seed,
});
...(await updateKeysFromIds(parentCoin, values)),
bitgoKey: values.bitgoKey.replace(/\s+/g, ''),
tokenContractAddress: values.packageId,
seed: values.seed,
});

if (consolidateData instanceof Error) {
throw consolidateData;
Expand Down Expand Up @@ -399,6 +402,80 @@ function ConsolidationForm({ coin, environment }: ConsolidationFormProps) {
console.log(e);
}

setSubmitting(false);
}
}}
/>
);
case 'eth':
case 'hteth':
return (
<EthLikeForm
key={coin}
coinName={coin}
onSubmit={async (values, { setSubmitting }) => {
setAlert(undefined);
setSubmitting(true);
try {
await window.commands.setBitGoEnvironment(
environment,
coin,
values.apiKey
);
const chainData = await window.queries.getChain(coin);

const { maxFeePerGas, maxPriorityFeePerGas, ...rest } =
await updateKeysFromIds(coin, values);
const recoverData = await window.commands.recoverConsolidations(
coin,
{
...rest,
coinName: coin,
eip1559: getEip1559Params(
coin,
maxFeePerGas,
maxPriorityFeePerGas
),
replayProtectionOptions: {
chain: getEthLikeRecoveryChainId(coin, environment),
hardfork: 'london',
},
bitgoKey: '',
ignoreAddressTypes: [],
}
);

if (recoverData instanceof Error) {
throw recoverData;
}

const showSaveDialogData = await window.commands.showSaveDialog({
filters: [
{
name: 'Custom File Type',
extensions: ['json'],
},
],
defaultPath: `~/${chainData}-unsigned-sweep-${Date.now()}.json`,
});

if (!showSaveDialogData.filePath) {
throw new Error('No file path selected');
}

await window.commands.writeFile(
showSaveDialogData.filePath,
JSON.stringify(recoverData, null, 2),
{ encoding: 'utf-8' }
);

navigate(`/${environment}/build-unsigned-sweep/${coin}/success`);
} catch (err) {
if (err instanceof Error) {
setAlert(err.message);
} else {
console.error(err);
}
setSubmitting(false);
}
}}
Expand Down
Loading
Loading