@zoralabs/limit-orders 0.2.0 → 0.2.2

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 (154) hide show
  1. package/.turbo/turbo-build$colon$js.log +50 -49
  2. package/CHANGELOG.md +73 -0
  3. package/abis/ISetLimitOrderConfig.json +27 -0
  4. package/abis/IWETH.json +118 -0
  5. package/abis/IZoraLimitOrderBook.json +5 -0
  6. package/abis/LimitOrderLiquidity.json +7 -0
  7. package/abis/LimitOrderViews.json +62 -0
  8. package/abis/{SimpleAccessManaged.json → Ownable.json} +29 -10
  9. package/abis/Ownable2Step.json +115 -0
  10. package/abis/PermittedCallers.json +181 -0
  11. package/abis/SwapWithLimitOrders.json +134 -14
  12. package/abis/ZoraLimitOrderBook.json +187 -35
  13. package/cache/solidity-files-cache.json +1 -1
  14. package/dist/index.cjs +219 -34
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.js +219 -34
  17. package/dist/index.js.map +1 -1
  18. package/dist/wagmiGenerated.d.ts +254 -41
  19. package/dist/wagmiGenerated.d.ts.map +1 -1
  20. package/out/BalanceDelta.sol/BalanceDeltaLibrary.json +1 -1
  21. package/out/BeforeSwapDelta.sol/BeforeSwapDeltaLibrary.json +1 -1
  22. package/out/BitMath.sol/BitMath.json +1 -1
  23. package/out/BytesLib.sol/BytesLib.json +1 -1
  24. package/out/CoinCommon.sol/CoinCommon.json +1 -1
  25. package/out/CoinConfigurationVersions.sol/CoinConfigurationVersions.json +1 -1
  26. package/out/CoinConstants.sol/CoinConstants.json +1 -1
  27. package/out/Context.sol/Context.json +1 -1
  28. package/out/Currency.sol/CurrencyLibrary.json +1 -1
  29. package/out/CurrencyReserves.sol/CurrencyReserves.json +1 -1
  30. package/out/CustomRevert.sol/CustomRevert.json +1 -1
  31. package/out/DopplerMath.sol/DopplerMath.json +1 -1
  32. package/out/FixedPoint128.sol/FixedPoint128.json +1 -1
  33. package/out/FixedPoint96.sol/FixedPoint96.json +1 -1
  34. package/out/FullMath.sol/FullMath.json +1 -1
  35. package/out/IAllowanceTransfer.sol/IAllowanceTransfer.json +1 -1
  36. package/out/ICoin.sol/ICoin.json +1 -1
  37. package/out/ICoin.sol/IHasCoinType.json +1 -1
  38. package/out/ICoin.sol/IHasPoolKey.json +1 -1
  39. package/out/ICoin.sol/IHasSwapPath.json +1 -1
  40. package/out/ICoin.sol/IHasTotalSupplyForPositions.json +1 -1
  41. package/out/IDeployedCoinVersionLookup.sol/IDeployedCoinVersionLookup.json +1 -1
  42. package/out/IDopplerErrors.sol/IDopplerErrors.json +1 -1
  43. package/out/IEIP712.sol/IEIP712.json +1 -1
  44. package/out/IERC1363.sol/IERC1363.json +1 -1
  45. package/out/IERC165.sol/IERC165.json +1 -1
  46. package/out/IERC20.sol/IERC20.json +1 -1
  47. package/out/IERC20Minimal.sol/IERC20Minimal.json +1 -1
  48. package/out/IERC6909Claims.sol/IERC6909Claims.json +1 -1
  49. package/out/IERC7572.sol/IERC7572.json +1 -1
  50. package/out/IExtsload.sol/IExtsload.json +1 -1
  51. package/out/IExttload.sol/IExttload.json +1 -1
  52. package/out/IHasRewardsRecipients.sol/IHasRewardsRecipients.json +1 -1
  53. package/out/IHooks.sol/IHooks.json +1 -1
  54. package/out/IMsgSender.sol/IMsgSender.json +1 -1
  55. package/out/IPoolManager.sol/IPoolManager.json +1 -1
  56. package/out/IProtocolFees.sol/IProtocolFees.json +1 -1
  57. package/out/ISetLimitOrderConfig.sol/ISetLimitOrderConfig.json +1 -0
  58. package/out/ISupportsLimitOrderFill.sol/ISupportsLimitOrderFill.json +1 -1
  59. package/out/ISwapPathRouter.sol/ISwapPathRouter.json +1 -1
  60. package/out/ISwapRouter.sol/ISwapRouter.json +1 -1
  61. package/out/IUniswapV3SwapCallback.sol/IUniswapV3SwapCallback.json +1 -1
  62. package/out/IUpgradeableV4Hook.sol/IUpgradeableDestinationV4Hook.json +1 -1
  63. package/out/IUpgradeableV4Hook.sol/IUpgradeableDestinationV4HookWithUpdateableFee.json +1 -1
  64. package/out/IUpgradeableV4Hook.sol/IUpgradeableV4Hook.json +1 -1
  65. package/out/IWETH.sol/IWETH.json +1 -0
  66. package/out/IZoraHookRegistry.sol/IZoraHookRegistry.json +1 -1
  67. package/out/IZoraLimitOrderBook.sol/IZoraLimitOrderBook.json +1 -1
  68. package/out/IZoraLimitOrderBookCoinsInterface.sol/IZoraLimitOrderBookCoinsInterface.json +1 -1
  69. package/out/IZoraV4CoinHook.sol/IZoraV4CoinHook.json +1 -1
  70. package/out/LimitOrderBitmap.sol/LimitOrderBitmap.json +1 -1
  71. package/out/LimitOrderCommon.sol/LimitOrderCommon.json +1 -1
  72. package/out/LimitOrderCreate.sol/LimitOrderCreate.json +1 -1
  73. package/out/LimitOrderFill.sol/LimitOrderFill.json +1 -1
  74. package/out/LimitOrderLiquidity.sol/LimitOrderLiquidity.json +1 -1
  75. package/out/LimitOrderQueues.sol/LimitOrderQueues.json +1 -1
  76. package/out/LimitOrderStorage.sol/LimitOrderStorage.json +1 -1
  77. package/out/LimitOrderTypes.sol/LimitOrderTypes.json +1 -1
  78. package/out/LimitOrderViews.sol/LimitOrderViews.json +1 -0
  79. package/out/LimitOrderWithdraw.sol/LimitOrderWithdraw.json +1 -1
  80. package/out/LiquidityAmounts.sol/LiquidityAmounts.json +1 -1
  81. package/out/LiquidityMath.sol/LiquidityMath.json +1 -1
  82. package/out/Lock.sol/Lock.json +1 -1
  83. package/out/NonzeroDeltaCount.sol/NonzeroDeltaCount.json +1 -1
  84. package/out/Ownable.sol/Ownable.json +1 -0
  85. package/out/Ownable2Step.sol/Ownable2Step.json +1 -0
  86. package/out/Path.sol/Path.json +1 -1
  87. package/out/PathKey.sol/PathKeyLibrary.json +1 -1
  88. package/out/Permit2Payments.sol/Permit2Payments.json +1 -1
  89. package/out/PermittedCallers.sol/PermittedCallers.json +1 -0
  90. package/out/PoolId.sol/PoolIdLibrary.json +1 -1
  91. package/out/Position.sol/Position.json +1 -1
  92. package/out/SafeCast.sol/SafeCast.json +1 -1
  93. package/out/SafeCast160.sol/SafeCast160.json +1 -1
  94. package/out/SafeERC20.sol/SafeERC20.json +1 -1
  95. package/out/SqrtPriceMath.sol/SqrtPriceMath.json +1 -1
  96. package/out/StateLibrary.sol/StateLibrary.json +1 -1
  97. package/out/SwapLimitOrders.sol/SwapLimitOrders.json +1 -1
  98. package/out/SwapWithLimitOrders.sol/SwapWithLimitOrders.json +1 -1
  99. package/out/TickBitmap.sol/TickBitmap.json +1 -1
  100. package/out/TickMath.sol/TickMath.json +1 -1
  101. package/out/TransientSlot.sol/TransientSlot.json +1 -1
  102. package/out/TransientStateLibrary.sol/TransientStateLibrary.json +1 -1
  103. package/out/UniV4SwapToCurrency.sol/UniV4SwapToCurrency.json +1 -1
  104. package/out/UnsafeMath.sol/UnsafeMath.json +1 -1
  105. package/out/V3ToV4SwapLib.sol/V3ToV4SwapLib.json +1 -1
  106. package/out/ZoraLimitOrderBook.sol/ZoraLimitOrderBook.json +1 -1
  107. package/out/build-info/37e0124d88d60569.json +1 -0
  108. package/out/uniswap/BitMath.sol/BitMath.json +1 -1
  109. package/out/uniswap/CustomRevert.sol/CustomRevert.json +1 -1
  110. package/out/uniswap/FullMath.sol/FullMath.json +1 -1
  111. package/out/uniswap/SafeCast.sol/SafeCast.json +1 -1
  112. package/out/uniswap/TickMath.sol/TickMath.json +1 -1
  113. package/package/wagmiGenerated.ts +218 -33
  114. package/package.json +1 -1
  115. package/src/IZoraLimitOrderBook.sol +5 -5
  116. package/src/ZoraLimitOrderBook.sol +24 -41
  117. package/src/access/PermittedCallers.sol +41 -0
  118. package/src/libs/LimitOrderBitmap.sol +0 -51
  119. package/src/libs/LimitOrderCommon.sol +48 -30
  120. package/src/libs/LimitOrderCreate.sol +5 -18
  121. package/src/libs/LimitOrderFill.sol +32 -161
  122. package/src/libs/LimitOrderLiquidity.sol +92 -71
  123. package/src/libs/LimitOrderViews.sol +168 -0
  124. package/src/libs/LimitOrderWithdraw.sol +13 -4
  125. package/src/libs/SwapLimitOrders.sol +14 -7
  126. package/src/router/ISetLimitOrderConfig.sol +12 -0
  127. package/src/router/SwapWithLimitOrders.sol +46 -33
  128. package/test/LimitOrderAccessControl.t.sol +173 -156
  129. package/test/LimitOrderBitmap.t.sol +13 -7
  130. package/test/LimitOrderFill.t.sol +42 -4
  131. package/test/LimitOrderLibraries.t.sol +18 -10
  132. package/test/LimitOrderLiquidityPayouts.t.sol +280 -3
  133. package/test/LimitOrderWithdraw.t.sol +28 -1
  134. package/test/SwapWithLimitOrders.t.sol +3 -5
  135. package/test/SwapWithLimitOrdersRouter.t.sol +108 -13
  136. package/test/gas/LimitOrderFillGas.t.sol +0 -7
  137. package/test/gas/LimitOrderSwapGas.t.sol +0 -6
  138. package/test/unit/LimitOrderBitmapUnit.t.sol +0 -134
  139. package/test/unit/LimitOrderCreateUnit.t.sol +32 -0
  140. package/test/unit/SwapLimitOrdersUnit.t.sol +231 -33
  141. package/test/unit/SwapLimitOrdersValidation.t.sol +28 -42
  142. package/test/unit/SwapWithLimitOrdersUnit.t.sol +21 -88
  143. package/test/utils/BaseTest.sol +34 -22
  144. package/test/utils/MockWETH.sol +39 -0
  145. package/test/utils/TestableZoraLimitOrderBook.sol +5 -7
  146. package/abis/IAuthority.json +0 -31
  147. package/abis/SimpleAccessManager.json +0 -351
  148. package/out/IAuthority.sol/IAuthority.json +0 -1
  149. package/out/SimpleAccessManaged.sol/SimpleAccessManaged.json +0 -1
  150. package/out/SimpleAccessManager.sol/SimpleAccessManager.json +0 -1
  151. package/out/build-info/69718f10d1dc37f0.json +0 -1
  152. package/src/access/SimpleAccessManaged.sol +0 -76
  153. package/src/access/SimpleAccessManager.sol +0 -268
  154. package/test/SimpleAccessManager.t.sol +0 -420
