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
Original file line number Diff line number Diff line change
@@ -1,27 +1,34 @@
import type { ErrorReportingServiceCaptureExceptionAction } from '@metamask/error-reporting-service';
import { Messenger } from '@metamask/messenger';
import type {
TransactionControllerConfirmExternalTransactionAction,
TransactionControllerGetNonceLockAction,
TransactionControllerGetTransactionsAction,
TransactionControllerUpdateTransactionAction,
} from '@metamask/transaction-controller';
import {
NetworkControllerGetNetworkClientByIdAction,
NetworkControllerGetStateAction,
NetworkControllerStateChangeEvent,
} from '@metamask/network-controller';
import type {
RemoteFeatureFlagControllerGetStateAction,
RemoteFeatureFlagControllerStateChangeEvent,
} from '@metamask/remote-feature-flag-controller';
import type {
TransactionControllerGetNonceLockAction,
TransactionControllerGetTransactionsAction,
TransactionControllerUpdateTransactionAction,
} from '@metamask/transaction-controller';
import { MetaMetricsControllerTrackEventAction } from '../../controllers/metametrics-controller';
import { RootMessenger } from '../../lib/messenger';

type MessengerActions =
| ErrorReportingServiceCaptureExceptionAction
| NetworkControllerGetNetworkClientByIdAction
| NetworkControllerGetStateAction
| RemoteFeatureFlagControllerGetStateAction
| TransactionControllerGetNonceLockAction
| TransactionControllerGetTransactionsAction
| TransactionControllerUpdateTransactionAction
| TransactionControllerConfirmExternalTransactionAction;
| TransactionControllerUpdateTransactionAction;

type MessengerEvents = NetworkControllerStateChangeEvent;
type MessengerEvents =
| NetworkControllerStateChangeEvent
| RemoteFeatureFlagControllerStateChangeEvent;

