@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 +20 -0
- package/package.json +7 -7
- package/src/ZeroDevConnector.cjs +34 -17
- package/src/ZeroDevConnector.d.ts +9 -1
- package/src/ZeroDevConnector.js +35 -18
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
|
+
"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.
|
|
32
|
-
"@dynamic-labs/types": "1.0.0-alpha.
|
|
33
|
-
"@dynamic-labs/utils": "1.0.0-alpha.
|
|
34
|
-
"@dynamic-labs/viem-utils": "1.0.0-alpha.
|
|
35
|
-
"@dynamic-labs/wallet-book": "1.0.0-alpha.
|
|
36
|
-
"@dynamic-labs/wallet-connector-core": "1.0.0-alpha.
|
|
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"
|
package/src/ZeroDevConnector.cjs
CHANGED
|
@@ -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 =
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
?
|
|
116
|
-
:
|
|
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.
|
|
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.
|
|
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
|
|
39
|
+
private getProviderWithSponsorshipValidation;
|
|
32
40
|
fetchPublicAddress(): Promise<string | undefined>;
|
|
33
41
|
getConnectedAccounts(): Promise<string[]>;
|
|
34
42
|
getNetwork(): Promise<number | undefined>;
|
package/src/ZeroDevConnector.js
CHANGED
|
@@ -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 =
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
?
|
|
112
|
-
:
|
|
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.
|
|
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.
|
|
201
|
+
logger.debug(err);
|
|
185
202
|
return false;
|
|
186
203
|
}
|
|
187
204
|
});
|