@dynamic-labs/ethereum-aa 2.1.0-alpha.0 → 2.1.0-alpha.10

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.
@@ -1,17 +1,19 @@
1
+ 'use client'
1
2
  import { __awaiter } from '../_virtual/_tslib.js';
2
- import { createEcdsaKernelAccountClient } from '@zerodev/presets';
3
3
  import { publicActions, custom, createWalletClient, isHex, fromHex, formatEther } from 'viem';
4
- import { walletClientToSmartAccountSigner } from 'permissionless';
4
+ import { ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07, walletClientToSmartAccountSigner } from 'permissionless/utils';
5
+ import { ProviderEntryPointVersionEnum } from '@dynamic-labs/sdk-api-core';
5
6
  import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
6
7
  import { confirmationTransport, chainsMap, unFormatTransaction, createViemUiTransaction } from '@dynamic-labs/viem-utils';
7
8
  import { parseEvmNetworks, DynamicError, DeferredPromise, wrapMethodWithCallback, TransactionGasCannotBeSponsoredError, InsufficientFundsError } from '@dynamic-labs/utils';
8
9
  import { isEthWalletConnector } from '@dynamic-labs/ethereum';
9
10
  import { cachedChainIdKey, fetchChain } from './utils/fetchChain.js';
10
11
  import { logger } from './utils/logger.js';
12
+ import { createEcdsaKernelAccountClient } from './utils/createEcsdaKernelAccountClient.js';
11
13
 
