permissionless 0.1.39 → 0.1.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # permissionless
2
2
 
3
+ ## 0.1.40
4
+
5
+ ### Patch Changes
6
+
7
+ - be1c3dede45bdfbffe168735cbd48fd967684818: Added encodeNonce util function
8
+
3
9
  ## 0.1.39
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeNonce = void 0;
4
+ const viem_1 = require("viem");
5
+ function encodeNonce(args) {
6
+ const key = BigInt((0, viem_1.toHex)(args.key, { size: 24 }));
7
+ const sequence = BigInt((0, viem_1.toHex)(args.sequence, { size: 8 }));
8
+ return (key << BigInt(64)) + sequence;
9
+ }
10
+ exports.encodeNonce = encodeNonce;
11
+ //# sourceMappingURL=encodeNonce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeNonce.js","sourceRoot":"","sources":["../../utils/encodeNonce.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAE5B,SAAgB,WAAW,CAAC,IAAuC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAA,YAAK,EAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAA,YAAK,EAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAE1D,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAA;AACzC,CAAC;AALD,kCAKC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ENTRYPOINT_ADDRESS_V07 = exports.ENTRYPOINT_ADDRESS_V06 = exports.getEntryPointVersion = exports.getPackedUserOperation = exports.getAddressFromInitCodeOrPaymasterAndData = exports.providerToSmartAccountSigner = exports.isSmartAccountDeployed = exports.AccountOrClientNotFoundError = exports.signUserOperationHashWithECDSA = exports.walletClientToSmartAccountSigner = exports.getRequiredPrefund = exports.getUserOperationHash = exports.deepHexlify = exports.transactionReceiptStatus = exports.parseAccount = void 0;
3
+ exports.ENTRYPOINT_ADDRESS_V07 = exports.ENTRYPOINT_ADDRESS_V06 = exports.encodeNonce = exports.getEntryPointVersion = exports.getPackedUserOperation = exports.getAddressFromInitCodeOrPaymasterAndData = exports.providerToSmartAccountSigner = exports.isSmartAccountDeployed = exports.AccountOrClientNotFoundError = exports.signUserOperationHashWithECDSA = exports.walletClientToSmartAccountSigner = exports.getRequiredPrefund = exports.getUserOperationHash = exports.deepHexlify = exports.transactionReceiptStatus = exports.parseAccount = void 0;
4
4
  const deepHexlify_1 = require("./deepHexlify.js");
5
5
  Object.defineProperty(exports, "deepHexlify", { enumerable: true, get: function () { return deepHexlify_1.deepHexlify; } });
6
6
  Object.defineProperty(exports, "transactionReceiptStatus", { enumerable: true, get: function () { return deepHexlify_1.transactionReceiptStatus; } });
@@ -25,6 +25,8 @@ function parseAccount(account) {
25
25
  return account;
26
26
  }
27
27
  exports.parseAccount = parseAccount;
28
+ const encodeNonce_1 = require("./encodeNonce.js");
29
+ Object.defineProperty(exports, "encodeNonce", { enumerable: true, get: function () { return encodeNonce_1.encodeNonce; } });
28
30
  const getEntryPointVersion_1 = require("./getEntryPointVersion.js");
29
31
  Object.defineProperty(exports, "ENTRYPOINT_ADDRESS_V06", { enumerable: true, get: function () { return getEntryPointVersion_1.ENTRYPOINT_ADDRESS_V06; } });
