Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
1413fd1
account tracker controller selector
bergarces Mar 4, 2026
421281a
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 16, 2026
ed99a09
correct state path
bergarces Mar 16, 2026
a16c340
replace state references
bergarces Mar 16, 2026
aa59559
more references
bergarces Mar 16, 2026
718d22e
further references
bergarces Mar 16, 2026
5e42214
fix name
bergarces Mar 16, 2026
240a360
missing references
bergarces Mar 16, 2026
17bd96a
fix selector
bergarces Mar 16, 2026
8c616ac
tests
bergarces Mar 17, 2026
0fc975e
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 17, 2026
1f1041d
tests
bergarces Mar 17, 2026
5f85916
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 18, 2026
3adacc4
fix test
bergarces Mar 18, 2026
2439059
tests
bergarces Mar 18, 2026
1321917
fix for test
bergarces Mar 18, 2026
4b2ea5c
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 18, 2026
72ac618
update packages
bergarces Mar 18, 2026
42ec772
lints
bergarces Mar 18, 2026
cfd055b
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 18, 2026
d808acc
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 18, 2026
d8596ce
fixes
bergarces Mar 18, 2026
b402a2c
remove root messenger
bergarces Mar 18, 2026
e29fa67
fix engine tests
bergarces Mar 18, 2026
39672c6
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 18, 2026
304823b
revert change
bergarces Mar 18, 2026
0af852b
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 20, 2026
8f98854
lockfile
bergarces Mar 20, 2026
9d4c0cf
change import type
bergarces Mar 20, 2026
30017e4
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 20, 2026
2bc5ccd
stop test error
bergarces Mar 20, 2026
dd53b5e
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 20, 2026
4d78cdc
fix dependency
bergarces Mar 20, 2026
a479c0d
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Mar 20, 2026
c10b528
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Apr 22, 2026
4a26175
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Apr 23, 2026
8c40516
update package versions
bergarces Apr 23, 2026
94cc0cf
feature flag simplification
bergarces Apr 23, 2026
ece6d5d
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Apr 24, 2026
5c7adf8
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Apr 27, 2026
5e9cbc8
remove default state
bergarces Apr 27, 2026
0546702
remove import
bergarces Apr 27, 2026
ea78721
remove unnecessary tests
bergarces Apr 27, 2026
e75f6d8
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Apr 27, 2026
d07c864
fix mocks
bergarces Apr 27, 2026
286b2a4
fix test
bergarces Apr 27, 2026
87a8198
changes to selectors
bergarces Apr 27, 2026
0ca3f90
fix tests
bergarces Apr 27, 2026
476000a
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Apr 27, 2026
8f9ee3d
upgrade packages
bergarces Apr 28, 2026
7f58b60
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces Apr 28, 2026
21a8ab1
bump assets controllers
bergarces Apr 28, 2026
115a9f3
Merge branch 'main' into bump-assets-controllers-105
bergarces Apr 28, 2026
5391c7e
unit test
bergarces Apr 28, 2026
f675d67
remove type inference
bergarces Apr 28, 2026
f5b2613
test fix
bergarces Apr 28, 2026
fb32480
migration selectors
bergarces Apr 28, 2026
0246d21
revert change
bergarces Apr 28, 2026
03d43c2
fix test
bergarces Apr 28, 2026
cae99de
Merge branch 'main' into add-assets-migration-selectors
bergarces Apr 29, 2026
c7dbb43
fix tests
bergarces Apr 29, 2026
8c1e847
deprecation notices
bergarces Apr 29, 2026
74c0c36
Merge branch 'add-assets-migration-selectors' into assets-selectors-a…
bergarces Apr 29, 2026
cb66d5e
missing
bergarces Apr 29, 2026
e47db1d
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces May 4, 2026
e6e8a54
Merge branch 'main' into assets-selectors-account-tracker-controller
bergarces May 4, 2026
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
Expand Up @@ -11,6 +11,7 @@ import type {
TransactionMetricsBuilderRequest,
} from '../types';
import type { RootState } from '../../../../../reducers';
import { selectAccountsByChainId } from '../../../../../selectors/accountTrackerController';

