@safe-global/relay-kit 2.1.0-alpha.0 → 2.1.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.
Files changed (26) hide show
  1. package/dist/src/packs/safe-4337/Safe4337Pack.d.ts +3 -10
  2. package/dist/src/packs/safe-4337/Safe4337Pack.js +21 -23
  3. package/dist/src/packs/safe-4337/Safe4337Pack.js.map +1 -1
  4. package/dist/src/packs/safe-4337/Safe4337Pack.test.d.ts +1 -0
  5. package/dist/src/packs/safe-4337/Safe4337Pack.test.js +542 -0
  6. package/dist/src/packs/safe-4337/Safe4337Pack.test.js.map +1 -0
  7. package/dist/src/packs/safe-4337/SafeOperation.test.d.ts +1 -0
  8. package/dist/src/packs/safe-4337/SafeOperation.test.js +124 -0
  9. package/dist/src/packs/safe-4337/SafeOperation.test.js.map +1 -0
  10. package/dist/src/packs/safe-4337/constants.d.ts +2 -0
  11. package/dist/src/packs/safe-4337/constants.js +3 -1
  12. package/dist/src/packs/safe-4337/constants.js.map +1 -1
  13. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.js +2 -7
  14. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.js.map +1 -1
  15. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.test.d.ts +1 -0
  16. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.test.js +75 -0
  17. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.test.js.map +1 -0
  18. package/dist/src/packs/safe-4337/testing-utils/fixtures.d.ts +100 -0
  19. package/dist/src/packs/safe-4337/testing-utils/fixtures.js +90 -0
  20. package/dist/src/packs/safe-4337/testing-utils/fixtures.js.map +1 -0
  21. package/dist/src/packs/safe-4337/testing-utils/helpers.d.ts +4 -0
  22. package/dist/src/packs/safe-4337/testing-utils/helpers.js +56 -0
  23. package/dist/src/packs/safe-4337/testing-utils/helpers.js.map +1 -0
  24. package/dist/src/packs/safe-4337/types.d.ts +3 -3
  25. package/dist/tsconfig.build.tsbuildinfo +1 -1
  26. package/package.json +3 -3
