@deserialize/multi-vm-wallet 1.2.441 → 1.3.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.
- package/.claude/settings.local.json +12 -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 +675 -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.js +7 -0
- 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 +2 -2
- package/tsconfig.json +4 -3
- package/utils/IChainWallet.ts +3 -3
- package/utils/evm/SMART_WALLET_EXAMPLES.ts.bak +591 -0
- 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 +797 -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 +7 -0
- package/utils/types.ts +24 -2
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Kernel Module Management
|
|
4
|
+
*
|
|
5
|
+
* Handles installation and management of ERC-7579 modules for Kernel v3 accounts:
|
|
6
|
+
* - Validators: Session keys, multi-sig, passkeys
|
|
7
|
+
* - Executors: Additional execution logic
|
|
8
|
+
* - Hooks: Pre/post execution hooks
|
|
9
|
+
* - Fallbacks: Handle unknown function calls
|
|
10
|
+
*
|
|
11
|
+
* ERC-7579 Module Types:
|
|
12
|
+
* 1 = Validator
|
|
13
|
+
* 2 = Executor
|
|
14
|
+
* 3 = Fallback
|
|
15
|
+
* 4 = Hook
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.MODULE_TYPE_IDS = void 0;
|
|
19
|
+
exports.prepareInstallModule = prepareInstallModule;
|
|
20
|
+
exports.installModule = installModule;
|
|
21
|
+
exports.prepareUninstallModule = prepareUninstallModule;
|
|
22
|
+
exports.uninstallModule = uninstallModule;
|
|
23
|
+
exports.isModuleInstalled = isModuleInstalled;
|
|
24
|
+
exports.prepareInstallSessionKey = prepareInstallSessionKey;
|
|
25
|
+
exports.createSessionKey = createSessionKey;
|
|
26
|
+
exports.prepareRevokeSessionKey = prepareRevokeSessionKey;
|
|
27
|
+
exports.revokeSessionKey = revokeSessionKey;
|
|
28
|
+
exports.prepareInstallMultiSigValidator = prepareInstallMultiSigValidator;
|
|
29
|
+
exports.installMultiSigValidator = installMultiSigValidator;
|
|
30
|
+
const viem_1 = require("viem");
|
|
31
|
+
exports.MODULE_TYPE_IDS = {
|
|
32
|
+
validator: 1,
|
|
33
|
+
executor: 2,
|
|
34
|
+
fallback: 3,
|
|
35
|
+
hook: 4
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Prepare installModule call (for batching)
|
|
39
|
+
*
|
|
40
|
+
* Returns a Call object that can be batched with other operations.
|
|
41
|
+
* Use this when you want to install multiple modules in one transaction.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // Batch install multiple modules
|
|
45
|
+
* const calls = [
|
|
46
|
+
* prepareInstallModule({ account, moduleType: 'validator', moduleAddress: '0x...' }),
|
|
47
|
+
* prepareInstallModule({ account, moduleType: 'hook', moduleAddress: '0x...' })
|
|
48
|
+
* ];
|
|
49
|
+
* await aaService.sendBatchTransaction({ account, calls });
|
|
50
|
+
*/
|
|
51
|
+
function prepareInstallModule(config) {
|
|
52
|
+
const { account, moduleType, moduleAddress, initData = '0x' } = config;
|
|
53
|
+
// Get the module type ID according to ERC-7579
|
|
54
|
+
const moduleTypeId = exports.MODULE_TYPE_IDS[moduleType];
|
|
55
|
+
// Encode the installModule call
|
|
56
|
+
// function installModule(uint256 moduleTypeId, address module, bytes calldata initData)
|
|
57
|
+
const calldata = (0, viem_1.encodePacked)(['bytes4', 'uint256', 'address', 'bytes'], [
|
|
58
|
+
'0x8f6e1e8e', // installModule selector
|
|
59
|
+
BigInt(moduleTypeId),
|
|
60
|
+
moduleAddress,
|
|
61
|
+
initData
|
|
62
|
+
]);
|
|
63
|
+
return {
|
|
64
|
+
to: account.address,
|
|
65
|
+
data: calldata
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Install a module on a Kernel account (execute immediately)
|
|
70
|
+
*
|
|
71
|
+
* This uses the ERC-7579 standard installModule function.
|
|
72
|
+
* For batching multiple modules, use prepareInstallModule instead.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* // Install a single module
|
|
76
|
+
* const userOpHash = await installModule({
|
|
77
|
+
* account,
|
|
78
|
+
* bundlerManager,
|
|
79
|
+
* moduleType: 'validator',
|
|
80
|
+
* moduleAddress: SESSION_KEY_VALIDATOR_ADDRESS,
|
|
81
|
+
* initData: encodedPermissions
|
|
82
|
+
* });
|
|
83
|
+
*/
|
|
84
|
+
async function installModule(config) {
|
|
85
|
+
const { account, bundlerManager, moduleType, moduleAddress, initData = '0x' } = config;
|
|
86
|
+
const bundlerClient = bundlerManager.getClient(account.chain);
|
|
87
|
+
console.log(`Installing ${moduleType} module at ${moduleAddress}...`);
|
|
88
|
+
// Use prepareInstallModule to get the call
|
|
89
|
+
const call = prepareInstallModule({
|
|
90
|
+
account,
|
|
91
|
+
moduleType,
|
|
92
|
+
moduleAddress,
|
|
93
|
+
initData
|
|
94
|
+
});
|
|
95
|
+
// Execute immediately
|
|
96
|
+
const userOpHash = await bundlerClient.sendUserOperation({
|
|
97
|
+
account: account.account,
|
|
98
|
+
calls: [call]
|
|
99
|
+
});
|
|
100
|
+
console.log(`✅ Module installation submitted: ${userOpHash}`);
|
|
101
|
+
return userOpHash;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Prepare uninstallModule call (for batching)
|
|
105
|
+
*
|
|
106
|
+
* Returns a Call object that can be batched with other operations.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* // Batch uninstall multiple modules
|
|
110
|
+
* const calls = [
|
|
111
|
+
* prepareUninstallModule({ account, moduleType: 'validator', moduleAddress: '0x...' }),
|
|
112
|
+
* prepareUninstallModule({ account, moduleType: 'hook', moduleAddress: '0x...' })
|
|
113
|
+
* ];
|
|
114
|
+
* await aaService.sendBatchTransaction({ account, calls });
|
|
115
|
+
*/
|
|
116
|
+
function prepareUninstallModule(config) {
|
|
117
|
+
const { account, moduleType, moduleAddress, deInitData = '0x' } = config;
|
|
118
|
+
const moduleTypeId = exports.MODULE_TYPE_IDS[moduleType];
|
|
119
|
+
// Encode the uninstallModule call
|
|
120
|
+
// function uninstallModule(uint256 moduleTypeId, address module, bytes calldata deInitData)
|
|
121
|
+
const calldata = (0, viem_1.encodePacked)(['bytes4', 'uint256', 'address', 'bytes'], [
|
|
122
|
+
'0xbf8a8dc4', // uninstallModule selector
|
|
123
|
+
BigInt(moduleTypeId),
|
|
124
|
+
moduleAddress,
|
|
125
|
+
deInitData
|
|
126
|
+
]);
|
|
127
|
+
return {
|
|
128
|
+
to: account.address,
|
|
129
|
+
data: calldata
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Uninstall a module from a Kernel account (execute immediately)
|
|
134
|
+
*
|
|
135
|
+
* For batching multiple uninstalls, use prepareUninstallModule instead.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* // Uninstall a single module
|
|
139
|
+
* const userOpHash = await uninstallModule({
|
|
140
|
+
* account,
|
|
141
|
+
* bundlerManager,
|
|
142
|
+
* moduleType: 'validator',
|
|
143
|
+
* moduleAddress: SESSION_KEY_VALIDATOR_ADDRESS
|
|
144
|
+
* });
|
|
145
|
+
*/
|
|
146
|
+
async function uninstallModule(config) {
|
|
147
|
+
const { account, bundlerManager, moduleType, moduleAddress, deInitData = '0x' } = config;
|
|
148
|
+
const bundlerClient = bundlerManager.getClient(account.chain);
|
|
149
|
+
console.log(`Uninstalling ${moduleType} module at ${moduleAddress}...`);
|
|
150
|
+
// Use prepareUninstallModule to get the call
|
|
151
|
+
const call = prepareUninstallModule({
|
|
152
|
+
account,
|
|
153
|
+
moduleType,
|
|
154
|
+
moduleAddress,
|
|
155
|
+
deInitData
|
|
156
|
+
});
|
|
157
|
+
// Execute immediately
|
|
158
|
+
const userOpHash = await bundlerClient.sendUserOperation({
|
|
159
|
+
account: account.account,
|
|
160
|
+
calls: [call]
|
|
161
|
+
});
|
|
162
|
+
console.log(`✅ Module uninstallation submitted: ${userOpHash}`);
|
|
163
|
+
return userOpHash;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if a module is installed on an account
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* const isInstalled = await isModuleInstalled({
|
|
170
|
+
* account,
|
|
171
|
+
* bundlerManager,
|
|
172
|
+
* moduleType: 'validator',
|
|
173
|
+
* moduleAddress: SESSION_KEY_VALIDATOR_ADDRESS
|
|
174
|
+
* });
|
|
175
|
+
*/
|
|
176
|
+
async function isModuleInstalled(config) {
|
|
177
|
+
const { account, bundlerManager, moduleType, moduleAddress } = config;
|
|
178
|
+
const publicClient = bundlerManager.getClient(account.chain);
|
|
179
|
+
const moduleTypeId = exports.MODULE_TYPE_IDS[moduleType];
|
|
180
|
+
try {
|
|
181
|
+
// Call isModuleInstalled(uint256 moduleTypeId, address module)
|
|
182
|
+
const result = await publicClient.readContract({
|
|
183
|
+
address: account.address,
|
|
184
|
+
abi: (0, viem_1.parseAbi)([
|
|
185
|
+
'function isModuleInstalled(uint256 moduleTypeId, address module, bytes calldata additionalContext) view returns (bool)'
|
|
186
|
+
]),
|
|
187
|
+
functionName: 'isModuleInstalled',
|
|
188
|
+
args: [BigInt(moduleTypeId), moduleAddress, '0x']
|
|
189
|
+
});
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error('Error checking module installation:', error);
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// ============================================
|
|
198
|
+
// Session Key Helpers
|
|
199
|
+
// ============================================
|
|
200
|
+
/**
|
|
201
|
+
* Prepare session key installation call (for batching)
|
|
202
|
+
*
|
|
203
|
+
* Returns a Call object that can be batched with other operations.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* // Batch install session key with other modules
|
|
207
|
+
* const calls = [
|
|
208
|
+
* prepareInstallSessionKey({ account, sessionKeyAddress, permissions }),
|
|
209
|
+
* prepareInstallModule({ account, moduleType: 'hook', moduleAddress: '0x...' })
|
|
210
|
+
* ];
|
|
211
|
+
* await aaService.sendBatchTransaction({ account, calls });
|
|
212
|
+
*/
|
|
213
|
+
function prepareInstallSessionKey(config) {
|
|
214
|
+
const { account, sessionKeyAddress, permissions } = config;
|
|
215
|
+
// Encode session key permissions
|
|
216
|
+
const initData = encodeSessionKeyPermissions(sessionKeyAddress, permissions);
|
|
217
|
+
// Get session key validator address for your chain
|
|
218
|
+
const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
|
|
219
|
+
// Return the install module call
|
|
220
|
+
return prepareInstallModule({
|
|
221
|
+
account,
|
|
222
|
+
moduleType: 'validator',
|
|
223
|
+
moduleAddress: SESSION_KEY_VALIDATOR,
|
|
224
|
+
initData
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Create and install a session key validator (execute immediately)
|
|
229
|
+
*
|
|
230
|
+
* Session keys allow delegated access with specific permissions.
|
|
231
|
+
* Perfect for automated operations like recurring payments.
|
|
232
|
+
*
|
|
233
|
+
* For batching with other operations, use prepareInstallSessionKey instead.
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* // Install session key for monthly savings automation
|
|
237
|
+
* const sessionKey = privateKeyToAccount('0x...');
|
|
238
|
+
*
|
|
239
|
+
* await createSessionKey({
|
|
240
|
+
* account,
|
|
241
|
+
* bundlerManager,
|
|
242
|
+
* sessionKeyAddress: sessionKey.address,
|
|
243
|
+
* permissions: [{
|
|
244
|
+
* target: USDC_ADDRESS,
|
|
245
|
+
* functionSelector: '0xa9059cbb', // transfer(address,uint256)
|
|
246
|
+
* maxValuePerUse: parseUnits('100', 6), // Max 100 USDC per tx
|
|
247
|
+
* validUntil: Date.now() + 30 * 24 * 60 * 60 * 1000, // 30 days
|
|
248
|
+
* maxUses: 1 // Once per month
|
|
249
|
+
* }]
|
|
250
|
+
* });
|
|
251
|
+
*/
|
|
252
|
+
async function createSessionKey(config) {
|
|
253
|
+
const { account, bundlerManager, sessionKeyAddress, permissions } = config;
|
|
254
|
+
// Encode session key permissions
|
|
255
|
+
const initData = encodeSessionKeyPermissions(sessionKeyAddress, permissions);
|
|
256
|
+
// Get session key validator address for your chain
|
|
257
|
+
const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
|
|
258
|
+
// Install the session key validator with permissions
|
|
259
|
+
return installModule({
|
|
260
|
+
account,
|
|
261
|
+
bundlerManager,
|
|
262
|
+
moduleType: 'validator',
|
|
263
|
+
moduleAddress: SESSION_KEY_VALIDATOR,
|
|
264
|
+
initData
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Prepare session key revocation call (for batching)
|
|
269
|
+
*
|
|
270
|
+
* Returns a Call object that can be batched with other operations.
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* // Batch revoke multiple session keys
|
|
274
|
+
* const calls = [
|
|
275
|
+
* prepareRevokeSessionKey({ account, sessionKeyAddress: key1 }),
|
|
276
|
+
* prepareRevokeSessionKey({ account, sessionKeyAddress: key2 })
|
|
277
|
+
* ];
|
|
278
|
+
* await aaService.sendBatchTransaction({ account, calls });
|
|
279
|
+
*/
|
|
280
|
+
function prepareRevokeSessionKey(config) {
|
|
281
|
+
const { account, sessionKeyAddress } = config;
|
|
282
|
+
const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
|
|
283
|
+
const deInitData = (0, viem_1.encodePacked)(['address'], [sessionKeyAddress]);
|
|
284
|
+
return prepareUninstallModule({
|
|
285
|
+
account,
|
|
286
|
+
moduleType: 'validator',
|
|
287
|
+
moduleAddress: SESSION_KEY_VALIDATOR,
|
|
288
|
+
deInitData
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Revoke a session key (execute immediately)
|
|
293
|
+
*
|
|
294
|
+
* For batching with other operations, use prepareRevokeSessionKey instead.
|
|
295
|
+
*/
|
|
296
|
+
async function revokeSessionKey(account, bundlerManager, sessionKeyAddress) {
|
|
297
|
+
const SESSION_KEY_VALIDATOR = getSessionKeyValidatorAddress(account.chain.id);
|
|
298
|
+
const deInitData = (0, viem_1.encodePacked)(['address'], [sessionKeyAddress]);
|
|
299
|
+
return uninstallModule({
|
|
300
|
+
account,
|
|
301
|
+
bundlerManager,
|
|
302
|
+
moduleType: 'validator',
|
|
303
|
+
moduleAddress: SESSION_KEY_VALIDATOR,
|
|
304
|
+
deInitData
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
// ============================================
|
|
308
|
+
// Helper Functions
|
|
309
|
+
// ============================================
|
|
310
|
+
function encodeSessionKeyPermissions(sessionKeyAddress, permissions) {
|
|
311
|
+
// This encoding depends on your session key validator implementation
|
|
312
|
+
// Example encoding for a simple permission structure:
|
|
313
|
+
const encodedPermissions = permissions.map(p => {
|
|
314
|
+
return (0, viem_1.encodePacked)(['address', 'uint256', 'bytes4', 'uint256', 'uint48', 'uint48', 'uint48'], [
|
|
315
|
+
p.target,
|
|
316
|
+
p.maxValuePerUse ?? 0n,
|
|
317
|
+
p.functionSelector ?? '0x00000000',
|
|
318
|
+
p.maxGasPerUse ?? 0n,
|
|
319
|
+
BigInt(p.validAfter ?? 0),
|
|
320
|
+
BigInt(p.validUntil ?? 0),
|
|
321
|
+
BigInt(p.maxUses ?? 0)
|
|
322
|
+
]);
|
|
323
|
+
});
|
|
324
|
+
// Combine session key address with permissions
|
|
325
|
+
return (0, viem_1.encodePacked)(['address', 'uint256', 'bytes[]'], [
|
|
326
|
+
sessionKeyAddress,
|
|
327
|
+
BigInt(permissions.length),
|
|
328
|
+
encodedPermissions
|
|
329
|
+
]);
|
|
330
|
+
}
|
|
331
|
+
function getSessionKeyValidatorAddress(chainId) {
|
|
332
|
+
// Known session key validator addresses per chain
|
|
333
|
+
// These would be pre-deployed or use a universal address
|
|
334
|
+
const addresses = {
|
|
335
|
+
1: '0x0000000000000000000000000000000000000000', // Mainnet
|
|
336
|
+
11155111: '0x0000000000000000000000000000000000000000', // Sepolia
|
|
337
|
+
// Add more chains as needed
|
|
338
|
+
};
|
|
339
|
+
const address = addresses[chainId];
|
|
340
|
+
if (!address) {
|
|
341
|
+
throw new Error(`Session key validator not available for chain ${chainId}`);
|
|
342
|
+
}
|
|
343
|
+
return address;
|
|
344
|
+
}
|
|
345
|
+
// ============================================
|
|
346
|
+
// Multi-Signature Module Helpers
|
|
347
|
+
// ============================================
|
|
348
|
+
/**
|
|
349
|
+
* Prepare multi-sig validator installation call (for batching)
|
|
350
|
+
*
|
|
351
|
+
* Returns a Call object that can be batched with other operations.
|
|
352
|
+
*
|
|
353
|
+
* @example
|
|
354
|
+
* // Batch install multi-sig with session key
|
|
355
|
+
* const calls = [
|
|
356
|
+
* prepareInstallMultiSigValidator({ account, owners, threshold: 2 }),
|
|
357
|
+
* prepareInstallSessionKey({ account, sessionKeyAddress, permissions })
|
|
358
|
+
* ];
|
|
359
|
+
* await aaService.sendBatchTransaction({ account, calls });
|
|
360
|
+
*/
|
|
361
|
+
function prepareInstallMultiSigValidator(config) {
|
|
362
|
+
const { account, owners, threshold } = config;
|
|
363
|
+
const initData = (0, viem_1.encodePacked)(['address[]', 'uint256'], [owners, BigInt(threshold)]);
|
|
364
|
+
const MULTISIG_VALIDATOR = getMultiSigValidatorAddress(account.chain.id);
|
|
365
|
+
return prepareInstallModule({
|
|
366
|
+
account,
|
|
367
|
+
moduleType: 'validator',
|
|
368
|
+
moduleAddress: MULTISIG_VALIDATOR,
|
|
369
|
+
initData
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Install a multi-signature validator (execute immediately)
|
|
374
|
+
*
|
|
375
|
+
* For batching with other operations, use prepareInstallMultiSigValidator instead.
|
|
376
|
+
*
|
|
377
|
+
* @example
|
|
378
|
+
* await installMultiSigValidator({
|
|
379
|
+
* account,
|
|
380
|
+
* bundlerManager,
|
|
381
|
+
* owners: [owner1, owner2, owner3],
|
|
382
|
+
* threshold: 2 // 2 of 3 signatures required
|
|
383
|
+
* });
|
|
384
|
+
*/
|
|
385
|
+
async function installMultiSigValidator(config) {
|
|
386
|
+
const { account, bundlerManager, owners, threshold } = config;
|
|
387
|
+
const initData = (0, viem_1.encodePacked)(['address[]', 'uint256'], [owners, BigInt(threshold)]);
|
|
388
|
+
const MULTISIG_VALIDATOR = getMultiSigValidatorAddress(account.chain.id);
|
|
389
|
+
return installModule({
|
|
390
|
+
account,
|
|
391
|
+
bundlerManager,
|
|
392
|
+
moduleType: 'validator',
|
|
393
|
+
moduleAddress: MULTISIG_VALIDATOR,
|
|
394
|
+
initData
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
function getMultiSigValidatorAddress(chainId) {
|
|
398
|
+
// Known multi-sig validator addresses per chain
|
|
399
|
+
const addresses = {
|
|
400
|
+
1: '0x0000000000000000000000000000000000000000',
|
|
401
|
+
11155111: '0x0000000000000000000000000000000000000000',
|
|
402
|
+
};
|
|
403
|
+
const address = addresses[chainId];
|
|
404
|
+
if (!address) {
|
|
405
|
+
throw new Error(`Multi-sig validator not available for chain ${chainId}`);
|
|
406
|
+
}
|
|
407
|
+
return address;
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=kernel-modules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel-modules.js","sourceRoot":"","sources":["../../../../utils/evm/aa-service/lib/kernel-modules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIP-7702 Session Keys Utilities
|
|
3
|
+
*
|
|
4
|
+
* Utilities for creating and managing session keys with ZeroDev's permission system.
|
|
5
|
+
* This uses the NEW EIP-7702 pattern, not the legacy smart account pattern.
|
|
6
|
+
*
|
|
7
|
+
* Key differences from legacy pattern:
|
|
8
|
+
* - Uses `eip7702Account` instead of `address`
|
|
9
|
+
* - Uses `addressToEmptyAccount` for permission validator creation
|
|
10
|
+
* - Passes `sessionKeySigner` to `deserializePermissionAccount`
|
|
11
|
+
* - No sudo validator needed, only permission plugin
|
|
12
|
+
*/
|
|
13
|
+
import { Hex, Address } from 'viem';
|
|
14
|
+
import { Chain } from 'viem/chains';
|
|
15
|
+
import { PrivateKeyAccount } from 'viem/accounts';
|
|
16
|
+
import { ModularSigner } from '@zerodev/permissions';
|
|
17
|
+
export interface SessionKeyPermissionRule {
|
|
18
|
+
target: Hex;
|
|
19
|
+
abi: any[];
|
|
20
|
+
functionName: string;
|
|
21
|
+
args?: any[];
|
|
22
|
+
}
|
|
23
|
+
export interface CreateSessionKeyApprovalOptions {
|
|
24
|
+
sessionKeyAddress: Address;
|
|
25
|
+
owner: PrivateKeyAccount;
|
|
26
|
+
chain: Chain;
|
|
27
|
+
entryPointVersion?: '0.6' | '0.7';
|
|
28
|
+
useSudoPolicy?: boolean;
|
|
29
|
+
permissions?: SessionKeyPermissionRule[];
|
|
30
|
+
}
|
|
31
|
+
export interface SessionKeyInfo {
|
|
32
|
+
privateKey: Hex;
|
|
33
|
+
address: Address;
|
|
34
|
+
signer: ModularSigner;
|
|
35
|
+
}
|
|
36
|
+
export interface DeserializedSessionKey {
|
|
37
|
+
account: any;
|
|
38
|
+
client: any;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Generate a new session key
|
|
42
|
+
*
|
|
43
|
+
* Creates a new keypair for use as a session key.
|
|
44
|
+
* The private key should be stored securely and shared with the agent.
|
|
45
|
+
* The address should be shared with the owner for approval.
|
|
46
|
+
*
|
|
47
|
+
* @returns Session key info including private key, address, and signer
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* const sessionKey = await generateSessionKey();
|
|
51
|
+
* console.log("Share this address with owner:", sessionKey.address);
|
|
52
|
+
* console.log("Keep this private key secure:", sessionKey.privateKey);
|
|
53
|
+
*/
|
|
54
|
+
export declare function generateSessionKey(): Promise<SessionKeyInfo>;
|
|
55
|
+
/**
|
|
56
|
+
* Recreate session key from private key
|
|
57
|
+
*
|
|
58
|
+
* Recreates a session key signer from a stored private key.
|
|
59
|
+
*
|
|
60
|
+
* @param privateKey - The session key private key
|
|
61
|
+
* @returns Session key info
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* const sessionKey = await recreateSessionKey(storedPrivateKey);
|
|
65
|
+
*/
|
|
66
|
+
export declare function recreateSessionKey(privateKey: Hex): Promise<SessionKeyInfo>;
|
|
67
|
+
/**
|
|
68
|
+
* Create session key approval (Owner side)
|
|
69
|
+
*
|
|
70
|
+
* The owner calls this to create an approval for a session key address.
|
|
71
|
+
* This uses the NEW EIP-7702 pattern with addressToEmptyAccount.
|
|
72
|
+
*
|
|
73
|
+
* @param options - Configuration options
|
|
74
|
+
* @returns Serialized approval string to share with the agent
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* // Owner approves session key
|
|
78
|
+
* const approval = await createSessionKeyApproval({
|
|
79
|
+
* sessionKeyAddress: '0x...', // Agent's session key address
|
|
80
|
+
* owner: ownerAccount,
|
|
81
|
+
* chain: sepolia,
|
|
82
|
+
* permissions: [{
|
|
83
|
+
* target: USDC_ADDRESS,
|
|
84
|
+
* abi: parseAbi(['function transfer(address to, uint256 amount)']),
|
|
85
|
+
* functionName: 'transfer',
|
|
86
|
+
* args: [null, { condition: 3, value: parseUnits('10', 6) }]
|
|
87
|
+
* }]
|
|
88
|
+
* });
|
|
89
|
+
* // Share approval with agent
|
|
90
|
+
*/
|
|
91
|
+
export declare function createSessionKeyApproval(options: CreateSessionKeyApprovalOptions): Promise<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Deserialize session key account (Agent side)
|
|
94
|
+
*
|
|
95
|
+
* The agent calls this to reconstruct the session key account from the approval.
|
|
96
|
+
* This requires BOTH the approval AND the session key signer.
|
|
97
|
+
*
|
|
98
|
+
* @param approval - Approval string from owner
|
|
99
|
+
* @param sessionKeySigner - Session key signer (created from private key)
|
|
100
|
+
* @param chain - Chain to use
|
|
101
|
+
* @param entryPointVersion - EntryPoint version
|
|
102
|
+
* @returns Deserialized session key account
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* // Agent deserializes with private key
|
|
106
|
+
* const sessionKey = await recreateSessionKey(storedPrivateKey);
|
|
107
|
+
* const account = await deserializeSessionKey({
|
|
108
|
+
* approval,
|
|
109
|
+
* sessionKeySigner: sessionKey.signer,
|
|
110
|
+
* chain: sepolia
|
|
111
|
+
* });
|
|
112
|
+
*/
|
|
113
|
+
export declare function deserializeSessionKey(options: {
|
|
114
|
+
approval: string;
|
|
115
|
+
sessionKeySigner: ModularSigner;
|
|
116
|
+
chain: Chain;
|
|
117
|
+
entryPointVersion?: '0.6' | '0.7';
|
|
118
|
+
}): Promise<any>;
|
|
119
|
+
/**
|
|
120
|
+
* Create kernel client for session key
|
|
121
|
+
*
|
|
122
|
+
* Creates a client for sending transactions with the session key.
|
|
123
|
+
*
|
|
124
|
+
* @param account - Deserialized session key account
|
|
125
|
+
* @param chain - Chain to use
|
|
126
|
+
* @param bundlerUrl - Bundler RPC URL
|
|
127
|
+
* @param paymasterUrl - Optional paymaster URL for gas sponsorship
|
|
128
|
+
* @returns Kernel account client
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* const client = createSessionKeyClient({
|
|
132
|
+
* account: sessionKeyAccount,
|
|
133
|
+
* chain: sepolia,
|
|
134
|
+
* bundlerUrl: 'https://api.pimlico.io/...'
|
|
135
|
+
* });
|
|
136
|
+
*/
|
|
137
|
+
export declare function createSessionKeyClient(options: {
|
|
138
|
+
account: any;
|
|
139
|
+
chain: Chain;
|
|
140
|
+
bundlerUrl: string;
|
|
141
|
+
paymasterUrl?: string;
|
|
142
|
+
}): any;
|
|
143
|
+
/**
|
|
144
|
+
* Create USDC transfer permission rule
|
|
145
|
+
*
|
|
146
|
+
* Helper to create a permission rule for USDC transfers with a maximum amount.
|
|
147
|
+
*
|
|
148
|
+
* @param usdcAddress - USDC contract address
|
|
149
|
+
* @param maxAmount - Maximum USDC amount (in USDC units, e.g., "10" for 10 USDC)
|
|
150
|
+
* @returns Permission rule
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* const rule = createUSDCTransferPermission(
|
|
154
|
+
* '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
|
|
155
|
+
* '10' // Max 10 USDC
|
|
156
|
+
* );
|
|
157
|
+
*/
|
|
158
|
+
export declare function createUSDCTransferPermission(usdcAddress: Hex, maxAmount: string): SessionKeyPermissionRule;
|
|
159
|
+
/**
|
|
160
|
+
* Create ETH transfer permission rule
|
|
161
|
+
*
|
|
162
|
+
* Helper to create a permission rule for ETH transfers with a maximum value.
|
|
163
|
+
*
|
|
164
|
+
* @param maxValue - Maximum ETH value (in ether units, e.g., "0.1" for 0.1 ETH)
|
|
165
|
+
* @returns Permission rule
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* const rule = createETHTransferPermission('0.1'); // Max 0.1 ETH
|
|
169
|
+
*/
|
|
170
|
+
export declare function createETHTransferPermission(maxValue: string): SessionKeyPermissionRule;
|