viem 2.27.2 → 2.28.0-entrypoint-0-8-20250417075822

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.
Files changed (133) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/_cjs/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.js.map +1 -1
  3. package/_cjs/account-abstraction/accounts/implementations/toSimple7702SmartAccount.js +313 -0
  4. package/_cjs/account-abstraction/accounts/implementations/toSimple7702SmartAccount.js.map +1 -0
  5. package/_cjs/account-abstraction/accounts/implementations/toSoladySmartAccount.js.map +1 -1
  6. package/_cjs/account-abstraction/accounts/toSmartAccount.js +2 -2
  7. package/_cjs/account-abstraction/accounts/toSmartAccount.js.map +1 -1
  8. package/_cjs/account-abstraction/actions/bundler/estimateUserOperationGas.js +7 -1
  9. package/_cjs/account-abstraction/actions/bundler/estimateUserOperationGas.js.map +1 -1
  10. package/_cjs/account-abstraction/actions/bundler/prepareUserOperation.js +21 -1
  11. package/_cjs/account-abstraction/actions/bundler/prepareUserOperation.js.map +1 -1
  12. package/_cjs/account-abstraction/actions/bundler/sendUserOperation.js +2 -2
  13. package/_cjs/account-abstraction/actions/bundler/sendUserOperation.js.map +1 -1
  14. package/_cjs/account-abstraction/actions/paymaster/getPaymasterData.js.map +1 -1
  15. package/_cjs/account-abstraction/constants/abis.js +691 -1
  16. package/_cjs/account-abstraction/constants/abis.js.map +1 -1
  17. package/_cjs/account-abstraction/constants/address.js +2 -1
  18. package/_cjs/account-abstraction/constants/address.js.map +1 -1
  19. package/_cjs/account-abstraction/index.js +6 -2
  20. package/_cjs/account-abstraction/index.js.map +1 -1
  21. package/_cjs/account-abstraction/utils/formatters/userOperationRequest.js +19 -0
  22. package/_cjs/account-abstraction/utils/formatters/userOperationRequest.js.map +1 -1
  23. package/_cjs/account-abstraction/utils/userOperation/getUserOperationHash.js +70 -0
  24. package/_cjs/account-abstraction/utils/userOperation/getUserOperationHash.js.map +1 -1
  25. package/_cjs/constants/address.js +2 -1
  26. package/_cjs/constants/address.js.map +1 -1
  27. package/_cjs/errors/version.js +1 -1
  28. package/_cjs/errors/version.js.map +1 -1
  29. package/_esm/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.js.map +1 -1
  30. package/_esm/account-abstraction/accounts/implementations/toSimple7702SmartAccount.js +327 -0
  31. package/_esm/account-abstraction/accounts/implementations/toSimple7702SmartAccount.js.map +1 -0
  32. package/_esm/account-abstraction/accounts/implementations/toSoladySmartAccount.js.map +1 -1
  33. package/_esm/account-abstraction/accounts/toSmartAccount.js +2 -2
  34. package/_esm/account-abstraction/accounts/toSmartAccount.js.map +1 -1
  35. package/_esm/account-abstraction/actions/bundler/estimateUserOperationGas.js +7 -1
  36. package/_esm/account-abstraction/actions/bundler/estimateUserOperationGas.js.map +1 -1
  37. package/_esm/account-abstraction/actions/bundler/prepareUserOperation.js +21 -1
  38. package/_esm/account-abstraction/actions/bundler/prepareUserOperation.js.map +1 -1
  39. package/_esm/account-abstraction/actions/bundler/sendUserOperation.js +2 -2
  40. package/_esm/account-abstraction/actions/bundler/sendUserOperation.js.map +1 -1
  41. package/_esm/account-abstraction/actions/paymaster/getPaymasterData.js.map +1 -1
  42. package/_esm/account-abstraction/constants/abis.js +690 -0
  43. package/_esm/account-abstraction/constants/abis.js.map +1 -1
  44. package/_esm/account-abstraction/constants/address.js +1 -0
  45. package/_esm/account-abstraction/constants/address.js.map +1 -1
  46. package/_esm/account-abstraction/index.js +3 -2
  47. package/_esm/account-abstraction/index.js.map +1 -1
  48. package/_esm/account-abstraction/utils/formatters/userOperationRequest.js +19 -0
  49. package/_esm/account-abstraction/utils/formatters/userOperationRequest.js.map +1 -1
  50. package/_esm/account-abstraction/utils/userOperation/getUserOperationHash.js +70 -0
  51. package/_esm/account-abstraction/utils/userOperation/getUserOperationHash.js.map +1 -1
  52. package/_esm/constants/address.js +1 -0
  53. package/_esm/constants/address.js.map +1 -1
  54. package/_esm/errors/version.js +1 -1
  55. package/_esm/errors/version.js.map +1 -1
  56. package/_types/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.d.ts +1 -2
  57. package/_types/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.d.ts.map +1 -1
  58. package/_types/account-abstraction/accounts/implementations/toSimple7702SmartAccount.d.ts +311 -0
  59. package/_types/account-abstraction/accounts/implementations/toSimple7702SmartAccount.d.ts.map +1 -0
  60. package/_types/account-abstraction/accounts/implementations/toSoladySmartAccount.d.ts +1 -2
  61. package/_types/account-abstraction/accounts/implementations/toSoladySmartAccount.d.ts.map +1 -1
  62. package/_types/account-abstraction/accounts/types.d.ts +16 -3
  63. package/_types/account-abstraction/accounts/types.d.ts.map +1 -1
  64. package/_types/account-abstraction/actions/bundler/estimateUserOperationGas.d.ts.map +1 -1
  65. package/_types/account-abstraction/actions/bundler/prepareUserOperation.d.ts +23 -6
  66. package/_types/account-abstraction/actions/bundler/prepareUserOperation.d.ts.map +1 -1
  67. package/_types/account-abstraction/actions/paymaster/getPaymasterData.d.ts +1 -1
  68. package/_types/account-abstraction/actions/paymaster/getPaymasterData.d.ts.map +1 -1
  69. package/_types/account-abstraction/constants/abis.d.ts +830 -0
  70. package/_types/account-abstraction/constants/abis.d.ts.map +1 -1
  71. package/_types/account-abstraction/constants/address.d.ts +1 -0
  72. package/_types/account-abstraction/constants/address.d.ts.map +1 -1
  73. package/_types/account-abstraction/index.d.ts +3 -2
  74. package/_types/account-abstraction/index.d.ts.map +1 -1
  75. package/_types/account-abstraction/types/entryPointVersion.d.ts +1 -1
  76. package/_types/account-abstraction/types/entryPointVersion.d.ts.map +1 -1
  77. package/_types/account-abstraction/types/rpc.d.ts +6 -3
  78. package/_types/account-abstraction/types/rpc.d.ts.map +1 -1
  79. package/_types/account-abstraction/types/userOperation.d.ts +49 -5
  80. package/_types/account-abstraction/types/userOperation.d.ts.map +1 -1
  81. package/_types/account-abstraction/utils/formatters/userOperationRequest.d.ts.map +1 -1
  82. package/_types/account-abstraction/utils/userOperation/getUserOperationHash.d.ts.map +1 -1
  83. package/_types/celo/chainConfig.d.ts +14 -14
  84. package/_types/celo/formatters.d.ts +7 -7
  85. package/_types/chains/definitions/abstract.d.ts +3 -3
  86. package/_types/chains/definitions/abstractTestnet.d.ts +3 -3
  87. package/_types/chains/definitions/celo.d.ts +14 -14
  88. package/_types/chains/definitions/celoAlfajores.d.ts +14 -14
  89. package/_types/chains/definitions/playfiAlbireo.d.ts +3 -3
  90. package/_types/chains/definitions/sophon.d.ts +3 -3
  91. package/_types/chains/definitions/sophonTestnet.d.ts +3 -3
  92. package/_types/chains/definitions/treasure.d.ts +3 -3
  93. package/_types/chains/definitions/treasureTopaz.d.ts +3 -3
  94. package/_types/chains/definitions/zksync.d.ts +3 -3
  95. package/_types/chains/definitions/zksyncInMemoryNode.d.ts +3 -3
  96. package/_types/chains/definitions/zksyncLocalCustomHyperchain.d.ts +3 -3
  97. package/_types/chains/definitions/zksyncLocalHyperchain.d.ts +3 -3
  98. package/_types/chains/definitions/zksyncLocalNode.d.ts +3 -3
  99. package/_types/chains/definitions/zksyncSepoliaTestnet.d.ts +3 -3
  100. package/_types/constants/address.d.ts +1 -0
  101. package/_types/constants/address.d.ts.map +1 -1
  102. package/_types/errors/version.d.ts +1 -1
  103. package/_types/errors/version.d.ts.map +1 -1
  104. package/_types/types/authorization.d.ts +1 -1
  105. package/_types/types/authorization.d.ts.map +1 -1
  106. package/_types/types/misc.d.ts +7 -7
  107. package/_types/types/misc.d.ts.map +1 -1
  108. package/_types/utils/formatters/transaction.d.ts +1 -1
  109. package/_types/utils/formatters/transactionRequest.d.ts +1 -1
  110. package/_types/zksync/chainConfig.d.ts +3 -3
  111. package/_types/zksync/formatters.d.ts +3 -3
  112. package/account-abstraction/accounts/implementations/toCoinbaseSmartAccount.ts +1 -2
  113. package/account-abstraction/accounts/implementations/toSimple7702SmartAccount.ts +382 -0
  114. package/account-abstraction/accounts/implementations/toSoladySmartAccount.ts +1 -2
  115. package/account-abstraction/accounts/toSmartAccount.ts +2 -2
  116. package/account-abstraction/accounts/types.ts +26 -2
  117. package/account-abstraction/actions/bundler/estimateUserOperationGas.ts +8 -1
  118. package/account-abstraction/actions/bundler/prepareUserOperation.ts +56 -2
  119. package/account-abstraction/actions/bundler/sendUserOperation.ts +2 -2
  120. package/account-abstraction/actions/paymaster/getPaymasterData.ts +24 -0
  121. package/account-abstraction/constants/abis.ts +691 -0
  122. package/account-abstraction/constants/address.ts +2 -0
  123. package/account-abstraction/index.ts +12 -1
  124. package/account-abstraction/types/entryPointVersion.ts +1 -1
  125. package/account-abstraction/types/rpc.ts +6 -3
  126. package/account-abstraction/types/userOperation.ts +69 -3
  127. package/account-abstraction/utils/formatters/userOperationRequest.ts +21 -0
  128. package/account-abstraction/utils/userOperation/getUserOperationHash.ts +79 -0
  129. package/constants/address.ts +2 -0
  130. package/errors/version.ts +1 -1
  131. package/package.json +1 -1
  132. package/types/authorization.ts +1 -1
  133. package/types/misc.ts +7 -7
