@dynamic-labs/ethereum-aa 1.0.0-alpha.3 → 1.0.0-alpha.5

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,4 +1,24 @@
1
1
 
2
+ ## [1.0.0-alpha.5](https://github.com/dynamic-labs/DynamicAuth/compare/v1.0.0-alpha.4...v1.0.0-alpha.5) (2023-11-29)
3
+
4
+
5
+ ### Features
6
+
7
+ * gracefully handle uknown wallet ([#3997](https://github.com/dynamic-labs/DynamicAuth/issues/3997)) ([ce7ff6a](https://github.com/dynamic-labs/DynamicAuth/commit/ce7ff6a50a8e8947050734b61587c8cadd041dbe))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * remove total on sponsored transactions ([#4019](https://github.com/dynamic-labs/DynamicAuth/issues/4019)) ([d976678](https://github.com/dynamic-labs/DynamicAuth/commit/d9766787b29665fbcd7983c5d61c31a4d97c8257))
13
+ * send balance align information ([#4020](https://github.com/dynamic-labs/DynamicAuth/issues/4020)) ([508dccf](https://github.com/dynamic-labs/DynamicAuth/commit/508dccfa2c6aeaed30616b6a41b30002cccb3b40))
14
+
15
+ ## [1.0.0-alpha.4](https://github.com/dynamic-labs/DynamicAuth/compare/v1.0.0-alpha.3...v1.0.0-alpha.4) (2023-11-28)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * update zerodev provider initialization ([#4015](https://github.com/dynamic-labs/DynamicAuth/issues/4015)) ([8faca00](https://github.com/dynamic-labs/DynamicAuth/commit/8faca00d414677adc5fecde451ca01da53fe9641))
21
+
2
22
  ## [1.0.0-alpha.3](https://github.com/dynamic-labs/DynamicAuth/compare/v1.0.0-alpha.2...v1.0.0-alpha.3) (2023-11-28)
3
23
 
4
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/ethereum-aa",
3
- "version": "1.0.0-alpha.3",
3
+ "version": "1.0.0-alpha.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -28,12 +28,12 @@
28
28
  "dependencies": {
29
29
  "@zerodev/sdk": "^4.1.5",
30
30
  "@dynamic-labs/sdk-api": "0.0.311",
31
- "@dynamic-labs/logger": "1.0.0-alpha.3",
32
- "@dynamic-labs/types": "1.0.0-alpha.3",
33
- "@dynamic-labs/utils": "1.0.0-alpha.3",
34
- "@dynamic-labs/viem-utils": "1.0.0-alpha.3",
35
- "@dynamic-labs/wallet-book": "1.0.0-alpha.3",
36
- "@dynamic-labs/wallet-connector-core": "1.0.0-alpha.3"
31
+ "@dynamic-labs/logger": "1.0.0-alpha.5",
32
+ "@dynamic-labs/types": "1.0.0-alpha.5",
33
+ "@dynamic-labs/utils": "1.0.0-alpha.5",
34
+ "@dynamic-labs/viem-utils": "1.0.0-alpha.5",
35
+ "@dynamic-labs/wallet-book": "1.0.0-alpha.5",
36
+ "@dynamic-labs/wallet-connector-core": "1.0.0-alpha.5"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "viem": "^1.1.0"
@@ -21,6 +21,7 @@ class ZeroDevConnector extends walletConnectorCore.WalletConnectorBase {
21
21
  this.connectedChain = 'EVM';
22
22
  this.supportedChains = ['ETH', 'EVM'];
23
23
  this.isGasSponsorshipDisabled = false;
24
+ this.isEmbeddedWallet = true;
24
25
  this.name = 'ZeroDev';
25
26
  const zeroDevProjectId = (_a = opts.apiProviders.zerodev) === null || _a === void 0 ? void 0 : _a.clientId;
26
27
  if (!zeroDevProjectId) {
@@ -38,15 +39,11 @@ class ZeroDevConnector extends walletConnectorCore.WalletConnectorBase {
38
39
  }
39
40
  setEoaConnector(connector) {
40
41
  return _tslib.__awaiter(this, void 0, void 0, function* () {
42
+ this.zeroDevProviderDeferredPromise = new utils.DeferredPromise();
41
43
  this.eoaConnector = connector;
42
44
  const signer = yield this.eoaConnector.getSigner();
43
- const zeroDevProvider = new sdk.ECDSAProvider({
44
- opts: {
45
- paymasterConfig: {
46
- onlySendSponsoredTransaction: true,
47
- policy: 'VERIFYING_PAYMASTER',
48
- },
49
- },
45
+ const zeroDevProvider = yield sdk.ECDSAProvider.init({
46
+ bundlerProvider: 'STACKUP',
50
47
  owner: sdk.convertWalletClientToAccountSigner(signer),
51
48
  projectId: this.projectId,
52
49
  });
@@ -56,6 +53,7 @@ class ZeroDevConnector extends walletConnectorCore.WalletConnectorBase {
56
53
  });
57
54
  this.zeroDevProvider = zeroDevProvider;
58
55
  yield this.checkIsProjectChainEnabled();
56
+ this.zeroDevProviderDeferredPromise.resolve();
59
57
  });
60
58
  }
61
59
  checkIsProjectChainEnabled() {
@@ -70,35 +68,54 @@ class ZeroDevConnector extends walletConnectorCore.WalletConnectorBase {
70
68
  }
71
69
  });
72
70
  }
73
- getProviderWithoutSponsorship() {
71
+ getProviderWithSponsorshipValidation() {
74
72
  return _tslib.__awaiter(this, void 0, void 0, function* () {
73
+ if (this.providerWithSponsorship) {
74
+ return this.providerWithSponsorship;
75
+ }
75
76
  const { eoaConnector } = this;
76
77
  if (!eoaConnector)
77
78
  throw new utils.DynamicError('No EOA connector');
78
79
  const signer = yield eoaConnector.getSigner();
79
- return new sdk.ECDSAProvider({
80
+ this.providerWithSponsorship = yield sdk.ECDSAProvider.init({
81
+ bundlerProvider: 'STACKUP',
82
+ opts: {
83
+ paymasterConfig: {
84
+ onlySendSponsoredTransaction: true,
85
+ policy: 'VERIFYING_PAYMASTER',
86
+ },
87
+ },
80
88
  owner: sdk.convertWalletClientToAccountSigner(signer),
81
89
  projectId: this.projectId,
82
90
  });
91
+ utils.wrapMethodWithCallback(this.providerWithSponsorship, 'sendUserOperation', (original, ...args) => {
92
+ this._walletUiUtils.disabledConfirmationOnce();
93
+ return original(...args);
94
+ });
95
+ return this.providerWithSponsorship;
83
96
  });
84
97
  }
85
98
  fetchPublicAddress() {
86
- var _a;
99
+ var _a, _b;
87
100
  return _tslib.__awaiter(this, void 0, void 0, function* () {
88
- return (_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.getAddress();
101
+ yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
102
+ return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.getAddress();
89
103
  });
90
104
  }
91
105
  getConnectedAccounts() {
106
+ var _a;
92
107
  return _tslib.__awaiter(this, void 0, void 0, function* () {
108
+ yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
93
109
  return this.zeroDevProvider
94
110
  ? [yield this.zeroDevProvider.getAddress()]
95
111
  : [];
96
112
  });
97
113
  }
98
114
  getNetwork() {
99
- var _a;
115
+ var _a, _b;
100
116
  return _tslib.__awaiter(this, void 0, void 0, function* () {
101
- return (_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.rpcClient.chain.id;
117
+ yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
118
+ return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.rpcClient.chain.id;
102
119
  });
103
120
  }
104
121
  getTransport(provider) {
@@ -112,13 +129,13 @@ class ZeroDevConnector extends walletConnectorCore.WalletConnectorBase {
112
129
  try {
113
130
  this._walletUiUtils.disabledConfirmationOnce();
114
131
  const effectiveProvider = this.isGasSponsorshipDisabled
115
- ? yield this.getProviderWithoutSponsorship()
116
- : provider;
132
+ ? provider
133
+ : yield this.getProviderWithSponsorshipValidation();
117
134
  const response = yield effectiveProvider.sendTransaction(viemUtils.unFormatTransaction(transaction));
118
135
  return response;
119
136
  }
120
137
  catch (err) {
121
- logger.logger.error(err);
138
+ logger.logger.debug(err);
122
139
  if (isGasNotSponsoredError.isGasNotSponsoredError(err)) {
123
140
  throw new utils.TransactionGasCannotBeSponsoredError();
124
141
  }
@@ -185,7 +202,7 @@ class ZeroDevConnector extends walletConnectorCore.WalletConnectorBase {
185
202
  return result.paymasterAndData !== '0x';
186
203
  }
187
204
  catch (err) {
188
- logger.logger.error(err);
205
+ logger.logger.debug(err);
189
206
  return false;
190
207
  }
191
208
  });
@@ -16,10 +16,18 @@ export declare class ZeroDevConnector extends WalletConnectorBase implements IAc
16
16
  projectId: string;
17
17
  zeroDevProvider: ECDSAProvider | undefined;
18
18
  eoaConnector: WalletConnector | undefined;
19
+ private providerWithSponsorship;
19
20
  connectedChain: Chain;
20
21
  supportedChains: Chain[];
21
22
  evmNetworks: EvmNetwork[];
22
23
  private isGasSponsorshipDisabled;
24
+ isEmbeddedWallet: boolean;
25
+ /**
26
+ * Deferred promise that resolves when the ZeroDev provider is set.
27
+ * This is used to make sure that the provider is set before any other method is called.
28
+ * This is needed because the provider is set asynchronously.
29
+ */
30
+ private zeroDevProviderDeferredPromise;
23
31
  name: string;
24
32
  get key(): string;
25
33
  private _walletUiUtils;
@@ -28,7 +36,7 @@ export declare class ZeroDevConnector extends WalletConnectorBase implements IAc
28
36
  getAccountAbstractionProvider(): ECDSAProvider | undefined;
29
37
  setEoaConnector(connector: WalletConnector): Promise<void>;
30
38
  private checkIsProjectChainEnabled;
31
- private getProviderWithoutSponsorship;
39
+ private getProviderWithSponsorshipValidation;
32
40
  fetchPublicAddress(): Promise<string | undefined>;
33
41
  getConnectedAccounts(): Promise<string[]>;
34
42
  getNetwork(): Promise<number | undefined>;
@@ -3,7 +3,7 @@ import { ECDSAProvider, convertWalletClientToAccountSigner } from '@zerodev/sdk'
3
3
  import { custom, createWalletClient, isHex, fromHex, formatEther } from 'viem';
4
4
  import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
5
5
  import { confirmationTransport, unFormatTransaction } from '@dynamic-labs/viem-utils';
6
- import { parseEvmNetworks, DynamicError, wrapMethodWithCallback, TransactionGasCannotBeSponsoredError } from '@dynamic-labs/utils';
6
+ import { parseEvmNetworks, DynamicError, DeferredPromise, wrapMethodWithCallback, TransactionGasCannotBeSponsoredError } from '@dynamic-labs/utils';
7
7
  import { logger } from './utils/logger.js';
8
8
  import { isGasNotSponsoredError } from './utils/isGasNotSponsoredError.js';
9
9
 
@@ -17,6 +17,7 @@ class ZeroDevConnector extends WalletConnectorBase {
17
17
  this.connectedChain = 'EVM';
18
18
  this.supportedChains = ['ETH', 'EVM'];
19
19
  this.isGasSponsorshipDisabled = false;
20
+ this.isEmbeddedWallet = true;
20
21
  this.name = 'ZeroDev';
21
22
  const zeroDevProjectId = (_a = opts.apiProviders.zerodev) === null || _a === void 0 ? void 0 : _a.clientId;
22
23
  if (!zeroDevProjectId) {
@@ -34,15 +35,11 @@ class ZeroDevConnector extends WalletConnectorBase {
34
35
  }
35
36
  setEoaConnector(connector) {
36
37
  return __awaiter(this, void 0, void 0, function* () {
38
+ this.zeroDevProviderDeferredPromise = new DeferredPromise();
37
39
  this.eoaConnector = connector;
38
40
  const signer = yield this.eoaConnector.getSigner();
39
- const zeroDevProvider = new ECDSAProvider({
40
- opts: {
41
- paymasterConfig: {
42
- onlySendSponsoredTransaction: true,
43
- policy: 'VERIFYING_PAYMASTER',
44
- },
45
- },
41
+ const zeroDevProvider = yield ECDSAProvider.init({
42
+ bundlerProvider: 'STACKUP',
46
43
  owner: convertWalletClientToAccountSigner(signer),
47
44
  projectId: this.projectId,
48
45
  });
@@ -52,6 +49,7 @@ class ZeroDevConnector extends WalletConnectorBase {
52
49
  });
53
50
  this.zeroDevProvider = zeroDevProvider;
54
51
  yield this.checkIsProjectChainEnabled();
52
+ this.zeroDevProviderDeferredPromise.resolve();
55
53
  });
56
54
  }
57
55
  checkIsProjectChainEnabled() {
@@ -66,35 +64,54 @@ class ZeroDevConnector extends WalletConnectorBase {
66
64
  }
67
65
  });
68
66
  }
69
- getProviderWithoutSponsorship() {
67
+ getProviderWithSponsorshipValidation() {
70
68
  return __awaiter(this, void 0, void 0, function* () {
69
+ if (this.providerWithSponsorship) {
70
+ return this.providerWithSponsorship;
71
+ }
71
72
  const { eoaConnector } = this;
72
73
  if (!eoaConnector)
73
74
  throw new DynamicError('No EOA connector');
74
75
  const signer = yield eoaConnector.getSigner();
75
- return new ECDSAProvider({
76
+ this.providerWithSponsorship = yield ECDSAProvider.init({
77
+ bundlerProvider: 'STACKUP',
78
+ opts: {
79
+ paymasterConfig: {
80
+ onlySendSponsoredTransaction: true,
81
+ policy: 'VERIFYING_PAYMASTER',
82
+ },
83
+ },
76
84
  owner: convertWalletClientToAccountSigner(signer),
77
85
  projectId: this.projectId,
78
86
  });
87
+ wrapMethodWithCallback(this.providerWithSponsorship, 'sendUserOperation', (original, ...args) => {
88
+ this._walletUiUtils.disabledConfirmationOnce();
89
+ return original(...args);
90
+ });
91
+ return this.providerWithSponsorship;
79
92
  });
80
93
  }
81
94
  fetchPublicAddress() {
82
- var _a;
95
+ var _a, _b;
83
96
  return __awaiter(this, void 0, void 0, function* () {
84
- return (_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.getAddress();
97
+ yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
98
+ return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.getAddress();
85
99
  });
86
100
  }
87
101
  getConnectedAccounts() {
102
+ var _a;
88
103
  return __awaiter(this, void 0, void 0, function* () {
104
+ yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
89
105
  return this.zeroDevProvider
90
106
  ? [yield this.zeroDevProvider.getAddress()]
91
107
  : [];
92
108
  });
93
109
  }
94
110
  getNetwork() {
95
- var _a;
111
+ var _a, _b;
96
112
  return __awaiter(this, void 0, void 0, function* () {
97
- return (_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.rpcClient.chain.id;
113
+ yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
114
+ return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.rpcClient.chain.id;
98
115
  });
99
116
  }
100
117
  getTransport(provider) {
@@ -108,13 +125,13 @@ class ZeroDevConnector extends WalletConnectorBase {
108
125
  try {
109
126
  this._walletUiUtils.disabledConfirmationOnce();
110
127
  const effectiveProvider = this.isGasSponsorshipDisabled
111
- ? yield this.getProviderWithoutSponsorship()
112
- : provider;
128
+ ? provider
129
+ : yield this.getProviderWithSponsorshipValidation();
113
130
  const response = yield effectiveProvider.sendTransaction(unFormatTransaction(transaction));
114
131
  return response;
115
132
  }
116
133
  catch (err) {
117
- logger.error(err);
134
+ logger.debug(err);
118
135
  if (isGasNotSponsoredError(err)) {
119
136
  throw new TransactionGasCannotBeSponsoredError();
120
137
  }
@@ -181,7 +198,7 @@ class ZeroDevConnector extends WalletConnectorBase {
181
198
  return result.paymasterAndData !== '0x';
182
199
  }
183
200
  catch (err) {
184
- logger.error(err);
201
+ logger.debug(err);
185
202
  return false;
186
203
  }
187
204
  });