30
32
  Object.defineProperty(exports, "ENTRYPOINT_ADDRESS_V07", { enumerable: true, get: function () { return getEntryPointVersion_1.ENTRYPOINT_ADDRESS_V07; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":";;;AACA,+CAAqE;AAkCjE,4FAlCK,yBAAW,OAkCL;AADX,yGAjCkB,sCAAwB,OAiClB;AAhC5B,yGAAqG;AA4CjG,yHA5CK,mFAAwC,OA4CL;AA3C5C,6DAG6B;AA+BzB,mGAhCA,uCAAkB,OAgCA;AA9BtB,iEAG+B;AA0B3B,qGA3BA,2CAAoB,OA2BA;AAzBxB,qEAAiE;AAiC7D,uGAjCK,+CAAsB,OAiCL;AAhC1B,iFAA6E;AAiCzE,6GAjCK,2DAA4B,OAiCL;AAhChC,qFAIyC;AA0BrC,6GA7BA,6DAA4B,OA6BA;AAF5B,+GAzBA,+DAA8B,OAyBA;AAvBlC,yFAAqF;AAoBjF,iHApBK,mEAAgC,OAoBL;AAlBpC,SAAgB,YAAY,CAAC,OAA0B;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACjD,OAAO,OAAO,CAAA;AAClB,CAAC;AAJD,oCAIC;AACD,iEAI+B;AAoB3B,uGAvBA,6CAAsB,OAuBA;AACtB,uGAvBA,6CAAsB,OAuBA;AAFtB,qGApBA,2CAAoB,OAoBA;AAjBxB,qEAAiE;AAgB7D,uGAhBK,+CAAsB,OAgBL"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":";;;AACA,+CAAqE;AAmCjE,4FAnCK,yBAAW,OAmCL;AADX,yGAlCkB,sCAAwB,OAkClB;AAjC5B,yGAAqG;AA6CjG,yHA7CK,mFAAwC,OA6CL;AA5C5C,6DAG6B;AAgCzB,mGAjCA,uCAAkB,OAiCA;AA/BtB,iEAG+B;AA2B3B,qGA5BA,2CAAoB,OA4BA;AA1BxB,qEAAiE;AAkC7D,uGAlCK,+CAAsB,OAkCL;AAjC1B,iFAA6E;AAkCzE,6GAlCK,2DAA4B,OAkCL;AAjChC,qFAIyC;AA2BrC,6GA9BA,6DAA4B,OA8BA;AAF5B,+GA1BA,+DAA8B,OA0BA;AAxBlC,yFAAqF;AAqBjF,iHArBK,mEAAgC,OAqBL;AAnBpC,SAAgB,YAAY,CAAC,OAA0B;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACjD,OAAO,OAAO,CAAA;AAClB,CAAC;AAJD,oCAIC;AACD,+CAA2C;AAyBvC,4FAzBK,yBAAW,OAyBL;AAxBf,iEAI+B;AAqB3B,uGAxBA,6CAAsB,OAwBA;AACtB,uGAxBA,6CAAsB,OAwBA;AAHtB,qGApBA,2CAAoB,OAoBA;AAjBxB,qEAAiE;AAgB7D,uGAhBK,+CAAsB,OAgBL"}
@@ -0,0 +1,7 @@
1
+ import { toHex } from "viem";
2
+ export function encodeNonce(args) {
3
+ const key = BigInt(toHex(args.key, { size: 24 }));
4
+ const sequence = BigInt(toHex(args.sequence, { size: 8 }));
5
+ return (key << BigInt(64)) + sequence;
6
+ }
7
+ //# sourceMappingURL=encodeNonce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeNonce.js","sourceRoot":"","sources":["../../utils/encodeNonce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AAE5B,MAAM,UAAU,WAAW,CAAC,IAAuC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAE1D,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAA;AACzC,CAAC"}
@@ -11,7 +11,8 @@ export function parseAccount(account) {
11
11
  return { address: account, type: "json-rpc" };
12
12
  return account;
13
13
  }
14
+ import { encodeNonce } from "./encodeNonce.js";
14
15
  import { ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07, getEntryPointVersion } from "./getEntryPointVersion.js";
15
16
  import { getPackedUserOperation } from "./getPackedUserOperation.js";
16
- export { transactionReceiptStatus, deepHexlify, getUserOperationHash, getRequiredPrefund, walletClientToSmartAccountSigner, signUserOperationHashWithECDSA, AccountOrClientNotFoundError, isSmartAccountDeployed, providerToSmartAccountSigner, getAddressFromInitCodeOrPaymasterAndData, getPackedUserOperation, getEntryPointVersion, ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07 };
17
+ export { transactionReceiptStatus, deepHexlify, getUserOperationHash, getRequiredPrefund, walletClientToSmartAccountSigner, signUserOperationHashWithECDSA, AccountOrClientNotFoundError, isSmartAccountDeployed, providerToSmartAccountSigner, getAddressFromInitCodeOrPaymasterAndData, getPackedUserOperation, getEntryPointVersion, encodeNonce, ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07 };
17
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EAEH,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEH,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EACH,4BAA4B,EAE5B,8BAA8B,EACjC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAA;AAErF,MAAM,UAAU,YAAY,CAAC,OAA0B;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACjD,OAAO,OAAO,CAAA;AAClB,CAAC;AACD,OAAO,EACH,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EACH,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,gCAAgC,EAGhC,8BAA8B,EAE9B,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,EAC5B,wCAAwC,EACxC,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACzB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EAEH,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEH,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EACH,4BAA4B,EAE5B,8BAA8B,EACjC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAA;AAErF,MAAM,UAAU,YAAY,CAAC,OAA0B;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACjD,OAAO,OAAO,CAAA;AAClB,CAAC;AACD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EACH,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EACH,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,gCAAgC,EAGhC,8BAA8B,EAE9B,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,EAC5B,wCAAwC,EACxC,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,sBAAsB,EACtB,sBAAsB,EACzB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare function encodeNonce(args: {
2
+ key: bigint;
3
+ sequence: bigint;
4
+ }): bigint;
5
+ //# sourceMappingURL=encodeNonce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeNonce.d.ts","sourceRoot":"","sources":["../../utils/encodeNonce.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAK3E"}
@@ -8,7 +8,8 @@ import { providerToSmartAccountSigner } from "./providerToSmartAccountSigner";
8
8
  import { AccountOrClientNotFoundError, type SignUserOperationHashWithECDSAParams, signUserOperationHashWithECDSA } from "./signUserOperationHashWithECDSA";
9
9
  import { walletClientToSmartAccountSigner } from "./walletClientToSmartAccountSigner";
10
10
  export declare function parseAccount(account: Address | Account): Account;
11
+ import { encodeNonce } from "./encodeNonce";
11
12
  import { ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07, getEntryPointVersion } from "./getEntryPointVersion";
12
13
  import { getPackedUserOperation } from "./getPackedUserOperation";
13
- export { transactionReceiptStatus, deepHexlify, getUserOperationHash, getRequiredPrefund, walletClientToSmartAccountSigner, type GetRequiredPrefundReturnType, type GetUserOperationHashParams, signUserOperationHashWithECDSA, type SignUserOperationHashWithECDSAParams, AccountOrClientNotFoundError, isSmartAccountDeployed, providerToSmartAccountSigner, getAddressFromInitCodeOrPaymasterAndData, getPackedUserOperation, getEntryPointVersion, ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07 };
14
+ export { transactionReceiptStatus, deepHexlify, getUserOperationHash, getRequiredPrefund, walletClientToSmartAccountSigner, type GetRequiredPrefundReturnType, type GetUserOperationHashParams, signUserOperationHashWithECDSA, type SignUserOperationHashWithECDSAParams, AccountOrClientNotFoundError, isSmartAccountDeployed, providerToSmartAccountSigner, getAddressFromInitCodeOrPaymasterAndData, getPackedUserOperation, getEntryPointVersion, encodeNonce, ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07 };
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EACH,KAAK,4BAA4B,EACjC,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACH,KAAK,0BAA0B,EAC/B,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EACH,4BAA4B,EAC5B,KAAK,oCAAoC,EACzC,8BAA8B,EACjC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAA;AAErF,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAIhE;AACD,OAAO,EACH,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EACH,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,gCAAgC,EAChC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,8BAA8B,EAC9B,KAAK,oCAAoC,EACzC,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,EAC5B,wCAAwC,EACxC,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACzB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EACH,KAAK,4BAA4B,EACjC,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACH,KAAK,0BAA0B,EAC/B,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EACH,4BAA4B,EAC5B,KAAK,oCAAoC,EACzC,8BAA8B,EACjC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAA;AAErF,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAIhE;AACD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EACH,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EACH,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,gCAAgC,EAChC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,8BAA8B,EAC9B,KAAK,oCAAoC,EACzC,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,EAC5B,wCAAwC,EACxC,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,sBAAsB,EACtB,sBAAsB,EACzB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "permissionless",
3
- "version": "0.1.39",
3
+ "version": "0.1.40",
4
4
  "author": "Pimlico",
5
5
  "homepage": "https://docs.pimlico.io/permissionless",
6
6
  "repository": "github:pimlicolabs/permissionless.js",
@@ -0,0 +1,38 @@
1
+ import { encodeNonce } from "permissionless/utils"
2
+ import { toHex } from "viem"
3
+ import { describe, expect, test } from "vitest"
4
+
5
+ describe("encodeNonce", () => {
6
+ test("should encode key and sequence correctly", async () => {
7
+ const key = 123456789012345678901234n
8
+ const sequence = 9876543210n
9
+ const expectedKey = BigInt(toHex(key, { size: 24 }))
10
+ const expectedSequence = BigInt(toHex(sequence, { size: 8 }))
11
+
12
+ const result = encodeNonce({ key, sequence })
13
+
14
+ expect(result).toBe((expectedKey << BigInt(64)) + expectedSequence)
15
+ })
16
+
17
+ test("should handle zero values correctly", () => {
18
+ const key = BigInt(0)
19
+ const sequence = BigInt(0)
20
+ const expectedKey = BigInt(toHex(key, { size: 24 }))
21
+ const expectedSequence = BigInt(toHex(sequence, { size: 8 }))
22
+
23
+ const result = encodeNonce({ key, sequence })
24
+
25
+ expect(result).toBe((expectedKey << BigInt(64)) + expectedSequence)
26
+ })
27
+
28
+ test("should handle large values correctly", () => {
29
+ const key = BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFF")
30
+ const sequence = BigInt("0xFFFFFFFF")
31
+ const expectedKey = BigInt(toHex(key, { size: 24 }))
32
+ const expectedSequence = BigInt(toHex(sequence, { size: 8 }))
33
+
34
+ const result = encodeNonce({ key, sequence })
35
+
36
+ expect(result).toBe((expectedKey << BigInt(64)) + expectedSequence)
37
+ })
38
+ })
@@ -0,0 +1,8 @@
1
+ import { toHex } from "viem"
2
+
3
+ export function encodeNonce(args: { key: bigint; sequence: bigint }): bigint {
4
+ const key = BigInt(toHex(args.key, { size: 24 }))
5
+ const sequence = BigInt(toHex(args.sequence, { size: 8 }))
6
+
7
+ return (key << BigInt(64)) + sequence
8
+ }
package/utils/index.ts CHANGED
@@ -23,6 +23,7 @@ export function parseAccount(account: Address | Account): Account {
23
23
  return { address: account, type: "json-rpc" }
24
24
  return account
25
25
  }
26
+ import { encodeNonce } from "./encodeNonce"
26
27
  import {
27
28
  ENTRYPOINT_ADDRESS_V06,
28
29
  ENTRYPOINT_ADDRESS_V07,
@@ -47,6 +48,7 @@ export {
47
48
  getAddressFromInitCodeOrPaymasterAndData,
48
49
  getPackedUserOperation,
49
50
  getEntryPointVersion,
51
+ encodeNonce,
50
52
  ENTRYPOINT_ADDRESS_V06,
51
53
  ENTRYPOINT_ADDRESS_V07
52
54
  }