Skip to content

Commit

Permalink
Merge branch 'main' into ledger_int
Browse files Browse the repository at this point in the history
  • Loading branch information
jpuri authored Feb 13, 2025
2 parents a215b0f + b3f0ee7 commit 01d0048
Show file tree
Hide file tree
Showing 22 changed files with 369 additions and 185 deletions.
4 changes: 3 additions & 1 deletion .github/scripts/shared/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,9 @@ export async function retrieveGithubProjectIssueFieldValuesRecursively(
);

const projectIssueFieldValuesResponseWithSameId: RawGithubProjectIssueFieldValues | undefined =
projectIssuesFieldValuesResponse.nodes.find((issue) => issue.content.id === issueId);
projectIssuesFieldValuesResponse.nodes.find(
(issue) => issue.content?.id === issueId
); // 'issue.content' can be equal to null in edge case where the Github Project board includes private repo issues that can't be accessed by the access token we're using

if (projectIssueFieldValuesResponseWithSameId) {
const projectIssueFieldValues: GithubProjectIssueFieldValues = {
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/create-bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ jobs:
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
cache: yarn

- name: Install dependencies
run: yarn --immutable
working-directory: '.github/scripts'

- name: Create bug report issue on planning repo
id: create-bug-report-issue
Expand Down
145 changes: 115 additions & 30 deletions CHANGELOG.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,8 @@ android {
applicationId "io.metamask"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionName "7.38.1"
versionCode 1533
versionName "7.39.0"
versionCode 1544
testBuildType System.getProperty('testBuildType', 'debug')
missingDimensionStrategy 'react-native-camera', 'general'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
Expand Down
73 changes: 73 additions & 0 deletions app/components/UI/AssetOverview/AssetOverview.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ import {
import { TokenOverviewSelectorsIDs } from '../../../../e2e/selectors/wallet/TokenOverview.selectors';
// eslint-disable-next-line import/no-namespace
import * as networks from '../../../util/networks';
// eslint-disable-next-line import/no-namespace
import * as transactions from '../../../util/transactions';
import { mockNetworkState } from '../../../util/test/network';

const MOCK_CHAIN_ID = '0x1';

Expand Down Expand Up @@ -193,6 +196,76 @@ describe('AssetOverview', () => {
expect(navigate).toHaveBeenCalledWith('SendFlowView', {});
});

it('should handle send button press for native asset when isETH is false', async () => {
const spyOnGetEther = jest.spyOn(transactions, 'getEther');

const nativeAsset = {
balance: '400',
balanceFiat: '1500',
chainId: '0x38',
logo: 'https://upload.wikimedia.org/wikipedia/commons/0/05/Ethereum_logo_2014.svg',
symbol: 'BNB',
name: 'Binance smart chain',
isETH: false,
nativeCurrency: 'BNB',
hasBalanceError: false,
decimals: 18,
address: '0x123',
aggregators: [],
image: '',
isNative: true,
};

const { getByTestId } = renderWithProvider(
<AssetOverview
asset={nativeAsset}
displayBuyButton
displaySwapsButton
swapsIsLive
/>,
{
state: {
...mockInitialState,
engine: {
...mockInitialState.engine,
backgroundState: {
...mockInitialState.engine.backgroundState,
NetworkController: {
...mockNetworkState({
chainId: '0x38',
id: 'bsc',
nickname: 'Binance Smart Chain',
ticker: 'BNB',
blockExplorerUrl: 'https://bscscan.com',
}),
},
TokenRatesController: {
marketData: {
'0x38': {
[zeroAddress()]: { price: 0.005 },
},
},
},
AccountsController: MOCK_ACCOUNTS_CONTROLLER_STATE,
AccountTrackerController: {
accountsByChainId: {
'0x38': {
[nativeAsset.address]: { balance: '0x1' },
},
},
} as const,
},
},
},
},
);

const sendButton = getByTestId('token-send-button');
fireEvent.press(sendButton);
expect(navigate).toHaveBeenCalledWith('SendFlowView', {});
expect(spyOnGetEther).toHaveBeenCalledWith('BNB');
});

it('should handle swap button press', async () => {
const { getByTestId } = renderWithProvider(
<AssetOverview
Expand Down
2 changes: 1 addition & 1 deletion app/components/UI/AssetOverview/AssetOverview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ const AssetOverview: React.FC<AssetOverviewProps> = ({
await NetworkController.setActiveNetwork(networkClientId as string);
}
}
if (asset.isETH && ticker) {
if ((asset.isETH || asset.isNative) && ticker) {
dispatch(newAssetTransaction(getEther(ticker)));
} else {
dispatch(newAssetTransaction(asset));
Expand Down
3 changes: 2 additions & 1 deletion app/components/Views/confirmations/SendFlow/Confirm/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1594,7 +1594,8 @@ Confirm.contextType = ThemeContext;
const mapStateToProps = (state) => {
const transaction = getNormalizedTxState(state);
const chainId = transaction?.chainId;
const networkClientId = transaction?.networkClientId;
const networkClientId =
transaction?.networkClientId || selectNetworkClientId(state);

return {
accounts: selectAccounts(state),
Expand Down
30 changes: 30 additions & 0 deletions app/core/Engine/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,7 @@ export class Engine {
selectBasicFunctionalityEnabled(store.getState());

const approvalController = new ApprovalController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'ApprovalController',
allowedEvents: [],
Expand All @@ -316,6 +317,7 @@ export class Engine {
});

const preferencesController = new PreferencesController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'PreferencesController',
allowedActions: [],
Expand Down Expand Up @@ -357,6 +359,7 @@ export class Engine {
networkController.initializeProvider();

const assetsContractController = new AssetsContractController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'AssetsContractController',
allowedActions: [
Expand All @@ -374,6 +377,7 @@ export class Engine {
});

// Create AccountsController
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
const accountsControllerMessenger: AccountsControllerMessenger =
this.controllerMessenger.getRestricted({
name: 'AccountsController',
Expand All @@ -394,6 +398,7 @@ export class Engine {
});

///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
const multichainBalancesControllerMessenger: MultichainBalancesControllerMessenger =
this.controllerMessenger.getRestricted({
name: 'MultichainBalancesController',
Expand All @@ -420,6 +425,7 @@ export class Engine {
});

const multichainRatesController = createMultichainRatesController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: multichainRatesControllerMessenger,
initialState: initialState.RatesController,
});
Expand All @@ -434,6 +440,7 @@ export class Engine {
const nftController = new NftController({
chainId: getGlobalChainId(networkController),
useIpfsSubdomains: false,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'NftController',
allowedActions: [
Expand Down Expand Up @@ -474,6 +481,7 @@ export class Engine {
// @ts-expect-error at this point in time the provider will be defined by the `networkController.initializeProvider`
provider: networkController.getProviderAndBlockTracker().provider,
state: initialState.TokensController,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'TokensController',
allowedActions: [
Expand All @@ -498,13 +506,15 @@ export class Engine {
AppConstants.NETWORK_STATE_CHANGE_EVENT,
listener,
),
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'TokenListController',
allowedActions: [`${networkController.name}:getNetworkClientById`],
allowedEvents: [`${networkController.name}:stateChange`],
}),
});
const currencyRateController = new CurrencyRateController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'CurrencyRateController',
allowedActions: [`${networkController.name}:getNetworkClientById`],
Expand Down Expand Up @@ -563,6 +573,7 @@ export class Engine {

const remoteFeatureFlagController = createRemoteFeatureFlagController({
state: initialState.RemoteFeatureFlagController,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'RemoteFeatureFlagController',
allowedActions: [],
Expand All @@ -573,6 +584,7 @@ export class Engine {
});

const phishingController = new PhishingController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'PhishingController',
allowedActions: [],
Expand Down Expand Up @@ -651,6 +663,7 @@ export class Engine {
preferencesController,
),
encryptor,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'KeyringController',
allowedActions: [],
Expand Down Expand Up @@ -776,6 +789,7 @@ export class Engine {
});

const accountTrackerController = new AccountTrackerController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'AccountTrackerController',
allowedActions: [
Expand Down Expand Up @@ -864,6 +878,7 @@ export class Engine {
});

const selectedNetworkController = new SelectedNetworkController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'SelectedNetworkController',
allowedActions: [
Expand Down Expand Up @@ -935,6 +950,7 @@ export class Engine {
const requireAllowlist = process.env.METAMASK_BUILD_TYPE === 'main';
const disableSnapInstallation = process.env.METAMASK_BUILD_TYPE === 'main';
const allowLocalSnaps = process.env.METAMASK_BUILD_TYPE === 'flask';
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
const snapsRegistryMessenger: SnapsRegistryMessenger =
this.controllerMessenger.getRestricted({
name: 'SnapsRegistry',
Expand All @@ -954,6 +970,7 @@ export class Engine {
});

this.snapExecutionService = new WebViewExecutionService({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'ExecutionService',
allowedActions: [],
Expand Down Expand Up @@ -1034,6 +1051,7 @@ export class Engine {

const authenticationController = new AuthenticationController.Controller({
state: initialState.AuthenticationController,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'AuthenticationController',
allowedActions: [
Expand Down Expand Up @@ -1084,6 +1102,7 @@ export class Engine {
},
},
state: initialState.UserStorageController,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'UserStorageController',
allowedActions: [
Expand Down Expand Up @@ -1117,6 +1136,7 @@ export class Engine {

const notificationServicesController =
new NotificationServicesController.Controller({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'NotificationServicesController',
allowedActions: [
Expand Down Expand Up @@ -1159,6 +1179,7 @@ export class Engine {

const notificationServicesPushController =
new NotificationServicesPushController.Controller({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: notificationServicesPushControllerMessenger,
state: initialState.NotificationServicesPushController || {
fcmToken: '',
Expand Down Expand Up @@ -1237,6 +1258,7 @@ export class Engine {
},
isSimulationEnabled: () =>
preferencesController.state.useTransactionSimulations,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'TransactionController',
allowedActions: [
Expand Down Expand Up @@ -1296,6 +1318,7 @@ export class Engine {
),
trackMetaMetricsEvent: smartTransactionsControllerTrackMetaMetricsEvent,
state: initialState.SmartTransactionsController,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'SmartTransactionsController',
allowedActions: [
Expand Down Expand Up @@ -1330,6 +1353,7 @@ export class Engine {
TokensController: tokensController,
TokenListController: tokenListController,
TokenDetectionController: new TokenDetectionController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'TokenDetectionController',
allowedActions: [
Expand Down Expand Up @@ -1377,6 +1401,7 @@ export class Engine {
disabled: false,
}),
NftDetectionController: new NftDetectionController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'NftDetectionController',
allowedEvents: [
Expand All @@ -1400,6 +1425,7 @@ export class Engine {
PhishingController: phishingController,
PreferencesController: preferencesController,
TokenBalancesController: new TokenBalancesController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'TokenBalancesController',
allowedActions: [
Expand All @@ -1420,6 +1446,7 @@ export class Engine {
state: initialState.TokenBalancesController,
}),
TokenRatesController: new TokenRatesController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'TokenRatesController',
allowedActions: [
Expand Down Expand Up @@ -1459,6 +1486,7 @@ export class Engine {
swapsUtils.LINEA_CHAIN_ID,
swapsUtils.BASE_CHAIN_ID,
],
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'SwapsController',
// TODO: allow these internal calls once GasFeeController
Expand All @@ -1480,6 +1508,7 @@ export class Engine {
RemoteFeatureFlagController: remoteFeatureFlagController,
SelectedNetworkController: selectedNetworkController,
SignatureController: new SignatureController({
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'SignatureController',
allowedActions: [
Expand Down Expand Up @@ -1514,6 +1543,7 @@ export class Engine {
chainId: getGlobalChainId(networkController),
blockaidPublicKey: process.env.BLOCKAID_PUBLIC_KEY as string,
cdnBaseUrl: process.env.BLOCKAID_FILE_CDN as string,
// @ts-expect-error TODO: Resolve mismatch between base-controller versions.
messenger: this.controllerMessenger.getRestricted({
name: 'PPOMController',
allowedActions: ['NetworkController:getNetworkClientById'],
Expand Down
Loading

0 comments on commit 01d0048

Please sign in to comment.