Skip to content

Commit fe57c4e

Browse files
committed
fix: reviews
1 parent aeae713 commit fe57c4e

File tree

3 files changed

+42
-39
lines changed

3 files changed

+42
-39
lines changed

account-kit/smart-contracts/src/ma-v2/actions/deferralActions.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export type BuildUserOperationWithDeferredActionParams = {
6868

6969
export type EntityIdAndNonceParams = {
7070
entityId: number;
71-
nonce: bigint;
71+
nonceKey: bigint;
7272
isGlobalValidation: boolean;
7373
};
7474

@@ -120,8 +120,10 @@ export const deferralActions: (
120120
client: client,
121121
});
122122

123+
// 2 = deferred action flags 0b10
124+
// 1 = isGlobal validation flag 0b01
123125
const fullNonceKey: bigint = buildFullNonce({
124-
nonce: nonceKeyOverride,
126+
nonceKey: nonceKeyOverride,
125127
entityId,
126128
isGlobalValidation,
127129
isDeferredAction: true,
@@ -238,15 +240,15 @@ export const deferralActions: (
238240

239241
const getEntityIdAndNonce = async ({
240242
entityId,
241-
nonce,
243+
nonceKey,
242244
isGlobalValidation,
243245
}: EntityIdAndNonceParams) => {
244246
if (!client.account) {
245247
throw new AccountNotFoundError();
246248
}
247249

248-
if (nonce > maxUint152) {
249-
throw new InvalidNonceKeyError(nonce);
250+
if (nonceKey > maxUint152) {
251+
throw new InvalidNonceKeyError(nonceKey);
250252
}
251253

252254
const entryPoint = client.account.getEntryPoint();
@@ -261,7 +263,7 @@ export const deferralActions: (
261263
client.account.address,
262264
entryPoint.address,
263265
buildFullNonce({
264-
nonce,
266+
nonceKey,
265267
entityId,
266268
isGlobalValidation,
267269
isDeferredAction: true,

account-kit/smart-contracts/src/ma-v2/client/client.test.ts

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,25 +1370,24 @@ describe("MA v2 Tests", async () => {
13701370
for (let startNonce = 0n; startNonce < 5n; startNonce++) {
13711371
const { entityId, nonce } = await newClient.getEntityIdAndNonce({
13721372
entityId: startEntityId,
1373-
nonce: startNonce,
1373+
nonceKey: startNonce,
13741374
isGlobalValidation: true,
13751375
});
13761376

13771377
const expectedEntityId: number = Math.max(1, startEntityId);
13781378

13791379
// account not deployed, expect to get 1 when we pass in 0
1380-
assert(entityId === expectedEntityId);
1381-
assert(
1382-
nonce ===
1383-
(await entryPointContract.read.getNonce([
1384-
newClient.account.address,
1385-
buildFullNonce({
1386-
nonce: startNonce,
1387-
entityId: expectedEntityId,
1388-
isDeferredAction: true,
1389-
}),
1390-
]))
1391-
);
1380+
expect(entityId).toEqual(expectedEntityId);
1381+
await expect(
1382+
entryPointContract.read.getNonce([
1383+
newClient.account.address,
1384+
buildFullNonce({
1385+
nonceKey: startNonce,
1386+
entityId: expectedEntityId,
1387+
isDeferredAction: true,
1388+
}),
1389+
])
1390+
).resolves.toEqual(nonce);
13921391
}
13931392
}
13941393

@@ -1412,13 +1411,16 @@ describe("MA v2 Tests", async () => {
14121411
});
14131412
await newClient.waitForUserOperationTransaction(uo1);
14141413

1415-
const selectors = ["execute", "executeBatch"].map(
1414+
const fns: ContractFunctionName<typeof semiModularAccountBytecodeAbi>[] = [
1415+
"execute",
1416+
"executeBatch",
1417+
];
1418+
1419+
const selectors = fns.map(
14161420
(s) =>
14171421
prepareEncodeFunctionData({
14181422
abi: semiModularAccountBytecodeAbi,
1419-
functionName: s as ContractFunctionName<
1420-
typeof semiModularAccountBytecodeAbi
1421-
>,
1423+
functionName: s,
14221424
}).functionName
14231425
);
14241426

@@ -1447,25 +1449,24 @@ describe("MA v2 Tests", async () => {
14471449
for (let startNonce = 0n; startNonce < 5n; startNonce++) {
14481450
const { entityId, nonce } = await newClient.getEntityIdAndNonce({
14491451
entityId: startEntityId,
1450-
nonce: startNonce,
1452+
nonceKey: startNonce,
14511453
isGlobalValidation: true,
14521454
});
14531455

14541456
const expectedEntityId: number = Math.max(startEntityId, 3);
14551457

14561458
// expect to get max(3, startEntityId)
1457-
assert(entityId === expectedEntityId);
1458-
assert(
1459-
nonce ===
1460-
(await entryPointContract.read.getNonce([
1461-
newClient.account.address,
1462-
buildFullNonce({
1463-
nonce: startNonce,
1464-
entityId: expectedEntityId,
1465-
isDeferredAction: true,
1466-
}),
1467-
]))
1468-
);
1459+
expect(entityId).toEqual(expectedEntityId);
1460+
await expect(
1461+
entryPointContract.read.getNonce([
1462+
newClient.account.address,
1463+
buildFullNonce({
1464+
nonceKey: startNonce,
1465+
entityId: expectedEntityId,
1466+
isDeferredAction: true,
1467+
}),
1468+
])
1469+
).resolves.toEqual(nonce);
14691470
}
14701471
}
14711472
});

account-kit/smart-contracts/src/ma-v2/utils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,21 +233,21 @@ export const entityIdAndNonceReaderBytecode =
233233
"0x608060405234801561001057600080fd5b506040516104f13803806104f183398101604081905261002f916101e5565b60006008826001600160c01b0316901c90506000808263ffffffff1611610057576001610059565b815b90506001600160a01b0385163b15610133575b60006001600160a01b03861663d31b575b6bffffffff0000000000000000604085901b166040516001600160e01b031960e084901b1681526001600160401b03199091166004820152602401600060405180830381865afa1580156100d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526100fd91908101906103c6565b805190915060ff161580156101155750606081015151155b156101205750610133565b8161012a816104a4565b9250505061006c565b604051631aab3f0d60e11b81526001600160a01b03868116600483015264ffffffff01600160c01b038516600884901b64ffffffff0016176024830152600091908616906335567e1a90604401602060405180830381865afa15801561019d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c191906104d7565b90508060005260206000f35b6001600160a01b03811681146101e257600080fd5b50565b6000806000606084860312156101fa57600080fd5b8351610205816101cd565b6020850151909350610216816101cd565b60408501519092506001600160c01b038116811461023357600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156102765761027661023e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156102a4576102a461023e565b604052919050565b60006001600160401b038211156102c5576102c561023e565b5060051b60200190565b600082601f8301126102e057600080fd5b81516102f36102ee826102ac565b61027c565b8082825260208201915060208360051b86010192508583111561031557600080fd5b602085015b8381101561034857805166ffffffffffffff198116811461033a57600080fd5b83526020928301920161031a565b5095945050505050565b600082601f83011261036357600080fd5b81516103716102ee826102ac565b8082825260208201915060208360051b86010192508583111561039357600080fd5b602085015b838110156103485780516001600160e01b0319811681146103b857600080fd5b835260209283019201610398565b6000602082840312156103d857600080fd5b81516001600160401b038111156103ee57600080fd5b82016080818503121561040057600080fd5b610408610254565b815160ff8116811461041957600080fd5b815260208201516001600160401b0381111561043457600080fd5b610440868285016102cf565b60208301525060408201516001600160401b0381111561045f57600080fd5b61046b868285016102cf565b60408301525060608201516001600160401b0381111561048a57600080fd5b61049686828501610352565b606083015250949350505050565b600063ffffffff821663ffffffff81036104ce57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6000602082840312156104e957600080fd5b505191905056fe";
234234

235235
export type BuildNonceParams = {
236-
nonce?: bigint;
236+
nonceKey?: bigint;
237237
entityId?: number;
238238
isGlobalValidation?: boolean;
239239
isDeferredAction?: boolean;
240240
isDirectCallValidation?: boolean;
241241
};
242242

243243
export const buildFullNonce = ({
244-
nonce = 0n,
244+
nonceKey = 0n,
245245
entityId = 0,
246246
isGlobalValidation = true,
247247
isDeferredAction = false,
248248
}: BuildNonceParams): bigint => {
249249
return (
250-
(nonce << 40n) +
250+
(nonceKey << 40n) +
251251
BigInt(entityId << 8) +
252252
(isDeferredAction ? 2n : 0n) +
253253
(isGlobalValidation ? 1n : 0n)

0 commit comments

Comments
 (0)