@latticexyz/paymaster 2.2.15-a7625b97410346b1187e66803dde5194084312fd

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022-present Lattice Labs Ltd.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Paymaster contracts
2
+
3
+ > :warning: **Important note: these contracts have not been audited yet, so any production use is discouraged for now.**
@@ -0,0 +1,280 @@
1
+ [
2
+ {
3
+ "type": "constructor",
4
+ "inputs": [
5
+ {
6
+ "name": "_entryPoint",
7
+ "type": "address",
8
+ "internalType": "contract IEntryPoint"
9
+ }
10
+ ],
11
+ "stateMutability": "nonpayable"
12
+ },
13
+ {
14
+ "type": "function",
15
+ "name": "addStake",
16
+ "inputs": [
17
+ {
18
+ "name": "unstakeDelaySec",
19
+ "type": "uint32",
20
+ "internalType": "uint32"
21
+ }
22
+ ],
23
+ "outputs": [],
24
+ "stateMutability": "payable"
25
+ },
26
+ {
27
+ "type": "function",
28
+ "name": "deposit",
29
+ "inputs": [],
30
+ "outputs": [],
31
+ "stateMutability": "payable"
32
+ },
33
+ {
34
+ "type": "function",
35
+ "name": "entryPoint",
36
+ "inputs": [],
37
+ "outputs": [
38
+ {
39
+ "name": "",
40
+ "type": "address",
41
+ "internalType": "contract IEntryPoint"
42
+ }
43
+ ],
44
+ "stateMutability": "view"
45
+ },
46
+ {
47
+ "type": "function",
48
+ "name": "getDeposit",
49
+ "inputs": [],
50
+ "outputs": [
51
+ {
52
+ "name": "",
53
+ "type": "uint256",
54
+ "internalType": "uint256"
55
+ }
56
+ ],
57
+ "stateMutability": "view"
58
+ },
59
+ {
60
+ "type": "function",
61
+ "name": "owner",
62
+ "inputs": [],
63
+ "outputs": [
64
+ {
65
+ "name": "",
66
+ "type": "address",
67
+ "internalType": "address"
68
+ }
69
+ ],
70
+ "stateMutability": "view"
71
+ },
72
+ {
73
+ "type": "function",
74
+ "name": "postOp",
75
+ "inputs": [
76
+ {
77
+ "name": "mode",
78
+ "type": "uint8",
79
+ "internalType": "enum IPaymaster.PostOpMode"
80
+ },
81
+ {
82
+ "name": "context",
83
+ "type": "bytes",
84
+ "internalType": "bytes"
85
+ },
86
+ {
87
+ "name": "actualGasCost",
88
+ "type": "uint256",
89
+ "internalType": "uint256"
90
+ },
91
+ {
92
+ "name": "actualUserOpFeePerGas",
93
+ "type": "uint256",
94
+ "internalType": "uint256"
95
+ }
96
+ ],
97
+ "outputs": [],
98
+ "stateMutability": "nonpayable"
99
+ },
100
+ {
101
+ "type": "function",
102
+ "name": "renounceOwnership",
103
+ "inputs": [],
104
+ "outputs": [],
105
+ "stateMutability": "nonpayable"
106
+ },
107
+ {
108
+ "type": "function",
109
+ "name": "transferOwnership",
110
+ "inputs": [
111
+ {
112
+ "name": "newOwner",
113
+ "type": "address",
114
+ "internalType": "address"
115
+ }
116
+ ],
117
+ "outputs": [],
118
+ "stateMutability": "nonpayable"
119
+ },
120
+ {
121
+ "type": "function",
122
+ "name": "unlockStake",
123
+ "inputs": [],
124
+ "outputs": [],
125
+ "stateMutability": "nonpayable"
126
+ },
127
+ {
128
+ "type": "function",
129
+ "name": "validatePaymasterUserOp",
130
+ "inputs": [
131
+ {
132
+ "name": "userOp",
133
+ "type": "tuple",
134
+ "internalType": "struct PackedUserOperation",
135
+ "components": [
136
+ {
137
+ "name": "sender",
138
+ "type": "address",
139
+ "internalType": "address"
140
+ },
141
+ {
142
+ "name": "nonce",
143
+ "type": "uint256",
144
+ "internalType": "uint256"
145
+ },
146
+ {
147
+ "name": "initCode",
148
+ "type": "bytes",
149
+ "internalType": "bytes"
150
+ },
151
+ {
152
+ "name": "callData",
153
+ "type": "bytes",
154
+ "internalType": "bytes"
155
+ },
156
+ {
157
+ "name": "accountGasLimits",
158
+ "type": "bytes32",
159
+ "internalType": "bytes32"
160
+ },
161
+ {
162
+ "name": "preVerificationGas",
163
+ "type": "uint256",
164
+ "internalType": "uint256"
165
+ },
166
+ {
167
+ "name": "gasFees",
168
+ "type": "bytes32",
169
+ "internalType": "bytes32"
170
+ },
171
+ {
172
+ "name": "paymasterAndData",
173
+ "type": "bytes",
174
+ "internalType": "bytes"
175
+ },
176
+ {
177
+ "name": "signature",
178
+ "type": "bytes",
179
+ "internalType": "bytes"
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ "name": "userOpHash",
185
+ "type": "bytes32",
186
+ "internalType": "bytes32"
187
+ },
188
+ {
189
+ "name": "maxCost",
190
+ "type": "uint256",
191
+ "internalType": "uint256"
192
+ }
193
+ ],
194
+ "outputs": [
195
+ {
196
+ "name": "context",
197
+ "type": "bytes",
198
+ "internalType": "bytes"
199
+ },
200
+ {
201
+ "name": "validationData",
202
+ "type": "uint256",
203
+ "internalType": "uint256"
204
+ }
205
+ ],
206
+ "stateMutability": "nonpayable"
207
+ },
208
+ {
209
+ "type": "function",
210
+ "name": "withdrawStake",
211
+ "inputs": [
212
+ {
213
+ "name": "withdrawAddress",
214
+ "type": "address",
215
+ "internalType": "address payable"
216
+ }
217
+ ],
218
+ "outputs": [],
219
+ "stateMutability": "nonpayable"
220
+ },
221
+ {
222
+ "type": "function",
223
+ "name": "withdrawTo",
224
+ "inputs": [
225
+ {
226
+ "name": "withdrawAddress",
227
+ "type": "address",
228
+ "internalType": "address payable"
229
+ },
230
+ {
231
+ "name": "amount",
232
+ "type": "uint256",
233
+ "internalType": "uint256"
234
+ }
235
+ ],
236
+ "outputs": [],
237
+ "stateMutability": "nonpayable"
238
+ },
239
+ {
240
+ "type": "event",
241
+ "name": "OwnershipTransferred",
242
+ "inputs": [
243
+ {
244
+ "name": "previousOwner",
245
+ "type": "address",
246
+ "indexed": true,
247
+ "internalType": "address"
248
+ },
249
+ {
250
+ "name": "newOwner",
251
+ "type": "address",
252
+ "indexed": true,
253
+ "internalType": "address"
254
+ }
255
+ ],
256
+ "anonymous": false
257
+ },
258
+ {
259
+ "type": "error",
260
+ "name": "OwnableInvalidOwner",
261
+ "inputs": [
262
+ {
263
+ "name": "owner",
264
+ "type": "address",
265
+ "internalType": "address"
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ "type": "error",
271
+ "name": "OwnableUnauthorizedAccount",
272
+ "inputs": [
273
+ {
274
+ "name": "account",
275
+ "type": "address",
276
+ "internalType": "address"
277
+ }
278
+ ]
279
+ }
280
+ ]
@@ -0,0 +1,282 @@
1
+ declare const abi: [
2
+ {
3
+ "type": "constructor",
4
+ "inputs": [
5
+ {
6
+ "name": "_entryPoint",
7
+ "type": "address",
8
+ "internalType": "contract IEntryPoint"
9
+ }
10
+ ],
11
+ "stateMutability": "nonpayable"
12
+ },
13
+ {
14
+ "type": "function",
15
+ "name": "addStake",
16
+ "inputs": [
17
+ {
18
+ "name": "unstakeDelaySec",
19
+ "type": "uint32",
20
+ "internalType": "uint32"
21
+ }
22
+ ],
23
+ "outputs": [],
24
+ "stateMutability": "payable"
25
+ },
26
+ {
27
+ "type": "function",
28
+ "name": "deposit",
29
+ "inputs": [],
30
+ "outputs": [],
31
+ "stateMutability": "payable"
32
+ },
33
+ {
34
+ "type": "function",
35
+ "name": "entryPoint",
36
+ "inputs": [],
37
+ "outputs": [
38
+ {
39
+ "name": "",
40
+ "type": "address",
41
+ "internalType": "contract IEntryPoint"
42
+ }
43
+ ],
44
+ "stateMutability": "view"
45
+ },
46
+ {
47
+ "type": "function",
48
+ "name": "getDeposit",
49
+ "inputs": [],
50
+ "outputs": [
51
+ {
52
+ "name": "",
53
+ "type": "uint256",
54
+ "internalType": "uint256"
55
+ }
56
+ ],
57
+ "stateMutability": "view"
58
+ },
59
+ {
60
+ "type": "function",
61
+ "name": "owner",
62
+ "inputs": [],
63
+ "outputs": [
64
+ {
65
+ "name": "",
66
+ "type": "address",
67
+ "internalType": "address"
68
+ }
69
+ ],
70
+ "stateMutability": "view"
71
+ },
72
+ {
73
+ "type": "function",
74
+ "name": "postOp",
75
+ "inputs": [
76
+ {
77
+ "name": "mode",
78
+ "type": "uint8",
79
+ "internalType": "enum IPaymaster.PostOpMode"
80
+ },
81
+ {
82
+ "name": "context",
83
+ "type": "bytes",
84
+ "internalType": "bytes"
85
+ },
86
+ {
87
+ "name": "actualGasCost",
88
+ "type": "uint256",
89
+ "internalType": "uint256"
90
+ },
91
+ {
92
+ "name": "actualUserOpFeePerGas",
93
+ "type": "uint256",
94
+ "internalType": "uint256"
95
+ }
96
+ ],
97
+ "outputs": [],
98
+ "stateMutability": "nonpayable"
99
+ },
100
+ {
101
+ "type": "function",
102
+ "name": "renounceOwnership",
103
+ "inputs": [],
104
+ "outputs": [],
105
+ "stateMutability": "nonpayable"
106
+ },
107
+ {
108
+ "type": "function",
109
+ "name": "transferOwnership",
110
+ "inputs": [
111
+ {
112
+ "name": "newOwner",
113
+ "type": "address",
114
+ "internalType": "address"
115
+ }
116
+ ],
117
+ "outputs": [],
118
+ "stateMutability": "nonpayable"
119
+ },
120
+ {
121
+ "type": "function",
122
+ "name": "unlockStake",
123
+ "inputs": [],
124
+ "outputs": [],
125
+ "stateMutability": "nonpayable"
126
+ },
127
+ {
128
+ "type": "function",
129
+ "name": "validatePaymasterUserOp",
130
+ "inputs": [
131
+ {
132
+ "name": "userOp",
133
+ "type": "tuple",
134
+ "internalType": "struct PackedUserOperation",
135
+ "components": [
136
+ {
137
+ "name": "sender",
138
+ "type": "address",
139
+ "internalType": "address"
140
+ },
141
+ {
142
+ "name": "nonce",
143
+ "type": "uint256",
144
+ "internalType": "uint256"
145
+ },
146
+ {
147
+ "name": "initCode",
148
+ "type": "bytes",
149
+ "internalType": "bytes"
150
+ },
151
+ {
152
+ "name": "callData",
153
+ "type": "bytes",
154
+ "internalType": "bytes"
155
+ },
156
+ {
157
+ "name": "accountGasLimits",
158
+ "type": "bytes32",
159
+ "internalType": "bytes32"
160
+ },
161
+ {
162
+ "name": "preVerificationGas",
163
+ "type": "uint256",
164
+ "internalType": "uint256"
165
+ },
166
+ {
167
+ "name": "gasFees",
168
+ "type": "bytes32",
169
+ "internalType": "bytes32"
170
+ },
171
+ {
172
+ "name": "paymasterAndData",
173
+ "type": "bytes",
174
+ "internalType": "bytes"
175
+ },
176
+ {
177
+ "name": "signature",
178
+ "type": "bytes",
179
+ "internalType": "bytes"
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ "name": "userOpHash",
185
+ "type": "bytes32",
186
+ "internalType": "bytes32"
187
+ },
188
+ {
189
+ "name": "maxCost",
190
+ "type": "uint256",
191
+ "internalType": "uint256"
192
+ }
193
+ ],
194
+ "outputs": [
195
+ {
196
+ "name": "context",
197
+ "type": "bytes",
198
+ "internalType": "bytes"
199
+ },
200
+ {
201
+ "name": "validationData",
202
+ "type": "uint256",
203
+ "internalType": "uint256"
204
+ }
205
+ ],
206
+ "stateMutability": "nonpayable"
207
+ },
208
+ {
209
+ "type": "function",
210
+ "name": "withdrawStake",
211
+ "inputs": [
212
+ {
213
+ "name": "withdrawAddress",
214
+ "type": "address",
215
+ "internalType": "address payable"
216
+ }
217
+ ],
218
+ "outputs": [],
219
+ "stateMutability": "nonpayable"
220
+ },
221
+ {
222
+ "type": "function",
223
+ "name": "withdrawTo",
224
+ "inputs": [
225
+ {
226
+ "name": "withdrawAddress",
227
+ "type": "address",
228
+ "internalType": "address payable"
229
+ },
230
+ {
231
+ "name": "amount",
232
+ "type": "uint256",
233
+ "internalType": "uint256"
234
+ }
235
+ ],
236
+ "outputs": [],
237
+ "stateMutability": "nonpayable"
238
+ },
239
+ {
240
+ "type": "event",
241
+ "name": "OwnershipTransferred",
242
+ "inputs": [
243
+ {
244
+ "name": "previousOwner",
245
+ "type": "address",
246
+ "indexed": true,
247
+ "internalType": "address"
248
+ },
249
+ {
250
+ "name": "newOwner",
251
+ "type": "address",
252
+ "indexed": true,
253
+ "internalType": "address"
254
+ }
255
+ ],
256
+ "anonymous": false
257
+ },
258
+ {
259
+ "type": "error",
260
+ "name": "OwnableInvalidOwner",
261
+ "inputs": [
262
+ {
263
+ "name": "owner",
264
+ "type": "address",
265
+ "internalType": "address"
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ "type": "error",
271
+ "name": "OwnableUnauthorizedAccount",
272
+ "inputs": [
273
+ {
274
+ "name": "account",
275
+ "type": "address",
276
+ "internalType": "address"
277
+ }
278
+ ]
279
+ }
280
+ ];
281
+
282
+ export default abi;
@@ -0,0 +1 @@
1
+ {"abi":[{"type":"constructor","inputs":[{"name":"_entryPoint","type":"address","internalType":"contract IEntryPoint"}],"stateMutability":"nonpayable"},{"type":"function","name":"addStake","inputs":[{"name":"unstakeDelaySec","type":"uint32","internalType":"uint32"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deposit","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"entryPoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEntryPoint"}],"stateMutability":"view"},{"type":"function","name":"getDeposit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"postOp","inputs":[{"name":"mode","type":"uint8","internalType":"enum IPaymaster.PostOpMode"},{"name":"context","type":"bytes","internalType":"bytes"},{"name":"actualGasCost","type":"uint256","internalType":"uint256"},{"name":"actualUserOpFeePerGas","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unlockStake","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatePaymasterUserOp","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"maxCost","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"context","type":"bytes","internalType":"bytes"},{"name":"validationData","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawStake","inputs":[{"name":"withdrawAddress","type":"address","internalType":"address payable"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawTo","inputs":[{"name":"withdrawAddress","type":"address","internalType":"address payable"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60a060405234801561000f575f80fd5b50604051610c21380380610c2183398101604081905261002e91610185565b80338061005557604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61005e8161007a565b50610068816100c9565b6001600160a01b0316608052506101d1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516301ffc9a760e01b815263122a0e9b60e31b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015610112573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013691906101b2565b6101825760405162461bcd60e51b815260206004820152601e60248201527f49456e747279506f696e7420696e74657266616365206d69736d617463680000604482015260640161004c565b50565b5f60208284031215610195575f80fd5b81516001600160a01b03811681146101ab575f80fd5b9392505050565b5f602082840312156101c2575f80fd5b815180151581146101ab575f80fd5b608051610a0761021a5f395f81816101bf015281816102990152818161035f015281816103e4015281816104ac0152818161052f015281816105e0015261070a0152610a075ff3fe6080604052600436106100c3575f3560e01c8063b0d691fe11610071578063c399ec881161004c578063c399ec8814610214578063d0e30db014610236578063f2fde38b1461023e575f80fd5b8063b0d691fe146101ae578063bb9fe6bf146101e1578063c23a5cea146101f5575f80fd5b8063715018a6116100a1578063715018a6146101315780637c627b21146101455780638da5cb5b14610164575f80fd5b80630396cb60146100c7578063205c2878146100dc57806352b7512c146100fb575b5f80fd5b6100da6100d5366004610805565b61025d565b005b3480156100e7575f80fd5b506100da6100f6366004610850565b61030b565b348015610106575f80fd5b5061011a61011536600461087a565b6103a0565b6040516101289291906108c9565b60405180910390f35b34801561013c575f80fd5b506100da6103b8565b348015610150575f80fd5b506100da61015f366004610939565b6103cb565b34801561016f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610128565b3480156101b9575f80fd5b506101897f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ec575f80fd5b506100da6103da565b348015610200575f80fd5b506100da61020f3660046109c8565b61045f565b34801561021f575f80fd5b506102286104ff565b604051908152602001610128565b6100da6105b2565b348015610249575f80fd5b506100da6102583660046109c8565b610638565b6102656106a0565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024015f604051808303818588803b1580156102f1575f80fd5b505af1158015610303573d5f803e3d5ffd5b505050505050565b6103136106a0565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906044015f604051808303815f87803b1580156102f1575f80fd5b60605f6103ab6106f2565b506060945f945092505050565b6103c06106a0565b6103c95f610791565b565b6103d36106f2565b5050505050565b6103e26106a0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610447575f80fd5b505af1158015610459573d5f803e3d5ffd5b50505050565b6104676106a0565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea906024015f604051808303815f87803b1580156104ed575f80fd5b505af11580156103d3573d5f803e3d5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610589573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ad91906109e3565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024015f604051808303818588803b1580156104ed575f80fd5b6106406106a0565b73ffffffffffffffffffffffffffffffffffffffff8116610694576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b61069d81610791565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103c9576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161068b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e740000000000000000000000604482015260640161068b565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610815575f80fd5b813563ffffffff81168114610828575f80fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461069d575f80fd5b5f8060408385031215610861575f80fd5b823561086c8161082f565b946020939093013593505050565b5f805f6060848603121561088c575f80fd5b833567ffffffffffffffff8111156108a2575f80fd5b840161012081870312156108b4575f80fd5b95602085013595506040909401359392505050565b604081525f83518060408401525f5b818110156108f557602081870181015160608684010152016108d8565b505f6060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b5f805f805f6080868803121561094d575f80fd5b85356003811061095b575f80fd5b9450602086013567ffffffffffffffff80821115610977575f80fd5b818801915088601f83011261098a575f80fd5b813581811115610998575f80fd5b8960208285010111156109a9575f80fd5b9699602092909201985095966040810135965060600135945092505050565b5f602082840312156109d8575f80fd5b81356108288161082f565b5f602082840312156109f3575f80fd5b505191905056fea164736f6c6343000818000a","sourceMap":"665:2712:69:-:0;;;713:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;764:11;950:10:1;;1269:95:20;;1322:31;;-1:-1:-1;;;1322:31:20;;1350:1;1322:31;;;475:51:72;448:18;;1322:31:20;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;972:41:1::1;1001:11:::0;972:28:::1;:41::i;:::-;-1:-1:-1::0;;;;;1023:24:1::1;;::::0;-1:-1:-1;665:2712:69;;2912:187:20;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:20;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;1173:218:1:-;1271:78;;-1:-1:-1;;;1271:78:1;;-1:-1:-1;;;1271:78:1;;;681:52:72;-1:-1:-1;;;;;1271:47:1;;;;;654:18:72;;1271:78:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1263:121;;;;-1:-1:-1;;;1263:121:1;;1228:2:72;1263:121:1;;;1210:21:72;1267:2;1247:18;;;1240:30;1306:32;1286:18;;;1279:60;1356:18;;1263:121:1;1026:354:72;1263:121:1;1173:218;:::o;14:310:72:-;104:6;157:2;145:9;136:7;132:23;128:32;125:52;;;173:1;170;163:12;125:52;199:16;;-1:-1:-1;;;;;244:31:72;;234:42;;224:70;;290:1;287;280:12;224:70;313:5;14:310;-1:-1:-1;;;14:310:72:o;744:277::-;811:6;864:2;852:9;843:7;839:23;835:32;832:52;;;880:1;877;870:12;832:52;912:9;906:16;965:5;958:13;951:21;944:5;941:32;931:60;;987:1;984;977:12;1026:354;665:2712:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100c3575f3560e01c8063b0d691fe11610071578063c399ec881161004c578063c399ec8814610214578063d0e30db014610236578063f2fde38b1461023e575f80fd5b8063b0d691fe146101ae578063bb9fe6bf146101e1578063c23a5cea146101f5575f80fd5b8063715018a6116100a1578063715018a6146101315780637c627b21146101455780638da5cb5b14610164575f80fd5b80630396cb60146100c7578063205c2878146100dc57806352b7512c146100fb575b5f80fd5b6100da6100d5366004610805565b61025d565b005b3480156100e7575f80fd5b506100da6100f6366004610850565b61030b565b348015610106575f80fd5b5061011a61011536600461087a565b6103a0565b6040516101289291906108c9565b60405180910390f35b34801561013c575f80fd5b506100da6103b8565b348015610150575f80fd5b506100da61015f366004610939565b6103cb565b34801561016f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610128565b3480156101b9575f80fd5b506101897f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ec575f80fd5b506100da6103da565b348015610200575f80fd5b506100da61020f3660046109c8565b61045f565b34801561021f575f80fd5b506102286104ff565b604051908152602001610128565b6100da6105b2565b348015610249575f80fd5b506100da6102583660046109c8565b610638565b6102656106a0565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024015f604051808303818588803b1580156102f1575f80fd5b505af1158015610303573d5f803e3d5ffd5b505050505050565b6103136106a0565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906044015f604051808303815f87803b1580156102f1575f80fd5b60605f6103ab6106f2565b506060945f945092505050565b6103c06106a0565b6103c95f610791565b565b6103d36106f2565b5050505050565b6103e26106a0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610447575f80fd5b505af1158015610459573d5f803e3d5ffd5b50505050565b6104676106a0565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea906024015f604051808303815f87803b1580156104ed575f80fd5b505af11580156103d3573d5f803e3d5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610589573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ad91906109e3565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024015f604051808303818588803b1580156104ed575f80fd5b6106406106a0565b73ffffffffffffffffffffffffffffffffffffffff8116610694576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b61069d81610791565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103c9576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161068b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e740000000000000000000000604482015260640161068b565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610815575f80fd5b813563ffffffff81168114610828575f80fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461069d575f80fd5b5f8060408385031215610861575f80fd5b823561086c8161082f565b946020939093013593505050565b5f805f6060848603121561088c575f80fd5b833567ffffffffffffffff8111156108a2575f80fd5b840161012081870312156108b4575f80fd5b95602085013595506040909401359392505050565b604081525f83518060408401525f5b818110156108f557602081870181015160608684010152016108d8565b505f6060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b5f805f805f6080868803121561094d575f80fd5b85356003811061095b575f80fd5b9450602086013567ffffffffffffffff80821115610977575f80fd5b818801915088601f83011261098a575f80fd5b813581811115610998575f80fd5b8960208285010111156109a9575f80fd5b9699602092909201985095966040810135965060600135945092505050565b5f602082840312156109d8575f80fd5b81356108288161082f565b5f602082840312156109f3575f80fd5b505191905056fea164736f6c6343000818000a","sourceMap":"665:2712:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4651:140:1;;;;;;:::i;:::-;;:::i;:::-;;4255:171;;;;;;;;;;-1:-1:-1;4255:171:1;;;;;:::i;:::-;;:::i;1428:321::-;;;;;;;;;;-1:-1:-1;1428:321:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2293:101:20;;;;;;;;;;;;;:::i;2225:278:1:-;;;;;;;;;;-1:-1:-1;2225:278:1;;;;;:::i;:::-;;:::i;1638:85:20:-;;;;;;;;;;-1:-1:-1;1684:7:20;1710:6;;;1638:85;;;3072:42:72;3060:55;;;3042:74;;3030:2;3015:18;1638:85:20;2896:226:72;544:39:1;;;;;;;;;;;;;;;5144:83;;;;;;;;;;;;;:::i;5448:133::-;;;;;;;;;;-1:-1:-1;5448:133:1;;;;;:::i;:::-;;:::i;4874:111::-;;;;;;;;;;;;;:::i;:::-;;;3792:25:72;;;3780:2;3765:18;4874:111:1;3646:177:72;3986:104:1;;;:::i;2543:215:20:-;;;;;;;;;;-1:-1:-1;2543:215:20;;;;;:::i;:::-;;:::i;4651:140:1:-;1531:13:20;:11;:13::i;:::-;4730:54:1::1;::::0;;;;4262:10:72;4250:23;;4730:54:1::1;::::0;::::1;4232:42:72::0;4730:10:1::1;:19;;::::0;::::1;::::0;4757:9:::1;::::0;4205:18:72;;4730:54:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;4651:140:::0;:::o;4255:171::-;1531:13:20;:11;:13::i;:::-;4373:46:1::1;::::0;;;;:21:::1;4493:55:72::0;;;4373:46:1::1;::::0;::::1;4475:74:72::0;4565:18;;;4558:34;;;4373:10:1::1;:21;::::0;::::1;::::0;4448:18:72;;4373:46:1::1;;;;;;;;;;;;;;;;;::::0;::::1;1428:321:::0;1592:20;1614:22;1648:24;:22;:24::i;:::-;-1:-1:-1;2290:20:69;;2312:22;;-1:-1:-1;1428:321:1;-1:-1:-1;;;1428:321:1:o;2293:101:20:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2225:278:1:-;2402:24;:22;:24::i;:::-;2225:278;;;;;:::o;5144:83::-;1531:13:20;:11;:13::i;:::-;5196:10:1::1;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5144:83::o:0;5448:133::-;1531:13:20;:11;:13::i;:::-;5533:41:1::1;::::0;;;;:24:::1;3060:55:72::0;;;5533:41:1::1;::::0;::::1;3042:74:72::0;5533:10:1::1;:24;::::0;::::1;::::0;3015:18:72;;5533:41:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;4874:111:::0;4943:35;;;;;4972:4;4943:35;;;3042:74:72;4917:7:1;;4943:10;:20;;;;;3015:18:72;;4943:35:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4936:42;;4874:111;:::o;3986:104::-;4030:53;;;;;4077:4;4030:53;;;3042:74:72;4030:10:1;:20;;;;;4058:9;;3015:18:72;;4030:53:1;;;;;;;;;;;;;;;;;;;2543:215:20;1531:13;:11;:13::i;:::-;2627:22:::1;::::0;::::1;2623:91;;2672:31;::::0;::::1;::::0;;2700:1:::1;2672:31;::::0;::::1;3042:74:72::0;3015:18;;2672:31:20::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1796:162::-;1684:7;1710:6;1855:23;1710:6;735:10:32;1855:23:20;1851:101;;1901:40;;;;;735:10:32;1901:40:20;;;3042:74:72;3015:18;;1901:40:20;2896:226:72;5660:135:1;5729:10;:33;5751:10;5729:33;;5721:67;;;;;;;5241:2:72;5721:67:1;;;5223:21:72;5280:2;5260:18;;;5253:30;5319:23;5299:18;;;5292:51;5360:18;;5721:67:1;5039:345:72;2912:187:20;2985:16;3004:6;;;3020:17;;;;;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:276:72:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:10;223:5;219:22;212:5;209:33;199:61;;256:1;253;246:12;199:61;279:5;14:276;-1:-1:-1;;;14:276:72:o;295:162::-;389:42;382:5;378:54;371:5;368:65;358:93;;447:1;444;437:12;462:331;538:6;546;599:2;587:9;578:7;574:23;570:32;567:52;;;615:1;612;605:12;567:52;654:9;641:23;673:39;706:5;673:39;:::i;:::-;731:5;783:2;768:18;;;;755:32;;-1:-1:-1;;;462:331:72:o;798:535::-;914:6;922;930;983:2;971:9;962:7;958:23;954:32;951:52;;;999:1;996;989:12;951:52;1039:9;1026:23;1072:18;1064:6;1061:30;1058:50;;;1104:1;1101;1094:12;1058:50;1127:22;;1183:3;1165:16;;;1161:26;1158:46;;;1200:1;1197;1190:12;1158:46;1223:2;1272;1257:18;;1244:32;;-1:-1:-1;1323:2:72;1308:18;;;1295:32;;798:535;-1:-1:-1;;;798:535:72:o;1338:661::-;1513:2;1502:9;1495:21;1476:4;1545:6;1539:13;1588:6;1583:2;1572:9;1568:18;1561:34;1613:1;1623:144;1637:6;1634:1;1631:13;1623:144;;;1750:4;1734:14;;;1730:25;;1724:32;1719:2;1700:17;;;1696:26;1689:68;1652:12;1623:144;;;1627:3;1816:1;1811:2;1802:6;1791:9;1787:22;1783:31;1776:42;1945:2;1875:66;1870:2;1862:6;1858:15;1854:88;1843:9;1839:104;1835:113;1827:121;;;1986:6;1979:4;1968:9;1964:20;1957:36;1338:661;;;;;:::o;2004:887::-;2116:6;2124;2132;2140;2148;2201:3;2189:9;2180:7;2176:23;2172:33;2169:53;;;2218:1;2215;2208:12;2169:53;2257:9;2244:23;2296:1;2289:5;2286:12;2276:40;;2312:1;2309;2302:12;2276:40;2335:5;-1:-1:-1;2391:2:72;2376:18;;2363:32;2414:18;2444:14;;;2441:34;;;2471:1;2468;2461:12;2441:34;2509:6;2498:9;2494:22;2484:32;;2554:7;2547:4;2543:2;2539:13;2535:27;2525:55;;2576:1;2573;2566:12;2525:55;2616:2;2603:16;2642:2;2634:6;2631:14;2628:34;;;2658:1;2655;2648:12;2628:34;2703:7;2698:2;2689:6;2685:2;2681:15;2677:24;2674:37;2671:57;;;2724:1;2721;2714:12;2671:57;2004:887;;2755:2;2747:11;;;;;-1:-1:-1;2777:6:72;;2830:2;2815:18;;2802:32;;-1:-1:-1;2881:2:72;2866:18;2853:32;;-1:-1:-1;2004:887:72;-1:-1:-1;;;2004:887:72:o;3378:263::-;3445:6;3498:2;3486:9;3477:7;3473:23;3469:32;3466:52;;;3514:1;3511;3504:12;3466:52;3553:9;3540:23;3572:39;3605:5;3572:39;:::i;4850:184::-;4920:6;4973:2;4961:9;4952:7;4948:23;4944:32;4941:52;;;4989:1;4986;4979:12;4941:52;-1:-1:-1;5012:16:72;;4850:184;-1:-1:-1;4850:184:72:o","linkReferences":{},"immutableReferences":{"153":[{"start":447,"length":32},{"start":665,"length":32},{"start":863,"length":32},{"start":996,"length":32},{"start":1196,"length":32},{"start":1327,"length":32},{"start":1504,"length":32},{"start":1802,"length":32}]}},"methodIdentifiers":{"addStake(uint32)":"0396cb60","deposit()":"d0e30db0","entryPoint()":"b0d691fe","getDeposit()":"c399ec88","owner()":"8da5cb5b","postOp(uint8,bytes,uint256,uint256)":"7c627b21","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","unlockStake()":"bb9fe6bf","validatePaymasterUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"52b7512c","withdrawStake(address)":"c23a5cea","withdrawTo(address,uint256)":"205c2878"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"unstakeDelaySec\",\"type\":\"uint32\"}],\"name\":\"addStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entryPoint\",\"outputs\":[{\"internalType\":\"contract IEntryPoint\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IPaymaster.PostOpMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"actualGasCost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUserOpFeePerGas\",\"type\":\"uint256\"}],\"name\":\"postOp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"maxCost\",\"type\":\"uint256\"}],\"name\":\"validatePaymasterUserOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"withdrawStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"withdrawAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"MUD (https://mud.dev) by Lattice (https://lattice.xyz)\",\"details\":\"This contract is a simple paymaster that sponsors all user operations. It is intended for local development purposes.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"addStake(uint32)\":{\"params\":{\"unstakeDelaySec\":\"- The unstake delay for this paymaster. Can only be increased.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"postOp(uint8,bytes,uint256,uint256)\":{\"params\":{\"actualGasCost\":\"- Actual gas used so far (without this postOp call).\",\"actualUserOpFeePerGas\":\"- the gas price this UserOp pays. This value is based on the UserOp's maxFeePerGas and maxPriorityFee (and basefee) It is not the same as tx.gasprice, which is what the bundler pays.\",\"context\":\"- The context value returned by validatePaymasterUserOp\",\"mode\":\"- Enum with the following options: opSucceeded - User operation succeeded. opReverted - User op reverted. The paymaster still has to pay for gas. postOpReverted - never passed in a call to postOp().\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"validatePaymasterUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"params\":{\"maxCost\":\"- The maximum cost of this transaction (based on maximum gas and gas price from userOp).\",\"userOp\":\"- The user operation.\",\"userOpHash\":\"- Hash of the user's request data.\"},\"returns\":{\"context\":\" - Value to send to a postOp. Zero length to signify postOp is not required.\",\"validationData\":\"- Signature and time-range of this operation, encoded the same as the return value of validateUserOperation. <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, other values are invalid for paymaster. <6-byte> validUntil - last timestamp this operation is valid. 0 for \\\"indefinite\\\" <6-byte> validAfter - first timestamp this operation is valid Note that the validation code cannot use block.timestamp (or block.number) directly.\"}},\"withdrawStake(address)\":{\"params\":{\"withdrawAddress\":\"- The address to send withdrawn value.\"}},\"withdrawTo(address,uint256)\":{\"params\":{\"amount\":\"- Amount to withdraw.\",\"withdrawAddress\":\"- Target to send to.\"}}},\"title\":\"Generous Paymaster\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addStake(uint32)\":{\"notice\":\"Add stake for this paymaster. This method can also carry eth value to add to the current stake.\"},\"deposit()\":{\"notice\":\"Add a deposit for this paymaster, used for paying for transaction fees.\"},\"getDeposit()\":{\"notice\":\"Return current paymaster's deposit on the entryPoint.\"},\"postOp(uint8,bytes,uint256,uint256)\":{\"notice\":\"Post-operation handler. Must verify sender is the entryPoint.\"},\"unlockStake()\":{\"notice\":\"Unlock the stake, in order to withdraw it. The paymaster can't serve requests once unlocked, until it calls addStake again\"},\"validatePaymasterUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Payment validation: check if paymaster agrees to pay. Must verify sender is the entryPoint. Revert to reject this request. Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted). The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.\"},\"withdrawStake(address)\":{\"notice\":\"Withdraw the entire paymaster's stake. stake must be unlocked first (and then wait for the unstakeDelay to be over)\"},\"withdrawTo(address,uint256)\":{\"notice\":\"Withdraw value from the deposit.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/experimental/GenerousPaymaster.sol\":\"GenerousPaymaster\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":3000},\"remappings\":[\":@account-abstraction/=node_modules/@account-abstraction/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"node_modules/@account-abstraction/contracts/core/BasePaymaster.sol\":{\"keccak256\":\"0x156dd80127599c02937985a4fe44dd6424e29445af9aae886aff0f1993af43ab\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9a6afd9203f905b1d9a95f354e06d9b61328e5d27844d96100175718edb859ef\",\"dweb:/ipfs/QmYyKGTMaTyjDKY1QyThLJL8BZgUrTAxrHL3SNmRJLqnji\"]},\"node_modules/@account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e\",\"dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc\"]},\"node_modules/@account-abstraction/contracts/core/UserOperationLib.sol\":{\"keccak256\":\"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc\",\"dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS\"]},\"node_modules/@account-abstraction/contracts/interfaces/IAggregator.sol\":{\"keccak256\":\"0xf100d6fcc0c3b450b13e979b6a42c628c292a1bc340eccc2e7796b80e3975588\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://192938b5b27234d35c8098a319e879363c79f750eea4d0e409dc889a8ce5b155\",\"dweb:/ipfs/QmURpaJFPqEtkKP2ngBsgZhAGN8wAWh5XQpYmCkiz4Urz5\"]},\"node_modules/@account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0x1972a5fcb3a808b58c85af5741949ef6af11ab0debd3ae8c708171ae1ae0d0c4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://baa9837ae73b9e2362a47d42d081d7c0f3d8e878e5edb381117d94a6968949c9\",\"dweb:/ipfs/QmUmo6FUE7fv5z1WzW1YFjxp8PqaeN2JrEee9au59w3Xhe\"]},\"node_modules/@account-abstraction/contracts/interfaces/INonceManager.sol\":{\"keccak256\":\"0xd575af0f6ebbd5f0b2933307d44cd7b4e03a69f4b817a67db5409bd3c89aeecb\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b1e2dea9b05cfba9d13339ed16d96457dc861013cc4f3f35b71a80f82448db3\",\"dweb:/ipfs/QmVaGy5uGDMSiU2SzyokTjoHFyb39VVG5wtaM9KTnHyZSk\"]},\"node_modules/@account-abstraction/contracts/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x49d8dbf8a85b006bcd89bbc40e4e9e113997cc016007de85263bdae70572d07f\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://bc0d83804c1b795d5c216b3518cd176c48f90db28550f267cbd89746d6b476c8\",\"dweb:/ipfs/QmNdCm4c6hnt7f6Q8q21QjtCNZWWRUaMVEYnQHEv68VnKt\"]},\"node_modules/@account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xbe5ca9e7f254d031687419e7b96ef48c9c63e9398bbe992dc72ffc6dc14e0a04\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1fffec71c38627a26fabb423350148009579f092623fb02b471a12d973763a00\",\"dweb:/ipfs/QmRBi31QEYXHj3x1AnQ2jKa2eziZH1b9av396P3b4dw6bj\"]},\"node_modules/@account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"src/experimental/GenerousPaymaster.sol\":{\"keccak256\":\"0x1e8d827bca862e60b636f2361ea9528d94cc9c568e89447b4d0ead6f568fbba3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74f4330ec5668e78236114421cafc90d151360fe194f9b052c6df4c889b8561e\",\"dweb:/ipfs/QmaSfVWm31vGPg6sipaaKxq9x2xw9xWCk9oVsDhgVgfgPf\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IEntryPoint","name":"_entryPoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"uint32","name":"unstakeDelaySec","type":"uint32"}],"stateMutability":"payable","type":"function","name":"addStake"},{"inputs":[],"stateMutability":"payable","type":"function","name":"deposit"},{"inputs":[],"stateMutability":"view","type":"function","name":"entryPoint","outputs":[{"internalType":"contract IEntryPoint","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"enum IPaymaster.PostOpMode","name":"mode","type":"uint8"},{"internalType":"bytes","name":"context","type":"bytes"},{"internalType":"uint256","name":"actualGasCost","type":"uint256"},{"internalType":"uint256","name":"actualUserOpFeePerGas","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"postOp"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unlockStake"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"maxCost","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"validatePaymasterUserOp","outputs":[{"internalType":"bytes","name":"context","type":"bytes"},{"internalType":"uint256","name":"validationData","type":"uint256"}]},{"inputs":[{"internalType":"address payable","name":"withdrawAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdrawStake"},{"inputs":[{"internalType":"address payable","name":"withdrawAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdrawTo"}],"devdoc":{"kind":"dev","methods":{"addStake(uint32)":{"params":{"unstakeDelaySec":"- The unstake delay for this paymaster. Can only be increased."}},"owner()":{"details":"Returns the address of the current owner."},"postOp(uint8,bytes,uint256,uint256)":{"params":{"actualGasCost":"- Actual gas used so far (without this postOp call).","actualUserOpFeePerGas":"- the gas price this UserOp pays. This value is based on the UserOp's maxFeePerGas and maxPriorityFee (and basefee) It is not the same as tx.gasprice, which is what the bundler pays.","context":"- The context value returned by validatePaymasterUserOp","mode":"- Enum with the following options: opSucceeded - User operation succeeded. opReverted - User op reverted. The paymaster still has to pay for gas. postOpReverted - never passed in a call to postOp()."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"validatePaymasterUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"params":{"maxCost":"- The maximum cost of this transaction (based on maximum gas and gas price from userOp).","userOp":"- The user operation.","userOpHash":"- Hash of the user's request data."},"returns":{"context":" - Value to send to a postOp. Zero length to signify postOp is not required.","validationData":"- Signature and time-range of this operation, encoded the same as the return value of validateUserOperation. <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, other values are invalid for paymaster. <6-byte> validUntil - last timestamp this operation is valid. 0 for \"indefinite\" <6-byte> validAfter - first timestamp this operation is valid Note that the validation code cannot use block.timestamp (or block.number) directly."}},"withdrawStake(address)":{"params":{"withdrawAddress":"- The address to send withdrawn value."}},"withdrawTo(address,uint256)":{"params":{"amount":"- Amount to withdraw.","withdrawAddress":"- Target to send to."}}},"version":1},"userdoc":{"kind":"user","methods":{"addStake(uint32)":{"notice":"Add stake for this paymaster. This method can also carry eth value to add to the current stake."},"deposit()":{"notice":"Add a deposit for this paymaster, used for paying for transaction fees."},"getDeposit()":{"notice":"Return current paymaster's deposit on the entryPoint."},"postOp(uint8,bytes,uint256,uint256)":{"notice":"Post-operation handler. Must verify sender is the entryPoint."},"unlockStake()":{"notice":"Unlock the stake, in order to withdraw it. The paymaster can't serve requests once unlocked, until it calls addStake again"},"validatePaymasterUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"notice":"Payment validation: check if paymaster agrees to pay. Must verify sender is the entryPoint. Revert to reject this request. Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted). The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns."},"withdrawStake(address)":{"notice":"Withdraw the entire paymaster's stake. stake must be unlocked first (and then wait for the unstakeDelay to be over)"},"withdrawTo(address,uint256)":{"notice":"Withdraw value from the deposit."}},"version":1}},"settings":{"remappings":["@account-abstraction/=node_modules/@account-abstraction/","@openzeppelin/=node_modules/@openzeppelin/","forge-std/=node_modules/forge-std/src/"],"optimizer":{"enabled":true,"runs":3000},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/experimental/GenerousPaymaster.sol":"GenerousPaymaster"},"evmVersion":"cancun","libraries":{}},"sources":{"node_modules/@account-abstraction/contracts/core/BasePaymaster.sol":{"keccak256":"0x156dd80127599c02937985a4fe44dd6424e29445af9aae886aff0f1993af43ab","urls":["bzz-raw://9a6afd9203f905b1d9a95f354e06d9b61328e5d27844d96100175718edb859ef","dweb:/ipfs/QmYyKGTMaTyjDKY1QyThLJL8BZgUrTAxrHL3SNmRJLqnji"],"license":"GPL-3.0"},"node_modules/@account-abstraction/contracts/core/Helpers.sol":{"keccak256":"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6","urls":["bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e","dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc"],"license":"GPL-3.0"},"node_modules/@account-abstraction/contracts/core/UserOperationLib.sol":{"keccak256":"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b","urls":["bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc","dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS"],"license":"GPL-3.0"},"node_modules/@account-abstraction/contracts/interfaces/IAggregator.sol":{"keccak256":"0xf100d6fcc0c3b450b13e979b6a42c628c292a1bc340eccc2e7796b80e3975588","urls":["bzz-raw://192938b5b27234d35c8098a319e879363c79f750eea4d0e409dc889a8ce5b155","dweb:/ipfs/QmURpaJFPqEtkKP2ngBsgZhAGN8wAWh5XQpYmCkiz4Urz5"],"license":"GPL-3.0"},"node_modules/@account-abstraction/contracts/interfaces/IEntryPoint.sol":{"keccak256":"0x1972a5fcb3a808b58c85af5741949ef6af11ab0debd3ae8c708171ae1ae0d0c4","urls":["bzz-raw://baa9837ae73b9e2362a47d42d081d7c0f3d8e878e5edb381117d94a6968949c9","dweb:/ipfs/QmUmo6FUE7fv5z1WzW1YFjxp8PqaeN2JrEee9au59w3Xhe"],"license":"GPL-3.0"},"node_modules/@account-abstraction/contracts/interfaces/INonceManager.sol":{"keccak256":"0xd575af0f6ebbd5f0b2933307d44cd7b4e03a69f4b817a67db5409bd3c89aeecb","urls":["bzz-raw://3b1e2dea9b05cfba9d13339ed16d96457dc861013cc4f3f35b71a80f82448db3","dweb:/ipfs/QmVaGy5uGDMSiU2SzyokTjoHFyb39VVG5wtaM9KTnHyZSk"],"license":"GPL-3.0"},"node_modules/@account-abstraction/contracts/interfaces/IPaymaster.sol":{"keccak256":"0x49d8dbf8a85b006bcd89bbc40e4e9e113997cc016007de85263bdae70572d07f","urls":["bzz-raw://bc0d83804c1b795d5c216b3518cd176c48f90db28550f267cbd89746d6b476c8","dweb:/ipfs/QmNdCm4c6hnt7f6Q8q21QjtCNZWWRUaMVEYnQHEv68VnKt"],"license":"GPL-3.0"},"node_modules/@account-abstraction/contracts/interfaces/IStakeManager.sol":{"keccak256":"0xbe5ca9e7f254d031687419e7b96ef48c9c63e9398bbe992dc72ffc6dc14e0a04","urls":["bzz-raw://1fffec71c38627a26fabb423350148009579f092623fb02b471a12d973763a00","dweb:/ipfs/QmRBi31QEYXHj3x1AnQ2jKa2eziZH1b9av396P3b4dw6bj"],"license":"GPL-3.0-only"},"node_modules/@account-abstraction/contracts/interfaces/PackedUserOperation.sol":{"keccak256":"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359","urls":["bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be","dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3"],"license":"GPL-3.0"},"node_modules/@openzeppelin/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"src/experimental/GenerousPaymaster.sol":{"keccak256":"0x1e8d827bca862e60b636f2361ea9528d94cc9c568e89447b4d0ead6f568fbba3","urls":["bzz-raw://74f4330ec5668e78236114421cafc90d151360fe194f9b052c6df4c889b8561e","dweb:/ipfs/QmaSfVWm31vGPg6sipaaKxq9x2xw9xWCk9oVsDhgVgfgPf"],"license":"MIT"}},"version":1},"id":69}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@latticexyz/paymaster",
3
+ "version": "2.2.15-a7625b97410346b1187e66803dde5194084312fd",
4
+ "description": "Paymaster contracts",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/latticexyz/mud.git",
8
+ "directory": "packages/paymaster"
9
+ },
10
+ "license": "MIT",
11
+ "type": "module",
12
+ "exports": {
13
+ "./out/*": "./out/*"
14
+ },
15
+ "typesVersions": {
16
+ "*": {}
17
+ },
18
+ "files": [
19
+ "out/GenerousPaymaster.sol",
20
+ "src"
21
+ ],
22
+ "dependencies": {},
23
+ "devDependencies": {
24
+ "@account-abstraction/contracts": "0.7.0",
25
+ "@openzeppelin/contracts": "5.1.0",
26
+ "forge-std": "https://github.com/foundry-rs/forge-std.git#1eea5bae12ae557d589f9f0f0edae2faa47cb262",
27
+ "solhint": "^3.3.7",
28
+ "@latticexyz/abi-ts": "2.2.15-a7625b97410346b1187e66803dde5194084312fd"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "scripts": {
34
+ "build": "pnpm run build:abi && pnpm run build:abi-ts",
35
+ "build:abi": "forge build",
36
+ "build:abi-ts": "abi-ts",
37
+ "clean": "pnpm run clean:abi",
38
+ "clean:abi": "forge clean",
39
+ "dev": "echo 'nothing to watch'",
40
+ "lint": "solhint --config ./.solhint.json 'src/**/*.sol'",
41
+ "test": "forge test",
42
+ "test:ci": "pnpm run test"
43
+ }
44
+ }
@@ -0,0 +1,61 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.24;
3
+
4
+ import { IPaymaster } from "@account-abstraction/contracts/interfaces/IPaymaster.sol";
5
+ import { IEntryPoint } from "@account-abstraction/contracts/interfaces/IEntryPoint.sol";
6
+ import { PackedUserOperation } from "@account-abstraction/contracts/interfaces/PackedUserOperation.sol";
7
+ import { BasePaymaster } from "@account-abstraction/contracts/core/BasePaymaster.sol";
8
+
9
+ /**
10
+ * @title Generous Paymaster
11
+ * @author MUD (https://mud.dev) by Lattice (https://lattice.xyz)
12
+ * @dev This contract is a simple paymaster that sponsors all user operations.
13
+ * It is intended for local development purposes.
14
+ */
15
+ contract GenerousPaymaster is BasePaymaster {
16
+ constructor(IEntryPoint _entryPoint) BasePaymaster(_entryPoint) {}
17
+
18
+ /**
19
+ * Payment validation: check if paymaster agrees to pay.
20
+ * Revert to reject this request.
21
+ * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted).
22
+ * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns.
23
+ * @param userOp - The user operation.
24
+ * @param userOpHash - Hash of the user's request data.
25
+ * @param maxCost - The maximum cost of this transaction (based on maximum gas and gas price from userOp).
26
+ * @return context - Value to send to a postOp. Zero length to signify postOp is not required.
27
+ * @return validationData - Signature and time-range of this operation, encoded the same as the return
28
+ * value of validateUserOperation.
29
+ * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure,
30
+ * other values are invalid for paymaster.
31
+ * <6-byte> validUntil - last timestamp this operation is valid. 0 for "indefinite"
32
+ * <6-byte> validAfter - first timestamp this operation is valid
33
+ * Note that the validation code cannot use block.timestamp (or block.number) directly.
34
+ */
35
+ function _validatePaymasterUserOp(
36
+ PackedUserOperation calldata userOp,
37
+ bytes32 userOpHash,
38
+ uint256 maxCost
39
+ ) internal override returns (bytes memory context, uint256 validationData) {
40
+ // No validation required, since this paymaster sponsors all user operations.
41
+ }
42
+
43
+ /**
44
+ * Post-operation handler.
45
+ * @param mode - Enum with the following options:
46
+ * opSucceeded - User operation succeeded.
47
+ * opReverted - User op reverted. The paymaster still has to pay for gas.
48
+ * postOpReverted - never passed in a call to postOp().
49
+ * @param context - The context value returned by validatePaymasterUserOp
50
+ * @param actualGasCost - Actual gas used so far (without this postOp call).
51
+ * @param actualUserOpFeePerGas - the gas price this UserOp pays. This value is based on the UserOp's maxFeePerGas
52
+ * and maxPriorityFee (and basefee)
53
+ * It is not the same as tx.gasprice, which is what the bundler pays.
54
+ */
55
+ function _postOp(
56
+ IPaymaster.PostOpMode mode,
57
+ bytes calldata context,
58
+ uint256 actualGasCost,
59
+ uint256 actualUserOpFeePerGas
60
+ ) internal override {}
61
+ }