@dynamic-labs/ethereum-core 4.0.0-alpha.9 → 4.0.0

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 (38) hide show
  1. package/CHANGELOG.md +483 -1
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +10 -10
  5. package/src/connector/{EthWalletConnector.cjs → EthereumWalletConnector.cjs} +38 -23
  6. package/src/connector/EthereumWalletConnector.d.ts +7714 -0
  7. package/src/connector/{EthWalletConnector.js → EthereumWalletConnector.js} +39 -24
  8. package/src/connector/createConnector/createConnector.cjs +103 -0
  9. package/src/connector/createConnector/createConnector.d.ts +23 -0
  10. package/src/connector/createConnector/createConnector.js +99 -0
  11. package/src/connector/createConnector/index.d.ts +1 -0
  12. package/src/connector/index.d.ts +2 -1
  13. package/src/connector/isEthWalletConnector/isEthWalletConnector.d.ts +2 -2
  14. package/src/index.cjs +4 -2
  15. package/src/index.js +2 -1
  16. package/src/rpc/RpcProvidersEthereum/RpcProvidersEthereum.cjs +0 -5
  17. package/src/rpc/RpcProvidersEthereum/RpcProvidersEthereum.js +0 -5
  18. package/src/rpc/evmProvidersSelector/evmProvidersSelector.cjs +0 -1
  19. package/src/rpc/evmProvidersSelector/evmProvidersSelector.d.ts +1 -1
  20. package/src/rpc/evmProvidersSelector/evmProvidersSelector.js +0 -1
  21. package/src/utils/viem/ViemRpcUiTransaction/ViemRpcUiTransaction.cjs +9 -3
  22. package/src/utils/viem/ViemRpcUiTransaction/ViemRpcUiTransaction.d.ts +2 -1
  23. package/src/utils/viem/ViemRpcUiTransaction/ViemRpcUiTransaction.js +9 -3
  24. package/src/utils/viem/ViemUiTransaction/ViemUiTransaction.cjs +5 -0
  25. package/src/utils/viem/ViemUiTransaction/ViemUiTransaction.d.ts +1 -0
  26. package/src/utils/viem/ViemUiTransaction/ViemUiTransaction.js +5 -0
  27. package/src/utils/viem/createAccountWithUiConfirmation/createAccountWithUiConfirmation.d.ts +223 -1
  28. package/src/utils/viem/createViemUiTransaction/createViemUiTransaction.cjs +1 -0
  29. package/src/utils/viem/createViemUiTransaction/createViemUiTransaction.js +1 -0
  30. package/src/utils/viem/getTransactionRecipient.cjs +25 -0
  31. package/src/utils/viem/getTransactionRecipient.d.ts +2 -0
  32. package/src/utils/viem/getTransactionRecipient.js +21 -0
  33. package/src/utils/viem/interceptTransport/interceptTransport.cjs +3 -0
  34. package/src/utils/viem/interceptTransport/interceptTransport.js +3 -0
  35. package/src/wallet/EthereumWallet.cjs +20 -1
  36. package/src/wallet/EthereumWallet.d.ts +12 -2
  37. package/src/wallet/EthereumWallet.js +21 -2
  38. package/src/connector/EthWalletConnector.d.ts +0 -3090
@@ -8,5 +8,227 @@ type Props = {
8
8
  walletUiUtils: WalletUiUtils<InternalWalletConnector>;
9
9
  provider: PublicClient<Transport, Chain>;
10
10
  };