@@ -1,7 +1,14 @@
1
1
  import type { Abi, Address, TypedData } from 'abitype'
2
2
  import type * as WebAuthnP256 from 'ox/WebAuthnP256'
3
3
 
4
+ import type {
5
+ JsonRpcAccount,
6
+ LocalAccount,
7
+ PrivateKeyAccount,
8
+ } from '../../accounts/types.js'
4
9
  import type { Client } from '../../clients/createClient.js'
10
+ import type { Transport } from '../../clients/transports/createTransport.js'
11
+ import type { Chain } from '../../types/chain.js'
5
12
  import type { Hash, Hex, SignableMessage } from '../../types/misc.js'
6
13
  import type { TypedDataDefinition } from '../../types/typedData.js'
7
14
  import type { Assign, ExactPartial, UnionPartialBy } from '../../types/utils.js'
@@ -23,9 +30,14 @@ export type SmartAccountImplementation<
23
30
  entryPointAbi extends Abi | readonly unknown[] = Abi,
24
31
  entryPointVersion extends EntryPointVersion = EntryPointVersion,
25
32
  extend extends object = object,
33
+ eip7702 extends boolean = boolean,
26
34
  > = {
27
35
  /** Client used to retrieve Smart Account data, and perform signing (if owner is a JSON-RPC Account). */
28
- client: Client
36
+ client: Client<
37
+ Transport,
38
+ Chain | undefined,
39
+ JsonRpcAccount | LocalAccount | undefined
40
+ >
29
41
  /** Compatible EntryPoint of the Smart Account. */
30
42
  entryPoint: {
31
43
  /** Compatible EntryPoint ABI. */
@@ -189,7 +201,19 @@ export type SmartAccountImplementation<
189
201
  | undefined
190
202
  }
191
203
  | undefined
192
- }
204
+ } & (eip7702 extends true
205
+ ? {
206
+ /** EIP-7702 authorization properties, if applicable. */
207
+ authorization: {
208
+ /** EOA to delegate to. */
209
+ account: PrivateKeyAccount
210
+ /** Delegation address. */
211
+ address: Address
212
+ }
213
+ }
214
+ : {
215
+ authorization?: undefined
216
+ })
193
217
 
