olas-operate-middleware 0.1.0rc59__py3-none-any.whl → 0.13.2__py3-none-any.whl

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 (98) hide show
  1. olas_operate_middleware-0.13.2.dist-info/METADATA +75 -0
  2. olas_operate_middleware-0.13.2.dist-info/RECORD +101 -0
  3. {olas_operate_middleware-0.1.0rc59.dist-info → olas_operate_middleware-0.13.2.dist-info}/WHEEL +1 -1
  4. operate/__init__.py +17 -0
  5. operate/account/user.py +35 -9
  6. operate/bridge/bridge_manager.py +470 -0
  7. operate/bridge/providers/lifi_provider.py +377 -0
  8. operate/bridge/providers/native_bridge_provider.py +677 -0
  9. operate/bridge/providers/provider.py +469 -0
  10. operate/bridge/providers/relay_provider.py +457 -0
  11. operate/cli.py +1565 -417
  12. operate/constants.py +60 -12
  13. operate/data/README.md +19 -0
  14. operate/data/contracts/{service_staking_token → dual_staking_token}/__init__.py +2 -2
  15. operate/data/contracts/dual_staking_token/build/DualStakingToken.json +443 -0
  16. operate/data/contracts/dual_staking_token/contract.py +132 -0
  17. operate/data/contracts/dual_staking_token/contract.yaml +23 -0
  18. operate/{ledger/base.py → data/contracts/foreign_omnibridge/__init__.py} +2 -19
  19. operate/data/contracts/foreign_omnibridge/build/ForeignOmnibridge.json +1372 -0
  20. operate/data/contracts/foreign_omnibridge/contract.py +130 -0
  21. operate/data/contracts/foreign_omnibridge/contract.yaml +23 -0
  22. operate/{ledger/solana.py → data/contracts/home_omnibridge/__init__.py} +2 -20
  23. operate/data/contracts/home_omnibridge/build/HomeOmnibridge.json +1421 -0
  24. operate/data/contracts/home_omnibridge/contract.py +80 -0
  25. operate/data/contracts/home_omnibridge/contract.yaml +23 -0
  26. operate/data/contracts/l1_standard_bridge/__init__.py +20 -0
  27. operate/data/contracts/l1_standard_bridge/build/L1StandardBridge.json +831 -0
  28. operate/data/contracts/l1_standard_bridge/contract.py +158 -0
  29. operate/data/contracts/l1_standard_bridge/contract.yaml +23 -0
  30. operate/data/contracts/l2_standard_bridge/__init__.py +20 -0
  31. operate/data/contracts/l2_standard_bridge/build/L2StandardBridge.json +626 -0
  32. operate/data/contracts/l2_standard_bridge/contract.py +130 -0
  33. operate/data/contracts/l2_standard_bridge/contract.yaml +23 -0
  34. operate/data/contracts/mech_activity/__init__.py +20 -0
  35. operate/data/contracts/mech_activity/build/MechActivity.json +111 -0
  36. operate/data/contracts/mech_activity/contract.py +44 -0
  37. operate/data/contracts/mech_activity/contract.yaml +23 -0
  38. operate/data/contracts/optimism_mintable_erc20/__init__.py +20 -0
  39. operate/data/contracts/optimism_mintable_erc20/build/OptimismMintableERC20.json +491 -0
  40. operate/data/contracts/optimism_mintable_erc20/contract.py +45 -0
  41. operate/data/contracts/optimism_mintable_erc20/contract.yaml +23 -0
  42. operate/data/contracts/recovery_module/__init__.py +20 -0
  43. operate/data/contracts/recovery_module/build/RecoveryModule.json +811 -0
  44. operate/data/contracts/recovery_module/contract.py +61 -0
  45. operate/data/contracts/recovery_module/contract.yaml +23 -0
  46. operate/data/contracts/requester_activity_checker/__init__.py +20 -0
  47. operate/data/contracts/requester_activity_checker/build/RequesterActivityChecker.json +111 -0
  48. operate/data/contracts/requester_activity_checker/contract.py +33 -0
  49. operate/data/contracts/requester_activity_checker/contract.yaml +23 -0
  50. operate/data/contracts/staking_token/__init__.py +20 -0
  51. operate/data/contracts/staking_token/build/StakingToken.json +1336 -0
  52. operate/data/contracts/{service_staking_token → staking_token}/contract.py +27 -13
  53. operate/data/contracts/staking_token/contract.yaml +23 -0
  54. operate/data/contracts/uniswap_v2_erc20/contract.yaml +3 -1
  55. operate/data/contracts/uniswap_v2_erc20/tests/__init__.py +20 -0
  56. operate/data/contracts/uniswap_v2_erc20/tests/test_contract.py +363 -0
  57. operate/keys.py +118 -33
  58. operate/ledger/__init__.py +159 -56
  59. operate/ledger/profiles.py +321 -18
  60. operate/migration.py +555 -0
  61. operate/{http → operate_http}/__init__.py +3 -2
  62. operate/{http → operate_http}/exceptions.py +6 -4
  63. operate/operate_types.py +544 -0
  64. operate/pearl.py +13 -1
  65. operate/quickstart/analyse_logs.py +118 -0
  66. operate/quickstart/claim_staking_rewards.py +104 -0
  67. operate/quickstart/reset_configs.py +106 -0
  68. operate/quickstart/reset_password.py +70 -0
  69. operate/quickstart/reset_staking.py +145 -0
  70. operate/quickstart/run_service.py +726 -0
  71. operate/quickstart/stop_service.py +72 -0
  72. operate/quickstart/terminate_on_chain_service.py +83 -0
  73. operate/quickstart/utils.py +298 -0
  74. operate/resource.py +62 -3
  75. operate/services/agent_runner.py +202 -0
  76. operate/services/deployment_runner.py +868 -0
  77. operate/services/funding_manager.py +929 -0
  78. operate/services/health_checker.py +280 -0
  79. operate/services/manage.py +2356 -620
  80. operate/services/protocol.py +1246 -340
  81. operate/services/service.py +756 -391
  82. operate/services/utils/mech.py +103 -0
  83. operate/services/utils/tendermint.py +86 -12
  84. operate/settings.py +70 -0
  85. operate/utils/__init__.py +135 -0
  86. operate/utils/gnosis.py +407 -80
  87. operate/utils/single_instance.py +226 -0
  88. operate/utils/ssl.py +133 -0
  89. operate/wallet/master.py +708 -123
  90. operate/wallet/wallet_recovery_manager.py +507 -0
  91. olas_operate_middleware-0.1.0rc59.dist-info/METADATA +0 -304
  92. olas_operate_middleware-0.1.0rc59.dist-info/RECORD +0 -41
  93. operate/data/contracts/service_staking_token/build/ServiceStakingToken.json +0 -1273
  94. operate/data/contracts/service_staking_token/contract.yaml +0 -23
  95. operate/ledger/ethereum.py +0 -48
  96. operate/types.py +0 -260
  97. {olas_operate_middleware-0.1.0rc59.dist-info → olas_operate_middleware-0.13.2.dist-info}/entry_points.txt +0 -0
  98. {olas_operate_middleware-0.1.0rc59.dist-info → olas_operate_middleware-0.13.2.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,811 @@
1
+ {
2
+ "abi": [
3
+ {
4
+ "type": "constructor",
5
+ "inputs": [
6
+ {
7
+ "name": "_multiSend",
8
+ "type": "address",
9
+ "internalType": "address"
10
+ },
11
+ {
12
+ "name": "_serviceRegistry",
13
+ "type": "address",
14
+ "internalType": "address"
15
+ }
16
+ ],
17
+ "stateMutability": "nonpayable"
18
+ },
19
+ {
20
+ "type": "function",
21
+ "name": "DEFAULT_DATA_LENGTH",
22
+ "inputs": [],
23
+ "outputs": [
24
+ {
25
+ "name": "",
26
+ "type": "uint256",
27
+ "internalType": "uint256"
28
+ }
29
+ ],
30
+ "stateMutability": "view"
31
+ },
32
+ {
33
+ "type": "function",
34
+ "name": "RECOVER_THRESHOLD",
35
+ "inputs": [],
36
+ "outputs": [
37
+ {
38
+ "name": "",
39
+ "type": "uint256",
40
+ "internalType": "uint256"
41
+ }
42
+ ],
43
+ "stateMutability": "view"
44
+ },
45
+ {
46
+ "type": "function",
47
+ "name": "create",
48
+ "inputs": [
49
+ {
50
+ "name": "multisigOwners",
51
+ "type": "address[]",
52
+ "internalType": "address[]"
53
+ },
54
+ {
55
+ "name": "threshold",
56
+ "type": "uint256",
57
+ "internalType": "uint256"
58
+ },
59
+ {
60
+ "name": "data",
61
+ "type": "bytes",
62
+ "internalType": "bytes"
63
+ }
64
+ ],
65
+ "outputs": [
66
+ {
67
+ "name": "multisig",
68
+ "type": "address",
69
+ "internalType": "address"
70
+ }
71
+ ],
72
+ "stateMutability": "nonpayable"
73
+ },
74
+ {
75
+ "type": "function",
76
+ "name": "enableModule",
77
+ "inputs": [],
78
+ "outputs": [],
79
+ "stateMutability": "nonpayable"
80
+ },
81
+ {
82
+ "type": "function",
83
+ "name": "multiSend",
84
+ "inputs": [],
85
+ "outputs": [
86
+ {
87
+ "name": "",
88
+ "type": "address",
89
+ "internalType": "address"
90
+ }
91
+ ],
92
+ "stateMutability": "view"
93
+ },
94
+ {
95
+ "type": "function",
96
+ "name": "recoverAccess",
97
+ "inputs": [
98
+ {
99
+ "name": "serviceId",
100
+ "type": "uint256",
101
+ "internalType": "uint256"
102
+ }
103
+ ],
104
+ "outputs": [],
105
+ "stateMutability": "nonpayable"
106
+ },
107
+ {
108
+ "type": "function",
109
+ "name": "serviceRegistry",
110
+ "inputs": [],
111
+ "outputs": [
112
+ {
113
+ "name": "",
114
+ "type": "address",
115
+ "internalType": "address"
116
+ }
117
+ ],
118
+ "stateMutability": "view"
119
+ },
120
+ {
121
+ "type": "event",
122
+ "name": "AccessRecovered",
123
+ "inputs": [
124
+ {
125
+ "name": "serviceOwner",
126
+ "type": "address",
127
+ "indexed": true,
128
+ "internalType": "address"
129
+ },
130
+ {
131
+ "name": "serviceId",
132
+ "type": "uint256",
133
+ "indexed": true,
134
+ "internalType": "uint256"
135
+ }
136
+ ],
137
+ "anonymous": false
138
+ },
139
+ {
140
+ "type": "event",
141
+ "name": "EnabledModule",
142
+ "inputs": [
143
+ {
144
+ "name": "module",
145
+ "type": "address",
146
+ "indexed": true,
147
+ "internalType": "address"
148
+ }
149
+ ],
150
+ "anonymous": false
151
+ },
152
+ {
153
+ "type": "event",
154
+ "name": "ServiceRedeployed",
155
+ "inputs": [
156
+ {
157
+ "name": "serviceOwner",
158
+ "type": "address",
159
+ "indexed": true,
160
+ "internalType": "address"
161
+ },
162
+ {
163
+ "name": "serviceId",
164
+ "type": "uint256",
165
+ "indexed": true,
166
+ "internalType": "uint256"
167
+ },
168
+ {
169
+ "name": "owners",
170
+ "type": "address[]",
171
+ "indexed": false,
172
+ "internalType": "address[]"
173
+ },
174
+ {
175
+ "name": "threshold",
176
+ "type": "uint256",
177
+ "indexed": false,
178
+ "internalType": "uint256"
179
+ }
180
+ ],
181
+ "anonymous": false
182
+ },
183
+ {
184
+ "type": "error",
185
+ "name": "DelegatecallOnly",
186
+ "inputs": []
187
+ },
188
+ {
189
+ "type": "error",
190
+ "name": "DuplicateModule",
191
+ "inputs": []
192
+ },
193
+ {
194
+ "type": "error",
195
+ "name": "EmptyModulesOnly",
196
+ "inputs": []
197
+ },
198
+ {
199
+ "type": "error",
200
+ "name": "IncorrectDataLength",
201
+ "inputs": [
202
+ {
203
+ "name": "expected",
204
+ "type": "uint256",
205
+ "internalType": "uint256"
206
+ },
207
+ {
208
+ "name": "provided",
209
+ "type": "uint256",
210
+ "internalType": "uint256"
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "type": "error",
216
+ "name": "OwnerOnly",
217
+ "inputs": [
218
+ {
219
+ "name": "sender",
220
+ "type": "address",
221
+ "internalType": "address"
222
+ },
223
+ {
224
+ "name": "owner",
225
+ "type": "address",
226
+ "internalType": "address"
227
+ }
228
+ ]
229
+ },
230
+ {
231
+ "type": "error",
232
+ "name": "ReentrancyGuard",
233
+ "inputs": []
234
+ },
235
+ {
236
+ "type": "error",
237
+ "name": "RegistryOnly",
238
+ "inputs": [
239
+ {
240
+ "name": "sender",
241
+ "type": "address",
242
+ "internalType": "address"
243
+ },
244
+ {
245
+ "name": "registry",
246
+ "type": "address",
247
+ "internalType": "address"
248
+ }
249
+ ]
250
+ },
251
+ {
252
+ "type": "error",
253
+ "name": "WrongNumOwners",
254
+ "inputs": [
255
+ {
256
+ "name": "expected",
257
+ "type": "uint256",
258
+ "internalType": "uint256"
259
+ },
260
+ {
261
+ "name": "provided",
262
+ "type": "uint256",
263
+ "internalType": "uint256"
264
+ }
265
+ ]
266
+ },
267
+ {
268
+ "type": "error",
269
+ "name": "WrongOwner",
270
+ "inputs": [
271
+ {
272
+ "name": "provided",
273
+ "type": "address",
274
+ "internalType": "address"
275
+ }
276
+ ]
277
+ },
278
+ {
279
+ "type": "error",
280
+ "name": "WrongServiceState",
281
+ "inputs": [
282
+ {
283
+ "name": "state",
284
+ "type": "uint8",
285
+ "internalType": "uint8"
286
+ },
287
+ {
288
+ "name": "serviceId",
289
+ "type": "uint256",
290
+ "internalType": "uint256"
291
+ }
292
+ ]
293
+ },
294
+ {
295
+ "type": "error",
296
+ "name": "WrongThreshold",
297
+ "inputs": [
298
+ {
299
+ "name": "expected",
300
+ "type": "uint256",
301
+ "internalType": "uint256"
302
+ },
303
+ {
304
+ "name": "provided",
305
+ "type": "uint256",
306
+ "internalType": "uint256"
307
+ }
308
+ ]
309
+ },
310
+ {
311
+ "type": "error",
312
+ "name": "ZeroAddress",
313
+ "inputs": []
314
+ },
315
+ {
316
+ "type": "error",
317
+ "name": "ZeroNonceOnly",
318
+ "inputs": []
319
+ }
320
+ ],
321
+ "bytecode": "0x60e06040526001600955348015610014575f5ffd5b506040516117ef3803806117ef833981016040819052610033916100a4565b6001600160a01b038216158061005057506001600160a01b038116155b1561006e5760405163d92e233d60e01b815260040160405180910390fd5b306080526001600160a01b0391821660a0521660c0526100d5565b80516001600160a01b038116811461009f575f5ffd5b919050565b5f5f604083850312156100b5575f5ffd5b6100be83610089565b91506100cc60208401610089565b90509250929050565b60805160a05160c0516116a561014a5f395f818160bb0152818161034f0152818161042301528181610861015281816108a30152818161093d015281816109c90152610aad01525f818160fa015281816107810152610e7901525f8181610141015281816101ff015261028101526116a55ff3fe608060405234801561000f575f5ffd5b506004361061007a575f3560e01c8063cbcf252a11610058578063cbcf252a146100b6578063e49cda08146100f5578063f02fb7741461011c578063f398dba814610124575f5ffd5b8063242929621461007e57806363745087146100885780639d619683146100a3575b5f5ffd5b610086610137565b005b610090600181565b6040519081526020015b60405180910390f35b6100866100b13660046110e7565b61030e565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161009a565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b610090602081565b6100dd6101323660046111e9565b61082c565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101805760405163f56b123b60e01b815260040160405180910390fd5b600554156101a157604051637ee422c560e01b815260040160405180910390fd5b60015f81905260208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f546001600160a01b0316146101f557604051630187398b60e11b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081165f90815260016020526040902054161561024d57604051633b3a461d60e21b815260040160405180910390fd5b600160208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081165f81815260408082208054949095167fffffffffffffffffffffffff000000000000000000000000000000000000000094851617909455948552835490911681179092555190917fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091a2565b60016009541115610332576040516345f5ce8b60e11b815260040160405180910390fd5b60026009556040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561039c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c091906112bb565b9050336001600160a01b038216146104015760405163521eb56d60e11b81523360048201526001600160a01b03821660248201526044015b60405180910390fd5b604051630846d5ff60e31b8152600481018390525f9081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634236aff89060240160e060405180830381865afa158015610468573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048c91906112f5565b965050505050925050600160058111156104a8576104a861138c565b8160058111156104ba576104ba61138c565b146104f7578060058111156104d1576104d161138c565b60405163549292e760e01b815260ff9091166004820152602481018590526044016103f8565b6001600160a01b03821661051e5760405163d92e233d60e01b815260040160405180910390fd5b5f826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa15801561055a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610581919081019061140e565b80519091506060805f5b610596600185611448565b81101561065f5760018582815181106105b1576105b161146d565b60209081029190910101516040516001600160a01b039283166024820152911660448201526001606482015260840160408051601f19818403018152918152602080830180516001600160e01b031663f8dc5dd960e01b179052825191519295508492610627925f928c928492918a9101611498565b60408051601f198184030181529082905261064592916020016114f7565b60408051601f19818403018152919052915060010161058b565b5060018461066d8286611448565b8151811061067d5761067d61146d565b60209081029190910101516040516001600160a01b0392831660248201529116604482015233606482015260840160408051601f19818403018152918152602080830180516001600160e01b031663e318b52b60e01b1790528251915192945083926106f2925f928b92849291899101611498565b60408051601f198184030181529082905261071092916020016114f7565b6040516020818303038152906040529050806040516024016107329190611539565b60408051601f198184030181529181526020820180516001600160e01b03166346c07f8560e11b1790525163468721a760e01b81529092506001600160a01b0387169063468721a7906107b0907f0000000000000000000000000000000000000000000000000000000000000000905f90879060019060040161154b565b6020604051808303815f875af11580156107cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f0919061159f565b50604051889033907fb5107ff9d13ac6cf43e8c27ad100b95516dc653454fe527b8a3dc5e202aa590d905f90a350506001600955505050505050565b5f60016009541115610851576040516345f5ce8b60e11b815260040160405180910390fd5b6002600955336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108d057604051631db36e8b60e31b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016103f8565b8151602081146108fd57604051631a64813d60e11b815260206004820152602481018290526044016103f8565b5f855190506060805f8680602001905181019061091a91906115be565b6040516331a9108f60e11b8152600481018290529091505f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610982573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a691906112bb565b604051630846d5ff60e31b8152600481018490529091505f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634236aff89060240160e060405180830381865afa158015610a0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3291906112f5565b50939c505063ffffffff169350506001600160a01b038a169150610a6b90505760405163d92e233d60e01b815260040160405180910390fd5b898114610a9557604051635372461560e01b815260048101829052602481018b90526044016103f8565b604051634d486f8560e01b8152600481018490525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634d486f85906024015f60405180830381865afa158015610af9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b2091908101906115d5565b91505080518714610b5157805160405163f720290d60e01b81526004810191909152602481018890526044016103f8565b5f5b87811015610bf157818181518110610b6d57610b6d61146d565b60200260200101516001600160a01b03168d8281518110610b9057610b9061146d565b60200260200101516001600160a01b031614610be9578c8181518110610bb857610bb861146d565b60200260200101516040516374dba67360e01b81526004016103f891906001600160a01b0391909116815260200190565b600101610b53565b505f896001600160a01b031663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c2e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c55919081019061140e565b905080516001148015610c925750836001600160a01b0316815f81518110610c7f57610c7f61146d565b60200260200101516001600160a01b0316145b15610eea575f5b88811015610d60578d8181518110610cb357610cb361146d565b60209081029190910101516040516001600160a01b03909116602482015260016044820152606401604051602081830303815290604052630d582f1360e01b6020820180516001600160e01b0383818316178352505050509750865f8c5f8b518c604051602001610d28959493929190611498565b60408051601f1981840301815290829052610d4692916020016114f7565b60408051601f198184030181529190529650600101610c99565b508c5f81518110610d7357610d7361146d565b60209081029190910101516040516001600160a01b0391821660248201529085166044820152606481018d905260840160408051601f19818403018152918152602080830180516001600160e01b031663f8dc5dd960e01b179052825191519299508892610dea925f928f928492918e9101611498565b60408051601f1981840301815290829052610e0892916020016114f7565b604051602081830303815290604052955085604051602401610e2a9190611539565b60408051601f198184030181529181526020820180516001600160e01b03166346c07f8560e11b1790525163468721a760e01b81529097506001600160a01b038b169063468721a790610ea8907f0000000000000000000000000000000000000000000000000000000000000000905f908c9060019060040161154b565b6020604051808303815f875af1158015610ec4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee8919061159f565b505b896001600160a01b031663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610f25573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f4c919081019061140e565b9050896001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fae91906115be565b9250828c14610fda57604051635372461560e01b815260048101849052602481018d90526044016103f8565b8051881461100857805160405163f720290d60e01b81526004810191909152602481018990526044016103f8565b5f5b8881101561108c5781600161101f838c611448565b6110299190611448565b815181106110395761103961146d565b60200260200101516001600160a01b03168e828151811061105c5761105c61146d565b60200260200101516001600160a01b031614611084578d8181518110610bb857610bb861146d565b60010161100a565b5084846001600160a01b03167f5795fc55b414d902f8e0e955ef070f406b0d406db8ec24fe9bb833c7a478b64a8f8f6040516110c992919061161a565b60405180910390a35050600160095550959998505050505050505050565b5f602082840312156110f7575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561113b5761113b6110fe565b604052919050565b5f67ffffffffffffffff82111561115c5761115c6110fe565b5060051b60200190565b6001600160a01b038116811461117a575f5ffd5b50565b5f82601f83011261118c575f5ffd5b813567ffffffffffffffff8111156111a6576111a66110fe565b6111b9601f8201601f1916602001611112565b8181528460208386010111156111cd575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f606084860312156111fb575f5ffd5b833567ffffffffffffffff811115611211575f5ffd5b8401601f81018613611221575f5ffd5b803561123461122f82611143565b611112565b8082825260208201915060208360051b850101925088831115611255575f5ffd5b6020840193505b8284101561128057833561126f81611166565b82526020938401939091019061125c565b955050505060208401359150604084013567ffffffffffffffff8111156112a5575f5ffd5b6112b18682870161117d565b9150509250925092565b5f602082840312156112cb575f5ffd5b81516112d681611166565b9392505050565b805163ffffffff811681146112f0575f5ffd5b919050565b5f5f5f5f5f5f5f60e0888a03121561130b575f5ffd5b87516bffffffffffffffffffffffff81168114611326575f5ffd5b602089015190975061133781611166565b6040890151909650945061134d606089016112dd565b935061135b608089016112dd565b925061136960a089016112dd565b915060c08801516006811061137c575f5ffd5b8091505092959891949750929550565b634e487b7160e01b5f52602160045260245ffd5b5f82601f8301126113af575f5ffd5b81516113bd61122f82611143565b8082825260208201915060208360051b8601019250858311156113de575f5ffd5b602085015b838110156114045780516113f681611166565b8352602092830192016113e3565b5095945050505050565b5f6020828403121561141e575f5ffd5b815167ffffffffffffffff811115611434575f5ffd5b611440848285016113a0565b949350505050565b8181038181111561146757634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f600287106114b557634e487b7160e01b5f52602160045260245ffd5b8660f81b82526bffffffffffffffffffffffff198660601b1660018301528460158301528360358301526114ec6055830184611481565b979650505050505050565b5f6114406115058386611481565b84611481565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112d6602083018461150b565b6001600160a01b0385168152836020820152608060408201525f611572608083018561150b565b90506002831061159057634e487b7160e01b5f52602160045260245ffd5b82606083015295945050505050565b5f602082840312156115af575f5ffd5b815180151581146112d6575f5ffd5b5f602082840312156115ce575f5ffd5b5051919050565b5f5f604083850312156115e6575f5ffd5b8251602084015190925067ffffffffffffffff811115611604575f5ffd5b611610858286016113a0565b9150509250929050565b604080825283519082018190525f9060208501906060840190835b8181101561165c5783516001600160a01b0316835260209384019390920191600101611635565b505060209390930193909352509291505056fea26469706673582212208d9f5b58c915ac9e6cffc7f49ab633eb5742c62ea252885584e6abdee0068a1864736f6c634300081e0033",
322
+ "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061007a575f3560e01c8063cbcf252a11610058578063cbcf252a146100b6578063e49cda08146100f5578063f02fb7741461011c578063f398dba814610124575f5ffd5b8063242929621461007e57806363745087146100885780639d619683146100a3575b5f5ffd5b610086610137565b005b610090600181565b6040519081526020015b60405180910390f35b6100866100b13660046110e7565b61030e565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161009a565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b610090602081565b6100dd6101323660046111e9565b61082c565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101805760405163f56b123b60e01b815260040160405180910390fd5b600554156101a157604051637ee422c560e01b815260040160405180910390fd5b60015f81905260208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f546001600160a01b0316146101f557604051630187398b60e11b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081165f90815260016020526040902054161561024d57604051633b3a461d60e21b815260040160405180910390fd5b600160208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081165f81815260408082208054949095167fffffffffffffffffffffffff000000000000000000000000000000000000000094851617909455948552835490911681179092555190917fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091a2565b60016009541115610332576040516345f5ce8b60e11b815260040160405180910390fd5b60026009556040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561039c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c091906112bb565b9050336001600160a01b038216146104015760405163521eb56d60e11b81523360048201526001600160a01b03821660248201526044015b60405180910390fd5b604051630846d5ff60e31b8152600481018390525f9081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634236aff89060240160e060405180830381865afa158015610468573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048c91906112f5565b965050505050925050600160058111156104a8576104a861138c565b8160058111156104ba576104ba61138c565b146104f7578060058111156104d1576104d161138c565b60405163549292e760e01b815260ff9091166004820152602481018590526044016103f8565b6001600160a01b03821661051e5760405163d92e233d60e01b815260040160405180910390fd5b5f826001600160a01b031663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa15801561055a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610581919081019061140e565b80519091506060805f5b610596600185611448565b81101561065f5760018582815181106105b1576105b161146d565b60209081029190910101516040516001600160a01b039283166024820152911660448201526001606482015260840160408051601f19818403018152918152602080830180516001600160e01b031663f8dc5dd960e01b179052825191519295508492610627925f928c928492918a9101611498565b60408051601f198184030181529082905261064592916020016114f7565b60408051601f19818403018152919052915060010161058b565b5060018461066d8286611448565b8151811061067d5761067d61146d565b60209081029190910101516040516001600160a01b0392831660248201529116604482015233606482015260840160408051601f19818403018152918152602080830180516001600160e01b031663e318b52b60e01b1790528251915192945083926106f2925f928b92849291899101611498565b60408051601f198184030181529082905261071092916020016114f7565b6040516020818303038152906040529050806040516024016107329190611539565b60408051601f198184030181529181526020820180516001600160e01b03166346c07f8560e11b1790525163468721a760e01b81529092506001600160a01b0387169063468721a7906107b0907f0000000000000000000000000000000000000000000000000000000000000000905f90879060019060040161154b565b6020604051808303815f875af11580156107cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f0919061159f565b50604051889033907fb5107ff9d13ac6cf43e8c27ad100b95516dc653454fe527b8a3dc5e202aa590d905f90a350506001600955505050505050565b5f60016009541115610851576040516345f5ce8b60e11b815260040160405180910390fd5b6002600955336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108d057604051631db36e8b60e31b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016103f8565b8151602081146108fd57604051631a64813d60e11b815260206004820152602481018290526044016103f8565b5f855190506060805f8680602001905181019061091a91906115be565b6040516331a9108f60e11b8152600481018290529091505f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610982573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a691906112bb565b604051630846d5ff60e31b8152600481018490529091505f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634236aff89060240160e060405180830381865afa158015610a0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3291906112f5565b50939c505063ffffffff169350506001600160a01b038a169150610a6b90505760405163d92e233d60e01b815260040160405180910390fd5b898114610a9557604051635372461560e01b815260048101829052602481018b90526044016103f8565b604051634d486f8560e01b8152600481018490525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634d486f85906024015f60405180830381865afa158015610af9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b2091908101906115d5565b91505080518714610b5157805160405163f720290d60e01b81526004810191909152602481018890526044016103f8565b5f5b87811015610bf157818181518110610b6d57610b6d61146d565b60200260200101516001600160a01b03168d8281518110610b9057610b9061146d565b60200260200101516001600160a01b031614610be9578c8181518110610bb857610bb861146d565b60200260200101516040516374dba67360e01b81526004016103f891906001600160a01b0391909116815260200190565b600101610b53565b505f896001600160a01b031663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c2e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c55919081019061140e565b905080516001148015610c925750836001600160a01b0316815f81518110610c7f57610c7f61146d565b60200260200101516001600160a01b0316145b15610eea575f5b88811015610d60578d8181518110610cb357610cb361146d565b60209081029190910101516040516001600160a01b03909116602482015260016044820152606401604051602081830303815290604052630d582f1360e01b6020820180516001600160e01b0383818316178352505050509750865f8c5f8b518c604051602001610d28959493929190611498565b60408051601f1981840301815290829052610d4692916020016114f7565b60408051601f198184030181529190529650600101610c99565b508c5f81518110610d7357610d7361146d565b60209081029190910101516040516001600160a01b0391821660248201529085166044820152606481018d905260840160408051601f19818403018152918152602080830180516001600160e01b031663f8dc5dd960e01b179052825191519299508892610dea925f928f928492918e9101611498565b60408051601f1981840301815290829052610e0892916020016114f7565b604051602081830303815290604052955085604051602401610e2a9190611539565b60408051601f198184030181529181526020820180516001600160e01b03166346c07f8560e11b1790525163468721a760e01b81529097506001600160a01b038b169063468721a790610ea8907f0000000000000000000000000000000000000000000000000000000000000000905f908c9060019060040161154b565b6020604051808303815f875af1158015610ec4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee8919061159f565b505b896001600160a01b031663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610f25573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f4c919081019061140e565b9050896001600160a01b031663e75235b86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fae91906115be565b9250828c14610fda57604051635372461560e01b815260048101849052602481018d90526044016103f8565b8051881461100857805160405163f720290d60e01b81526004810191909152602481018990526044016103f8565b5f5b8881101561108c5781600161101f838c611448565b6110299190611448565b815181106110395761103961146d565b60200260200101516001600160a01b03168e828151811061105c5761105c61146d565b60200260200101516001600160a01b031614611084578d8181518110610bb857610bb861146d565b60010161100a565b5084846001600160a01b03167f5795fc55b414d902f8e0e955ef070f406b0d406db8ec24fe9bb833c7a478b64a8f8f6040516110c992919061161a565b60405180910390a35050600160095550959998505050505050505050565b5f602082840312156110f7575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561113b5761113b6110fe565b604052919050565b5f67ffffffffffffffff82111561115c5761115c6110fe565b5060051b60200190565b6001600160a01b038116811461117a575f5ffd5b50565b5f82601f83011261118c575f5ffd5b813567ffffffffffffffff8111156111a6576111a66110fe565b6111b9601f8201601f1916602001611112565b8181528460208386010111156111cd575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f606084860312156111fb575f5ffd5b833567ffffffffffffffff811115611211575f5ffd5b8401601f81018613611221575f5ffd5b803561123461122f82611143565b611112565b8082825260208201915060208360051b850101925088831115611255575f5ffd5b6020840193505b8284101561128057833561126f81611166565b82526020938401939091019061125c565b955050505060208401359150604084013567ffffffffffffffff8111156112a5575f5ffd5b6112b18682870161117d565b9150509250925092565b5f602082840312156112cb575f5ffd5b81516112d681611166565b9392505050565b805163ffffffff811681146112f0575f5ffd5b919050565b5f5f5f5f5f5f5f60e0888a03121561130b575f5ffd5b87516bffffffffffffffffffffffff81168114611326575f5ffd5b602089015190975061133781611166565b6040890151909650945061134d606089016112dd565b935061135b608089016112dd565b925061136960a089016112dd565b915060c08801516006811061137c575f5ffd5b8091505092959891949750929550565b634e487b7160e01b5f52602160045260245ffd5b5f82601f8301126113af575f5ffd5b81516113bd61122f82611143565b8082825260208201915060208360051b8601019250858311156113de575f5ffd5b602085015b838110156114045780516113f681611166565b8352602092830192016113e3565b5095945050505050565b5f6020828403121561141e575f5ffd5b815167ffffffffffffffff811115611434575f5ffd5b611440848285016113a0565b949350505050565b8181038181111561146757634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f600287106114b557634e487b7160e01b5f52602160045260245ffd5b8660f81b82526bffffffffffffffffffffffff198660601b1660018301528460158301528360358301526114ec6055830184611481565b979650505050505050565b5f6114406115058386611481565b84611481565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112d6602083018461150b565b6001600160a01b0385168152836020820152608060408201525f611572608083018561150b565b90506002831061159057634e487b7160e01b5f52602160045260245ffd5b82606083015295945050505050565b5f602082840312156115af575f5ffd5b815180151581146112d6575f5ffd5b5f602082840312156115ce575f5ffd5b5051919050565b5f5f604083850312156115e6575f5ffd5b8251602084015190925067ffffffffffffffff811115611604575f5ffd5b611610858286016113a0565b9150509250929050565b604080825283519082018190525f9060208501906060840190835b8181101561165c5783516001600160a01b0316835260209384019390920191600101611635565b505060209390930193909352509291505056fea26469706673582212208d9f5b58c915ac9e6cffc7f49ab633eb5742c62ea252885584e6abdee0068a1864736f6c634300081e0033",
323
+ "linkReferences": {},
324
+ "immutableReferences": {
325
+ "10591": [
326
+ {
327
+ "start": 321,
328
+ "length": 32
329
+ },
330
+ {
331
+ "start": 511,
332
+ "length": 32
333
+ },
334
+ {
335
+ "start": 641,
336
+ "length": 32
337
+ }
338
+ ],
339
+ "10593": [
340
+ {
341
+ "start": 250,
342
+ "length": 32
343
+ },
344
+ {
345
+ "start": 1921,
346
+ "length": 32
347
+ },
348
+ {
349
+ "start": 3705,
350
+ "length": 32
351
+ }
352
+ ],
353
+ "10595": [
354
+ {
355
+ "start": 187,
356
+ "length": 32
357
+ },
358
+ {
359
+ "start": 847,
360
+ "length": 32
361
+ },
362
+ {
363
+ "start": 1059,
364
+ "length": 32
365
+ },
366
+ {
367
+ "start": 2145,
368
+ "length": 32
369
+ },
370
+ {
371
+ "start": 2211,
372
+ "length": 32
373
+ },
374
+ {
375
+ "start": 2365,
376
+ "length": 32
377
+ },
378
+ {
379
+ "start": 2505,
380
+ "length": 32
381
+ },
382
+ {
383
+ "start": 2733,
384
+ "length": 32
385
+ }
386
+ ]
387
+ },
388
+ "methodIdentifiers": {
389
+ "DEFAULT_DATA_LENGTH()": "f02fb774",
390
+ "RECOVER_THRESHOLD()": "63745087",
391
+ "create(address[],uint256,bytes)": "f398dba8",
392
+ "enableModule()": "24292962",
393
+ "multiSend()": "e49cda08",
394
+ "recoverAccess(uint256)": "9d619683",
395
+ "serviceRegistry()": "cbcf252a"
396
+ },
397
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_multiSend\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_serviceRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DelegatecallOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyModulesOnly\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provided\",\"type\":\"uint256\"}],\"name\":\"IncorrectDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuard\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"RegistryOnly\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provided\",\"type\":\"uint256\"}],\"name\":\"WrongNumOwners\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provided\",\"type\":\"address\"}],\"name\":\"WrongOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"serviceId\",\"type\":\"uint256\"}],\"name\":\"WrongServiceState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provided\",\"type\":\"uint256\"}],\"name\":\"WrongThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroNonceOnly\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"serviceId\",\"type\":\"uint256\"}],\"name\":\"AccessRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"EnabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"serviceOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"serviceId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"ServiceRedeployed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_DATA_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RECOVER_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"multisigOwners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"multisig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiSend\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"serviceId\",\"type\":\"uint256\"}],\"name\":\"recoverAccess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"serviceRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aleksandr Kuperman - <aleksandr.kuperman@valory.xyz>Andrey Lebedev - <andrey.lebedev@valory.xyz>Mariapia Moscatiello - <mariapia.moscatiello@valory.xyz>\",\"errors\":{\"DelegatecallOnly()\":[{\"details\":\"Must be `DELEGATECALL` only.\"}],\"DuplicateModule()\":[{\"details\":\"Modules must not be duplicated.\"}],\"EmptyModulesOnly()\":[{\"details\":\"Modules must not be initialized.\"}],\"IncorrectDataLength(uint256,uint256)\":[{\"details\":\"Provided incorrect data length.\",\"params\":{\"expected\":\"Expected minimum data length.\",\"provided\":\"Provided data length.\"}}],\"OwnerOnly(address,address)\":[{\"details\":\"Only `owner` has a privilege, but the `sender` was provided.\",\"params\":{\"owner\":\"Required sender address as an owner.\",\"sender\":\"Sender address.\"}}],\"ReentrancyGuard()\":[{\"details\":\"Caught reentrancy violation.\"}],\"RegistryOnly(address,address)\":[{\"details\":\"Only `registry` has a privilege, but the `sender` was provided.\",\"params\":{\"registry\":\"Required sender address as a registry.\",\"sender\":\"Sender address.\"}}],\"WrongNumOwners(uint256,uint256)\":[{\"details\":\"Provided incorrect number of owners.\",\"params\":{\"expected\":\"Expected number of owners.\",\"provided\":\"Provided number of owners.\"}}],\"WrongOwner(address)\":[{\"details\":\"Provided incorrect multisig owner.\",\"params\":{\"provided\":\"Provided owner address.\"}}],\"WrongServiceState(uint8,uint256)\":[{\"details\":\"Wrong state of a service.\",\"params\":{\"serviceId\":\"Service Id.\",\"state\":\"Service state.\"}}],\"WrongThreshold(uint256,uint256)\":[{\"details\":\"Provided incorrect multisig threshold.\",\"params\":{\"expected\":\"Expected threshold.\",\"provided\":\"Provided threshold.\"}}],\"ZeroAddress()\":[{\"details\":\"Provided zero address.\"}],\"ZeroNonceOnly()\":[{\"details\":\"Nonce must be zero.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"RecoveryModule constructor.\",\"params\":{\"_multiSend\":\"Multisend contract address.\",\"_serviceRegistry\":\"Service Registry contract address.\"}},\"create(address[],uint256,bytes)\":{\"details\":\"Updates and/or verifies the existent gnosis safe multisig for changed owners and threshold.\",\"params\":{\"data\":\"Packed data containing multisig service Id.\",\"multisigOwners\":\"Set of updated multisig owners to verify against.\",\"threshold\":\"Updated number for multisig transaction confirmations.\"},\"returns\":{\"multisig\":\"Multisig address.\"}},\"enableModule()\":{\"details\":\"Enables self address as a multisig module.\"},\"recoverAccess(uint256)\":{\"details\":\"Recovers service multisig access for a specified service Id.\",\"params\":{\"serviceId\":\"Service Id.\"}}},\"title\":\"RecoveryModule - Smart contract for Safe recovery module for scenarios when the access is lost\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create(address[],uint256,bytes)\":{\"notice\":\"This function operates with existent multisig proxy that is requested to be updated in terms of the set of owners' addresses and the threshold. There are two scenarios possible: 1. The multisig proxy is already updated before reaching this function. Then the multisig address must be passed as a payload such that its owners and threshold are verified against those specified in the argument list. 2. The multisig proxy is not yet updated. Then the service Id must be passed in a packed bytes of data in order to update multisig owners to match service agent instances. The updated multisig proxy is then going to be verified with the provided set of owners' addresses and the threshold. Note that owners' addresses in the multisig are stored in reverse order compared to how they were added: https://etherscan.io/address/0xd9db270c1b5e3bd161e8c8503c55ceabee709552#code#F6#L56\"},\"enableModule()\":{\"notice\":\"This function must only be called via `DELEGATECALL` when a Safe contract is created. For enabling module after multisig is created use direct native Safe enableModule() function call.\"},\"recoverAccess(uint256)\":{\"notice\":\"Only service owner is entitled to recover and become the ultimate multisig owner.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/multisigs/RecoveryModule.sol\":\"RecoveryModule\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":750},\"remappings\":[\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":ds-test/=lib/solmate/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"contracts/multisigs/RecoveryModule.sol\":{\"keccak256\":\"0x588aa4a836dc6168a1a7b84f790275920d326c54627e9a5754a14018845c40e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e3d3f0fb791b08c830d87c5b4c75c00fc72389b788c1bf7362973fd313fd476\",\"dweb:/ipfs/Qmee3fmPpuBE4e45fNV8w6UrSJZZUccDurynv6cecoSwBf\"]},\"node_modules/@gnosis.pm/safe-contracts/contracts/examples/libraries/GnosisSafeStorage.sol\":{\"keccak256\":\"0xecfd0d8a43d859ef1fb8161cb21ce5d38461603383378a5b1c4c7d5d4a3bfbf3\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://4248ba92a7d4b9c24344944427b7a2f092f2328d57d39317f4a9f178f503beb5\",\"dweb:/ipfs/QmUFuLoQRjZdx7fsDEprFstuDjLQ7em3syagHA8b8AD2Sa\"]}},\"version\":1}",
398
+ "metadata": {
399
+ "compiler": {
400
+ "version": "0.8.30+commit.73712a01"
401
+ },
402
+ "language": "Solidity",
403
+ "output": {
404
+ "abi": [
405
+ {
406
+ "inputs": [
407
+ {
408
+ "internalType": "address",
409
+ "name": "_multiSend",
410
+ "type": "address"
411
+ },
412
+ {
413
+ "internalType": "address",
414
+ "name": "_serviceRegistry",
415
+ "type": "address"
416
+ }
417
+ ],
418
+ "stateMutability": "nonpayable",
419
+ "type": "constructor"
420
+ },
421
+ {
422
+ "inputs": [],
423
+ "type": "error",
424
+ "name": "DelegatecallOnly"
425
+ },
426
+ {
427
+ "inputs": [],
428
+ "type": "error",
429
+ "name": "DuplicateModule"
430
+ },
431
+ {
432
+ "inputs": [],
433
+ "type": "error",
434
+ "name": "EmptyModulesOnly"
435
+ },
436
+ {
437
+ "inputs": [
438
+ {
439
+ "internalType": "uint256",
440
+ "name": "expected",
441
+ "type": "uint256"
442
+ },
443
+ {
444
+ "internalType": "uint256",
445
+ "name": "provided",
446
+ "type": "uint256"
447
+ }
448
+ ],
449
+ "type": "error",
450
+ "name": "IncorrectDataLength"
451
+ },
452
+ {
453
+ "inputs": [
454
+ {
455
+ "internalType": "address",
456
+ "name": "sender",
457
+ "type": "address"
458
+ },
459
+ {
460
+ "internalType": "address",
461
+ "name": "owner",
462
+ "type": "address"
463
+ }
464
+ ],
465
+ "type": "error",
466
+ "name": "OwnerOnly"
467
+ },
468
+ {
469
+ "inputs": [],
470
+ "type": "error",
471
+ "name": "ReentrancyGuard"
472
+ },
473
+ {
474
+ "inputs": [
475
+ {
476
+ "internalType": "address",
477
+ "name": "sender",
478
+ "type": "address"
479
+ },
480
+ {
481
+ "internalType": "address",
482
+ "name": "registry",
483
+ "type": "address"
484
+ }
485
+ ],
486
+ "type": "error",
487
+ "name": "RegistryOnly"
488
+ },
489
+ {
490
+ "inputs": [
491
+ {
492
+ "internalType": "uint256",
493
+ "name": "expected",
494
+ "type": "uint256"
495
+ },
496
+ {
497
+ "internalType": "uint256",
498
+ "name": "provided",
499
+ "type": "uint256"
500
+ }
501
+ ],
502
+ "type": "error",
503
+ "name": "WrongNumOwners"
504
+ },
505
+ {
506
+ "inputs": [
507
+ {
508
+ "internalType": "address",
509
+ "name": "provided",
510
+ "type": "address"
511
+ }
512
+ ],
513
+ "type": "error",
514
+ "name": "WrongOwner"
515
+ },
516
+ {
517
+ "inputs": [
518
+ {
519
+ "internalType": "uint8",
520
+ "name": "state",
521
+ "type": "uint8"
522
+ },
523
+ {
524
+ "internalType": "uint256",
525
+ "name": "serviceId",
526
+ "type": "uint256"
527
+ }
528
+ ],
529
+ "type": "error",
530
+ "name": "WrongServiceState"
531
+ },
532
+ {
533
+ "inputs": [
534
+ {
535
+ "internalType": "uint256",
536
+ "name": "expected",
537
+ "type": "uint256"
538
+ },
539
+ {
540
+ "internalType": "uint256",
541
+ "name": "provided",
542
+ "type": "uint256"
543
+ }
544
+ ],
545
+ "type": "error",
546
+ "name": "WrongThreshold"
547
+ },
548
+ {
549
+ "inputs": [],
550
+ "type": "error",
551
+ "name": "ZeroAddress"
552
+ },
553
+ {
554
+ "inputs": [],
555
+ "type": "error",
556
+ "name": "ZeroNonceOnly"
557
+ },
558
+ {
559
+ "inputs": [
560
+ {
561
+ "internalType": "address",
562
+ "name": "serviceOwner",
563
+ "type": "address",
564
+ "indexed": true
565
+ },
566
+ {
567
+ "internalType": "uint256",
568
+ "name": "serviceId",
569
+ "type": "uint256",
570
+ "indexed": true
571
+ }
572
+ ],
573
+ "type": "event",
574
+ "name": "AccessRecovered",
575
+ "anonymous": false
576
+ },
577
+ {
578
+ "inputs": [
579
+ {
580
+ "internalType": "address",
581
+ "name": "module",
582
+ "type": "address",
583
+ "indexed": true
584
+ }
585
+ ],
586
+ "type": "event",
587
+ "name": "EnabledModule",
588
+ "anonymous": false
589
+ },
590
+ {
591
+ "inputs": [
592
+ {
593
+ "internalType": "address",
594
+ "name": "serviceOwner",
595
+ "type": "address",
596
+ "indexed": true
597
+ },
598
+ {
599
+ "internalType": "uint256",
600
+ "name": "serviceId",
601
+ "type": "uint256",
602
+ "indexed": true
603
+ },
604
+ {
605
+ "internalType": "address[]",
606
+ "name": "owners",
607
+ "type": "address[]",
608
+ "indexed": false
609
+ },
610
+ {
611
+ "internalType": "uint256",
612
+ "name": "threshold",
613
+ "type": "uint256",
614
+ "indexed": false
615
+ }
616
+ ],
617
+ "type": "event",
618
+ "name": "ServiceRedeployed",
619
+ "anonymous": false
620
+ },
621
+ {
622
+ "inputs": [],
623
+ "stateMutability": "view",
624
+ "type": "function",
625
+ "name": "DEFAULT_DATA_LENGTH",
626
+ "outputs": [
627
+ {
628
+ "internalType": "uint256",
629
+ "name": "",
630
+ "type": "uint256"
631
+ }
632
+ ]
633
+ },
634
+ {
635
+ "inputs": [],
636
+ "stateMutability": "view",
637
+ "type": "function",
638
+ "name": "RECOVER_THRESHOLD",
639
+ "outputs": [
640
+ {
641
+ "internalType": "uint256",
642
+ "name": "",
643
+ "type": "uint256"
644
+ }
645
+ ]
646
+ },
647
+ {
648
+ "inputs": [
649
+ {
650
+ "internalType": "address[]",
651
+ "name": "multisigOwners",
652
+ "type": "address[]"
653
+ },
654
+ {
655
+ "internalType": "uint256",
656
+ "name": "threshold",
657
+ "type": "uint256"
658
+ },
659
+ {
660
+ "internalType": "bytes",
661
+ "name": "data",
662
+ "type": "bytes"
663
+ }
664
+ ],
665
+ "stateMutability": "nonpayable",
666
+ "type": "function",
667
+ "name": "create",
668
+ "outputs": [
669
+ {
670
+ "internalType": "address",
671
+ "name": "multisig",
672
+ "type": "address"
673
+ }
674
+ ]
675
+ },
676
+ {
677
+ "inputs": [],
678
+ "stateMutability": "nonpayable",
679
+ "type": "function",
680
+ "name": "enableModule"
681
+ },
682
+ {
683
+ "inputs": [],
684
+ "stateMutability": "view",
685
+ "type": "function",
686
+ "name": "multiSend",
687
+ "outputs": [
688
+ {
689
+ "internalType": "address",
690
+ "name": "",
691
+ "type": "address"
692
+ }
693
+ ]
694
+ },
695
+ {
696
+ "inputs": [
697
+ {
698
+ "internalType": "uint256",
699
+ "name": "serviceId",
700
+ "type": "uint256"
701
+ }
702
+ ],
703
+ "stateMutability": "nonpayable",
704
+ "type": "function",
705
+ "name": "recoverAccess"
706
+ },
707
+ {
708
+ "inputs": [],
709
+ "stateMutability": "view",
710
+ "type": "function",
711
+ "name": "serviceRegistry",
712
+ "outputs": [
713
+ {
714
+ "internalType": "address",
715
+ "name": "",
716
+ "type": "address"
717
+ }
718
+ ]
719
+ }
720
+ ],
721
+ "devdoc": {
722
+ "kind": "dev",
723
+ "methods": {
724
+ "constructor": {
725
+ "details": "RecoveryModule constructor.",
726
+ "params": {
727
+ "_multiSend": "Multisend contract address.",
728
+ "_serviceRegistry": "Service Registry contract address."
729
+ }
730
+ },
731
+ "create(address[],uint256,bytes)": {
732
+ "details": "Updates and/or verifies the existent gnosis safe multisig for changed owners and threshold.",
733
+ "params": {
734
+ "data": "Packed data containing multisig service Id.",
735
+ "multisigOwners": "Set of updated multisig owners to verify against.",
736
+ "threshold": "Updated number for multisig transaction confirmations."
737
+ },
738
+ "returns": {
739
+ "multisig": "Multisig address."
740
+ }
741
+ },
742
+ "enableModule()": {
743
+ "details": "Enables self address as a multisig module."
744
+ },
745
+ "recoverAccess(uint256)": {
746
+ "details": "Recovers service multisig access for a specified service Id.",
747
+ "params": {
748
+ "serviceId": "Service Id."
749
+ }
750
+ }
751
+ },
752
+ "version": 1
753
+ },
754
+ "userdoc": {
755
+ "kind": "user",
756
+ "methods": {
757
+ "create(address[],uint256,bytes)": {
758
+ "notice": "This function operates with existent multisig proxy that is requested to be updated in terms of the set of owners' addresses and the threshold. There are two scenarios possible: 1. The multisig proxy is already updated before reaching this function. Then the multisig address must be passed as a payload such that its owners and threshold are verified against those specified in the argument list. 2. The multisig proxy is not yet updated. Then the service Id must be passed in a packed bytes of data in order to update multisig owners to match service agent instances. The updated multisig proxy is then going to be verified with the provided set of owners' addresses and the threshold. Note that owners' addresses in the multisig are stored in reverse order compared to how they were added: https://etherscan.io/address/0xd9db270c1b5e3bd161e8c8503c55ceabee709552#code#F6#L56"
759
+ },
760
+ "enableModule()": {
761
+ "notice": "This function must only be called via `DELEGATECALL` when a Safe contract is created. For enabling module after multisig is created use direct native Safe enableModule() function call."
762
+ },
763
+ "recoverAccess(uint256)": {
764
+ "notice": "Only service owner is entitled to recover and become the ultimate multisig owner."
765
+ }
766
+ },
767
+ "version": 1
768
+ }
769
+ },
770
+ "settings": {
771
+ "remappings": [
772
+ "@gnosis.pm/=node_modules/@gnosis.pm/",
773
+ "ds-test/=lib/solmate/lib/ds-test/src/",
774
+ "forge-std/=lib/forge-std/src/",
775
+ "solmate/=lib/solmate/src/"
776
+ ],
777
+ "optimizer": {
778
+ "enabled": true,
779
+ "runs": 750
780
+ },
781
+ "metadata": {
782
+ "bytecodeHash": "ipfs"
783
+ },
784
+ "compilationTarget": {
785
+ "contracts/multisigs/RecoveryModule.sol": "RecoveryModule"
786
+ },
787
+ "evmVersion": "prague",
788
+ "libraries": {}
789
+ },
790
+ "sources": {
791
+ "contracts/multisigs/RecoveryModule.sol": {
792
+ "keccak256": "0x588aa4a836dc6168a1a7b84f790275920d326c54627e9a5754a14018845c40e3",
793
+ "urls": [
794
+ "bzz-raw://3e3d3f0fb791b08c830d87c5b4c75c00fc72389b788c1bf7362973fd313fd476",
795
+ "dweb:/ipfs/Qmee3fmPpuBE4e45fNV8w6UrSJZZUccDurynv6cecoSwBf"
796
+ ],
797
+ "license": "MIT"
798
+ },
799
+ "node_modules/@gnosis.pm/safe-contracts/contracts/examples/libraries/GnosisSafeStorage.sol": {
800
+ "keccak256": "0xecfd0d8a43d859ef1fb8161cb21ce5d38461603383378a5b1c4c7d5d4a3bfbf3",
801
+ "urls": [
802
+ "bzz-raw://4248ba92a7d4b9c24344944427b7a2f092f2328d57d39317f4a9f178f503beb5",
803
+ "dweb:/ipfs/QmUFuLoQRjZdx7fsDEprFstuDjLQ7em3syagHA8b8AD2Sa"
804
+ ],
805
+ "license": "LGPL-3.0-only"
806
+ }
807
+ },
808
+ "version": 1
809
+ },
810
+ "id": 20
811
+ }