@@ -1,351 +0,0 @@
1
- [
2
- {
3
- "type": "constructor",
4
- "inputs": [
5
- {
6
- "name": "initialAdmin",
7
- "type": "address",
8
- "internalType": "address"
9
- },
10
- {
11
- "name": "initialFunctionRoles",
12
- "type": "tuple[]",
13
- "internalType": "struct SimpleAccessManager.InitialFunctionRole[]",
14
- "components": [
15
- {
16
- "name": "selector",
17
- "type": "bytes4",
18
- "internalType": "bytes4"
19
- },
20
- {
21
- "name": "roleId",
22
- "type": "uint64",
23
- "internalType": "uint64"
24
- }
25
- ]
26
- }
27
- ],
28
- "stateMutability": "nonpayable"
29
- },
30
- {
31
- "type": "function",
32
- "name": "ADMIN_ROLE",
33
- "inputs": [],
34
- "outputs": [
35
- {
36
- "name": "",
37
- "type": "uint64",
38
- "internalType": "uint64"
39
- }
40
- ],
41
- "stateMutability": "view"
42
- },
43
- {
44
- "type": "function",
45
- "name": "PUBLIC_ROLE",
46
- "inputs": [],
47
- "outputs": [
48
- {
49
- "name": "",
50
- "type": "uint64",
51
- "internalType": "uint64"
52
- }
53
- ],
54
- "stateMutability": "view"
55
- },
56
- {
57
- "type": "function",
58
- "name": "canCall",
59
- "inputs": [
60
- {
61
- "name": "caller",
62
- "type": "address",
63
- "internalType": "address"
64
- },
65
- {
66
- "name": "",
67
- "type": "address",
68
- "internalType": "address"
69
- },
70
- {
71
- "name": "selector",
72
- "type": "bytes4",
73
- "internalType": "bytes4"
74
- }
75
- ],
76
- "outputs": [
77
- {
78
- "name": "",
79
- "type": "bool",
80
- "internalType": "bool"
81
- }
82
- ],
83
- "stateMutability": "view"
84
- },
85
- {
86
- "type": "function",
87
- "name": "getFunctionRole",
88
- "inputs": [
89
- {
90
- "name": "selector",
91
- "type": "bytes4",
92
- "internalType": "bytes4"
93
- }
94
- ],
95
- "outputs": [
96
- {
97
- "name": "",
98
- "type": "uint64",
99
- "internalType": "uint64"
100
- }
101
- ],
102
- "stateMutability": "view"
103
- },
104
- {
105
- "type": "function",
106
- "name": "getRoleAdmin",
107
- "inputs": [
108
- {
109
- "name": "roleId",
110
- "type": "uint64",
111
- "internalType": "uint64"
112
- }
113
- ],
114
- "outputs": [
115
- {
116
- "name": "",
117
- "type": "uint64",
118
- "internalType": "uint64"
119
- }
120
- ],
121
- "stateMutability": "view"
122
- },
123
- {
124
- "type": "function",
125
- "name": "grantRole",
126
- "inputs": [
127
- {
128
- "name": "roleId",
129
- "type": "uint64",
130
- "internalType": "uint64"
131
- },
132
- {
133
- "name": "account",
134
- "type": "address",
135
- "internalType": "address"
136
- }
137
- ],
138
- "outputs": [],
139
- "stateMutability": "nonpayable"
140
- },
141
- {
142
- "type": "function",
143
- "name": "hasRole",
144
- "inputs": [
145
- {
146
- "name": "roleId",
147
- "type": "uint64",
148
- "internalType": "uint64"
149
- },
150
- {
151
- "name": "account",
152
- "type": "address",
153
- "internalType": "address"
154
- }
155
- ],
156
- "outputs": [
157
- {
158
- "name": "",
159
- "type": "bool",
160
- "internalType": "bool"
161
- }
162
- ],
163
- "stateMutability": "view"
164
- },
165
- {
166
- "type": "function",
167
- "name": "renounceRole",
168
- "inputs": [
169
- {
170
- "name": "roleId",
171
- "type": "uint64",
172
- "internalType": "uint64"
173
- },
174
- {
175
- "name": "callerConfirmation",
176
- "type": "address",
177
- "internalType": "address"
178
- }
179
- ],
180
- "outputs": [],
181
- "stateMutability": "nonpayable"
182
- },
183
- {
184
- "type": "function",
185
- "name": "revokeRole",
186
- "inputs": [
187
- {
188
- "name": "roleId",
189
- "type": "uint64",
190
- "internalType": "uint64"
191
- },
192
- {
193
- "name": "account",
194
- "type": "address",
195
- "internalType": "address"
196
- }
197
- ],
198
- "outputs": [],
199
- "stateMutability": "nonpayable"
200
- },
201
- {
202
- "type": "function",
203
- "name": "setFunctionRole",
204
- "inputs": [
205
- {
206
- "name": "selector",
207
- "type": "bytes4",
208
- "internalType": "bytes4"
209
- },
210
- {
211
- "name": "roleId",
212
- "type": "uint64",
213
- "internalType": "uint64"
214
- }
215
- ],
216
- "outputs": [],
217
- "stateMutability": "nonpayable"
218
- },
219
- {
220
- "type": "function",
221
- "name": "setRoleAdmin",
222
- "inputs": [
223
- {
224
- "name": "roleId",
225
- "type": "uint64",
226
- "internalType": "uint64"
227
- },
228
- {
229
- "name": "admin",
230
- "type": "uint64",
231
- "internalType": "uint64"
232
- }
233
- ],
234
- "outputs": [],
235
- "stateMutability": "nonpayable"
236
- },
237
- {
238
- "type": "event",
239
- "name": "FunctionRoleUpdated",
240
- "inputs": [
241
- {
242
- "name": "selector",
243
- "type": "bytes4",
244
- "indexed": true,
245
- "internalType": "bytes4"
246
- },
247
- {
248
- "name": "roleId",
249
- "type": "uint64",
250
- "indexed": true,
251
- "internalType": "uint64"
252
- }
253
- ],
254
- "anonymous": false
255
- },
256
- {
257
- "type": "event",
258
- "name": "RoleAdminChanged",
259
- "inputs": [
260
- {
261
- "name": "roleId",
262
- "type": "uint64",
263
- "indexed": true,
264
- "internalType": "uint64"
265
- },
266
- {
267
- "name": "admin",
268
- "type": "uint64",
269
- "indexed": true,
270
- "internalType": "uint64"
271
- }
272
- ],
273
- "anonymous": false
274
- },
275
- {
276
- "type": "event",
277
- "name": "RoleGranted",
278
- "inputs": [
279
- {
280
- "name": "roleId",
281
- "type": "uint64",
282
- "indexed": true,
283
- "internalType": "uint64"
284
- },
285
- {
286
- "name": "account",
287
- "type": "address",
288
- "indexed": true,
289
- "internalType": "address"
290
- }
291
- ],
292
- "anonymous": false
293
- },
294
- {
295
- "type": "event",
296
- "name": "RoleRevoked",
297
- "inputs": [
298
- {
299
- "name": "roleId",
300
- "type": "uint64",
301
- "indexed": true,
302
- "internalType": "uint64"
303
- },
304
- {
305
- "name": "account",
306
- "type": "address",
307
- "indexed": true,
308
- "internalType": "address"
309
- }
310
- ],
311
- "anonymous": false
312
- },
313
- {
314
- "type": "error",
315
- "name": "AccessManagerInvalidInitialAdmin",
316
- "inputs": [
317
- {
318
- "name": "initialAdmin",
319
- "type": "address",
320
- "internalType": "address"
321
- }
322
- ]
323
- },
324
- {
325
- "type": "error",
326
- "name": "AccessManagerLockedRole",
327
- "inputs": [
328
- {
329
- "name": "roleId",
330
- "type": "uint64",
331
- "internalType": "uint64"
332
- }
333
- ]
334
- },
335
- {
336
- "type": "error",
337
- "name": "AccessManagerUnauthorizedAccount",
338
- "inputs": [
339
- {
340
- "name": "account",
341
- "type": "address",
342
- "internalType": "address"
343
- },
344
- {
345
- "name": "roleId",
346
- "type": "uint64",
347
- "internalType": "uint64"
348
- }
349
- ]
350
- }
351
- ]
@@ -1 +0,0 @@
1
- {"abi":[{"type":"function","name":"canCall","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"canCall(address,address,bytes4)":"b7009613"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"canCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Standard interface for permissioning originally defined in Dappsys.\",\"kind\":\"dev\",\"methods\":{\"canCall(address,address,bytes4)\":{\"details\":\"Returns true if the caller can invoke on a target the function identified by a function selector.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol\":\"IAuthority\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol\":{\"keccak256\":\"0x9c9a58dd831b9bb4a0ea47d96b53c13ab9a6e4270a518ea395b1424092fd74dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d806b0c87fbcaf0cb827b51203b27f8289b13743aeadb5867fbbe041fcf87a92\",\"dweb:/ipfs/QmfTEGiDGxKDaqBuBJ5wWJockGDrsEBZnW5S7UWrKhAxGc\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"canCall","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"canCall(address,address,bytes4)":{"details":"Returns true if the caller can invoke on a target the function identified by a function selector."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol":"IAuthority"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol":{"keccak256":"0x9c9a58dd831b9bb4a0ea47d96b53c13ab9a6e4270a518ea395b1424092fd74dc","urls":["bzz-raw://d806b0c87fbcaf0cb827b51203b27f8289b13743aeadb5867fbbe041fcf87a92","dweb:/ipfs/QmfTEGiDGxKDaqBuBJ5wWJockGDrsEBZnW5S7UWrKhAxGc"],"license":"MIT"}},"version":1},"id":0}
@@ -1 +0,0 @@
1
- {"abi":[{"type":"function","name":"authority","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"setAuthority","inputs":[{"name":"newAuthority","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AuthorityUpdated","inputs":[{"name":"authority","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessManagedInvalidAuthority","inputs":[{"name":"authority","type":"address","internalType":"address"}]},{"type":"error","name":"AccessManagedUnauthorized","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"authority()":"bf7e214f","setAuthority(address)":"7a9e5e4b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AccessManagedInvalidAuthority\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccessManagedUnauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract module makes a contract \\\"access managed\\\", allowing an authority contract to control access to specific functions. This is a simplified version of OpenZeppelin's AccessManaged that removes time-based access control features (delays, scheduled operations) and only supports immediate access checks. The authority is set during construction and can only be changed by the current authority.\",\"errors\":{\"AccessManagedInvalidAuthority(address)\":[{\"details\":\"Thrown when trying to set an invalid authority (e.g., not a contract)\"}],\"AccessManagedUnauthorized()\":[{\"details\":\"Thrown when an unauthorized caller attempts to access a restricted function\"}]},\"events\":{\"AuthorityUpdated(address)\":{\"details\":\"Emitted when the authority is updated\"}},\"kind\":\"dev\",\"methods\":{\"authority()\":{\"details\":\"Returns the current authority address.\",\"returns\":{\"_0\":\"The address of the authority contract\"}},\"constructor\":{\"details\":\"Initializes the contract with an initial authority.\",\"params\":{\"initialAuthority\":\"The address of the authority contract\"}},\"setAuthority(address)\":{\"details\":\"Transfers control of the contract to a new authority. Can only be called by the current authority.\",\"params\":{\"newAuthority\":\"The address of the new authority contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/access/SimpleAccessManaged.sol\":\"SimpleAccessManaged\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol\":{\"keccak256\":\"0x9c9a58dd831b9bb4a0ea47d96b53c13ab9a6e4270a518ea395b1424092fd74dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d806b0c87fbcaf0cb827b51203b27f8289b13743aeadb5867fbbe041fcf87a92\",\"dweb:/ipfs/QmfTEGiDGxKDaqBuBJ5wWJockGDrsEBZnW5S7UWrKhAxGc\"]},\"src/access/SimpleAccessManaged.sol\":{\"keccak256\":\"0xd92f23941a7a5709efdb66928036b6812d6742eca3b4d7d1ff42197a7b8916c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ea18ad22ef178f454a65f55fcb29cdbd45396e1da3bab178357c54162be0269\",\"dweb:/ipfs/QmZVGjcJ1v6bFaG3VTkGZHz3Fb32xZ4KBDmAxdJHxdQzBM\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"authority","type":"address"}],"type":"error","name":"AccessManagedInvalidAuthority"},{"inputs":[],"type":"error","name":"AccessManagedUnauthorized"},{"inputs":[{"internalType":"address","name":"authority","type":"address","indexed":false}],"type":"event","name":"AuthorityUpdated","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"authority","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"newAuthority","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAuthority"}],"devdoc":{"kind":"dev","methods":{"authority()":{"details":"Returns the current authority address.","returns":{"_0":"The address of the authority contract"}},"constructor":{"details":"Initializes the contract with an initial authority.","params":{"initialAuthority":"The address of the authority contract"}},"setAuthority(address)":{"details":"Transfers control of the contract to a new authority. Can only be called by the current authority.","params":{"newAuthority":"The address of the new authority contract"}}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/access/SimpleAccessManaged.sol":"SimpleAccessManaged"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol":{"keccak256":"0x9c9a58dd831b9bb4a0ea47d96b53c13ab9a6e4270a518ea395b1424092fd74dc","urls":["bzz-raw://d806b0c87fbcaf0cb827b51203b27f8289b13743aeadb5867fbbe041fcf87a92","dweb:/ipfs/QmfTEGiDGxKDaqBuBJ5wWJockGDrsEBZnW5S7UWrKhAxGc"],"license":"MIT"},"src/access/SimpleAccessManaged.sol":{"keccak256":"0xd92f23941a7a5709efdb66928036b6812d6742eca3b4d7d1ff42197a7b8916c8","urls":["bzz-raw://6ea18ad22ef178f454a65f55fcb29cdbd45396e1da3bab178357c54162be0269","dweb:/ipfs/QmZVGjcJ1v6bFaG3VTkGZHz3Fb32xZ4KBDmAxdJHxdQzBM"],"license":"MIT"}},"version":1},"id":76}
@@ -1 +0,0 @@
1
- {"abi":[{"type":"constructor","inputs":[{"name":"initialAdmin","type":"address","internalType":"address"},{"name":"initialFunctionRoles","type":"tuple[]","internalType":"struct SimpleAccessManager.InitialFunctionRole[]","components":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"roleId","type":"uint64","internalType":"uint64"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"PUBLIC_ROLE","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"canCall","inputs":[{"name":"caller","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getFunctionRole","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFunctionRole","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"roleId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRoleAdmin","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"},{"name":"admin","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"FunctionRoleUpdated","inputs":[{"name":"selector","type":"bytes4","indexed":true,"internalType":"bytes4"},{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"admin","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"account","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"roleId","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"account","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessManagerInvalidInitialAdmin","inputs":[{"name":"initialAdmin","type":"address","internalType":"address"}]},{"type":"error","name":"AccessManagerLockedRole","inputs":[{"name":"roleId","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"AccessManagerUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"roleId","type":"uint64","internalType":"uint64"}]}],"bytecode":{"object":"0x60806040523461022357610919803803806100198161023b565b9283398101906040818303126102235780516001600160a01b0381169190829003610223576020810151906001600160401b038211610223570182601f82011215610223578051906001600160401b0382116102275761007e60208360051b0161023b565b9360208086858152019360061b8301019181831161022357602001925b8284106101bc57858580156101a9575f8181525f5160206108f95f395f51905f52602052604090205460ff161561015b575b505f5b815181101561014c576001906001600160e01b03196100ef8285610260565b515116828060401b0360206101048487610260565b5101511690805f525f60205260405f2082858060401b03198254161790557fa3e0b2a435476f7258ef6426c5ccc383db5cef84c531fc21905af2a5872a6d015f80a3016100d0565b60405161067090816102898239f35b5f8181525f5160206108f95f395f51905f5260205260408120805460ff191660011790557faad194d4c741066ed559517462aa599f8be124ae17cf4832c66a3a2958f277268180a3816100cd565b630409d6d160e11b5f525f60045260245ffd5b6040848303126102235760408051919082016001600160401b038111838210176102275760405284516001600160e01b0319811681036102235782526020850151906001600160401b0382168203610223578260209283604095015281520193019261009b565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b0381118382101761022757604052565b80518210156102745760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806330cae187146104625780633ca7c02a14610441578063530dd4561461040057806375b238fc146103e65780638e11fde6146103a5578063aa682ab614610303578063b428b0b0146101f9578063b700961314610199578063b7d2b16214610128578063d1f856ee146100f25763fe0776f514610092575f80fd5b346100ee5760403660031901126100ee576100ab610501565b6100b3610544565b336001600160a01b038216036100ce576100cc916105d8565b005b6001600160401b038263f07e038f60e01b5f52336004521660245260445ffd5b5f80fd5b346100ee5760403660031901126100ee57602061011e610110610501565b610118610544565b90610596565b6040519015158152f35b346100ee5760403660031901126100ee57610141610501565b610149610544565b6001600160401b0382165f5260026020526001600160401b0360405f205416916101733384610596565b15610182576100cc92506105d8565b8263f07e038f60e01b5f523360045260245260445ffd5b346100ee5760603660031901126100ee576004356001600160a01b03811681036100ee576101c5610544565b5060443563ffffffff60e01b81168091036100ee5760209161011e915f525f83526001600160401b0360405f205416610596565b346100ee5760403660031901126100ee57610212610501565b6001600160401b03610222610544565b911690815f5260026020526001600160401b0360405f2054166102453382610596565b156102ed57506001600160401b0382146102da57815f52600160205260405f2060018060a01b0382165f5260205260ff60405f2054161561028257005b815f52600160205260405f2060018060a01b0382165f5260205260405f20600160ff1982541617905560018060a01b0316907faad194d4c741066ed559517462aa599f8be124ae17cf4832c66a3a2958f277265f80a3005b5063061c6a4360e21b5f5260045260245ffd5b63f07e038f60e01b5f523360045260245260445ffd5b346100ee5760403660031901126100ee5761031c61052d565b610324610517565b9061032e3361055a565b1561038e576001600160e01b0319165f818152602081905260408120805467ffffffffffffffff19166001600160401b039490941693841790557fa3e0b2a435476f7258ef6426c5ccc383db5cef84c531fc21905af2a5872a6d019080a3005b63f07e038f60e01b5f52336004525f60245260445ffd5b346100ee5760203660031901126100ee576001600160e01b03196103c761052d565b165f525f60205260206001600160401b0360405f205416604051908152f35b346100ee575f3660031901126100ee5760206040515f8152f35b346100ee5760203660031901126100ee576001600160401b03610421610501565b165f52600260205260206001600160401b0360405f205416604051908152f35b346100ee575f3660031901126100ee5760206040516001600160401b038152f35b346100ee5760403660031901126100ee5761047b610501565b610483610517565b9061048d3361055a565b1561038e576001600160401b031690811580156104f1575b6102da576001600160401b0390825f52600260205260405f20828216831982541617905516907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63405f80a3005b506001600160401b0382146104a5565b600435906001600160401b03821682036100ee57565b602435906001600160401b03821682036100ee57565b600435906001600160e01b0319821682036100ee57565b602435906001600160a01b03821682036100ee57565b6001600160a01b03165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090205460ff1690565b6001600160401b03166001600160401b0381146105d1575f52600160205260405f209060018060a01b03165f5260205260ff60405f20541690565b5050600190565b6001600160401b0316906001600160401b0382146102da57815f52600160205260405f2060018060a01b0382165f5260205260ff60405f20541661061a575050565b5f8281526001602090815260408083206001600160a01b0394909416808452939091528120805460ff191690559091907ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c1669080a356a6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49","sourceMap":"1139:11059:77:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5091:26;;;;5087:108;;-1:-1:-1;1498:16:77;;;-1:-1:-1;;;;;;;;;;;1139:11059:77;1498:16;1139:11059;1498:16;;;;;10542:30;10538:144;;1139:11059;5337:13;-1:-1:-1;5385:3:77;1340:16;;5352:31;;;;;10543:12;;-1:-1:-1;;;;;;5421:23:77;1139:11059;5421:23;;:::i;:::-;;1340:16;1139:11059;;;;;;;5455:23;;;;:::i;:::-;;:30;1340:16;1139:11059;;;-1:-1:-1;1139:11059:77;-1:-1:-1;1139:11059:77;;;-1:-1:-1;1139:11059:77;;;;;;;;;;;;;;12152:37;-1:-1:-1;12152:37:77;;1340:16;5337:13;;5352:31;1139:11059;;;;;;;;;10538:144;-1:-1:-1;1498:16:77;;;-1:-1:-1;;;;;;;;;;;1139:11059:77;1498:16;1139:11059;1498:16;;;;-1:-1:-1;;1498:16:77;10543:12;1498:16;;;10643:28;-1:-1:-1;;10643:28:77;10538:144;;;5087:108;5140:44;;;-1:-1:-1;5140:44:77;-1:-1:-1;5140:44:77;1139:11059;;-1:-1:-1;5140:44:77;1139:11059;;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;;-1:-1:-1;;;;;;1139:11059:77;;;;;;;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1139:11059:77;;;;;;-1:-1:-1;1139:11059:77;;;;;-1:-1:-1;1139:11059:77;;;;;;;;-1:-1:-1;;1139:11059:77;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;:::o;1340:16::-;;;;;;;;;;;;;;;:::o;:::-;1139:11059;;;1340:16;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806330cae187146104625780633ca7c02a14610441578063530dd4561461040057806375b238fc146103e65780638e11fde6146103a5578063aa682ab614610303578063b428b0b0146101f9578063b700961314610199578063b7d2b16214610128578063d1f856ee146100f25763fe0776f514610092575f80fd5b346100ee5760403660031901126100ee576100ab610501565b6100b3610544565b336001600160a01b038216036100ce576100cc916105d8565b005b6001600160401b038263f07e038f60e01b5f52336004521660245260445ffd5b5f80fd5b346100ee5760403660031901126100ee57602061011e610110610501565b610118610544565b90610596565b6040519015158152f35b346100ee5760403660031901126100ee57610141610501565b610149610544565b6001600160401b0382165f5260026020526001600160401b0360405f205416916101733384610596565b15610182576100cc92506105d8565b8263f07e038f60e01b5f523360045260245260445ffd5b346100ee5760603660031901126100ee576004356001600160a01b03811681036100ee576101c5610544565b5060443563ffffffff60e01b81168091036100ee5760209161011e915f525f83526001600160401b0360405f205416610596565b346100ee5760403660031901126100ee57610212610501565b6001600160401b03610222610544565b911690815f5260026020526001600160401b0360405f2054166102453382610596565b156102ed57506001600160401b0382146102da57815f52600160205260405f2060018060a01b0382165f5260205260ff60405f2054161561028257005b815f52600160205260405f2060018060a01b0382165f5260205260405f20600160ff1982541617905560018060a01b0316907faad194d4c741066ed559517462aa599f8be124ae17cf4832c66a3a2958f277265f80a3005b5063061c6a4360e21b5f5260045260245ffd5b63f07e038f60e01b5f523360045260245260445ffd5b346100ee5760403660031901126100ee5761031c61052d565b610324610517565b9061032e3361055a565b1561038e576001600160e01b0319165f818152602081905260408120805467ffffffffffffffff19166001600160401b039490941693841790557fa3e0b2a435476f7258ef6426c5ccc383db5cef84c531fc21905af2a5872a6d019080a3005b63f07e038f60e01b5f52336004525f60245260445ffd5b346100ee5760203660031901126100ee576001600160e01b03196103c761052d565b165f525f60205260206001600160401b0360405f205416604051908152f35b346100ee575f3660031901126100ee5760206040515f8152f35b346100ee5760203660031901126100ee576001600160401b03610421610501565b165f52600260205260206001600160401b0360405f205416604051908152f35b346100ee575f3660031901126100ee5760206040516001600160401b038152f35b346100ee5760403660031901126100ee5761047b610501565b610483610517565b9061048d3361055a565b1561038e576001600160401b031690811580156104f1575b6102da576001600160401b0390825f52600260205260405f20828216831982541617905516907f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63405f80a3005b506001600160401b0382146104a5565b600435906001600160401b03821682036100ee57565b602435906001600160401b03821682036100ee57565b600435906001600160e01b0319821682036100ee57565b602435906001600160a01b03821682036100ee57565b6001600160a01b03165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090205460ff1690565b6001600160401b03166001600160401b0381146105d1575f52600160205260405f209060018060a01b03165f5260205260ff60405f20541690565b5050600190565b6001600160401b0316906001600160401b0382146102da57815f52600160205260405f2060018060a01b0382165f5260205260ff60405f20541661061a575050565b5f8281526001602090815260408083206001600160a01b0394909416808452939091528120805460ff191690559091907ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c1669080a356","sourceMap":"1139:11059:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;;;:::i;:::-;;;:::i;:::-;735:10:6;-1:-1:-1;;;;;1139:11059:77;;9412:34;9408:126;;9563:18;;;:::i;:::-;1139:11059;9408:126;-1:-1:-1;;;;;3994:58:77;;;;1139:11059;9469:54;735:10:6;1139:11059:77;;;;;;;9469:54;1139:11059;;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;1139:11059:77;;;;7419:11;1139:11059;;-1:-1:-1;;;;;1139:11059:77;;;;;735:10:6;4364:32:77;735:10:6;4364:32:77;;:::i;:::-;4363:33;4359:128;;8956:7;;;;:::i;4359:128::-;3994:58;;;;1139:11059;4419:57;735:10:6;1139:11059:77;;;;;;4419:57;1139:11059;;;;;;-1:-1:-1;;1139:11059:77;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6399:23;1139:11059;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;6399:23;:::i;1139:11059::-;;;;;;-1:-1:-1;;1139:11059:77;;;;;;:::i;:::-;-1:-1:-1;;;;;1139:11059:77;;:::i;:::-;;;;;;;7419:11;1139:11059;;-1:-1:-1;;;;;1139:11059:77;;;;;4364:32;735:10:6;4364:32:77;;:::i;:::-;4363:33;4359:128;;10442:21;-1:-1:-1;;;;;10442:21:77;;10438:90;;1139:11059;;;10543:12;1139:11059;;;;;;;;;;;;-1:-1:-1;1139:11059:77;;;;;-1:-1:-1;1139:11059:77;;;10542:30;10538:144;;1139:11059;10538:144;1139:11059;;;10543:12;1139:11059;;;;;;;;;;;;-1:-1:-1;1139:11059:77;;;;-1:-1:-1;1139:11059:77;10543:12;1139:11059;;;;;;;;;;;;;;10643:28;;1139:11059;10643:28;;1139:11059;10438:90;10038:31;;;;1139:11059;10486:31;1139:11059;;;;10486:31;4359:128;3994:58;;;1139:11059;4419:57;735:10:6;1139:11059:77;;;;;;4419:57;1139:11059;;;;;;-1:-1:-1;;1139:11059:77;;;;;;:::i;:::-;;;:::i;:::-;735:10:6;3938:33:77;735:10:6;3938:33:77;:::i;:::-;3937:34;3933:130;;-1:-1:-1;;;;;;1139:11059:77;;;;;;;;;;;;;;-1:-1:-1;;1139:11059:77;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;12152:37;;1139:11059;12152:37;1139:11059;3933:130;3994:58;;;1139:11059;3994:58;735:10:6;1139:11059:77;;;;;;;3994:58;1139:11059;;;;;;-1:-1:-1;;1139:11059:77;;;;-1:-1:-1;;;;;;1139:11059:77;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;;;;;;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;-1:-1:-1;;;;;1139:11059:77;;:::i;:::-;;;;7419:11;1139:11059;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;;;:::i;:::-;;;:::i;:::-;735:10:6;3938:33:77;735:10:6;3938:33:77;:::i;:::-;3937:34;3933:130;;-1:-1:-1;;;;;1139:11059:77;9970:20;;;:45;;;;1139:11059;9966:114;;-1:-1:-1;;;;;1139:11059:77;;;;10090:11;1139:11059;;;;;;;;;;;;;;;;;10132:31;;1139:11059;10132:31;;1139:11059;9970:45;9994:21;-1:-1:-1;;;;;9994:21:77;;9970:45;;1139:11059;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;;1139:11059:77;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;:::o;7800:201::-;-1:-1:-1;;;;;1139:11059:77;-1:-1:-1;1139:11059:77;;;;;;;;;;;;;7800:201::o;:::-;-1:-1:-1;;;;;1139:11059:77;-1:-1:-1;;;;;7890:21:77;;7886:63;;1139:11059;;7965:12;1139:11059;;;;;7965:29;1139:11059;;;;;;-1:-1:-1;1139:11059:77;;;;;-1:-1:-1;1139:11059:77;;;7800:201;:::o;7886:63::-;7927:11;;7934:4;7927:11;:::o;10886:322::-;-1:-1:-1;;;;;1139:11059:77;10962:21;-1:-1:-1;;;;;10962:21:77;;10958:90;;1139:11059;-1:-1:-1;1139:11059:77;11062:12;1139:11059;;;-1:-1:-1;1139:11059:77;;;;;;;;-1:-1:-1;1139:11059:77;;;;;-1:-1:-1;1139:11059:77;;;11058:144;;10886:322;;:::o;11058:144::-;-1:-1:-1;1139:11059:77;;;11062:12;1139:11059;;;;;;;;-1:-1:-1;;;;;1139:11059:77;;;;;;;;;;;;;;;-1:-1:-1;;1139:11059:77;;;;;;11163:28;;-1:-1:-1;11163:28:77;10886:322::o","linkReferences":{}},"methodIdentifiers":{"ADMIN_ROLE()":"75b238fc","PUBLIC_ROLE()":"3ca7c02a","canCall(address,address,bytes4)":"b7009613","getFunctionRole(bytes4)":"8e11fde6","getRoleAdmin(uint64)":"530dd456","grantRole(uint64,address)":"b428b0b0","hasRole(uint64,address)":"d1f856ee","renounceRole(uint64,address)":"fe0776f5","revokeRole(uint64,address)":"b7d2b162","setFunctionRole(bytes4,uint64)":"aa682ab6","setRoleAdmin(uint64,uint64)":"30cae187"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialAdmin\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"internalType\":\"struct SimpleAccessManager.InitialFunctionRole[]\",\"name\":\"initialFunctionRoles\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialAdmin\",\"type\":\"address\"}],\"name\":\"AccessManagerInvalidInitialAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"AccessManagerLockedRole\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"AccessManagerUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"FunctionRoleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"admin\",\"type\":\"uint64\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PUBLIC_ROLE\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"canCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getFunctionRole\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"}],\"name\":\"setFunctionRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"roleId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"admin\",\"type\":\"uint64\"}],\"name\":\"setRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Zora\",\"details\":\"This contract is designed to manage access for a single target contract by mapping function selectors directly to required roles. It implements the IAuthority interface for compatibility with SimpleAccessManaged contracts. Key features: - Maps function selectors to roles (selector -> roleId) - Immediate role grants/revokes (no delays) - PUBLIC_ROLE grants access to all addresses - ADMIN_ROLE (role 0) can configure function roles and manage other roles - Each role can have a custom admin role for delegation This is intentionally simpler than OpenZeppelin's AccessManager: - No execution delays or scheduled operations - No guardian role - No target address tracking (single-contract authority)\",\"errors\":{\"AccessManagerInvalidInitialAdmin(address)\":[{\"params\":{\"initialAdmin\":\"The invalid admin address provided\"}}],\"AccessManagerLockedRole(uint64)\":[{\"params\":{\"roleId\":\"The locked role that was targeted\"}}],\"AccessManagerUnauthorizedAccount(address,uint64)\":[{\"params\":{\"account\":\"The account that attempted the action\",\"roleId\":\"The role that was required\"}}]},\"events\":{\"FunctionRoleUpdated(bytes4,uint64)\":{\"params\":{\"roleId\":\"The new required role\",\"selector\":\"The function selector that was configured\"}},\"RoleAdminChanged(uint64,uint64)\":{\"params\":{\"admin\":\"The new admin role\",\"roleId\":\"The role whose admin changed\"}},\"RoleGranted(uint64,address)\":{\"params\":{\"account\":\"The account that received the role\",\"roleId\":\"The role that was granted\"}},\"RoleRevoked(uint64,address)\":{\"params\":{\"account\":\"The account that lost the role\",\"roleId\":\"The role that was revoked\"}}},\"kind\":\"dev\",\"methods\":{\"canCall(address,address,bytes4)\":{\"details\":\"The target parameter is ignored since this is a single-contract authority. Returns true if the caller has the role required for the selector, or if the selector is mapped to PUBLIC_ROLE (which all addresses implicitly have).\",\"params\":{\"caller\":\"The address attempting to call the function\",\"selector\":\"The function selector being called\"},\"returns\":{\"_0\":\"True if the caller is authorized to call the function\"}},\"constructor\":{\"details\":\"The initial admin is granted ADMIN_ROLE immediately. Initial function roles allow configuring access permissions at deployment time without additional transactions.\",\"params\":{\"initialAdmin\":\"The address that will receive ADMIN_ROLE (cannot be zero address)\",\"initialFunctionRoles\":\"Array of selector-to-role mappings to configure at deployment\"}},\"getFunctionRole(bytes4)\":{\"details\":\"If no role has been set for the selector, returns 0 (ADMIN_ROLE), meaning only admins can call unconfigured functions by default.\",\"params\":{\"selector\":\"The function selector to query\"},\"returns\":{\"_0\":\"The role ID required to call the function\"}},\"getRoleAdmin(uint64)\":{\"details\":\"The admin role is the role that can grant/revoke the specified role. If no admin has been set, returns 0 (ADMIN_ROLE).\",\"params\":{\"roleId\":\"The role to query the admin for\"},\"returns\":{\"_0\":\"The admin role ID that can manage the specified role\"}},\"grantRole(uint64,address)\":{\"details\":\"Only callable by accounts that have the admin role for the specified role. Emits {RoleGranted} if the account did not already have the role.\",\"params\":{\"account\":\"The account to receive the role\",\"roleId\":\"The role to grant\"}},\"hasRole(uint64,address)\":{\"details\":\"PUBLIC_ROLE always returns true for any account. For other roles, returns true only if the account has been explicitly granted the role.\",\"params\":{\"account\":\"The account to check\",\"roleId\":\"The role to check\"},\"returns\":{\"_0\":\"True if the account has the role\"}},\"renounceRole(uint64,address)\":{\"details\":\"The callerConfirmation parameter must match msg.sender to prevent accidental role renunciation. Emits {RoleRevoked} if the account had the role.\",\"params\":{\"callerConfirmation\":\"Must be msg.sender's address as confirmation\",\"roleId\":\"The role to renounce\"}},\"revokeRole(uint64,address)\":{\"details\":\"Only callable by accounts that have the admin role for the specified role. Emits {RoleRevoked} if the account had the role.\",\"params\":{\"account\":\"The account to lose the role\",\"roleId\":\"The role to revoke\"}},\"setFunctionRole(bytes4,uint64)\":{\"details\":\"Only callable by accounts with ADMIN_ROLE. Set to PUBLIC_ROLE to make a function callable by anyone. Emits {FunctionRoleUpdated}.\",\"params\":{\"roleId\":\"The role that will be required to call the function\",\"selector\":\"The function selector to configure\"}},\"setRoleAdmin(uint64,uint64)\":{\"details\":\"Only callable by accounts with ADMIN_ROLE. Cannot modify the admin of ADMIN_ROLE or PUBLIC_ROLE. Emits {RoleAdminChanged}.\",\"params\":{\"admin\":\"The new admin role ID\",\"roleId\":\"The role to set the admin for\"}}},\"stateVariables\":{\"_functionRoles\":{\"details\":\"Maps function selector to the role required to call it\"},\"_roleAdmins\":{\"details\":\"Maps role to its admin role (the role that can grant/revoke it)\"},\"_roleMembers\":{\"details\":\"Maps role to its members\"}},\"title\":\"SimpleAccessManager\",\"version\":1},\"userdoc\":{\"errors\":{\"AccessManagerInvalidInitialAdmin(address)\":[{\"notice\":\"Thrown when the initial admin address is invalid (zero address)\"}],\"AccessManagerLockedRole(uint64)\":[{\"notice\":\"Thrown when attempting to modify a locked role (ADMIN_ROLE or PUBLIC_ROLE)\"}],\"AccessManagerUnauthorizedAccount(address,uint64)\":[{\"notice\":\"Thrown when an account lacks the required role\"}]},\"events\":{\"FunctionRoleUpdated(bytes4,uint64)\":{\"notice\":\"Emitted when a function's required role is updated\"},\"RoleAdminChanged(uint64,uint64)\":{\"notice\":\"Emitted when a role's admin is changed\"},\"RoleGranted(uint64,address)\":{\"notice\":\"Emitted when a role is granted to an account\"},\"RoleRevoked(uint64,address)\":{\"notice\":\"Emitted when a role is revoked from an account\"}},\"kind\":\"user\",\"methods\":{\"ADMIN_ROLE()\":{\"notice\":\"The admin role identifier (0). Members can configure function roles and grant other roles.\"},\"PUBLIC_ROLE()\":{\"notice\":\"The public role identifier (max uint64). All addresses implicitly have this role.\"},\"canCall(address,address,bytes4)\":{\"notice\":\"Checks if a caller is authorized to invoke a function.\"},\"constructor\":{\"notice\":\"Initializes the access manager with an admin and optional function role configurations.\"},\"getFunctionRole(bytes4)\":{\"notice\":\"Returns the role required to call a specific function.\"},\"getRoleAdmin(uint64)\":{\"notice\":\"Returns the admin role for a given role.\"},\"grantRole(uint64,address)\":{\"notice\":\"Grants a role to an account.\"},\"hasRole(uint64,address)\":{\"notice\":\"Checks if an account has a specific role.\"},\"renounceRole(uint64,address)\":{\"notice\":\"Allows an account to renounce a role it has.\"},\"revokeRole(uint64,address)\":{\"notice\":\"Revokes a role from an account.\"},\"setFunctionRole(bytes4,uint64)\":{\"notice\":\"Sets the role required to call a specific function.\"},\"setRoleAdmin(uint64,uint64)\":{\"notice\":\"Sets the admin role for a given role.\"}},\"notice\":\"A simplified single-contract access manager providing role-based access control without time-based validation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/access/SimpleAccessManager.sol\":\"SimpleAccessManager\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/\",\":@uniswap/v4-core/=node_modules/@uniswap/v4-core/\",\":@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/\",\":@zoralabs/coins/=node_modules/@zoralabs/coins/\",\":@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":permit2/src/=node_modules/@uniswap/permit2/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol\":{\"keccak256\":\"0x9c9a58dd831b9bb4a0ea47d96b53c13ab9a6e4270a518ea395b1424092fd74dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d806b0c87fbcaf0cb827b51203b27f8289b13743aeadb5867fbbe041fcf87a92\",\"dweb:/ipfs/QmfTEGiDGxKDaqBuBJ5wWJockGDrsEBZnW5S7UWrKhAxGc\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"src/access/SimpleAccessManager.sol\":{\"keccak256\":\"0xbcb0d251b0f6841cfdcdedfd297621a949a2c21bf6a11969d934b9adcfd7f40f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a31d797c8ddbbecae738b62656b8828558f7a3f622b7058d84bd9d0b97429f36\",\"dweb:/ipfs/QmTTAiRJM13oaMbVqNp2EPfKCYzCNb1wg2QU5WTG68Q425\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"initialAdmin","type":"address"},{"internalType":"struct SimpleAccessManager.InitialFunctionRole[]","name":"initialFunctionRoles","type":"tuple[]","components":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"uint64","name":"roleId","type":"uint64"}]}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"initialAdmin","type":"address"}],"type":"error","name":"AccessManagerInvalidInitialAdmin"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"}],"type":"error","name":"AccessManagerLockedRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint64","name":"roleId","type":"uint64"}],"type":"error","name":"AccessManagerUnauthorizedAccount"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":true},{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true}],"type":"event","name":"FunctionRoleUpdated","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"uint64","name":"admin","type":"uint64","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ADMIN_ROLE","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PUBLIC_ROLE","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"getFunctionRole","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"uint64","name":"roleId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setFunctionRole"},{"inputs":[{"internalType":"uint64","name":"roleId","type":"uint64"},{"internalType":"uint64","name":"admin","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setRoleAdmin"}],"devdoc":{"kind":"dev","methods":{"canCall(address,address,bytes4)":{"details":"The target parameter is ignored since this is a single-contract authority. Returns true if the caller has the role required for the selector, or if the selector is mapped to PUBLIC_ROLE (which all addresses implicitly have).","params":{"caller":"The address attempting to call the function","selector":"The function selector being called"},"returns":{"_0":"True if the caller is authorized to call the function"}},"constructor":{"details":"The initial admin is granted ADMIN_ROLE immediately. Initial function roles allow configuring access permissions at deployment time without additional transactions.","params":{"initialAdmin":"The address that will receive ADMIN_ROLE (cannot be zero address)","initialFunctionRoles":"Array of selector-to-role mappings to configure at deployment"}},"getFunctionRole(bytes4)":{"details":"If no role has been set for the selector, returns 0 (ADMIN_ROLE), meaning only admins can call unconfigured functions by default.","params":{"selector":"The function selector to query"},"returns":{"_0":"The role ID required to call the function"}},"getRoleAdmin(uint64)":{"details":"The admin role is the role that can grant/revoke the specified role. If no admin has been set, returns 0 (ADMIN_ROLE).","params":{"roleId":"The role to query the admin for"},"returns":{"_0":"The admin role ID that can manage the specified role"}},"grantRole(uint64,address)":{"details":"Only callable by accounts that have the admin role for the specified role. Emits {RoleGranted} if the account did not already have the role.","params":{"account":"The account to receive the role","roleId":"The role to grant"}},"hasRole(uint64,address)":{"details":"PUBLIC_ROLE always returns true for any account. For other roles, returns true only if the account has been explicitly granted the role.","params":{"account":"The account to check","roleId":"The role to check"},"returns":{"_0":"True if the account has the role"}},"renounceRole(uint64,address)":{"details":"The callerConfirmation parameter must match msg.sender to prevent accidental role renunciation. Emits {RoleRevoked} if the account had the role.","params":{"callerConfirmation":"Must be msg.sender's address as confirmation","roleId":"The role to renounce"}},"revokeRole(uint64,address)":{"details":"Only callable by accounts that have the admin role for the specified role. Emits {RoleRevoked} if the account had the role.","params":{"account":"The account to lose the role","roleId":"The role to revoke"}},"setFunctionRole(bytes4,uint64)":{"details":"Only callable by accounts with ADMIN_ROLE. Set to PUBLIC_ROLE to make a function callable by anyone. Emits {FunctionRoleUpdated}.","params":{"roleId":"The role that will be required to call the function","selector":"The function selector to configure"}},"setRoleAdmin(uint64,uint64)":{"details":"Only callable by accounts with ADMIN_ROLE. Cannot modify the admin of ADMIN_ROLE or PUBLIC_ROLE. Emits {RoleAdminChanged}.","params":{"admin":"The new admin role ID","roleId":"The role to set the admin for"}}},"version":1},"userdoc":{"kind":"user","methods":{"ADMIN_ROLE()":{"notice":"The admin role identifier (0). Members can configure function roles and grant other roles."},"PUBLIC_ROLE()":{"notice":"The public role identifier (max uint64). All addresses implicitly have this role."},"canCall(address,address,bytes4)":{"notice":"Checks if a caller is authorized to invoke a function."},"constructor":{"notice":"Initializes the access manager with an admin and optional function role configurations."},"getFunctionRole(bytes4)":{"notice":"Returns the role required to call a specific function."},"getRoleAdmin(uint64)":{"notice":"Returns the admin role for a given role."},"grantRole(uint64,address)":{"notice":"Grants a role to an account."},"hasRole(uint64,address)":{"notice":"Checks if an account has a specific role."},"renounceRole(uint64,address)":{"notice":"Allows an account to renounce a role it has."},"revokeRole(uint64,address)":{"notice":"Revokes a role from an account."},"setFunctionRole(bytes4,uint64)":{"notice":"Sets the role required to call a specific function."},"setRoleAdmin(uint64,uint64)":{"notice":"Sets the admin role for a given role."}},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@uniswap/universal-router/contracts/=node_modules/@uniswap/universal-router/contracts/","@uniswap/v4-core/=node_modules/@uniswap/v4-core/","@uniswap/v4-periphery/=node_modules/@uniswap/v4-periphery/","@zoralabs/coins/=node_modules/@zoralabs/coins/","@zoralabs/shared-contracts/=node_modules/@zoralabs/shared-contracts/src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","permit2/src/=node_modules/@uniswap/permit2/src/","solady/=node_modules/solady/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/access/SimpleAccessManager.sol":"SimpleAccessManager"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol":{"keccak256":"0x9c9a58dd831b9bb4a0ea47d96b53c13ab9a6e4270a518ea395b1424092fd74dc","urls":["bzz-raw://d806b0c87fbcaf0cb827b51203b27f8289b13743aeadb5867fbbe041fcf87a92","dweb:/ipfs/QmfTEGiDGxKDaqBuBJ5wWJockGDrsEBZnW5S7UWrKhAxGc"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"src/access/SimpleAccessManager.sol":{"keccak256":"0xbcb0d251b0f6841cfdcdedfd297621a949a2c21bf6a11969d934b9adcfd7f40f","urls":["bzz-raw://a31d797c8ddbbecae738b62656b8828558f7a3f622b7058d84bd9d0b97429f36","dweb:/ipfs/QmTTAiRJM13oaMbVqNp2EPfKCYzCNb1wg2QU5WTG68Q425"],"license":"MIT"}},"version":1},"id":77}
@@ -1 +0,0 @@
1
- {"id":"69718f10d1dc37f0","source_id_to_path":{"0":"node_modules/@openzeppelin/contracts/access/manager/IAuthority.sol","1":"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol","2":"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol","3":"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol","4":"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol","5":"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","6":"node_modules/@openzeppelin/contracts/utils/Context.sol","7":"node_modules/@openzeppelin/contracts/utils/TransientSlot.sol","8":"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol","9":"node_modules/@uniswap/permit2/src/interfaces/IAllowanceTransfer.sol","10":"node_modules/@uniswap/permit2/src/interfaces/IEIP712.sol","11":"node_modules/@uniswap/permit2/src/libraries/SafeCast160.sol","12":"node_modules/@uniswap/v4-core/src/interfaces/IExtsload.sol","13":"node_modules/@uniswap/v4-core/src/interfaces/IExttload.sol","14":"node_modules/@uniswap/v4-core/src/interfaces/IHooks.sol","15":"node_modules/@uniswap/v4-core/src/interfaces/IPoolManager.sol","16":"node_modules/@uniswap/v4-core/src/interfaces/IProtocolFees.sol","17":"node_modules/@uniswap/v4-core/src/interfaces/external/IERC20Minimal.sol","18":"node_modules/@uniswap/v4-core/src/interfaces/external/IERC6909Claims.sol","19":"node_modules/@uniswap/v4-core/src/libraries/BitMath.sol","20":"node_modules/@uniswap/v4-core/src/libraries/CurrencyReserves.sol","21":"node_modules/@uniswap/v4-core/src/libraries/CustomRevert.sol","22":"node_modules/@uniswap/v4-core/src/libraries/FixedPoint128.sol","23":"node_modules/@uniswap/v4-core/src/libraries/FullMath.sol","24":"node_modules/@uniswap/v4-core/src/libraries/LiquidityMath.sol","25":"node_modules/@uniswap/v4-core/src/libraries/Lock.sol","26":"node_modules/@uniswap/v4-core/src/libraries/NonzeroDeltaCount.sol","27":"node_modules/@uniswap/v4-core/src/libraries/Position.sol","28":"node_modules/@uniswap/v4-core/src/libraries/SafeCast.sol","29":"node_modules/@uniswap/v4-core/src/libraries/StateLibrary.sol","30":"node_modules/@uniswap/v4-core/src/libraries/TickBitmap.sol","31":"node_modules/@uniswap/v4-core/src/libraries/TickMath.sol","32":"node_modules/@uniswap/v4-core/src/libraries/TransientStateLibrary.sol","33":"node_modules/@uniswap/v4-core/src/types/BalanceDelta.sol","34":"node_modules/@uniswap/v4-core/src/types/BeforeSwapDelta.sol","35":"node_modules/@uniswap/v4-core/src/types/Currency.sol","36":"node_modules/@uniswap/v4-core/src/types/PoolId.sol","37":"node_modules/@uniswap/v4-core/src/types/PoolKey.sol","38":"node_modules/@uniswap/v4-core/src/types/PoolOperation.sol","39":"node_modules/@uniswap/v4-periphery/src/libraries/PathKey.sol","40":"node_modules/@zoralabs/coins/src/interfaces/ICoin.sol","41":"node_modules/@zoralabs/coins/src/interfaces/IDeployedCoinVersionLookup.sol","42":"node_modules/@zoralabs/coins/src/interfaces/IDopplerErrors.sol","43":"node_modules/@zoralabs/coins/src/interfaces/IERC7572.sol","44":"node_modules/@zoralabs/coins/src/interfaces/IHasRewardsRecipients.sol","45":"node_modules/@zoralabs/coins/src/interfaces/IMsgSender.sol","46":"node_modules/@zoralabs/coins/src/interfaces/ISupportsLimitOrderFill.sol","47":"node_modules/@zoralabs/coins/src/interfaces/ISwapPathRouter.sol","48":"node_modules/@zoralabs/coins/src/interfaces/ISwapRouter.sol","49":"node_modules/@zoralabs/coins/src/interfaces/IUpgradeableV4Hook.sol","50":"node_modules/@zoralabs/coins/src/interfaces/IZoraHookRegistry.sol","51":"node_modules/@zoralabs/coins/src/interfaces/IZoraLimitOrderBookCoinsInterface.sol","52":"node_modules/@zoralabs/coins/src/interfaces/IZoraV4CoinHook.sol","53":"node_modules/@zoralabs/coins/src/libs/CoinCommon.sol","54":"node_modules/@zoralabs/coins/src/libs/CoinConfigurationVersions.sol","55":"node_modules/@zoralabs/coins/src/libs/CoinConstants.sol","56":"node_modules/@zoralabs/coins/src/libs/DopplerMath.sol","57":"node_modules/@zoralabs/coins/src/libs/UniV4SwapToCurrency.sol","58":"node_modules/@zoralabs/coins/src/libs/V3ToV4SwapLib.sol","59":"node_modules/@zoralabs/coins/src/types/LpPosition.sol","60":"node_modules/@zoralabs/coins/src/types/PoolConfiguration.sol","61":"node_modules/@zoralabs/coins/src/utils/uniswap/BitMath.sol","62":"node_modules/@zoralabs/coins/src/utils/uniswap/CustomRevert.sol","63":"node_modules/@zoralabs/coins/src/utils/uniswap/FixedPoint96.sol","64":"node_modules/@zoralabs/coins/src/utils/uniswap/FullMath.sol","65":"node_modules/@zoralabs/coins/src/utils/uniswap/LiquidityAmounts.sol","66":"node_modules/@zoralabs/coins/src/utils/uniswap/SafeCast.sol","67":"node_modules/@zoralabs/coins/src/utils/uniswap/SqrtPriceMath.sol","68":"node_modules/@zoralabs/coins/src/utils/uniswap/TickMath.sol","69":"node_modules/@zoralabs/coins/src/utils/uniswap/UnsafeMath.sol","70":"node_modules/@zoralabs/shared-contracts/src/interfaces/uniswap/ISwapRouter.sol","71":"node_modules/@zoralabs/shared-contracts/src/interfaces/uniswap/IUniswapV3SwapCallback.sol","72":"node_modules/@zoralabs/shared-contracts/src/libs/UniswapV3/BytesLib.sol","73":"node_modules/@zoralabs/shared-contracts/src/libs/UniswapV3/Path.sol","74":"src/IZoraLimitOrderBook.sol","75":"src/ZoraLimitOrderBook.sol","76":"src/access/SimpleAccessManaged.sol","77":"src/access/SimpleAccessManager.sol","78":"src/libs/LimitOrderBitmap.sol","79":"src/libs/LimitOrderCommon.sol","80":"src/libs/LimitOrderCreate.sol","81":"src/libs/LimitOrderFill.sol","82":"src/libs/LimitOrderLiquidity.sol","83":"src/libs/LimitOrderQueues.sol","84":"src/libs/LimitOrderStorage.sol","85":"src/libs/LimitOrderTypes.sol","86":"src/libs/LimitOrderWithdraw.sol","87":"src/libs/Permit2Payments.sol","88":"src/libs/SwapLimitOrders.sol","89":"src/router/SwapWithLimitOrders.sol"},"language":"Solidity"}
@@ -1,76 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.20;
3
-
4
- import {IAuthority} from "@openzeppelin/contracts/access/manager/IAuthority.sol";
5
-
6
- /**
7
- * @dev This contract module makes a contract "access managed", allowing an authority
8
- * contract to control access to specific functions.
9
- *
10
- * This is a simplified version of OpenZeppelin's AccessManaged that removes time-based
11
- * access control features (delays, scheduled operations) and only supports immediate
12
- * access checks.
13
- *
14
- * The authority is set during construction and can only be changed by the current authority.
15
- */
16
- abstract contract SimpleAccessManaged {
17
- /// @dev Thrown when an unauthorized caller attempts to access a restricted function
18
- error AccessManagedUnauthorized();
19
-
20
- /// @dev Thrown when trying to set an invalid authority (e.g., not a contract)
21
- error AccessManagedInvalidAuthority(address authority);
22
-
23
- address private _authority;
24
-
25
- /// @dev Emitted when the authority is updated
26
- event AuthorityUpdated(address authority);
27
-
28
- /**
29
- * @dev Initializes the contract with an initial authority.
30
- * @param initialAuthority The address of the authority contract
31
- */
32
- constructor(address initialAuthority) {
33
- _setAuthority(initialAuthority);
34
- }
35
-
36
- /**
37
- * @dev Returns the current authority address.
38
- * @return The address of the authority contract
39
- */
40
- function authority() public view virtual returns (address) {
41
- return _authority;
42
- }
43
-
44
- /**
45
- * @dev Transfers control of the contract to a new authority.
46
- * Can only be called by the current authority.
47
- * @param newAuthority The address of the new authority contract
48
- */
49
- function setAuthority(address newAuthority) public virtual {
50
- if (msg.sender != authority()) {
51
- revert AccessManagedUnauthorized();
52
- }
53
- if (newAuthority.code.length == 0) {
54
- revert AccessManagedInvalidAuthority(newAuthority);
55
- }
56
- _setAuthority(newAuthority);
57
- }
58
-
59
- /**
60
- * @dev Internal function to set the authority without access checks.
61
- * @param newAuthority The address of the new authority contract
62
- */
63
- function _setAuthority(address newAuthority) internal virtual {
64
- _authority = newAuthority;
65
- emit AuthorityUpdated(newAuthority);
66
- }
67
-
68
- /**
69
- * @dev Internal function to check if a caller can execute a function.
70
- * Reverts with AccessManagedUnauthorized if the caller is not authorized.
71
- * @param selector The function selector being called
72
- */
73
- function _checkCanCall(bytes4 selector) internal view virtual {
74
- require(IAuthority(authority()).canCall(msg.sender, address(this), selector), AccessManagedUnauthorized());
75
- }
76
- }