Skip to content

Commit 8a40995

Browse files
authored
fix: Update name and symbol to be optional in a fungible asset type (#3300)
This makes the `name` and `symbol` of an asset optional per the SIP-29 update.
1 parent 9a467b6 commit 8a40995

File tree

7 files changed

+107
-9
lines changed

7 files changed

+107
-9
lines changed

packages/examples/packages/browserify-plugin/snap.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"url": "https://github.com/MetaMask/snaps.git"
88
},
99
"source": {
10-
"shasum": "ipeiQKWLZEg5Snm73jZkQ7VeusFnAMPd4ws5zWo7/NI=",
10+
"shasum": "2uIeFUIcHICTP107dLNcmwrygQ30DCecekANd1w8H5w=",
1111
"location": {
1212
"npm": {
1313
"filePath": "dist/bundle.js",

packages/examples/packages/browserify/snap.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"url": "https://github.com/MetaMask/snaps.git"
88
},
99
"source": {
10-
"shasum": "uPtVkZpOxZzVcTSWX40MuXbED38DLAf9hNiNAR88+10=",
10+
"shasum": "IAqCgqZhLCgTRIjIzVwfBIMVDVoCjZNcefMp/Vlmsz8=",
1111
"location": {
1212
"npm": {
1313
"filePath": "dist/bundle.js",

packages/snaps-controllers/coverage.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"branches": 93.48,
2+
"branches": 93.54,
33
"functions": 97.38,
44
"lines": 98.34,
55
"statements": 98.08

packages/snaps-controllers/src/interface/utils.test.tsx

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,6 +1064,78 @@ describe('getAssetSelectorStateValue', () => {
10641064
),
10651065
).toBeNull();
10661066
});
1067+
1068+
it('sets the asset name to the symbol if the asset name is undefined in state', () => {
1069+
getAssetsState.mockReturnValue({
1070+
assetsMetadata: {
1071+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
1072+
symbol: 'SOL',
1073+
},
1074+
},
1075+
accountsAssets: {
1076+
[MOCK_ACCOUNT_ID]: [],
1077+
},
1078+
});
1079+
1080+
expect(
1081+
getAssetSelectorStateValue(
1082+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
1083+
getAssetsState,
1084+
),
1085+
).toStrictEqual({
1086+
asset: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
1087+
name: 'SOL',
1088+
symbol: 'SOL',
1089+
});
1090+
});
1091+
1092+
it('sets the asset symbol to "Unknown" if the asset symbol is undefined in state', () => {
1093+
getAssetsState.mockReturnValue({
1094+
assetsMetadata: {
1095+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
1096+
name: 'Solana',
1097+
},
1098+
},
1099+
accountsAssets: {
1100+
[MOCK_ACCOUNT_ID]: [],
1101+
},
1102+
});
1103+
1104+
expect(
1105+
getAssetSelectorStateValue(
1106+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
1107+
getAssetsState,
1108+
),
1109+
).toStrictEqual({
1110+
asset: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
1111+
name: 'Solana',
1112+
symbol: 'Unknown',
1113+
});
1114+
});
1115+
1116+
it('sets the asset symbol and name to "Unknown" if both are undefined in state', () => {
1117+
getAssetsState.mockReturnValue({
1118+
assetsMetadata: {
1119+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
1120+
fungible: true,
1121+
},
1122+
},
1123+
accountsAssets: {
1124+
[MOCK_ACCOUNT_ID]: [],
1125+
},
1126+
});
1127+
1128+
expect(
1129+
getAssetSelectorStateValue(
1130+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
1131+
getAssetsState,
1132+
),
1133+
).toStrictEqual({
1134+
asset: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501',
1135+
name: 'Unknown',
1136+
symbol: 'Unknown',
1137+
});
1138+
});
10671139
});
10681140

10691141
describe('getDefaultAsset', () => {

packages/snaps-controllers/src/interface/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,8 @@ export function getAssetSelectorStateValue(
280280

281281
return {
282282
asset: value,
283-
name: asset.name,
284-
symbol: asset.symbol,
283+
name: asset.name ?? asset.symbol ?? 'Unknown',
284+
symbol: asset.symbol ?? 'Unknown',
285285
};
286286
}
287287

packages/snaps-sdk/src/types/handlers/assets-lookup.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,31 @@ describe('FungibleAssetMetadataStruct', () => {
3333
},
3434
],
3535
},
36+
{
37+
fungible: true,
38+
iconUrl: 'https://metamask.io/sol.svg',
39+
units: [
40+
{
41+
decimals: 9,
42+
},
43+
],
44+
},
45+
{
46+
name: 'Solana',
47+
symbol: 'SOL',
48+
fungible: true,
49+
iconUrl: 'https://metamask.io/sol.svg',
50+
units: [
51+
{
52+
name: 'Solana',
53+
symbol: 'SOL',
54+
decimals: 9,
55+
},
56+
{
57+
decimals: 10,
58+
},
59+
],
60+
},
3661
])('validates an object', (value) => {
3762
expect(is(value, FungibleAssetMetadataStruct)).toBe(true);
3863
});

packages/snaps-sdk/src/types/handlers/assets-lookup.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
string,
1010
record,
1111
nullable,
12+
optional,
1213
} from '@metamask/superstruct';
1314
import {
1415
assert,
@@ -17,8 +18,8 @@ import {
1718
} from '@metamask/utils';
1819

1920
export const FungibleAssetUnitStruct = object({
20-
name: string(),
21-
symbol: string(),
21+
name: optional(string()),
22+
symbol: optional(string()),
2223
decimals: number(),
2324
});
2425

@@ -39,8 +40,8 @@ export const AssetIconUrlStruct = refine(string(), 'Asset URL', (value) => {
3940
});
4041

4142
export const FungibleAssetMetadataStruct = object({
42-
name: string(),
43-
symbol: string(),
43+
name: optional(string()),
44+
symbol: optional(string()),
4445
fungible: literal(true),
4546
iconUrl: AssetIconUrlStruct,
4647
units: size(array(FungibleAssetUnitStruct), 1, Infinity),

0 commit comments

Comments
 (0)