@@ -0,0 +1,542 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const ethers_1 = require("ethers");
30
+ const protocol_kit_1 = __importStar(require("@safe-global/protocol-kit")), protocolKit = protocol_kit_1;
31
+ const safe_modules_deployments_1 = require("@safe-global/safe-modules-deployments");
32
+ const safe_core_sdk_types_1 = require("@safe-global/safe-core-sdk-types");
33
+ const Safe4337Pack_1 = require("./Safe4337Pack");
34
+ const SafeOperation_1 = __importDefault(require("./SafeOperation"));
35
+ const constants = __importStar(require("./constants"));
36
+ const fixtures = __importStar(require("./testing-utils/fixtures"));
37
+ const helpers_1 = require("./testing-utils/helpers");
38
+ const dotenv_1 = __importDefault(require("dotenv"));
39
+ const utils = __importStar(require("./utils"));
40
+ dotenv_1.default.config();
41
+ const sendMock = jest.fn(async (method) => {
42
+ switch (method) {
43
+ case constants.RPC_4337_CALLS.SUPPORTED_ENTRY_POINTS:
44
+ return fixtures.ENTRYPOINTS;
45
+ case constants.RPC_4337_CALLS.CHAIN_ID:
46
+ return fixtures.CHAIN_ID;
47
+ case constants.RPC_4337_CALLS.SEND_USER_OPERATION:
48
+ return fixtures.USER_OPERATION_HASH;
49
+ case constants.RPC_4337_CALLS.ESTIMATE_USER_OPERATION_GAS:
50
+ return fixtures.GAS_ESTIMATION;
51
+ case constants.RPC_4337_CALLS.GET_USER_OPERATION_BY_HASH:
52
+ return fixtures.USER_OPERATION_BY_HASH;
53
+ case constants.RPC_4337_CALLS.GET_USER_OPERATION_RECEIPT:
54
+ return fixtures.USER_OPERATION_RECEIPT;
55
+ case 'pimlico_getUserOperationGasPrice':
56
+ return fixtures.USER_OPERATION_GAS_PRICE;
57
+ default:
58
+ return undefined;
59
+ }
60
+ });
61
+ jest.mock('./utils', () => ({
62
+ ...jest.requireActual('./utils'),
63
+ getEip4337BundlerProvider: () => ({
64
+ send: sendMock
65
+ })
66
+ }));
67
+ let safe4337ModuleAddress;
68
+ let addModulesLibAddress;
69
+ describe('Safe4337Pack', () => {
70
+ beforeAll(async () => {
71
+ const network = parseInt(fixtures.CHAIN_ID).toString();
72
+ safe4337ModuleAddress = (0, safe_modules_deployments_1.getSafe4337ModuleDeployment)({
73
+ released: true,
74
+ version: '0.2.0',
75
+ network
76
+ })?.networkAddresses[network];
77
+ addModulesLibAddress = (0, safe_modules_deployments_1.getAddModulesLibDeployment)({
78
+ released: true,
79
+ version: '0.2.0',
80
+ network
81
+ })?.networkAddresses[network];
82
+ });
83
+ afterEach(() => {
84
+ jest.clearAllMocks();
85
+ });
86
+ describe('4337 Safe validation', () => {
87
+ it('should throw an error if the Safe version is not greater than 1.4.1', async () => {
88
+ await expect((0, helpers_1.createSafe4337Pack)({ options: { safeAddress: fixtures.SAFE_ADDRESS_v1_3_0 } })).rejects.toThrow('Incompatibility detected: The current Safe Account version (1.3.0) is not supported. EIP-4337 requires the Safe to use at least v1.4.1.');
89
+ });
90
+ it('should throw an error if the 4337 Module is not enabled in the Safe account', async () => {
91
+ await expect((0, helpers_1.createSafe4337Pack)({
92
+ options: { safeAddress: fixtures.SAFE_ADDRESS_4337_MODULE_NOT_ENABLED }
93
+ })).rejects.toThrow('Incompatibility detected: The EIP-4337 module is not enabled in the provided Safe Account. Enable this module (address: 0xa581c4A4DB7175302464fF3C06380BC3270b4037) to add compatibility.');
94
+ });
95
+ it('should throw an error if the 4337 fallbackhandler is not attached to the Safe account', async () => {
96
+ await expect((0, helpers_1.createSafe4337Pack)({
97
+ options: { safeAddress: fixtures.SAFE_ADDRESS_4337_FALLBACKHANDLER_NOT_ENABLED }
98
+ })).rejects.toThrow('Incompatibility detected: The EIP-4337 fallbackhandler is not attached to the Safe Account. Attach this fallbackhandler (address: 0xa581c4A4DB7175302464fF3C06380BC3270b4037) to ensure compatibility.');
99
+ });
100
+ });
101
+ describe('When using existing Safe Accounts with version 1.4.1 or greater', () => {
102
+ it('should be able to instantiate the pack using a existing Safe', async () => {
103
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
104
+ options: { safeAddress: fixtures.SAFE_ADDRESS_v1_4_1 }
105
+ });
106
+ expect(safe4337Pack).toBeInstanceOf(Safe4337Pack_1.Safe4337Pack);
107
+ expect(safe4337Pack.protocolKit).toBeInstanceOf(protocol_kit_1.default);
108
+ expect(await safe4337Pack.protocolKit.getAddress()).toBe(fixtures.SAFE_ADDRESS_v1_4_1);
109
+ expect(await safe4337Pack.getChainId()).toBe(fixtures.CHAIN_ID);
110
+ });
111
+ it('should have the 4337 module enabled', async () => {
112
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
113
+ options: { safeAddress: fixtures.SAFE_ADDRESS_v1_4_1 }
114
+ });
115
+ expect(await safe4337Pack.protocolKit.getModules()).toEqual([safe4337ModuleAddress]);
116
+ });
117
+ it('should detect if a custom 4337 module is not enabled in the Safe', async () => {
118
+ await expect((0, helpers_1.createSafe4337Pack)({
119
+ customContracts: {
120
+ safe4337ModuleAddress: '0xCustomModule'
121
+ },
122
+ options: {
123
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
124
+ }
125
+ })).rejects.toThrow('Incompatibility detected: The EIP-4337 module is not enabled in the provided Safe Account. Enable this module (address: 0xCustomModule) to add compatibility.');
126
+ });
127
+ it('should use the 4337 module as the fallback handler', async () => {
128
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
129
+ options: {
130
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
131
+ }
132
+ });
133
+ expect(await safe4337Pack.protocolKit.getFallbackHandler()).toEqual(safe4337ModuleAddress);
134
+ });
135
+ });
136
+ describe('When the Safe Account does not exists', () => {
137
+ it('should be able to instantiate the pack using a predicted Safe', async () => {
138
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
139
+ options: {
140
+ owners: [fixtures.OWNER_1],
141
+ threshold: 1
142
+ }
143
+ });
144
+ expect(await safe4337Pack.protocolKit.getAddress()).toBe(fixtures.PREDICTED_SAFE_ADDRESS);
145
+ });
146
+ it('should throw an error if the owners or threshold are not specified', async () => {
147
+ await expect((0, helpers_1.createSafe4337Pack)({
148
+ // @ts-expect-error - An error will be thrown
149
+ options: {
150
+ threshold: 1
151
+ }
152
+ })).rejects.toThrow('Owners and threshold are required to deploy a new Safe');
153
+ await expect((0, helpers_1.createSafe4337Pack)({
154
+ // @ts-expect-error - An error will be thrown
155
+ options: {
156
+ owners: [fixtures.OWNER_1]
157
+ }
158
+ })).rejects.toThrow('Owners and threshold are required to deploy a new Safe');
159
+ });
160
+ it('should encode the enableModules transaction as deployment data', async () => {
161
+ const encodeFunctionDataSpy = jest.spyOn(constants.INTERFACES, 'encodeFunctionData');
162
+ const safeCreateSpy = jest.spyOn(protocol_kit_1.default, 'create');
163
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
164
+ options: {
165
+ owners: [fixtures.OWNER_1],
166
+ threshold: 1
167
+ }
168
+ });
169
+ expect(encodeFunctionDataSpy).toHaveBeenCalledWith('enableModules', [[safe4337ModuleAddress]]);
170
+ expect(safeCreateSpy).toHaveBeenCalledWith({
171
+ ethAdapter: safe4337Pack.protocolKit.getEthAdapter(),
172
+ predictedSafe: {
173
+ safeDeploymentConfig: {
174
+ safeVersion: constants.DEFAULT_SAFE_VERSION,
175
+ saltNonce: undefined
176
+ },
177
+ safeAccountConfig: {
178
+ owners: [fixtures.OWNER_1],
179
+ threshold: 1,
180
+ to: addModulesLibAddress,
181
+ data: constants.INTERFACES.encodeFunctionData('enableModules', [
182
+ [safe4337ModuleAddress]
183
+ ]),
184
+ fallbackHandler: safe4337ModuleAddress,
185
+ paymentToken: ethers_1.ethers.ZeroAddress,
186
+ payment: 0,
187
+ paymentReceiver: ethers_1.ethers.ZeroAddress
188
+ }
189
+ }
190
+ });
191
+ });
192
+ it('should encode the enablesModule transaction together with a specific token approval in a multiSend call when trying to use a paymaster', async () => {
193
+ const encodeFunctionDataSpy = jest.spyOn(constants.INTERFACES, 'encodeFunctionData');
194
+ const safeCreateSpy = jest.spyOn(protocol_kit_1.default, 'create');
195
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
196
+ options: {
197
+ owners: [fixtures.OWNER_1],
198
+ threshold: 1
199
+ },
200
+ paymasterOptions: {
201
+ paymasterAddress: fixtures.PAYMASTER_ADDRESS,
202
+ paymasterTokenAddress: fixtures.PAYMASTER_TOKEN_ADDRESS
203
+ }
204
+ });
205
+ const enableModulesData = constants.INTERFACES.encodeFunctionData('enableModules', [
206
+ [safe4337ModuleAddress]
207
+ ]);
208
+ const approveData = constants.INTERFACES.encodeFunctionData('approve', [
209
+ fixtures.PAYMASTER_ADDRESS,
210
+ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn
211
+ ]);
212
+ const enable4337ModuleTransaction = {
213
+ to: addModulesLibAddress,
214
+ value: '0',
215
+ data: enableModulesData,
216
+ operation: safe_core_sdk_types_1.OperationType.DelegateCall
217
+ };
218
+ const approveToPaymasterTransaction = {
219
+ to: fixtures.PAYMASTER_TOKEN_ADDRESS,
220
+ value: '0',
221
+ data: approveData,
222
+ operation: safe_core_sdk_types_1.OperationType.Call
223
+ };
224
+ const multiSendData = protocolKit.encodeMultiSendData([
225
+ enable4337ModuleTransaction,
226
+ approveToPaymasterTransaction
227
+ ]);
228
+ expect(encodeFunctionDataSpy).toHaveBeenNthCalledWith(4, 'multiSend', [multiSendData]);
229
+ expect(safeCreateSpy).toHaveBeenCalledWith({
230
+ ethAdapter: safe4337Pack.protocolKit.getEthAdapter(),
231
+ predictedSafe: {
232
+ safeDeploymentConfig: {
233
+ safeVersion: constants.DEFAULT_SAFE_VERSION,
234
+ saltNonce: undefined
235
+ },
236
+ safeAccountConfig: {
237
+ owners: [fixtures.OWNER_1],
238
+ threshold: 1,
239
+ to: await safe4337Pack.protocolKit.getMultiSendAddress(),
240
+ data: constants.INTERFACES.encodeFunctionData('multiSend', [multiSendData]),
241
+ fallbackHandler: safe4337ModuleAddress,
242
+ paymentToken: ethers_1.ethers.ZeroAddress,
243
+ payment: 0,
244
+ paymentReceiver: ethers_1.ethers.ZeroAddress
245
+ }
246
+ }
247
+ });
248
+ });
249
+ });
250
+ describe('When creating a new SafeOperation', () => {
251
+ let safe4337Pack;
252
+ let transferUSDC;
253
+ beforeAll(async () => {
254
+ safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
255
+ options: {
256
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
257
+ }
258
+ });
259
+ transferUSDC = {
260
+ to: fixtures.PAYMASTER_TOKEN_ADDRESS,
261
+ data: (0, helpers_1.generateTransferCallData)(fixtures.SAFE_ADDRESS_v1_4_1, 100000n),
262
+ value: '0',
263
+ operation: 0
264
+ };
265
+ });
266
+ it('should allow to use a transaction batch', async () => {
267
+ const transactions = [transferUSDC, transferUSDC];
268
+ const safeOperation = await safe4337Pack.createTransaction({
269
+ transactions
270
+ });
271
+ expect(safeOperation).toBeInstanceOf(SafeOperation_1.default);
272
+ expect(safeOperation.data).toMatchObject({
273
+ safe: fixtures.SAFE_ADDRESS_v1_4_1,
274
+ entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
275
+ initCode: '0x',
276
+ paymasterAndData: '0x',
277
+ callData: constants.INTERFACES.encodeFunctionData('executeUserOp', [
278
+ await safe4337Pack.protocolKit.getMultiSendAddress(),
279
+ '0',
280
+ constants.INTERFACES.encodeFunctionData('multiSend', [
281
+ protocolKit.encodeMultiSendData(transactions)
282
+ ]),
283
+ safe_core_sdk_types_1.OperationType.DelegateCall
284
+ ]),
285
+ nonce: 1n,
286
+ callGasLimit: 150000n,
287
+ validAfter: 0,
288
+ validUntil: 0,
289
+ maxFeePerGas: 100000n,
290
+ maxPriorityFeePerGas: 200000n,
291
+ verificationGasLimit: 150000n,
292
+ preVerificationGas: 100000n
293
+ });
294
+ });
295
+ it('should allow to use a single transaction', async () => {
296
+ const safeOperation = await safe4337Pack.createTransaction({
297
+ transactions: [transferUSDC]
298
+ });
299
+ expect(safeOperation).toBeInstanceOf(SafeOperation_1.default);
300
+ expect(safeOperation.data).toMatchObject({
301
+ safe: fixtures.SAFE_ADDRESS_v1_4_1,
302
+ entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
303
+ initCode: '0x',
304
+ paymasterAndData: '0x',
305
+ callData: constants.INTERFACES.encodeFunctionData('executeUserOp', [
306
+ transferUSDC.to,
307
+ transferUSDC.value,
308
+ transferUSDC.data,
309
+ safe_core_sdk_types_1.OperationType.Call
310
+ ]),
311
+ nonce: 1n,
312
+ callGasLimit: 150000n,
313
+ validAfter: 0,
314
+ validUntil: 0,
315
+ maxFeePerGas: 100000n,
316
+ maxPriorityFeePerGas: 200000n,
317
+ verificationGasLimit: 150000n,
318
+ preVerificationGas: 100000n
319
+ });
320
+ });
321
+ it('should fill the initCode property when the Safe does not exist', async () => {
322
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
323
+ options: {
324
+ owners: [fixtures.OWNER_1],
325
+ threshold: 1
326
+ }
327
+ });
328
+ const getInitCodeSpy = jest.spyOn(safe4337Pack.protocolKit, 'getInitCode');
329
+ const safeOperation = await safe4337Pack.createTransaction({
330
+ transactions: [transferUSDC]
331
+ });
332
+ expect(getInitCodeSpy).toHaveBeenCalled();
333
+ expect(safeOperation.data.initCode).toBe('0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec671688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c7620000000000000000000000000000000000000000000000000000000000000060ad27de2a410652abce96ea0fdfc30c2f0fd35952b78f554667111999a28ff33800000000000000000000000000000000000000000000000000000000000001e4b63e800d000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008ecd4ec46d4d2a6b64fe960b3d64e8b94b2234eb0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b40370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000ffac5578be8ac1b2b9d13b34caf4a074b96b8a1b00000000000000000000000000000000000000000000000000000000000000648d0dc49f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b40370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
334
+ });
335
+ it('should allow to create a sponsored transaction', async () => {
336
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
337
+ options: {
338
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
339
+ },
340
+ paymasterOptions: {
341
+ isSponsored: true,
342
+ paymasterUrl: fixtures.PAYMASTER_URL,
343
+ paymasterAddress: fixtures.PAYMASTER_ADDRESS
344
+ }
345
+ });
346
+ const sponsoredSafeOperation = await safe4337Pack.createTransaction({
347
+ transactions: [transferUSDC]
348
+ });
349
+ expect(sponsoredSafeOperation).toBeInstanceOf(SafeOperation_1.default);
350
+ expect(sponsoredSafeOperation.data).toMatchObject({
351
+ safe: fixtures.SAFE_ADDRESS_v1_4_1,
352
+ entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
353
+ initCode: '0x',
354
+ paymasterAndData: '0x0000000000325602a77416A16136FDafd04b299f',
355
+ callData: constants.INTERFACES.encodeFunctionData('executeUserOp', [
356
+ transferUSDC.to,
357
+ transferUSDC.value,
358
+ transferUSDC.data,
359
+ safe_core_sdk_types_1.OperationType.Call
360
+ ]),
361
+ nonce: 1n,
362
+ callGasLimit: 150000n,
363
+ validAfter: 0,
364
+ validUntil: 0,
365
+ maxFeePerGas: 100000n,
366
+ maxPriorityFeePerGas: 200000n,
367
+ verificationGasLimit: 150000n,
368
+ preVerificationGas: 100000n
369
+ });
370
+ });
371
+ it('createTransaction should throw an error if paymasterUrl is not present in sponsored transactions', async () => {
372
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
373
+ options: {
374
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
375
+ },
376
+ paymasterOptions: {
377
+ isSponsored: true,
378
+ paymasterAddress: fixtures.PAYMASTER_ADDRESS
379
+ }
380
+ });
381
+ await expect(safe4337Pack.createTransaction({
382
+ transactions: [transferUSDC]
383
+ })).rejects.toThrow('No paymaster url provided for a sponsored transaction');
384
+ });
385
+ it('should add the approve transaction to the batch when amountToApprove is provided', async () => {
386
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
387
+ options: {
388
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
389
+ },
390
+ paymasterOptions: {
391
+ paymasterTokenAddress: fixtures.PAYMASTER_TOKEN_ADDRESS,
392
+ paymasterAddress: fixtures.PAYMASTER_ADDRESS
393
+ }
394
+ });
395
+ const amountToApprove = 80000n;
396
+ const sponsoredSafeOperation = await safe4337Pack.createTransaction({
397
+ transactions: [transferUSDC],
398
+ options: {
399
+ amountToApprove
400
+ }
401
+ });
402
+ const approveTransaction = {
403
+ to: fixtures.PAYMASTER_TOKEN_ADDRESS,
404
+ data: constants.INTERFACES.encodeFunctionData('approve', [
405
+ fixtures.PAYMASTER_ADDRESS,
406
+ amountToApprove
407
+ ]),
408
+ value: '0',
409
+ operation: safe_core_sdk_types_1.OperationType.Call // Call for approve
410
+ };
411
+ const batch = [transferUSDC, approveTransaction];
412
+ expect(sponsoredSafeOperation).toBeInstanceOf(SafeOperation_1.default);
413
+ expect(sponsoredSafeOperation.data).toMatchObject({
414
+ safe: fixtures.SAFE_ADDRESS_v1_4_1,
415
+ entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
416
+ initCode: '0x',
417
+ paymasterAndData: '0x0000000000325602a77416A16136FDafd04b299f',
418
+ callData: constants.INTERFACES.encodeFunctionData('executeUserOp', [
419
+ await safe4337Pack.protocolKit.getMultiSendAddress(),
420
+ '0',
421
+ constants.INTERFACES.encodeFunctionData('multiSend', [
422
+ protocolKit.encodeMultiSendData(batch)
423
+ ]),
424
+ safe_core_sdk_types_1.OperationType.DelegateCall
425
+ ]),
426
+ nonce: 1n,
427
+ callGasLimit: 150000n,
428
+ validAfter: 0,
429
+ validUntil: 0,
430
+ maxFeePerGas: 100000n,
431
+ maxPriorityFeePerGas: 200000n,
432
+ verificationGasLimit: 150000n,
433
+ preVerificationGas: 100000n
434
+ });
435
+ });
436
+ });
437
+ it('should all to sign a SafeOperation', async () => {
438
+ const transferUSDC = {
439
+ to: fixtures.PAYMASTER_TOKEN_ADDRESS,
440
+ data: (0, helpers_1.generateTransferCallData)(fixtures.SAFE_ADDRESS_v1_4_1, 100000n),
441
+ value: '0',
442
+ operation: 0
443
+ };
444
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
445
+ options: {
446
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
447
+ }
448
+ });
449
+ const safeOperation = await safe4337Pack.createTransaction({
450
+ transactions: [transferUSDC]
451
+ });
452
+ expect(await safe4337Pack.signSafeOperation(safeOperation)).toMatchObject({
453
+ signatures: new Map().set(fixtures.OWNER_1.toLowerCase(), new protocolKit.EthSafeSignature(fixtures.OWNER_1, '0x63de7fdf99bcf20a1981ae74c3960604139d8bf025da894abc11604b30f438e82ceb0d37e73bf16b0b8b896f8be82a49750433733c0414fe4a3b8182a3875e1f1c', false))
454
+ });
455
+ });
456
+ it('should allow to send an UserOperation to a bundler', async () => {
457
+ const transferUSDC = {
458
+ to: fixtures.PAYMASTER_TOKEN_ADDRESS,
459
+ data: (0, helpers_1.generateTransferCallData)(fixtures.SAFE_ADDRESS_v1_4_1, 100000n),
460
+ value: '0',
461
+ operation: 0
462
+ };
463
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
464
+ options: {
465
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
466
+ }
467
+ });
468
+ let safeOperation = await safe4337Pack.createTransaction({
469
+ transactions: [transferUSDC]
470
+ });
471
+ safeOperation = await safe4337Pack.signSafeOperation(safeOperation);
472
+ await safe4337Pack.executeTransaction({ executable: safeOperation });
473
+ expect(sendMock).toHaveBeenCalledWith(constants.RPC_4337_CALLS.SEND_USER_OPERATION, [
474
+ utils.userOperationToHexValues(safeOperation.toUserOperation()),
475
+ fixtures.ENTRYPOINTS[0]
476
+ ]);
477
+ });
478
+ it('should return a UserOperation based on a userOpHash', async () => {
479
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
480
+ options: {
481
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
482
+ }
483
+ });
484
+ const { userOperation, entryPoint, transactionHash, blockHash, blockNumber } = await safe4337Pack.getUserOperationByHash('0xee8e07f229d0ebf11c84a3e40f87e1d1b4c7b18eaeaebf3babb4b479424823e6');
485
+ expect(userOperation).toMatchObject({
486
+ sender: '0x1405B3659a11a16459fc27Fa1925b60388C38Ce1',
487
+ nonce: '0x1',
488
+ initCode: '0x',
489
+ callData: '0x7bb3742800000000000000000000000038869bf66a61cf6bdb996a6ae40d5853fd43b52600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001848d80ff0a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000132001c7d4b196cb0c7b01d743fbc6116a902379c723800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000d725e11588f040d86c4c49d8236e32a5868549f000000000000000000000000000000000000000000000000000000000000186a0001c7d4b196cb0c7b01d743fbc6116a902379c723800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000d725e11588f040d86c4c49d8236e32a5868549f000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
490
+ callGasLimit: '0x1d7d0',
491
+ verificationGasLimit: '0x14470',
492
+ preVerificationGas: '0xbdb8',
493
+ maxFeePerGas: '0x2d128cfa8c',
494
+ maxPriorityFeePerGas: '0x52412100',
495
+ paymasterAndData: '0x',
496
+ signature: '0x000000000000000000000000a397ca32ee7fb5282256ee3465da0843485930b803d747516aac76e152f834051ac18fd2b3c0565590f9d65085538993c85c9bb189c940d15c15402c7c2885821b'
497
+ });
498
+ expect(blockHash).toBe('0x65f8249337ffede2067a006a96da47d3d3445ca72492a6a82afa02899f05d2e5');
499
+ expect(blockNumber).toBe('0x5378b9');
500
+ expect(entryPoint).toBe('0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789');
501
+ expect(transactionHash).toBe('0xef262d20f68e4900aa6380b8ac0f66f9c00a7d988179fa177ad9c9758f0e380e');
502
+ });
503
+ it('should return a UserOperation receipt based on a userOpHash', async () => {
504
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
505
+ options: {
506
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
507
+ }
508
+ });
509
+ const userOperationReceipt = await safe4337Pack.getUserOperationReceipt('0xee8e07f229d0ebf11c84a3e40f87e1d1b4c7b18eaeaebf3babb4b479424823e6');
510
+ expect(userOperationReceipt?.userOpHash).toBe('0x3cb881d1969036174f38d636d22108d1d032145518b53104fc0b1e1296d2cc9c');
511
+ expect(userOperationReceipt?.sender).toBe('0x1405B3659a11a16459fc27Fa1925b60388C38Ce1');
512
+ expect(userOperationReceipt?.actualGasUsed).toBe('0x27067');
513
+ expect(userOperationReceipt?.actualGasCost).toBe('0x42f29418377167');
514
+ expect(userOperationReceipt?.success).toBe(true);
515
+ expect(userOperationReceipt?.logs).toStrictEqual([]);
516
+ expect(userOperationReceipt?.receipt).toMatchObject({
517
+ transactionHash: '0xef262d20f68e4900aa6380b8ac0f66f9c00a7d988179fa177ad9c9758f0e380e',
518
+ transactionIndex: '0x63',
519
+ blockHash: '0x65f8249337ffede2067a006a96da47d3d3445ca72492a6a82afa02899f05d2e5',
520
+ blockNumber: '0x5378b9',
521
+ from: '0x4337001Fff419768e088Ce247456c1B892888084',
522
+ to: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
523
+ cumulativeGasUsed: '0xc1a846',
524
+ gasUsed: '0x25e6c',
525
+ contractAddress: null,
526
+ logs: [],
527
+ logsBloom: '0x000000000000900000000000000000000000000000000000080000000002000000080000000000000402000100000000001000000000000080000200000100000000000000000000000000080000000000000000000000000000002000002000000000000a0000000000000000000800000000000000000000000010000200000000000060100000000000000040000000800000000000000008800000000000000000000000000000400000000000000200000000000000000002000000008000000002000100000001000000000000000000000020000000000000000020010040000000000020000010000008000200000000000000000000000000000000',
528
+ status: '0x1',
529
+ effectiveGasPrice: '0x1b67f3c201'
530
+ });
531
+ });
532
+ it('should return an array of the entryPoint addresses supported by the client', async () => {
533
+ const safe4337Pack = await (0, helpers_1.createSafe4337Pack)({
534
+ options: {
535
+ safeAddress: fixtures.SAFE_ADDRESS_v1_4_1
536
+ }
537
+ });
538
+ const supportedEntryPoints = await safe4337Pack.getSupportedEntryPoints();
539
+ expect(supportedEntryPoints).toContain('0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789');
540
+ });
541
+ });
542
+ //# sourceMappingURL=Safe4337Pack.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Safe4337Pack.test.js","sourceRoot":"","sources":["../../../../src/packs/safe-4337/Safe4337Pack.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};