export type SmartTransactionsControllerMessenger = ReturnType<
typeof getSmartTransactionsControllerMessenger
Expand All @@ -42,14 +49,18 @@ export function getSmartTransactionsControllerMessenger(
messenger.delegate({
messenger: controllerMessenger,
actions: [
'ErrorReportingService:captureException',
'NetworkController:getNetworkClientById',
'NetworkController:getState',
'RemoteFeatureFlagController:getState',
'TransactionController:getNonceLock',
'TransactionController:confirmExternalTransaction',
'TransactionController:getTransactions',
'TransactionController:updateTransaction',
],
events: ['NetworkController:stateChange'],
events: [
'NetworkController:stateChange',
'RemoteFeatureFlagController:stateChange',
],
});
return controllerMessenger;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@ import {
import type { Hex } from '@metamask/utils';
import type { TraceCallback } from '@metamask/controller-utils';
import { getAllowedSmartTransactionsChainIds } from '../../../../shared/constants/smartTransactions';
import { getFeatureFlagsByChainId } from '../../../../shared/modules/selectors';
import { type ProviderConfigState } from '../../../../shared/modules/selectors/networks';
import { type FeatureFlagsMetaMaskState } from '../../../../shared/modules/selectors/feature-flags';
import type { FeatureFlags } from '../../lib/smart-transaction/smart-transactions';
import { ControllerInitFunction, ControllerInitRequest } from '../types';
import {
SmartTransactionsControllerInitMessenger,
Expand Down Expand Up @@ -57,12 +53,6 @@ export const SmartTransactionsControllerInit: ControllerInitFunction<
>[0]['trackMetaMetricsEvent'],
state: persistedState.SmartTransactionsController,
messenger: controllerMessenger,
getFeatureFlags: () => {
const state = { metamask: getUIState() };
return getFeatureFlagsByChainId(
state as unknown as ProviderConfigState & FeatureFlagsMetaMaskState,
) as unknown as FeatureFlags;
},
getMetaMetricsProps: async () => {
const metamask = getUIState();
const { internalAccounts } = metamask;
Expand Down
42 changes: 13 additions & 29 deletions app/scripts/lib/smart-transaction/smart-transactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
type Fee,
type Fees,
type SmartTransaction,
type SmartTransactionsNetworkConfig,
} from '@metamask/smart-transactions-controller';
import {
TransactionController,
Expand All @@ -30,10 +31,11 @@ import {
import { CANCEL_GAS_LIMIT_DEC } from '../../../../shared/constants/smartTransactions';
import { decimalToHex } from '../../../../shared/modules/conversion.utils';
import {
getFeatureFlagsByChainId,
getIsSmartTransaction,
isHardwareWallet,
getSmartTransactionsFeatureFlagsForChain,
} from '../../../../shared/modules/selectors';
import { getCurrentChainId } from '../../../../shared/modules/selectors/networks';
import { isLegacyTransaction } from '../../../../shared/modules/transaction.utils';
import { ControllerFlatState } from '../../controller-init/controller-list';

Expand All @@ -53,17 +55,7 @@ export type SmartTransactionHookMessenger = Messenger<
AllowedEvents
>;

export type FeatureFlags = {
extensionActive: boolean;
mobileActive: boolean;
smartTransactions: {
expectedDeadline?: number;
maxDeadline?: number;
extensionReturnTxHashAsap?: boolean;
extensionReturnTxHashAsapBatch?: boolean;
extensionSkipSmartTransactionStatusPage?: boolean;
};
};
export type FeatureFlags = SmartTransactionsNetworkConfig;

export type SubmitSmartTransactionRequest = {
transactionMeta: TransactionMeta;
Expand All @@ -88,17 +80,7 @@ class SmartTransactionHook {

#controllerMessenger: SmartTransactionHookMessenger;

#featureFlags: {
extensionActive: boolean;
mobileActive: boolean;
smartTransactions: {
expectedDeadline?: number;
maxDeadline?: number;
extensionReturnTxHashAsap?: boolean;
extensionReturnTxHashAsapBatch?: boolean;
extensionSkipSmartTransactionStatusPage?: boolean;
};
};
#featureFlags: FeatureFlags;

#isDapp: boolean;

Expand Down Expand Up @@ -143,7 +125,7 @@ class SmartTransactionHook {
this.#txParams = transactionMeta.txParams;
this.#transactions = transactions;
const extensionSkipSmartTransactionStatusPage =
featureFlags?.smartTransactions?.extensionSkipSmartTransactionStatusPage;
featureFlags?.extensionSkipSmartTransactionStatusPage;

this.#shouldShowStatusPage = extensionSkipSmartTransactionStatusPage
? false
Expand Down Expand Up @@ -218,7 +200,7 @@ class SmartTransactionHook {
await this.#processApprovalIfNeeded(uuid);

const extensionReturnTxHashAsap =
this.#featureFlags?.smartTransactions?.extensionReturnTxHashAsap;
this.#featureFlags?.extensionReturnTxHashAsap;

let transactionHash: string | undefined | null;
if (extensionReturnTxHashAsap && submitTransactionResponse?.txHash) {
Expand Down Expand Up @@ -278,7 +260,7 @@ class SmartTransactionHook {
}

const extensionReturnTxHashAsapBatch =
this.#featureFlags?.smartTransactions?.extensionReturnTxHashAsapBatch;
this.#featureFlags?.extensionReturnTxHashAsapBatch;

if (
extensionReturnTxHashAsapBatch &&
Expand Down Expand Up @@ -579,12 +561,14 @@ export function getSmartTransactionCommonParams(
// UI state is required to support shared selectors to avoid duplicate logic in frontend and backend.
// Ideally all backend logic would instead rely on messenger event / state subscriptions.
const uiState = getUIState(flatState);

const effectiveChainId = (chainId || getCurrentChainId(uiState)) as Hex;
// @ts-expect-error Smart transaction selector types does not match controller state
const isSmartTransaction = getIsSmartTransaction(uiState, chainId);

// @ts-expect-error Smart transaction selector types does not match controller state
const featureFlags = getFeatureFlagsByChainId(uiState, chainId);
const featureFlags = getSmartTransactionsFeatureFlagsForChain(
uiState,
effectiveChainId,
);

const isHardwareWalletAccount = isHardwareWallet(uiState);

Expand Down
Loading
Loading