export function getGasMetricsProperties({
transactionMeta,
Expand Down Expand Up @@ -82,8 +83,7 @@ function getNativeBalance(
chainId: string,
address: string,
): BigNumber {
const accountsByChainId =
state.engine?.backgroundState?.AccountTrackerController?.accountsByChainId;
const accountsByChainId = selectAccountsByChainId(state);

const account = accountsByChainId?.[chainId]?.[address?.toLowerCase()];

Expand Down
16 changes: 4 additions & 12 deletions app/selectors/accountTrackerController.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,16 @@
import { createSelector } from 'reselect';
import { AccountTrackerControllerState } from '@metamask/assets-controllers';
import { RootState } from '../reducers';
import { createDeepEqualSelector } from './util';
import { selectEvmChainId } from './networkController';
import { selectSelectedInternalAccountFormattedAddress } from './accountsController';
import { Hex } from '@metamask/utils';
import { getAccountTrackerControllerAccountsByChainId } from './assets/assets-migration';

const selectAccountTrackerControllerState = (state: RootState) =>
state.engine.backgroundState.AccountTrackerController;

export const selectAccountsByChainId = createDeepEqualSelector(
selectAccountTrackerControllerState,
(accountTrackerControllerState: AccountTrackerControllerState) =>
accountTrackerControllerState?.accountsByChainId ?? {},
);
export { getAccountTrackerControllerAccountsByChainId as selectAccountsByChainId };

export const selectAccounts = createDeepEqualSelector(
selectAccountsByChainId,
getAccountTrackerControllerAccountsByChainId,
selectEvmChainId,
selectSelectedInternalAccountFormattedAddress,
(accountsByChainId, chainId) => accountsByChainId?.[chainId] || {},
);

Expand All @@ -28,7 +20,7 @@ export const selectAccountsLength = createSelector(
);

export const selectAccountBalanceByChainId = createDeepEqualSelector(
selectAccountsByChainId,
getAccountTrackerControllerAccountsByChainId,
selectEvmChainId,
selectSelectedInternalAccountFormattedAddress,
(_state: RootState, chainId?: Hex) => chainId,
Expand Down
100 changes: 100 additions & 0 deletions app/selectors/assets/assets-migration.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import { createDeepEqualSelector } from '../util';
import { selectIsAssetsUnifyStateEnabled } from '../featureFlagController/assetsUnifyState';
import { AccountTrackerControllerState } from '@metamask/assets-controllers';
import { isEvmAccountType } from '@metamask/keyring-api';
import { toChecksumHexAddress } from '@metamask/controller-utils';
import {
bigIntToHex,
CaipAssetType,
Hex,
parseCaipAssetType,
} from '@metamask/utils';
import { decimalToPrefixedHex } from '../../util/conversions';
import { AssetsControllerState } from '@metamask/assets-controller';
import { AccountsControllerState } from '@metamask/accounts-controller';

// ChainId (hex) -> AccountAddress (hex checksummed) -> Balance (hex)
export const getAccountTrackerControllerAccountsByChainId =
createDeepEqualSelector(
[
selectIsAssetsUnifyStateEnabled,
(state) => state.AccountTrackerController?.accountsByChainId ?? {},
(state) => state.AssetsController?.assetsBalance ?? {},
(state) => state.AssetsController?.assetsInfo ?? {},
(state) => state.AccountsController?.internalAccounts?.accounts ?? {},
Comment thread
bergarces marked this conversation as resolved.
Outdated
],
(
isAssetsUnifyStateEnabled: boolean,
accountsByChainId: AccountTrackerControllerState['accountsByChainId'],
assetsBalance: AssetsControllerState['assetsBalance'],
assetsInfo: AssetsControllerState['assetsInfo'],
internalAccountsById: AccountsControllerState['internalAccounts']['accounts'],
) => {
if (!isAssetsUnifyStateEnabled) {
return accountsByChainId;
}

const result: AccountTrackerControllerState['accountsByChainId'] = {};

for (const [accountId, accountBalances] of Object.entries(
assetsBalance,
)) {
const internalAccount = internalAccountsById[accountId];
if (!internalAccount || !isEvmAccountType(internalAccount.type)) {
continue;
}

const checksummedAddress = toChecksumHexAddress(
internalAccount.address,
);

for (const [assetId, balanceData] of Object.entries(accountBalances)) {
const metadata = assetsInfo[assetId];
if (metadata?.type !== 'native') {
continue;
}

const { chain: parsedChain } = parseCaipAssetType(
assetId as CaipAssetType,
);

// No need to check if the chain is EVM, we already filtered out non-EVM accounts
const hexChainId = decimalToPrefixedHex(parsedChain.reference);
const amount = balanceData?.amount ?? '0';

result[hexChainId] ??= {};
result[hexChainId][checksummedAddress] = {
// TODO: Use raw value from state when available
balance: parseBalanceWithDecimals(amount, metadata.decimals),
};
}
}

return result;
},
);

function parseBalanceWithDecimals(
balanceString: string,
decimals: number,
): Hex {
const [integerPart, fractionalPart = ''] = balanceString.split('.');

if (decimals === 0) {
return bigIntToHex(BigInt(integerPart));
}

if (fractionalPart.length >= decimals) {
return bigIntToHex(
BigInt(`${integerPart}${fractionalPart.slice(0, decimals)}`),
);
}

return bigIntToHex(
BigInt(
`${integerPart}${fractionalPart}${'0'.repeat(
decimals - fractionalPart.length,
)}`,
),
);
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@
"@metamask/analytics-controller": "^1.0.0",
"@metamask/app-metadata-controller": "^2.0.0",
"@metamask/approval-controller": "^8.0.0",
"@metamask/assets-controller": "^2.0.0",
"@metamask/assets-controller": "^2.2.0",
"@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A100.0.3#~/.yarn/patches/@metamask-assets-controllers-npm-100.0.3-ea172b88c9.patch",
"@metamask/base-controller": "^9.0.0",
"@metamask/bitcoin-wallet-snap": "^1.10.0",
Expand Down
38 changes: 25 additions & 13 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7674,36 +7674,38 @@ __metadata:
languageName: node
linkType: hard

"@metamask/assets-controller@npm:^2.0.0":
version: 2.0.0
resolution: "@metamask/assets-controller@npm:2.0.0"
"@metamask/assets-controller@npm:^2.2.0":
version: 2.2.0
resolution: "@metamask/assets-controller@npm:2.2.0"
dependencies:
"@ethereumjs/util": "npm:^9.1.0"
"@ethersproject/abi": "npm:^5.7.0"
"@ethersproject/providers": "npm:^5.7.0"
"@metamask/account-tree-controller": "npm:^4.1.1"
"@metamask/assets-controllers": "npm:^99.4.0"
"@metamask/assets-controllers": "npm:^100.0.3"
"@metamask/base-controller": "npm:^9.0.0"
"@metamask/controller-utils": "npm:^11.18.0"
"@metamask/core-backend": "npm:^5.1.1"
"@metamask/client-controller": "npm:^1.0.0"
"@metamask/controller-utils": "npm:^11.19.0"
"@metamask/core-backend": "npm:^6.0.0"
"@metamask/keyring-api": "npm:^21.5.0"
"@metamask/keyring-controller": "npm:^25.1.0"
"@metamask/keyring-internal-api": "npm:^10.0.0"
"@metamask/keyring-snap-client": "npm:^8.2.0"
"@metamask/messenger": "npm:^0.3.0"
"@metamask/network-controller": "npm:^29.0.0"
"@metamask/network-enablement-controller": "npm:^4.1.0"
"@metamask/network-controller": "npm:^30.0.0"
"@metamask/network-enablement-controller": "npm:^4.1.2"
"@metamask/permission-controller": "npm:^12.2.0"
"@metamask/polling-controller": "npm:^16.0.2"
"@metamask/polling-controller": "npm:^16.0.3"
"@metamask/preferences-controller": "npm:^22.1.0"
"@metamask/snaps-controllers": "npm:^17.2.0"
"@metamask/snaps-utils": "npm:^11.7.0"
"@metamask/transaction-controller": "npm:^62.17.0"
"@metamask/transaction-controller": "npm:^62.19.0"
"@metamask/utils": "npm:^11.9.0"
async-mutex: "npm:^0.5.0"
bignumber.js: "npm:^9.1.2"
lodash: "npm:^4.17.21"
checksum: 10/dc31db672976d57e16731fff9769363617a8ffb775efc125233d3690766f7752ff4cbcc5d47ceaab293560812ec6de988d532c4c8499f6cb172aa5010bd3c7a8
p-limit: "npm:^3.1.0"
checksum: 10/a1501d4bef2f01e0e8358d44615c3b79c8af2072e3551a9969688b3d7e0926fb64dedb8b7ac9dda1dbf66698a389d82ffd0cc488c3a8c0ad36785b6af66453e9
languageName: node
linkType: hard

Expand Down Expand Up @@ -8078,6 +8080,16 @@ __metadata:
languageName: node
linkType: hard

"@metamask/client-controller@npm:^1.0.0":
version: 1.0.0
resolution: "@metamask/client-controller@npm:1.0.0"
dependencies:
"@metamask/base-controller": "npm:^9.0.0"
"@metamask/messenger": "npm:^0.3.0"
checksum: 10/79a81ebae21fbe41cc110c5f8593751aebd64c3df98e23c4ec1b2129fa4d86d301afc3a8aa8ff65fc0c917f65c171aa6c90bce00753ec1378966cfca95f89d9c
languageName: node
linkType: hard

"@metamask/connectivity-controller@npm:^0.1.0":
version: 0.1.0
resolution: "@metamask/connectivity-controller@npm:0.1.0"
Expand Down Expand Up @@ -9155,7 +9167,7 @@ __metadata:
languageName: node
linkType: hard

"@metamask/network-enablement-controller@npm:^4.1.0, @metamask/network-enablement-controller@npm:^4.1.1, @metamask/network-enablement-controller@npm:^4.1.2":
"@metamask/network-enablement-controller@npm:^4.1.1, @metamask/network-enablement-controller@npm:^4.1.2":
version: 4.1.2
resolution: "@metamask/network-enablement-controller@npm:4.1.2"
dependencies:
Expand Down Expand Up @@ -35377,7 +35389,7 @@ __metadata:
"@metamask/analytics-controller": "npm:^1.0.0"
"@metamask/app-metadata-controller": "npm:^2.0.0"
"@metamask/approval-controller": "npm:^8.0.0"
"@metamask/assets-controller": "npm:^2.0.0"
"@metamask/assets-controller": "npm:^2.2.0"
"@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A100.0.3#~/.yarn/patches/@metamask-assets-controllers-npm-100.0.3-ea172b88c9.patch"
"@metamask/auto-changelog": "npm:^5.3.0"
"@metamask/base-controller": "npm:^9.0.0"
Expand Down
Loading