12
14
  class ZeroDevConnector extends WalletConnectorBase {
13
15
  constructor(opts) {
14
- var _a;
16
+ var _a, _b;
15
17
  super(opts);
16
18
  this.connectedChain = 'EVM';
17
19
  this.supportedChains = ['ETH', 'EVM'];
@@ -33,6 +35,11 @@ class ZeroDevConnector extends WalletConnectorBase {
33
35
  this.projectId = zeroDevProjectId;
34
36
  this._walletUiUtils = opts.walletUiUtils;
35
37
  this.evmNetworks = parseEvmNetworks(opts.evmNetworks);
38
+ this.entryPoint =
39
+ ((_b = opts.apiProviders.zerodev) === null || _b === void 0 ? void 0 : _b.entryPointVersion) ===
40
+ ProviderEntryPointVersionEnum.V6
41
+ ? ENTRYPOINT_ADDRESS_V06
42
+ : ENTRYPOINT_ADDRESS_V07;
36
43
  }
37
44
  getEOAConnector() {
38
45
  return this.eoaConnector;
@@ -64,6 +71,7 @@ class ZeroDevConnector extends WalletConnectorBase {
64
71
  }
65
72
  const kernelClient = yield createEcdsaKernelAccountClient({
66
73
  chain: yield fetchChain(this.projectId),
74
+ entryPointAddress: this.entryPoint,
67
75
  paymaster: 'NONE',
68
76
  projectId: this.projectId,
69
77
  provider: ZeroDevConnector.bundlerProvider,
@@ -79,8 +87,8 @@ class ZeroDevConnector extends WalletConnectorBase {
79
87
  });
80
88
  }
81
89
  checkIsProjectChainEnabled() {
82
- var _a, _b;
83
90
  return __awaiter(this, void 0, void 0, function* () {
91
+ var _a, _b;
84
92
  const client = yield this.getPublicClient();
85
93
  const chainName = (_a = client === null || client === void 0 ? void 0 : client.chain) === null || _a === void 0 ? void 0 : _a.name;
86
94
  const chainId = (_b = client === null || client === void 0 ? void 0 : client.chain) === null || _b === void 0 ? void 0 : _b.id;
@@ -101,6 +109,7 @@ class ZeroDevConnector extends WalletConnectorBase {
101
109
  const signer = yield eoaConnector.getSigner();
102
110
  this.kernelClientWithSponsorship = yield createEcdsaKernelAccountClient({
103
111
  chain: yield fetchChain(this.projectId),
112
+ entryPointAddress: this.entryPoint,
104
113
  paymaster: 'SPONSOR',
105
114
  projectId: this.projectId,
106
115
  provider: ZeroDevConnector.bundlerProvider,
@@ -114,15 +123,15 @@ class ZeroDevConnector extends WalletConnectorBase {
114
123
  });
115
124
  }
116
125
  getAddress() {
117
- var _a, _b, _c;
118
126
  return __awaiter(this, void 0, void 0, function* () {
127
+ var _a, _b, _c;
119
128
  yield ((_a = this.kernelClientDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
120
129
  return (_c = (_b = this.kernelClient) === null || _b === void 0 ? void 0 : _b.account) === null || _c === void 0 ? void 0 : _c.address;
121
130
  });
122
131
  }
123
132
  getConnectedAccounts() {
124
- var _a, _b, _c;
125
133
  return __awaiter(this, void 0, void 0, function* () {
134
+ var _a, _b, _c;
126
135
  yield ((_a = this.kernelClientDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
127
136
  return ((_c = (_b = this.kernelClient) === null || _b === void 0 ? void 0 : _b.account) === null || _c === void 0 ? void 0 : _c.address)
128
137
  ? [yield this.kernelClient.account.address]
@@ -130,22 +139,23 @@ class ZeroDevConnector extends WalletConnectorBase {
130
139
  });
131
140
  }
132
141
  getNetwork() {
133
- var _a, _b, _c;
134
142
  return __awaiter(this, void 0, void 0, function* () {
143
+ var _a, _b, _c;
135
144
  yield ((_a = this.kernelClientDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
136
145
  return (_c = (_b = this.kernelClient) === null || _b === void 0 ? void 0 : _b.chain) === null || _c === void 0 ? void 0 : _c.id;
137
146
  });
138
147
  }
139
148
  getTransport(provider) {
140
149
  const transport = confirmationTransport({
141
- onPersonalSign: ({ message }) => __awaiter(this, void 0, void 0, function* () {
150
+ getAccounts: () => __awaiter(this, void 0, void 0, function* () { return [provider.account.address]; }),
151
+ onPersonalSign: (_a) => __awaiter(this, [_a], void 0, function* ({ message }) {
142
152
  this._walletUiUtils.disabledConfirmationOnce();
143
153
  return provider.signMessage({
144
154
  account: provider.account,
145
155
  message,
146
156
  });
147
157
  }),
148
- onSendTransaction: ({ transaction }) => __awaiter(this, void 0, void 0, function* () {
158
+ onSendTransaction: (_b) => __awaiter(this, [_b], void 0, function* ({ transaction }) {
149
159
  try {
150
160
  this._walletUiUtils.disabledConfirmationOnce();
151
161
  const effectiveProvider = this.isGasSponsorshipDisabled
@@ -165,7 +175,7 @@ class ZeroDevConnector extends WalletConnectorBase {
165
175
  throw err;
166
176
  }
167
177
  }),
168
- onSignTypedData: ({ message }) => __awaiter(this, void 0, void 0, function* () {
178
+ onSignTypedData: (_c) => __awaiter(this, [_c], void 0, function* ({ message }) {
169
179
  this._walletUiUtils.disabledConfirmationOnce();
170
180
  const signTypedData = JSON.parse(message);
171
181
  return provider.signTypedData({
@@ -199,7 +209,8 @@ class ZeroDevConnector extends WalletConnectorBase {
199
209
  }
200
210
  getPublicClient() {
201
211
  return __awaiter(this, void 0, void 0, function* () {
202
- const provider = this.kernelClient.extend(publicActions);
212
+ var _a;
213
+ const provider = (_a = this.kernelClient) === null || _a === void 0 ? void 0 : _a.extend(publicActions);
203
214
  if (!provider)
204
215
  throw new DynamicError('No provider');
205
216
  return provider;
@@ -213,9 +224,9 @@ class ZeroDevConnector extends WalletConnectorBase {
213
224
  canSponsorTransactionGas(transaction) {
214
225
  return __awaiter(this, void 0, void 0, function* () {
215
226
  try {
216
- yield this.getKernelClientWithSponsorshipValidation();
227
+ const kernelClientWithSponsorship = yield this.getKernelClientWithSponsorshipValidation();
217
228
  const userOperation = {
218
- callData: yield this.kernelClientWithSponsorship.account.encodeCallData({
229
+ callData: yield kernelClientWithSponsorship.account.encodeCallData({
219
230
  data: transaction.data ? transaction.data : '0x',
220
231
  to: transaction.to,
221
232
  /**
@@ -224,11 +235,11 @@ class ZeroDevConnector extends WalletConnectorBase {
224
235
  */
225
236
  value: transaction.value && isHex(transaction.value)
226
237
  ? fromHex(transaction.value, 'bigint')
227
- : '0x0',
238
+ : fromHex('0x0', 'bigint'),
228
239
  }),
229
240
  };
230
- const result = yield this.kernelClientWithSponsorship.prepareUserOperationRequest({
231
- account: this.kernelClientWithSponsorship.account,
241
+ const result = yield kernelClientWithSponsorship.prepareUserOperationRequest({
242
+ account: kernelClientWithSponsorship.account,
232
243
  userOperation,
233
244
  });
234
245
  if (!result)
@@ -246,7 +257,8 @@ class ZeroDevConnector extends WalletConnectorBase {
246
257
  }
247
258
  getBalance() {
248
259
  return __awaiter(this, void 0, void 0, function* () {
249
- const rpcClient = this.kernelClient.extend(publicActions);
260
+ var _a;
261
+ const rpcClient = (_a = this.kernelClient) === null || _a === void 0 ? void 0 : _a.extend(publicActions);
250
262
  if (!rpcClient)
251
263
  throw new DynamicError('No RPC client');
252
264
  const address = yield this.getAddress();
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  'use strict';
2
3
 
3
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  class EthereumAaConnector {
2
3
  }
3
4
 
package/src/index.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  'use strict';
2
3
 
3
4
  Object.defineProperty(exports, '__esModule', { value: true });
package/src/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { Provider as BundlerProvider } from '@zerodev/presets';
2
1
  import { WalletConnectorConstructor } from '@dynamic-labs/wallet-connector-core';
2
+ import { BundlerProvider } from './utils';
3
3
  export * from './ethereum-aa';
4
4
  export { isZeroDevConnector } from './utils/isZeroDevConnector';
5
5
  export declare const ZeroDevSmartWalletConnectorsWithConfig: ({ bundlerProvider, }?: {
6
- bundlerProvider?: BundlerProvider | undefined;
6
+ bundlerProvider?: BundlerProvider;
7
7
  }) => (props: any) => WalletConnectorConstructor[];
8
8
  export declare const ZeroDevSmartWalletConnectors: (props: any) => WalletConnectorConstructor[];
package/src/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  import { ZeroDevConnector } from './ZeroDevConnector.js';
2
3
  export { EthereumAaConnector } from './ethereum-aa.js';
3
4
  export { isZeroDevConnector } from './utils/isZeroDevConnector.js';
@@ -0,0 +1,76 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../_virtual/_tslib.cjs');
7
+ var ecdsaValidator = require('@zerodev/ecdsa-validator');
8
+ var accounts = require('@zerodev/sdk/accounts');
9
+ var clients = require('@zerodev/sdk/clients');
10
+ var viem = require('viem');
11
+
12
+ const getZeroDevBundlerRPC = (projectId, provider) => {
13
+ let rpc = `https://rpc.zerodev.app/api/v2/bundler/${projectId}`;
14
+ if (provider) {
15
+ rpc += `?bundlerProvider=${provider}`;
16
+ }
17
+ return rpc;
18
+ };
19
+ const getZeroDevPaymasterRPC = (projectId, provider) => {
20
+ let rpc = `https://rpc.zerodev.app/api/v2/paymaster/${projectId}`;
21
+ if (provider) {
22
+ rpc += `?paymasterProvider=${provider}`;
23
+ }
24
+ return rpc;
25
+ };
26
+ const isERC20 = (value) => viem.isAddress(value);
27
+ const createEcdsaKernelAccountClient = (_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ chain, projectId, signer, provider, index, paymaster = 'SPONSOR', entryPointAddress, }) {
28
+ const publicClient = viem.createPublicClient({
29
+ transport: viem.http(getZeroDevBundlerRPC(projectId, provider)),
30
+ });
31
+ const ecdsaValidator$1 = yield ecdsaValidator.signerToEcdsaValidator(publicClient, {
32
+ entryPoint: entryPointAddress,
33
+ signer,
34
+ });
35
+ const account = yield accounts.createKernelAccount(publicClient, {
36
+ entryPoint: entryPointAddress,
37
+ index,
38
+ plugins: {
39
+ sudo: ecdsaValidator$1,
40
+ },
41
+ });
42
+ const zerodevPaymaster = clients.createZeroDevPaymasterClient({
43
+ chain: chain,
44
+ entryPoint: entryPointAddress,
45
+ transport: viem.http(getZeroDevPaymasterRPC(projectId, provider)),
46
+ });
47
+ const kernelClient = clients.createKernelAccountClient({
48
+ account,
49
+ bundlerTransport: viem.http(getZeroDevBundlerRPC(projectId, provider)),
50
+ chain,
51
+ entryPoint: entryPointAddress,
52
+ middleware: paymaster !== 'NONE'
53
+ ? {
54
+ sponsorUserOperation: (_b) => _tslib.__awaiter(void 0, [_b], void 0, function* ({ userOperation }) {
55
+ const _userOperation = userOperation;
56
+ if (isERC20(paymaster)) {
57
+ return zerodevPaymaster.sponsorUserOperation({
58
+ entryPoint: entryPointAddress,
59
+ gasToken: paymaster,
60
+ userOperation: _userOperation,
61
+ });
62
+ }
63
+ return zerodevPaymaster.sponsorUserOperation({
64
+ entryPoint: entryPointAddress,
65
+ userOperation: _userOperation,
66
+ });
67
+ }),
68
+ }
69
+ : undefined,
70
+ });
71
+ return kernelClient;
72
+ });
73
+
74
+ exports.createEcdsaKernelAccountClient = createEcdsaKernelAccountClient;
75
+ exports.getZeroDevBundlerRPC = getZeroDevBundlerRPC;
76
+ exports.getZeroDevPaymasterRPC = getZeroDevPaymasterRPC;
@@ -0,0 +1,19 @@
1
+ import { KernelSmartAccount } from '@zerodev/sdk/accounts';
2
+ import { KernelAccountClient } from '@zerodev/sdk/clients';
3
+ import { SmartAccountSigner } from 'permissionless/accounts';
4
+ import { EntryPoint } from 'permissionless/types';
5
+ import { Address, HttpTransport, Chain } from 'viem';
6
+ export type BundlerProvider = 'STACKUP' | 'PIMLICO' | 'ALCHEMY' | 'GELATO';
7
+ export type ERC20Paymaster = Address;
8
+ export type PaymasterType = 'NONE' | 'SPONSOR' | ERC20Paymaster;
9
+ export declare const getZeroDevBundlerRPC: (projectId: string, provider?: BundlerProvider) => string;
10
+ export declare const getZeroDevPaymasterRPC: (projectId: string, provider?: BundlerProvider) => string;
11
+ export declare const createEcdsaKernelAccountClient: <entryPoint extends EntryPoint, TChain extends Chain | undefined = Chain | undefined, TSource extends string = "custom", TAddress extends `0x${string}` = `0x${string}`>({ chain, projectId, signer, provider, index, paymaster, entryPointAddress, }: {
12
+ chain: TChain;
13
+ projectId: string;
14
+ signer: SmartAccountSigner<TSource, TAddress>;
15
+ paymaster: PaymasterType;
16
+ entryPointAddress: entryPoint;
17
+ provider?: BundlerProvider;
18
+ index?: bigint;
19
+ }) => Promise<KernelAccountClient<entryPoint, HttpTransport, TChain, KernelSmartAccount<entryPoint, HttpTransport, TChain>>>;
@@ -0,0 +1,70 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../_virtual/_tslib.js';
3
+ import { signerToEcdsaValidator } from '@zerodev/ecdsa-validator';
4
+ import { createKernelAccount } from '@zerodev/sdk/accounts';
5
+ import { createZeroDevPaymasterClient, createKernelAccountClient } from '@zerodev/sdk/clients';
6
+ import { createPublicClient, http, isAddress } from 'viem';
7
+
8
+ const getZeroDevBundlerRPC = (projectId, provider) => {
9
+ let rpc = `https://rpc.zerodev.app/api/v2/bundler/${projectId}`;
10
+ if (provider) {
11
+ rpc += `?bundlerProvider=${provider}`;
12
+ }
13
+ return rpc;
14
+ };
15
+ const getZeroDevPaymasterRPC = (projectId, provider) => {
16
+ let rpc = `https://rpc.zerodev.app/api/v2/paymaster/${projectId}`;
17
+ if (provider) {
18
+ rpc += `?paymasterProvider=${provider}`;
19
+ }
20
+ return rpc;
21
+ };
22
+ const isERC20 = (value) => isAddress(value);
23
+ const createEcdsaKernelAccountClient = (_a) => __awaiter(void 0, [_a], void 0, function* ({ chain, projectId, signer, provider, index, paymaster = 'SPONSOR', entryPointAddress, }) {
24
+ const publicClient = createPublicClient({
25
+ transport: http(getZeroDevBundlerRPC(projectId, provider)),
26
+ });
27
+ const ecdsaValidator = yield signerToEcdsaValidator(publicClient, {
28
+ entryPoint: entryPointAddress,
29
+ signer,
30
+ });
31
+ const account = yield createKernelAccount(publicClient, {
32
+ entryPoint: entryPointAddress,
33
+ index,
34
+ plugins: {
35
+ sudo: ecdsaValidator,
36
+ },
37
+ });
38
+ const zerodevPaymaster = createZeroDevPaymasterClient({
39
+ chain: chain,
40
+ entryPoint: entryPointAddress,
41
+ transport: http(getZeroDevPaymasterRPC(projectId, provider)),
42
+ });
43
+ const kernelClient = createKernelAccountClient({
44
+ account,
45
+ bundlerTransport: http(getZeroDevBundlerRPC(projectId, provider)),
46
+ chain,
47
+ entryPoint: entryPointAddress,
48
+ middleware: paymaster !== 'NONE'
49
+ ? {
50
+ sponsorUserOperation: (_b) => __awaiter(void 0, [_b], void 0, function* ({ userOperation }) {
51
+ const _userOperation = userOperation;
52
+ if (isERC20(paymaster)) {
53
+ return zerodevPaymaster.sponsorUserOperation({
54
+ entryPoint: entryPointAddress,
55
+ gasToken: paymaster,
56
+ userOperation: _userOperation,
57
+ });
58
+ }
59
+ return zerodevPaymaster.sponsorUserOperation({
60
+ entryPoint: entryPointAddress,
61
+ userOperation: _userOperation,
62
+ });
63
+ }),
64
+ }
65
+ : undefined,
66
+ });
67
+ return kernelClient;
68
+ });
69
+
70
+ export { createEcdsaKernelAccountClient, getZeroDevBundlerRPC, getZeroDevPaymasterRPC };
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  'use strict';
2
3
 
3
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  import { __awaiter } from '../../_virtual/_tslib.js';
2
3
  import { chainsMap } from '@dynamic-labs/viem-utils';
3
4
  import { logger } from './logger.js';
@@ -1,3 +1,4 @@
1
1
  export * from './fetchChain';
2
2
  export * from './logger';
3
3
  export * from './isZeroDevConnector';
4
+ export * from './createEcsdaKernelAccountClient';
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  'use strict';
2
3
 
3
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  const isZeroDevConnector = (connector) => (connector === null || connector === void 0 ? void 0 : connector.key) === 'zerodev';
2
3
 
3
4
  export { isZeroDevConnector };
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  'use strict';
2
3
 
3
4
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,3 +1,4 @@
1
+ 'use client'
1
2
  import { Logger, LogLevel } from '@dynamic-labs/logger';
2
3
 
3
4
  const logger = new Logger('Ethereum AA', LogLevel.INFO);