194
218
  export type SmartAccount<
195
219
  implementation extends
@@ -174,7 +174,13 @@ export async function estimateUserOperationGas<
174
174
  'prepareUserOperation',
175
175
  )({
176
176
  ...parameters,
177
- parameters: ['factory', 'nonce', 'paymaster', 'signature'],
177
+ parameters: [
178
+ 'authorization',
179
+ 'factory',
180
+ 'nonce',
181
+ 'paymaster',
182
+ 'signature',
183
+ ],
178
184
  } as unknown as PrepareUserOperationParameters)
179
185
  : parameters
180
186
 
@@ -183,6 +189,7 @@ export async function estimateUserOperationGas<
183
189
  formatUserOperationRequest(request as UserOperation),
184
190
  (entryPointAddress ?? account?.entryPoint?.address)!,
185
191
  ] as const
192
+
186
193
  const result = await client.request({
187
194
  method: 'eth_estimateUserOperationGas',
188
195
  params: rpcStateOverride ? [...params, rpcStateOverride] : [...params],
@@ -3,6 +3,7 @@ import {
3
3
  type ParseAccountErrorType,
4
4
  parseAccount,
5
5
  } from '../../../accounts/utils/parseAccount.js'
6
+ import { prepareAuthorization } from '../../../actions/index.js'
6
7
  import {
7
8
  type EstimateFeesPerGasErrorType,
8
9
  estimateFeesPerGas,
@@ -12,6 +13,7 @@ import type { Client } from '../../../clients/createClient.js'
12
13
  import type { Transport } from '../../../clients/transports/createTransport.js'
13
14
  import { AccountNotFoundError } from '../../../errors/account.js'
14
15
  import type { ErrorType } from '../../../errors/utils.js'
16
+ import type { SignedAuthorization } from '../../../types/authorization.js'
15
17
  import type { Call, Calls } from '../../../types/calls.js'
16
18
  import type { Chain } from '../../../types/chain.js'
17
19
  import type { Hex } from '../../../types/misc.js'
@@ -63,6 +65,7 @@ const defaultParameters = [
63
65
  'paymaster',
64
66
  'nonce',
65
67
  'signature',
68
+ 'authorization',
66
69
  ] as const
67
70
 
68
71
  export type PrepareUserOperationParameterType =
@@ -72,10 +75,17 @@ export type PrepareUserOperationParameterType =
72
75
  | 'paymaster'
73
76
  | 'nonce'
74
77
  | 'signature'
78
+ | 'authorization'
75
79
 
76
80
  type FactoryProperties<
77
81
  entryPointVersion extends EntryPointVersion = EntryPointVersion,
78
82
  > =
83
+ | (entryPointVersion extends '0.8'
84
+ ? {
85
+ factory: UserOperation['factory']
86
+ factoryData: UserOperation['factoryData']
87
+ }
88
+ : never)
79
89
  | (entryPointVersion extends '0.7'
80
90
  ? {
81
91
  factory: UserOperation['factory']
@@ -91,6 +101,15 @@ type FactoryProperties<
91
101
  type GasProperties<
92
102
  entryPointVersion extends EntryPointVersion = EntryPointVersion,
93
103
  > =
104
+ | (entryPointVersion extends '0.8'
105
+ ? {
106
+ callGasLimit: UserOperation['callGasLimit']
107
+ preVerificationGas: UserOperation['preVerificationGas']
108
+ verificationGasLimit: UserOperation['verificationGasLimit']
109
+ paymasterPostOpGasLimit: UserOperation['paymasterPostOpGasLimit']
110
+ paymasterVerificationGasLimit: UserOperation['paymasterVerificationGasLimit']
111
+ }
112
+ : never)
94
113
  | (entryPointVersion extends '0.7'
95
114
  ? {
96
115
  callGasLimit: UserOperation['callGasLimit']
@@ -120,6 +139,14 @@ type NonceProperties = {
120
139
  type PaymasterProperties<
121
140
  entryPointVersion extends EntryPointVersion = EntryPointVersion,
122
141
  > =
142
+ | (entryPointVersion extends '0.8'
143
+ ? {
144
+ paymaster: UserOperation['paymaster']
145
+ paymasterData: UserOperation['paymasterData']
146
+ paymasterPostOpGasLimit: UserOperation['paymasterPostOpGasLimit']
147
+ paymasterVerificationGasLimit: UserOperation['paymasterVerificationGasLimit']
148
+ }
149
+ : never)
123
150
  | (entryPointVersion extends '0.7'
124
151
  ? {
125
152
  paymaster: UserOperation['paymaster']
@@ -138,6 +165,10 @@ type SignatureProperties = {
138
165
  signature: UserOperation['signature']
139
166
  }
140
167
 
168
+ type AuthorizationProperties = {
169
+ authorization: UserOperation['authorization']
170
+ }
171
+
141
172
  export type PrepareUserOperationRequest<
142
173
  account extends SmartAccount | undefined = SmartAccount | undefined,
143
174
  accountOverride extends SmartAccount | undefined = SmartAccount | undefined,
@@ -208,7 +239,10 @@ export type PrepareUserOperationReturnType<
208
239
  callData: Hex
209
240
  paymasterAndData: _derivedVersion extends '0.6' ? Hex : undefined
210
241
  sender: UserOperation['sender']
211
- } & (Extract<_parameters, 'factory'> extends never
242
+ } & (Extract<_parameters, 'authorization'> extends never
243
+ ? {}
244
+ : AuthorizationProperties) &
245
+ (Extract<_parameters, 'factory'> extends never
212
246
  ? {}
213
247
  : FactoryProperties<_derivedVersion>) &
214
248
  (Extract<_parameters, 'nonce'> extends never ? {} : NonceProperties) &
@@ -359,7 +393,7 @@ export async function prepareUserOperation<
359
393
  // Concurrently prepare properties required to fill the User Operation.
360
394
  ////////////////////////////////////////////////////////////////////////////////
361
395
 
362
- const [callData, factory, fees, nonce] = await Promise.all([
396
+ const [callData, factory, fees, nonce, authorization] = await Promise.all([
363
397
  (async () => {
364
398
  if (parameters.calls)
365
399
  return account.encodeCalls(
@@ -457,6 +491,24 @@ export async function prepareUserOperation<
457
491
  if (typeof parameters.nonce === 'bigint') return parameters.nonce
458
492
  return account.getNonce()
459
493
  })(),
494
+ (async () => {
495
+ if (!properties.includes('authorization')) return undefined
496
+ if (typeof parameters.authorization === 'object')
497
+ return parameters.authorization
498
+ if (account.authorization && !(await account.isDeployed())) {
499
+ const authorization = await prepareAuthorization(
500
+ account.client,
501
+ account.authorization,
502
+ )
503
+ return {
504
+ ...authorization,
505
+ r: '0xfffffffffffffffffffffffffffffff000000000000000000000000000000000',
506
+ s: '0x7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
507
+ yParity: 1,
508
+ } satisfies SignedAuthorization
509
+ }
510
+ return undefined
511
+ })(),
460
512
  ])
461
513
 
462
514
  ////////////////////////////////////////////////////////////////////////////////
@@ -468,6 +520,8 @@ export async function prepareUserOperation<
468
520
  request = { ...request, ...(factory as any) }
469
521
  if (typeof fees !== 'undefined') request = { ...request, ...(fees as any) }
470
522
  if (typeof nonce !== 'undefined') request.nonce = nonce
523
+ if (typeof authorization !== 'undefined')
524
+ request.authorization = authorization
471
525
 
472
526
  ////////////////////////////////////////////////////////////////////////////////
473
527
  // Fill User Operation with the `signature` property.
@@ -135,7 +135,7 @@ export async function sendUserOperation<
135
135
  : parameters
136
136
 
137
137
  const signature = (parameters.signature ||
138
- (await account?.signUserOperation(request as UserOperation)))!
138
+ (await account?.signUserOperation?.(request as UserOperation)))!
139
139
 
140
140
  const rpcParameters = formatUserOperationRequest({
141
141
  ...request,
@@ -148,7 +148,7 @@ export async function sendUserOperation<
148
148
  method: 'eth_sendUserOperation',
149
149
  params: [
150
150
  rpcParameters,
151
- (entryPointAddress ?? account?.entryPoint.address)!,
151
+ (entryPointAddress ?? account?.entryPoint?.address)!,
152
152
  ],
153
153
  },
154
154
  { retryCount: 0 },
@@ -57,6 +57,30 @@ export type GetPaymasterDataParameters = OneOf<
57
57
  | 'preVerificationGas'
58
58
  | 'verificationGasLimit'
59
59
  >
60
+ | PartialBy<
61
+ Pick<
62
+ UserOperation<'0.8'>,
63
+ | 'callData'
64
+ | 'callGasLimit'
65
+ | 'factory'
66
+ | 'factoryData'
67
+ | 'maxFeePerGas'
68
+ | 'maxPriorityFeePerGas'
69
+ | 'nonce'
70
+ | 'sender'
71
+ | 'preVerificationGas'
72
+ | 'verificationGasLimit'
73
+ | 'paymasterPostOpGasLimit'
74
+ | 'paymasterVerificationGasLimit'
75
+ >,
76
+ | 'callGasLimit'
77
+ | 'factory'
78
+ | 'factoryData'
79
+ | 'maxFeePerGas'
80
+ | 'maxPriorityFeePerGas'
81
+ | 'preVerificationGas'
82
+ | 'verificationGasLimit'
83
+ >
60
84
  > & {
61
85
  context?: unknown | undefined
62
86
  chainId: number