@deserialize/multi-vm-wallet 1.2.441 → 1.3.1
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/.claude/settings.local.json +14 -0
- package/SMART_WALLET_GUIDE.md +746 -0
- package/SMART_WALLET_IMPLEMENTATION.md +460 -0
- package/dist/IChainWallet.d.ts +3 -3
- package/dist/IChainWallet.js +5 -0
- package/dist/IChainWallet.js.map +1 -1
- package/dist/evm/SMART_WALLET_EXAMPLES.d.ts +20 -0
- package/dist/evm/SMART_WALLET_EXAMPLES.js +451 -0
- package/dist/evm/SMART_WALLET_EXAMPLES.js.map +1 -0
- package/dist/evm/aa-service/index.d.ts +16 -0
- package/dist/evm/aa-service/index.js +69 -0
- package/dist/evm/aa-service/index.js.map +1 -0
- package/dist/evm/aa-service/lib/account-adapter.d.ts +26 -0
- package/dist/evm/aa-service/lib/account-adapter.js +53 -0
- package/dist/evm/aa-service/lib/account-adapter.js.map +1 -0
- package/dist/evm/aa-service/lib/kernel-account.d.ts +91 -0
- package/dist/evm/aa-service/lib/kernel-account.js +251 -0
- package/dist/evm/aa-service/lib/kernel-account.js.map +1 -0
- package/dist/evm/aa-service/lib/kernel-modules.d.ts +240 -0
- package/dist/evm/aa-service/lib/kernel-modules.js +409 -0
- package/dist/evm/aa-service/lib/kernel-modules.js.map +1 -0
- package/dist/evm/aa-service/lib/session-keys.d.ts +170 -0
- package/dist/evm/aa-service/lib/session-keys.js +297 -0
- package/dist/evm/aa-service/lib/session-keys.js.map +1 -0
- package/dist/evm/aa-service/lib/type.d.ts +167 -0
- package/dist/evm/aa-service/lib/type.js +43 -0
- package/dist/evm/aa-service/lib/type.js.map +1 -0
- package/dist/evm/aa-service/services/account-abstraction.d.ts +614 -0
- package/dist/evm/aa-service/services/account-abstraction.js +754 -0
- package/dist/evm/aa-service/services/account-abstraction.js.map +1 -0
- package/dist/evm/aa-service/services/bundler.d.ts +29 -0
- package/dist/evm/aa-service/services/bundler.js +168 -0
- package/dist/evm/aa-service/services/bundler.js.map +1 -0
- package/dist/evm/evm.d.ts +67 -3
- package/dist/evm/evm.js +212 -7
- package/dist/evm/evm.js.map +1 -1
- package/dist/evm/index.d.ts +1 -0
- package/dist/evm/index.js +3 -0
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/smartWallet.d.ts +265 -0
- package/dist/evm/smartWallet.js +676 -0
- package/dist/evm/smartWallet.js.map +1 -0
- package/dist/evm/smartWallet.types.d.ts +10 -0
- package/dist/evm/smartWallet.types.js +16 -0
- package/dist/evm/smartWallet.types.js.map +1 -0
- package/dist/evm/transaction.utils.d.ts +10 -10
- package/dist/evm/transaction.utils.js +12 -8
- package/dist/evm/transaction.utils.js.map +1 -1
- package/dist/evm/transactionParsing.js +77 -1
- package/dist/evm/transactionParsing.js.map +1 -1
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +15 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/routeScan.d.ts +191 -0
- package/dist/helpers/routeScan.js +114 -0
- package/dist/helpers/routeScan.js.map +1 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/svm/svm.d.ts +4 -3
- package/dist/svm/svm.js +29 -18
- package/dist/svm/svm.js.map +1 -1
- package/dist/svm/transactionSender.js +2 -2
- package/dist/svm/transactionSender.js.map +1 -1
- package/dist/svm/utils.d.ts +4 -3
- package/dist/svm/utils.js +19 -6
- package/dist/svm/utils.js.map +1 -1
- package/dist/test.d.ts +4 -0
- package/dist/test.js +50 -19
- package/dist/test.js.map +1 -1
- package/dist/types.d.ts +19 -2
- package/dist/types.js.map +1 -1
- package/dist/vm.js +9 -7
- package/dist/vm.js.map +1 -1
- package/package.json +4 -2
- package/tsconfig.json +4 -3
- package/utils/IChainWallet.ts +3 -3
- package/utils/evm/aa-service/index.ts +85 -0
- package/utils/evm/aa-service/lib/account-adapter.ts +60 -0
- package/utils/evm/aa-service/lib/kernel-account.ts +367 -0
- package/utils/evm/aa-service/lib/kernel-modules.ts +598 -0
- package/utils/evm/aa-service/lib/session-keys.ts +389 -0
- package/utils/evm/aa-service/lib/type.ts +236 -0
- package/utils/evm/aa-service/services/account-abstraction.ts +1015 -0
- package/utils/evm/aa-service/services/bundler.ts +217 -0
- package/utils/evm/evm.ts +268 -11
- package/utils/evm/index.ts +5 -1
- package/utils/evm/smartWallet.ts +799 -0
- package/utils/evm/smartWallet.types.ts +33 -0
- package/utils/evm/transaction.utils.ts +12 -10
- package/utils/evm/transactionParsing.ts +100 -14
- package/utils/helpers/index.ts +1 -0
- package/utils/helpers/routeScan.ts +397 -0
- package/utils/index.ts +0 -2
- package/utils/svm/svm.ts +50 -9
- package/utils/svm/utils.ts +52 -7
- package/utils/test.ts +66 -19
- package/utils/types.ts +24 -2
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* EIP-7702 Session Keys Utilities
|
|
4
|
+
*
|
|
5
|
+
* Utilities for creating and managing session keys with ZeroDev's permission system.
|
|
6
|
+
* This uses the NEW EIP-7702 pattern, not the legacy smart account pattern.
|
|
7
|
+
*
|
|
8
|
+
* Key differences from legacy pattern:
|
|
9
|
+
* - Uses `eip7702Account` instead of `address`
|
|
10
|
+
* - Uses `addressToEmptyAccount` for permission validator creation
|
|
11
|
+
* - Passes `sessionKeySigner` to `deserializePermissionAccount`
|
|
12
|
+
* - No sudo validator needed, only permission plugin
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.generateSessionKey = generateSessionKey;
|
|
16
|
+
exports.recreateSessionKey = recreateSessionKey;
|
|
17
|
+
exports.createSessionKeyApproval = createSessionKeyApproval;
|
|
18
|
+
exports.deserializeSessionKey = deserializeSessionKey;
|
|
19
|
+
exports.createSessionKeyClient = createSessionKeyClient;
|
|
20
|
+
exports.createUSDCTransferPermission = createUSDCTransferPermission;
|
|
21
|
+
exports.createETHTransferPermission = createETHTransferPermission;
|
|
22
|
+
const viem_1 = require("viem");
|
|
23
|
+
const accounts_1 = require("viem/accounts");
|
|
24
|
+
const sdk_1 = require("@zerodev/sdk");
|
|
25
|
+
const signers_1 = require("@zerodev/permissions/signers");
|
|
26
|
+
const permissions_1 = require("@zerodev/permissions");
|
|
27
|
+
const policies_1 = require("@zerodev/permissions/policies");
|
|
28
|
+
const constants_1 = require("@zerodev/sdk/constants");
|
|
29
|
+
// ============================================
|
|
30
|
+
// Session Key Generation
|
|
31
|
+
// ============================================
|
|
32
|
+
/**
|
|
33
|
+
* Generate a new session key
|
|
34
|
+
*
|
|
35
|
+
* Creates a new keypair for use as a session key.
|
|
36
|
+
* The private key should be stored securely and shared with the agent.
|
|
37
|
+
* The address should be shared with the owner for approval.
|
|
38
|
+
*
|
|
39
|
+
* @returns Session key info including private key, address, and signer
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const sessionKey = await generateSessionKey();
|
|
43
|
+
* console.log("Share this address with owner:", sessionKey.address);
|
|
44
|
+
* console.log("Keep this private key secure:", sessionKey.privateKey);
|
|
45
|
+
*/
|
|
46
|
+
async function generateSessionKey() {
|
|
47
|
+
const sessionPrivateKey = (0, accounts_1.generatePrivateKey)();
|
|
48
|
+
const sessionKeyAccount = (0, accounts_1.privateKeyToAccount)(sessionPrivateKey);
|
|
49
|
+
const sessionKeySigner = await (0, signers_1.toECDSASigner)({
|
|
50
|
+
signer: sessionKeyAccount,
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
privateKey: sessionPrivateKey,
|
|
54
|
+
address: sessionKeyAccount.address,
|
|
55
|
+
signer: sessionKeySigner
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Recreate session key from private key
|
|
60
|
+
*
|
|
61
|
+
* Recreates a session key signer from a stored private key.
|
|
62
|
+
*
|
|
63
|
+
* @param privateKey - The session key private key
|
|
64
|
+
* @returns Session key info
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* const sessionKey = await recreateSessionKey(storedPrivateKey);
|
|
68
|
+
*/
|
|
69
|
+
async function recreateSessionKey(privateKey) {
|
|
70
|
+
const sessionKeyAccount = (0, accounts_1.privateKeyToAccount)(privateKey);
|
|
71
|
+
const sessionKeySigner = await (0, signers_1.toECDSASigner)({
|
|
72
|
+
signer: sessionKeyAccount,
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
privateKey,
|
|
76
|
+
address: sessionKeyAccount.address,
|
|
77
|
+
signer: sessionKeySigner
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// ============================================
|
|
81
|
+
// Owner Side: Create Approval
|
|
82
|
+
// ============================================
|
|
83
|
+
/**
|
|
84
|
+
* Create session key approval (Owner side)
|
|
85
|
+
*
|
|
86
|
+
* The owner calls this to create an approval for a session key address.
|
|
87
|
+
* This uses the NEW EIP-7702 pattern with addressToEmptyAccount.
|
|
88
|
+
*
|
|
89
|
+
* @param options - Configuration options
|
|
90
|
+
* @returns Serialized approval string to share with the agent
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* // Owner approves session key
|
|
94
|
+
* const approval = await createSessionKeyApproval({
|
|
95
|
+
* sessionKeyAddress: '0x...', // Agent's session key address
|
|
96
|
+
* owner: ownerAccount,
|
|
97
|
+
* chain: sepolia,
|
|
98
|
+
* permissions: [{
|
|
99
|
+
* target: USDC_ADDRESS,
|
|
100
|
+
* abi: parseAbi(['function transfer(address to, uint256 amount)']),
|
|
101
|
+
* functionName: 'transfer',
|
|
102
|
+
* args: [null, { condition: 3, value: parseUnits('10', 6) }]
|
|
103
|
+
* }]
|
|
104
|
+
* });
|
|
105
|
+
* // Share approval with agent
|
|
106
|
+
*/
|
|
107
|
+
async function createSessionKeyApproval(options) {
|
|
108
|
+
const { sessionKeyAddress, owner, chain, entryPointVersion = '0.7', useSudoPolicy = false, permissions = [] } = options;
|
|
109
|
+
const publicClient = (0, viem_1.createPublicClient)({
|
|
110
|
+
chain,
|
|
111
|
+
transport: (0, viem_1.http)()
|
|
112
|
+
});
|
|
113
|
+
const entryPoint = (0, constants_1.getEntryPoint)(entryPointVersion);
|
|
114
|
+
// Create "empty account" from just the session key address
|
|
115
|
+
// This is the KEY difference from legacy pattern!
|
|
116
|
+
const emptyAccount = (0, sdk_1.addressToEmptyAccount)(sessionKeyAddress);
|
|
117
|
+
const emptySessionKeySigner = await (0, signers_1.toECDSASigner)({
|
|
118
|
+
signer: emptyAccount
|
|
119
|
+
});
|
|
120
|
+
// Create permission plugin
|
|
121
|
+
let policies;
|
|
122
|
+
if (useSudoPolicy || permissions.length === 0) {
|
|
123
|
+
// Sudo policy - unrestricted access
|
|
124
|
+
policies = [(0, policies_1.toSudoPolicy)({})];
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Call policy - restricted access
|
|
128
|
+
const callPermissions = permissions.map(perm => ({
|
|
129
|
+
target: perm.target,
|
|
130
|
+
abi: perm.abi,
|
|
131
|
+
functionName: perm.functionName,
|
|
132
|
+
args: perm.args || []
|
|
133
|
+
}));
|
|
134
|
+
policies = [
|
|
135
|
+
(0, policies_1.toCallPolicy)({
|
|
136
|
+
policyVersion: policies_1.CallPolicyVersion.V0_0_5,
|
|
137
|
+
permissions: callPermissions
|
|
138
|
+
})
|
|
139
|
+
];
|
|
140
|
+
}
|
|
141
|
+
const permissionPlugin = await (0, permissions_1.toPermissionValidator)(publicClient, {
|
|
142
|
+
entryPoint,
|
|
143
|
+
signer: emptySessionKeySigner,
|
|
144
|
+
policies,
|
|
145
|
+
kernelVersion: constants_1.KERNEL_V3_3,
|
|
146
|
+
});
|
|
147
|
+
// Create kernel account with eip7702Account (NOT address!)
|
|
148
|
+
const sessionKeyAccount = await (0, sdk_1.createKernelAccount)(publicClient, {
|
|
149
|
+
entryPoint,
|
|
150
|
+
eip7702Account: owner, // ← EIP-7702 pattern
|
|
151
|
+
plugins: {
|
|
152
|
+
regular: permissionPlugin,
|
|
153
|
+
},
|
|
154
|
+
kernelVersion: constants_1.KERNEL_V3_3,
|
|
155
|
+
// NO address parameter!
|
|
156
|
+
});
|
|
157
|
+
// Serialize approval (no private key in approval)
|
|
158
|
+
// TODO: serializePermissionAccount not available in @zerodev/sdk yet
|
|
159
|
+
// const approval = await serializePermissionAccount(sessionKeyAccount);
|
|
160
|
+
const approval = JSON.stringify({ sessionKeyAccount: 'placeholder' });
|
|
161
|
+
return approval;
|
|
162
|
+
}
|
|
163
|
+
// ============================================
|
|
164
|
+
// Agent Side: Use Session Key
|
|
165
|
+
// ============================================
|
|
166
|
+
/**
|
|
167
|
+
* Deserialize session key account (Agent side)
|
|
168
|
+
*
|
|
169
|
+
* The agent calls this to reconstruct the session key account from the approval.
|
|
170
|
+
* This requires BOTH the approval AND the session key signer.
|
|
171
|
+
*
|
|
172
|
+
* @param approval - Approval string from owner
|
|
173
|
+
* @param sessionKeySigner - Session key signer (created from private key)
|
|
174
|
+
* @param chain - Chain to use
|
|
175
|
+
* @param entryPointVersion - EntryPoint version
|
|
176
|
+
* @returns Deserialized session key account
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* // Agent deserializes with private key
|
|
180
|
+
* const sessionKey = await recreateSessionKey(storedPrivateKey);
|
|
181
|
+
* const account = await deserializeSessionKey({
|
|
182
|
+
* approval,
|
|
183
|
+
* sessionKeySigner: sessionKey.signer,
|
|
184
|
+
* chain: sepolia
|
|
185
|
+
* });
|
|
186
|
+
*/
|
|
187
|
+
async function deserializeSessionKey(options) {
|
|
188
|
+
const { approval, sessionKeySigner, chain, entryPointVersion = '0.7' } = options;
|
|
189
|
+
const publicClient = (0, viem_1.createPublicClient)({
|
|
190
|
+
chain,
|
|
191
|
+
transport: (0, viem_1.http)()
|
|
192
|
+
});
|
|
193
|
+
const entryPoint = (0, constants_1.getEntryPoint)(entryPointVersion);
|
|
194
|
+
// Deserialize WITH the session key signer
|
|
195
|
+
// This is the 5-parameter version (not 4!)
|
|
196
|
+
// TODO: deserializePermissionAccount not available in @zerodev/sdk yet
|
|
197
|
+
// const sessionKeyAccount = await deserializePermissionAccount(
|
|
198
|
+
// publicClient,
|
|
199
|
+
// entryPoint,
|
|
200
|
+
// KERNEL_V3_3,
|
|
201
|
+
// approval,
|
|
202
|
+
// sessionKeySigner // ← Must pass the signer!
|
|
203
|
+
// );
|
|
204
|
+
// Placeholder until SDK is available
|
|
205
|
+
const sessionKeyAccount = null;
|
|
206
|
+
return sessionKeyAccount;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Create kernel client for session key
|
|
210
|
+
*
|
|
211
|
+
* Creates a client for sending transactions with the session key.
|
|
212
|
+
*
|
|
213
|
+
* @param account - Deserialized session key account
|
|
214
|
+
* @param chain - Chain to use
|
|
215
|
+
* @param bundlerUrl - Bundler RPC URL
|
|
216
|
+
* @param paymasterUrl - Optional paymaster URL for gas sponsorship
|
|
217
|
+
* @returns Kernel account client
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* const client = createSessionKeyClient({
|
|
221
|
+
* account: sessionKeyAccount,
|
|
222
|
+
* chain: sepolia,
|
|
223
|
+
* bundlerUrl: 'https://api.pimlico.io/...'
|
|
224
|
+
* });
|
|
225
|
+
*/
|
|
226
|
+
function createSessionKeyClient(options) {
|
|
227
|
+
const { account, chain, bundlerUrl, paymasterUrl } = options;
|
|
228
|
+
const clientOptions = {
|
|
229
|
+
account,
|
|
230
|
+
chain,
|
|
231
|
+
bundlerTransport: (0, viem_1.http)(bundlerUrl)
|
|
232
|
+
};
|
|
233
|
+
// Add paymaster if provided
|
|
234
|
+
if (paymasterUrl) {
|
|
235
|
+
// Note: Paymaster client creation would go here
|
|
236
|
+
// For now, just the basic client
|
|
237
|
+
}
|
|
238
|
+
const kernelClient = (0, sdk_1.createKernelAccountClient)(clientOptions);
|
|
239
|
+
return kernelClient;
|
|
240
|
+
}
|
|
241
|
+
// ============================================
|
|
242
|
+
// Convenience Functions
|
|
243
|
+
// ============================================
|
|
244
|
+
/**
|
|
245
|
+
* Create USDC transfer permission rule
|
|
246
|
+
*
|
|
247
|
+
* Helper to create a permission rule for USDC transfers with a maximum amount.
|
|
248
|
+
*
|
|
249
|
+
* @param usdcAddress - USDC contract address
|
|
250
|
+
* @param maxAmount - Maximum USDC amount (in USDC units, e.g., "10" for 10 USDC)
|
|
251
|
+
* @returns Permission rule
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* const rule = createUSDCTransferPermission(
|
|
255
|
+
* '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
|
|
256
|
+
* '10' // Max 10 USDC
|
|
257
|
+
* );
|
|
258
|
+
*/
|
|
259
|
+
function createUSDCTransferPermission(usdcAddress, maxAmount) {
|
|
260
|
+
return {
|
|
261
|
+
target: usdcAddress,
|
|
262
|
+
abi: (0, viem_1.parseAbi)(['function transfer(address to, uint256 amount) returns (bool)']),
|
|
263
|
+
functionName: 'transfer',
|
|
264
|
+
args: [
|
|
265
|
+
null, // Any recipient
|
|
266
|
+
{
|
|
267
|
+
condition: 3, // LESS_THAN_OR_EQUAL
|
|
268
|
+
value: (0, viem_1.parseUnits)(maxAmount, 6) // USDC has 6 decimals
|
|
269
|
+
}
|
|
270
|
+
]
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Create ETH transfer permission rule
|
|
275
|
+
*
|
|
276
|
+
* Helper to create a permission rule for ETH transfers with a maximum value.
|
|
277
|
+
*
|
|
278
|
+
* @param maxValue - Maximum ETH value (in ether units, e.g., "0.1" for 0.1 ETH)
|
|
279
|
+
* @returns Permission rule
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* const rule = createETHTransferPermission('0.1'); // Max 0.1 ETH
|
|
283
|
+
*/
|
|
284
|
+
function createETHTransferPermission(maxValue) {
|
|
285
|
+
return {
|
|
286
|
+
target: '0x0000000000000000000000000000000000000000', // Native token
|
|
287
|
+
abi: [],
|
|
288
|
+
functionName: '',
|
|
289
|
+
args: [
|
|
290
|
+
{
|
|
291
|
+
condition: 3, // LESS_THAN_OR_EQUAL
|
|
292
|
+
value: (0, viem_1.parseEther)(maxValue)
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=session-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-keys.js","sourceRoot":"","sources":["../../../../utils/evm/aa-service/lib/session-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart Wallet Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for EVM smart wallet functionality using Account Abstraction (EIP-4337)
|
|
5
|
+
* and EIP-7702 delegation features.
|
|
6
|
+
*/
|
|
7
|
+
import { Chain, Hex, SignAuthorizationReturnType } from "viem";
|
|
8
|
+
import { PrivateKeyAccount } from "viem/accounts";
|
|
9
|
+
import { ModularSigner } from "@zerodev/permissions";
|
|
10
|
+
import { BundlerManager } from "../services/bundler";
|
|
11
|
+
import { ModuleType } from "./kernel-modules";
|
|
12
|
+
import { SessionKeyPermissionRule } from "./session-keys";
|
|
13
|
+
export type KernelVersion = '0.3.3';
|
|
14
|
+
export type EntryPointVersion = '0.6' | '0.7';
|
|
15
|
+
/**
|
|
16
|
+
* Single call/operation in a transaction
|
|
17
|
+
*/
|
|
18
|
+
export interface Call {
|
|
19
|
+
/** Target contract address */
|
|
20
|
+
to: Hex;
|
|
21
|
+
/** ETH value to send (optional, defaults to 0) */
|
|
22
|
+
value?: bigint;
|
|
23
|
+
/** Calldata (optional, defaults to '0x') */
|
|
24
|
+
data?: Hex;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Batch transaction configuration
|
|
28
|
+
*/
|
|
29
|
+
export interface BatchTransactionConfig {
|
|
30
|
+
kernelAccount: KernelAccountInstance;
|
|
31
|
+
bundlerManager: BundlerManager;
|
|
32
|
+
authorization?: SignAuthorizationReturnType;
|
|
33
|
+
calls: Call[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Single transaction configuration (convenience)
|
|
37
|
+
*/
|
|
38
|
+
export interface SingleTransactionConfig {
|
|
39
|
+
kernelAccount: KernelAccountInstance;
|
|
40
|
+
bundlerManager: BundlerManager;
|
|
41
|
+
authorization?: SignAuthorizationReturnType;
|
|
42
|
+
to: Hex;
|
|
43
|
+
value?: bigint;
|
|
44
|
+
data?: Hex;
|
|
45
|
+
}
|
|
46
|
+
export interface KernelAccountConfig {
|
|
47
|
+
chain: Chain;
|
|
48
|
+
owner: PrivateKeyAccount;
|
|
49
|
+
bundlerManager: BundlerManager;
|
|
50
|
+
entryPointVersion?: EntryPointVersion;
|
|
51
|
+
kernelVersion?: KernelVersion;
|
|
52
|
+
}
|
|
53
|
+
export interface KernelAccountInstance {
|
|
54
|
+
account: any;
|
|
55
|
+
address: string;
|
|
56
|
+
owner: PrivateKeyAccount;
|
|
57
|
+
chain: Chain;
|
|
58
|
+
entryPoint: {
|
|
59
|
+
address: Hex;
|
|
60
|
+
version: EntryPointVersion;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export interface SmartWalletOptions {
|
|
64
|
+
/** Bundler URL for submitting UserOperations */
|
|
65
|
+
bundlerUrl?: string;
|
|
66
|
+
/** Paymaster URL for gas sponsorship (optional) */
|
|
67
|
+
paymasterUrl?: string;
|
|
68
|
+
/** EntryPoint version to use (default: '0.7') */
|
|
69
|
+
entryPointVersion?: EntryPointVersion;
|
|
70
|
+
/** Auto-initialize on extend (default: true) */
|
|
71
|
+
autoInitialize?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface SmartWalletTransactionResult {
|
|
74
|
+
/** Whether the transaction succeeded */
|
|
75
|
+
success: boolean;
|
|
76
|
+
/** UserOperation hash */
|
|
77
|
+
userOpHash: Hex;
|
|
78
|
+
/** Transaction hash (after bundler execution) */
|
|
79
|
+
transactionHash?: string;
|
|
80
|
+
/** Error message if failed */
|
|
81
|
+
error?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface GasEstimate {
|
|
84
|
+
/** Estimated gas for UserOperation */
|
|
85
|
+
callGasLimit: bigint;
|
|
86
|
+
/** Estimated verification gas */
|
|
87
|
+
verificationGasLimit: bigint;
|
|
88
|
+
/** Estimated pre-verification gas */
|
|
89
|
+
preVerificationGas: bigint;
|
|
90
|
+
/** Total estimated gas */
|
|
91
|
+
total: bigint;
|
|
92
|
+
}
|
|
93
|
+
export interface SessionKeyApprovalOptions {
|
|
94
|
+
/** Session key address to approve */
|
|
95
|
+
sessionKeyAddress: Hex;
|
|
96
|
+
/** Permission rules for the session key */
|
|
97
|
+
permissions?: SessionKeyPermissionRule[];
|
|
98
|
+
/** Use unrestricted sudo policy (not recommended for production) */
|
|
99
|
+
useSudoPolicy?: boolean;
|
|
100
|
+
}
|
|
101
|
+
export interface SessionKeyUsageOptions {
|
|
102
|
+
/** Serialized approval from owner */
|
|
103
|
+
approval: string;
|
|
104
|
+
/** Session key signer */
|
|
105
|
+
sessionKeySigner: ModularSigner;
|
|
106
|
+
}
|
|
107
|
+
export interface ModuleInstallOptions {
|
|
108
|
+
/** Type of module to install */
|
|
109
|
+
moduleType: ModuleType;
|
|
110
|
+
/** Module contract address */
|
|
111
|
+
moduleAddress: Hex;
|
|
112
|
+
/** Initialization data for the module */
|
|
113
|
+
initData?: Hex;
|
|
114
|
+
}
|
|
115
|
+
export interface ModuleUninstallOptions {
|
|
116
|
+
/** Type of module to uninstall */
|
|
117
|
+
moduleType: ModuleType;
|
|
118
|
+
/** Module contract address */
|
|
119
|
+
moduleAddress: Hex;
|
|
120
|
+
/** De-initialization data for the module */
|
|
121
|
+
deInitData?: Hex;
|
|
122
|
+
}
|
|
123
|
+
export interface MultiSigConfig {
|
|
124
|
+
/** List of owner addresses */
|
|
125
|
+
owners: Hex[];
|
|
126
|
+
/** Number of signatures required (threshold) */
|
|
127
|
+
threshold: number;
|
|
128
|
+
}
|
|
129
|
+
export interface RecoveryConfig {
|
|
130
|
+
/** Guardian addresses for account recovery */
|
|
131
|
+
guardians: Hex[];
|
|
132
|
+
/** Recovery delay in seconds */
|
|
133
|
+
recoveryDelay?: number;
|
|
134
|
+
}
|
|
135
|
+
export interface PaymasterConfig {
|
|
136
|
+
/** Paymaster URL for sponsored transactions */
|
|
137
|
+
paymasterUrl: string;
|
|
138
|
+
/** Paymaster context (optional, provider-specific) */
|
|
139
|
+
context?: any;
|
|
140
|
+
}
|
|
141
|
+
export interface SmartAccountInfo {
|
|
142
|
+
/** Smart account address */
|
|
143
|
+
address: Hex;
|
|
144
|
+
/** Owner EOA address */
|
|
145
|
+
ownerAddress: Hex;
|
|
146
|
+
/** Chain information */
|
|
147
|
+
chain: Chain;
|
|
148
|
+
/** EntryPoint version */
|
|
149
|
+
entryPointVersion: EntryPointVersion;
|
|
150
|
+
/** Whether account is delegated (EIP-7702) */
|
|
151
|
+
isDelegated: boolean;
|
|
152
|
+
/** Current balance in wei */
|
|
153
|
+
balance: bigint;
|
|
154
|
+
}
|
|
155
|
+
export declare class SmartWalletError extends Error {
|
|
156
|
+
code: string;
|
|
157
|
+
constructor(message: string, code?: string);
|
|
158
|
+
}
|
|
159
|
+
export declare class SessionKeyError extends SmartWalletError {
|
|
160
|
+
constructor(message: string);
|
|
161
|
+
}
|
|
162
|
+
export declare class ModuleError extends SmartWalletError {
|
|
163
|
+
constructor(message: string);
|
|
164
|
+
}
|
|
165
|
+
export declare class TransactionError extends SmartWalletError {
|
|
166
|
+
constructor(message: string);
|
|
167
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Smart Wallet Types
|
|
4
|
+
*
|
|
5
|
+
* Type definitions for EVM smart wallet functionality using Account Abstraction (EIP-4337)
|
|
6
|
+
* and EIP-7702 delegation features.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TransactionError = exports.ModuleError = exports.SessionKeyError = exports.SmartWalletError = void 0;
|
|
10
|
+
// ============================================
|
|
11
|
+
// Error Types
|
|
12
|
+
// ============================================
|
|
13
|
+
class SmartWalletError extends Error {
|
|
14
|
+
code;
|
|
15
|
+
constructor(message, code = 'SMART_WALLET_ERROR') {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = 'SmartWalletError';
|
|
18
|
+
this.code = code;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.SmartWalletError = SmartWalletError;
|
|
22
|
+
class SessionKeyError extends SmartWalletError {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message, 'SESSION_KEY_ERROR');
|
|
25
|
+
this.name = 'SessionKeyError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.SessionKeyError = SessionKeyError;
|
|
29
|
+
class ModuleError extends SmartWalletError {
|
|
30
|
+
constructor(message) {
|
|
31
|
+
super(message, 'MODULE_ERROR');
|
|
32
|
+
this.name = 'ModuleError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ModuleError = ModuleError;
|
|
36
|
+
class TransactionError extends SmartWalletError {
|
|
37
|
+
constructor(message) {
|
|
38
|
+
super(message, 'TRANSACTION_ERROR');
|
|
39
|
+
this.name = 'TransactionError';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.TransactionError = TransactionError;
|
|
43
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../utils/evm/aa-service/lib/type.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAqMH,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C,MAAa,gBAAiB,SAAQ,KAAK;IACvC,IAAI,CAAS;IAEb,YAAY,OAAe,EAAE,OAAe,oBAAoB;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;CACJ;AARD,4CAQC;AAED,MAAa,eAAgB,SAAQ,gBAAgB;IACjD,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ;AALD,0CAKC;AAED,MAAa,WAAY,SAAQ,gBAAgB;IAC7C,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AALD,kCAKC;AAED,MAAa,gBAAiB,SAAQ,gBAAgB;IAClD,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ;AALD,4CAKC"}
|