11
- export declare const createAccountWithUiConfirmation: ({ address, account, provider, walletConnector, walletUiUtils, }: Props) => LocalAccount;
11
+ export declare const createAccountWithUiConfirmation: ({ address, account, provider, walletConnector, walletUiUtils, }: Props) => {
12
+ address: `0x${string}`;
13
+ nonceManager?: import("viem").NonceManager | undefined;
14
+ sign?: ((parameters: {
15
+ hash: `0x${string}`;
16
+ }) => Promise<`0x${string}`>) | undefined;
17
+ experimental_signAuthorization?: ((parameters: import("viem/experimental").Authorization) => Promise<import("viem/accounts").SignAuthorizationReturnType>) | undefined;
18
+ signMessage: ({ message }: {
19
+ message: import("viem").SignableMessage;
20
+ }) => Promise<`0x${string}`>;
21
+ signTransaction: <serializer extends import("viem").SerializeTransactionFn<import("viem").TransactionSerializable> = import("viem").SerializeTransactionFn<import("viem").TransactionSerializable>, transaction extends Parameters<serializer>[0] = Parameters<serializer>[0]>(transaction: transaction, options?: {
22
+ serializer?: serializer | undefined;
23
+ } | undefined) => Promise<import("viem").IsNarrowable<import("viem").TransactionSerialized<import("viem").GetTransactionType<transaction>>, `0x${string}`> extends true ? import("viem").TransactionSerialized<import("viem").GetTransactionType<transaction>> : `0x${string}`>;
24
+ signTypedData: <const typedData extends Record<string, unknown> | {
25
+ [x: string]: readonly import("viem").TypedDataParameter[];
26
+ [x: `string[${string}]`]: undefined;
27
+ [x: `function[${string}]`]: undefined;
28
+ [x: `address[${string}]`]: undefined;
29
+ [x: `bool[${string}]`]: undefined;
30
+ [x: `bytes[${string}]`]: undefined;
31
+ [x: `bytes1[${string}]`]: undefined;
32
+ [x: `bytes32[${string}]`]: undefined;
33
+ [x: `bytes31[${string}]`]: undefined;
34
+ [x: `bytes30[${string}]`]: undefined;
35
+ [x: `bytes29[${string}]`]: undefined;
36
+ [x: `bytes28[${string}]`]: undefined;
37
+ [x: `bytes27[${string}]`]: undefined;
38
+ [x: `bytes26[${string}]`]: undefined;
39
+ [x: `bytes25[${string}]`]: undefined;
40
+ [x: `bytes24[${string}]`]: undefined;
41
+ [x: `bytes23[${string}]`]: undefined;
42
+ [x: `bytes22[${string}]`]: undefined;
43
+ [x: `bytes21[${string}]`]: undefined;
44
+ [x: `bytes20[${string}]`]: undefined;
45
+ [x: `bytes19[${string}]`]: undefined;
46
+ [x: `bytes2[${string}]`]: undefined;
47
+ [x: `bytes18[${string}]`]: undefined;
48
+ [x: `bytes17[${string}]`]: undefined;
49
+ [x: `bytes16[${string}]`]: undefined;
50
+ [x: `bytes15[${string}]`]: undefined;
51
+ [x: `bytes14[${string}]`]: undefined;
52
+ [x: `bytes13[${string}]`]: undefined;
53
+ [x: `bytes12[${string}]`]: undefined;
54
+ [x: `bytes11[${string}]`]: undefined;
55
+ [x: `bytes10[${string}]`]: undefined;
56
+ [x: `bytes9[${string}]`]: undefined;
57
+ [x: `bytes8[${string}]`]: undefined;
58
+ [x: `bytes7[${string}]`]: undefined;
59
+ [x: `bytes6[${string}]`]: undefined;
60
+ [x: `bytes5[${string}]`]: undefined;
61
+ [x: `bytes4[${string}]`]: undefined;
62
+ [x: `bytes3[${string}]`]: undefined;
63
+ [x: `int[${string}]`]: undefined;
64
+ [x: `int40[${string}]`]: undefined;
65
+ [x: `int32[${string}]`]: undefined;
66
+ [x: `int24[${string}]`]: undefined;
67
+ [x: `int16[${string}]`]: undefined;
68
+ [x: `int8[${string}]`]: undefined;
69
+ [x: `int48[${string}]`]: undefined;
70
+ [x: `int56[${string}]`]: undefined;
71
+ [x: `int64[${string}]`]: undefined;
72
+ [x: `int72[${string}]`]: undefined;
73
+ [x: `int80[${string}]`]: undefined;
74
+ [x: `int88[${string}]`]: undefined;
75
+ [x: `int96[${string}]`]: undefined;
76
+ [x: `int104[${string}]`]: undefined;
77
+ [x: `int112[${string}]`]: undefined;
78
+ [x: `int120[${string}]`]: undefined;
79
+ [x: `int128[${string}]`]: undefined;
80
+ [x: `int136[${string}]`]: undefined;
81
+ [x: `int144[${string}]`]: undefined;
82
+ [x: `int152[${string}]`]: undefined;
83
+ [x: `int160[${string}]`]: undefined;
84
+ [x: `int168[${string}]`]: undefined;
85
+ [x: `int176[${string}]`]: undefined;
86
+ [x: `int184[${string}]`]: undefined;
87
+ [x: `int192[${string}]`]: undefined;
88
+ [x: `int200[${string}]`]: undefined;
89
+ [x: `int208[${string}]`]: undefined;
90
+ [x: `int216[${string}]`]: undefined;
91
+ [x: `int224[${string}]`]: undefined;
92
+ [x: `int232[${string}]`]: undefined;
93
+ [x: `int240[${string}]`]: undefined;
94
+ [x: `int248[${string}]`]: undefined;
95
+ [x: `int256[${string}]`]: undefined;
96
+ [x: `uint[${string}]`]: undefined;
97
+ [x: `uint40[${string}]`]: undefined;
98
+ [x: `uint32[${string}]`]: undefined;
99
+ [x: `uint24[${string}]`]: undefined;
100
+ [x: `uint16[${string}]`]: undefined;
101
+ [x: `uint8[${string}]`]: undefined;
102
+ [x: `uint48[${string}]`]: undefined;
103
+ [x: `uint56[${string}]`]: undefined;
104
+ [x: `uint64[${string}]`]: undefined;
105
+ [x: `uint72[${string}]`]: undefined;
106
+ [x: `uint80[${string}]`]: undefined;
107
+ [x: `uint88[${string}]`]: undefined;
108
+ [x: `uint96[${string}]`]: undefined;
109
+ [x: `uint104[${string}]`]: undefined;
110
+ [x: `uint112[${string}]`]: undefined;
111
+ [x: `uint120[${string}]`]: undefined;
112
+ [x: `uint128[${string}]`]: undefined;
113
+ [x: `uint136[${string}]`]: undefined;
114
+ [x: `uint144[${string}]`]: undefined;
115
+ [x: `uint152[${string}]`]: undefined;
116
+ [x: `uint160[${string}]`]: undefined;
117
+ [x: `uint168[${string}]`]: undefined;
118
+ [x: `uint176[${string}]`]: undefined;
119
+ [x: `uint184[${string}]`]: undefined;
120
+ [x: `uint192[${string}]`]: undefined;
121
+ [x: `uint200[${string}]`]: undefined;
122
+ [x: `uint208[${string}]`]: undefined;
123
+ [x: `uint216[${string}]`]: undefined;
124
+ [x: `uint224[${string}]`]: undefined;
125
+ [x: `uint232[${string}]`]: undefined;
126
+ [x: `uint240[${string}]`]: undefined;
127
+ [x: `uint248[${string}]`]: undefined;
128
+ [x: `uint256[${string}]`]: undefined;
129
+ string?: undefined;
130
+ address?: undefined;
131
+ bool?: undefined;
132
+ bytes?: undefined;
133
+ bytes1?: undefined;
134
+ bytes32?: undefined;
135
+ bytes31?: undefined;
136
+ bytes30?: undefined;
137
+ bytes29?: undefined;
138
+ bytes28?: undefined;
139
+ bytes27?: undefined;
140
+ bytes26?: undefined;
141
+ bytes25?: undefined;
142
+ bytes24?: undefined;
143
+ bytes23?: undefined;
144
+ bytes22?: undefined;
145
+ bytes21?: undefined;
146
+ bytes20?: undefined;
147
+ bytes19?: undefined;
148
+ bytes2?: undefined;
149
+ bytes18?: undefined;
150
+ bytes17?: undefined;
151
+ bytes16?: undefined;
152
+ bytes15?: undefined;
153
+ bytes14?: undefined;
154
+ bytes13?: undefined;
155
+ bytes12?: undefined;
156
+ bytes11?: undefined;
157
+ bytes10?: undefined;
158
+ bytes9?: undefined;
159
+ bytes8?: undefined;
160
+ bytes7?: undefined;
161
+ bytes6?: undefined;
162
+ bytes5?: undefined;
163
+ bytes4?: undefined;
164
+ bytes3?: undefined;
165
+ int40?: undefined;
166
+ int32?: undefined;
167
+ int24?: undefined;
168
+ int16?: undefined;
169
+ int8?: undefined;
170
+ int48?: undefined;
171
+ int56?: undefined;
172
+ int64?: undefined;
173
+ int72?: undefined;
174
+ int80?: undefined;
175
+ int88?: undefined;
176
+ int96?: undefined;
177
+ int104?: undefined;
178
+ int112?: undefined;
179
+ int120?: undefined;
180
+ int128?: undefined;
181
+ int136?: undefined;
182
+ int144?: undefined;
183
+ int152?: undefined;
184
+ int160?: undefined;
185
+ int168?: undefined;
186
+ int176?: undefined;
187
+ int184?: undefined;
188
+ int192?: undefined;
189
+ int200?: undefined;
190
+ int208?: undefined;
191
+ int216?: undefined;
192
+ int224?: undefined;
193
+ int232?: undefined;
194
+ int240?: undefined;
195
+ int248?: undefined;
196
+ int256?: undefined;
197
+ uint40?: undefined;
198
+ uint32?: undefined;
199
+ uint24?: undefined;
200
+ uint16?: undefined;
201
+ uint8?: undefined;
202
+ uint48?: undefined;
203
+ uint56?: undefined;
204
+ uint64?: undefined;
205
+ uint72?: undefined;
206
+ uint80?: undefined;
207
+ uint88?: undefined;
208
+ uint96?: undefined;
209
+ uint104?: undefined;
210
+ uint112?: undefined;
211
+ uint120?: undefined;
212
+ uint128?: undefined;
213
+ uint136?: undefined;
214
+ uint144?: undefined;
215
+ uint152?: undefined;
216
+ uint160?: undefined;
217
+ uint168?: undefined;
218
+ uint176?: undefined;
219
+ uint184?: undefined;
220
+ uint192?: undefined;
221
+ uint200?: undefined;
222
+ uint208?: undefined;
223
+ uint216?: undefined;
224
+ uint224?: undefined;
225
+ uint232?: undefined;
226
+ uint240?: undefined;
227
+ uint248?: undefined;
228
+ uint256?: undefined;
229
+ }, primaryType extends "EIP712Domain" | keyof typedData = keyof typedData>(parameters: import("viem").TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>;
230
+ publicKey: `0x${string}`;
231
+ source: string;
232
+ type: "local";
233
+ };
12
234
  export {};
@@ -26,6 +26,7 @@ const createViemUiTransaction = (_a) => _tslib.__awaiter(void 0, [_a], void 0, f
26
26
  // Native token
27
27
  return walletClient.sendTransaction({
28
28
  account: from,
29
+ data: '0x',
29
30
  maxFeePerGas: transaction.maxFeePerGas,
30
31
  maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,
31
32
  to: transaction.to,
@@ -22,6 +22,7 @@ const createViemUiTransaction = (_a) => __awaiter(void 0, [_a], void 0, function
22
22
  // Native token
23
23
  return walletClient.sendTransaction({
24
24
  account: from,
25
+ data: '0x',
25
26
  maxFeePerGas: transaction.maxFeePerGas,
26
27
  maxPriorityFeePerGas: transaction.maxPriorityFeePerGas,
27
28
  to: transaction.to,
@@ -0,0 +1,25 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var viem = require('viem');
7
+
8
+ const getTransactionRecipient = (data, to) => {
9
+ // 0xa9059cbb is the function selector for the transfer function
10
+ // so we can use it to check if the transaction is a transfer
11
+ // then decode the transaction data to get the recipient
12
+ if (data === null || data === void 0 ? void 0 : data.startsWith('0xa9059cbb')) {
13
+ return viem.decodeAbiParameters([
14
+ { name: 'x', type: 'address' },
15
+ { name: 'x', type: 'uint256' },
16
+ ], ('0x' + (data === null || data === void 0 ? void 0 : data.slice(10))))[0];
17
+ }
18
+ // if the data is 0x or undefined, then the recipient is the "to" address
19
+ if (!data || data === '0x') {
20
+ return to !== null && to !== void 0 ? to : undefined;
21
+ }
22
+ return undefined;
23
+ };
24
+
25
+ exports.getTransactionRecipient = getTransactionRecipient;
@@ -0,0 +1,2 @@
1
+ import { Hex } from 'viem';
2
+ export declare const getTransactionRecipient: (data: Hex | undefined, to: Hex | undefined) => Hex | undefined;
@@ -0,0 +1,21 @@
1
+ 'use client'
2
+ import { decodeAbiParameters } from 'viem';
3
+
4
+ const getTransactionRecipient = (data, to) => {
5
+ // 0xa9059cbb is the function selector for the transfer function
6
+ // so we can use it to check if the transaction is a transfer
7
+ // then decode the transaction data to get the recipient
8
+ if (data === null || data === void 0 ? void 0 : data.startsWith('0xa9059cbb')) {
9
+ return decodeAbiParameters([
10
+ { name: 'x', type: 'address' },
11
+ { name: 'x', type: 'uint256' },
12
+ ], ('0x' + (data === null || data === void 0 ? void 0 : data.slice(10))))[0];
13
+ }
14
+ // if the data is 0x or undefined, then the recipient is the "to" address
15
+ if (!data || data === '0x') {
16
+ return to !== null && to !== void 0 ? to : undefined;
17
+ }
18
+ return undefined;
19
+ };
20
+
21
+ export { getTransactionRecipient };
@@ -33,6 +33,9 @@ const interceptTransport = ({ getAccounts, onPersonalSign, onSendTransaction, on
33
33
  error.walk() instanceof utils.UserRejectedTransactionError) {
34
34
  throw new viem.UserRejectedRequestError(error.walk());
35
35
  }
36
+ if (error instanceof utils.UserRejectedTransactionError) {
37
+ throw new viem.UserRejectedRequestError(error);
38
+ }
36
39
  if (error instanceof utils.UserRejectedRequestError) {
37
40
  throw new viem.UserRejectedRequestError(error);
38
41
  }
@@ -29,6 +29,9 @@ const interceptTransport = ({ getAccounts, onPersonalSign, onSendTransaction, on
29
29
  error.walk() instanceof UserRejectedTransactionError) {
30
30
  throw new UserRejectedRequestError$1(error.walk());
31
31
  }
32
+ if (error instanceof UserRejectedTransactionError) {
33
+ throw new UserRejectedRequestError$1(error);
34
+ }
32
35
  if (error instanceof UserRejectedRequestError) {
33
36
  throw new UserRejectedRequestError$1(error);
34
37
  }
@@ -12,9 +12,28 @@ require('../utils/viem/estimateL1Fee/opStack/estimateL1Fee.cjs');
12
12
  require('../utils/viem/chainsMap/chainsMap.cjs');
13
13
  var interceptTransport = require('../utils/viem/interceptTransport/interceptTransport.cjs');
14
14
  require('viem/accounts');
15
- require('viem/chains');
15
+ var getOrMapViemChain = require('../utils/viem/getOrMapViemChain/getOrMapViemChain.cjs');
16
16
 
17
17
  class EthereumWallet extends walletConnectorCore.Wallet {
18
+ /**
19
+ * Sends the native balance of the wallet to the given address.
20
+ * @param amount - The amount of balance to send (in ETH).
21
+ * @param toAddress - The address to send the balance to.
22
+ * @returns The transaction hash of the sent transaction.
23
+ */
24
+ sendBalance(_a) {
25
+ return _tslib.__awaiter(this, arguments, void 0, function* ({ amount, toAddress, }) {
26
+ const provider = yield this.getWalletClient();
27
+ const transaction = {
28
+ account: this.address,
29
+ chain: getOrMapViemChain.getChain(yield provider.getChainId()),
30
+ to: toAddress,
31
+ value: amount ? viem.parseEther(amount) : undefined,
32
+ };
33
+ const transactionHash = yield provider.sendTransaction(transaction);
34
+ return transactionHash;
35
+ });
36
+ }
18
37
  /**
19
38
  * Retrieves the public client.
20
39
  * @returns A promise that resolves to the public client,
@@ -1,7 +1,17 @@
1
1
  import { Account, Chain, PublicClient, Transport, WalletClient } from 'viem';
2
2
  import { Wallet } from '@dynamic-labs/wallet-connector-core';
3
- import { EthWalletConnector } from '../connector';
4
- export declare class EthereumWallet extends Wallet<EthWalletConnector> {
3
+ import { EthereumWalletConnector } from '../connector';
4
+ export declare class EthereumWallet extends Wallet<EthereumWalletConnector> {
5
+ /**
6
+ * Sends the native balance of the wallet to the given address.
7
+ * @param amount - The amount of balance to send (in ETH).
8
+ * @param toAddress - The address to send the balance to.
9
+ * @returns The transaction hash of the sent transaction.
10
+ */
11
+ sendBalance({ amount, toAddress, }: {
12
+ amount: string;
13
+ toAddress: string;
14
+ }): Promise<`0x${string}`>;
5
15
  /**
6
16
  * Retrieves the public client.
7
17
  * @returns A promise that resolves to the public client,
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../_virtual/_tslib.js';
3
- import { createWalletClient, custom } from 'viem';
3
+ import { parseEther, createWalletClient, custom } from 'viem';
4
4
  import { Wallet } from '@dynamic-labs/wallet-connector-core';
5
5
  import '@dynamic-labs/utils';
6
6
  import '../utils/logger.js';
@@ -8,9 +8,28 @@ import '../utils/viem/estimateL1Fee/opStack/estimateL1Fee.js';
8
8
  import '../utils/viem/chainsMap/chainsMap.js';
9
9
  import { interceptTransport } from '../utils/viem/interceptTransport/interceptTransport.js';
10
10
  import 'viem/accounts';
11
- import 'viem/chains';
11
+ import { getChain } from '../utils/viem/getOrMapViemChain/getOrMapViemChain.js';
12
12
 
13
13
  class EthereumWallet extends Wallet {
14
+ /**
15
+ * Sends the native balance of the wallet to the given address.
16
+ * @param amount - The amount of balance to send (in ETH).
17
+ * @param toAddress - The address to send the balance to.
18
+ * @returns The transaction hash of the sent transaction.
19
+ */
20
+ sendBalance(_a) {
21
+ return __awaiter(this, arguments, void 0, function* ({ amount, toAddress, }) {
22
+ const provider = yield this.getWalletClient();
23
+ const transaction = {
24
+ account: this.address,
25
+ chain: getChain(yield provider.getChainId()),
26
+ to: toAddress,
27
+ value: amount ? parseEther(amount) : undefined,
28
+ };
29
+ const transactionHash = yield provider.sendTransaction(transaction);
30
+ return transactionHash;
31
+ });
32
+ }
14
33
  /**
15
34
  * Retrieves the public client.
16
35
  * @returns A promise that resolves to the public client,