Skip to content

Commit e2585f1

Browse files
committed
Update native-token-periodic permission
1 parent 7e5ff79 commit e2585f1

6 files changed

Lines changed: 48 additions & 32 deletions

File tree

packages/gator-permissions-snap/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/snap-7715-permissions.git"
88
},
99
"source": {
10-
"shasum": "lDkiV/mNq1vl4SG72M9dcOe2EuQQGhrmR+8QEsDeD9E=",
10+
"shasum": "k3y7TRsPdHuDrL9r1SbxdLYSK2tdbbWT0C4xdUa2EhU=",
1111
"location": {
1212
"npm": {
1313
"filePath": "dist/bundle.js",

packages/gator-permissions-snap/src/permissions/nativeTokenPeriodic/context.ts

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { parseEther, toHex } from 'viem';
33
import type { AccountController } from '../../accountController';
44
import { TimePeriod } from '../../core/types';
55
import type { TokenPricesService } from '../../services/tokenPricesService';
6-
import { formatEtherFromString } from '../../utils/balance';
6+
import { formatUnitsFromString } from '../../utils/balance';
77
import {
88
convertReadableDateToTimestamp,
99
convertTimestampToReadableDate,
@@ -17,6 +17,7 @@ import type {
1717
PopulatedNativeTokenPeriodicPermission,
1818
NativeTokenPeriodicPermission,
1919
} from './types';
20+
import { IconUrls } from '../../ui/iconConstant';
2021

2122
/**
2223
* Construct an amended NativeTokenPeriodicPermissionRequest, based on the specified request,
@@ -91,32 +92,33 @@ export async function buildContext({
9192
}): Promise<NativeTokenPeriodicContext> {
9293
const chainId = Number(permissionRequest.chainId);
9394

94-
const balancePromise = accountController
95-
.getAccountBalance({
96-
chainId,
97-
})
98-
.then(async (balance) => {
99-
const balanceFormattedAsCurrency =
100-
await tokenPricesService.getCryptoToFiatConversion(
101-
`eip155:1/slip44:60`,
102-
balance,
103-
);
104-
return { balance, balanceFormattedAsCurrency };
105-
});
106-
107-
const [address, { balance, balanceFormattedAsCurrency }] = await Promise.all([
108-
accountController.getAccountAddress({
109-
chainId,
110-
}),
111-
balancePromise,
112-
]);
95+
const address = await accountController.getAccountAddress({
96+
chainId,
97+
});
98+
99+
const {
100+
balance: rawBalance,
101+
decimals,
102+
symbol,
103+
} = await accountController.getTokenBalanceAndMetadata({
104+
chainId,
105+
});
106+
107+
const balanceFormatted = await tokenPricesService.getCryptoToFiatConversion(
108+
`eip155:1/slip44:60`,
109+
toHex(rawBalance),
110+
);
111+
112+
// todo: this should just be BigInt
113+
const balance = toHex(rawBalance);
113114

114115
const expiry = convertTimestampToReadableDate(permissionRequest.expiry);
115116

116-
const periodAmount = formatEtherFromString(
117-
permissionRequest.permission.data.periodAmount,
118-
false,
119-
);
117+
const periodAmount = formatUnitsFromString({
118+
value: permissionRequest.permission.data.periodAmount,
119+
allowUndefined: false,
120+
decimals,
121+
});
120122

121123
const periodDuration =
122124
permissionRequest.permission.data.periodDuration.toString();
@@ -144,7 +146,9 @@ export async function buildContext({
144146
accountDetails: {
145147
address,
146148
balance,
147-
balanceFormattedAsCurrency,
149+
balanceFormattedAsCurrency: balanceFormatted,
150+
symbol,
151+
iconUrl: IconUrls.ethereum.token,
148152
},
149153
permissionDetails: {
150154
periodAmount,

packages/gator-permissions-snap/src/permissions/nativeTokenPeriodic/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export type NativeTokenPeriodicContext = BaseContext & {
2828
address: Hex;
2929
balanceFormattedAsCurrency: string;
3030
balance: string;
31+
symbol: string;
32+
iconUrl: string;
3133
};
3234
permissionDetails: {
3335
periodAmount: string;

packages/gator-permissions-snap/test/permissions/nativeTokenPeriodic/content.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type {
88
NativeTokenPeriodicMetadata,
99
} from '../../../src/permissions/nativeTokenPeriodic/types';
1010
import { TIME_PERIOD_TO_SECONDS } from '../../../src/utils/time';
11+
import { IconUrls } from '../../../src/ui/iconConstant';
1112

1213
const mockContext: NativeTokenPeriodicContext = {
1314
expiry: '05/01/2024',
@@ -17,6 +18,8 @@ const mockContext: NativeTokenPeriodicContext = {
1718
address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
1819
balance: toHex(parseUnits('10', 18)),
1920
balanceFormattedAsCurrency: '$🐊10.00',
21+
symbol: 'ETH',
22+
iconUrl: IconUrls.ethereum.token,
2023
},
2124
permissionDetails: {
2225
periodAmount: '1',

packages/gator-permissions-snap/test/permissions/nativeTokenPeriodic/context.test.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
convertReadableDateToTimestamp,
2121
TIME_PERIOD_TO_SECONDS,
2222
} from '../../../src/utils/time';
23+
import { IconUrls } from '../../../src/ui/iconConstant';
2324

2425
const permissionWithoutOptionals: NativeTokenPeriodicPermission = {
2526
type: 'native-token-periodic',
@@ -60,6 +61,8 @@ const alreadyPopulatedContext: NativeTokenPeriodicContext = {
6061
address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
6162
balance: toHex(parseUnits('10', 18)),
6263
balanceFormattedAsCurrency: '$🐊10.00',
64+
symbol: 'ETH',
65+
iconUrl: IconUrls.ethereum.token,
6366
},
6467
permissionDetails: {
6568
periodAmount: '1',
@@ -115,9 +118,11 @@ describe('nativeTokenPeriodic:context', () => {
115118
getAccountAddress: jest
116119
.fn()
117120
.mockResolvedValue(alreadyPopulatedContext.accountDetails.address),
118-
getAccountBalance: jest
119-
.fn()
120-
.mockResolvedValue(alreadyPopulatedContext.accountDetails.balance),
121+
getTokenBalanceAndMetadata: jest.fn(() => ({
122+
balance: BigInt(alreadyPopulatedContext.accountDetails.balance),
123+
symbol: alreadyPopulatedContext.accountDetails.symbol,
124+
decimals: 18,
125+
})),
121126
} as unknown as jest.Mocked<AccountController>;
122127
});
123128

@@ -134,7 +139,9 @@ describe('nativeTokenPeriodic:context', () => {
134139
chainId: Number(alreadyPopulatedPermissionRequest.chainId),
135140
});
136141

137-
expect(mockAccountController.getAccountBalance).toHaveBeenCalledWith({
142+
expect(
143+
mockAccountController.getTokenBalanceAndMetadata,
144+
).toHaveBeenCalledWith({
138145
chainId: Number(alreadyPopulatedPermissionRequest.chainId),
139146
});
140147

packages/gator-permissions-snap/test/permissions/nativeTokenStream/context.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ describe('nativeTokenStream:context', () => {
139139
() => alreadyPopulatedContext.accountDetails.address,
140140
),
141141
getTokenBalanceAndMetadata: jest.fn(() => ({
142-
balance: parseUnits('10', 18),
143-
symbol: 'ETH',
142+
balance: BigInt(alreadyPopulatedContext.accountDetails.balance),
143+
symbol: alreadyPopulatedContext.accountDetails.symbol,
144144
decimals: 18,
145145
})),
146146
} as unknown as jest.Mocked<AccountController>;

0 commit comments

Comments
 (0)