olas-operate-middleware 0.14.0__py3-none-any.whl → 0.14.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.

Potentially problematic release.


This version of olas-operate-middleware might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: olas-operate-middleware
3
- Version: 0.14.0
3
+ Version: 0.14.2
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: David Vilela
@@ -39,10 +39,6 @@ operate/data/contracts/optimism_mintable_erc20/__init__.py,sha256=7MXE2uJ_XdnpaB
39
39
  operate/data/contracts/optimism_mintable_erc20/build/OptimismMintableERC20.json,sha256=77YyAhmsobhckux59r0JWgPd9fgmlSnEAJ_Wef-WwKI,9974
40
40
  operate/data/contracts/optimism_mintable_erc20/contract.py,sha256=WDaHgB5iugnpkDF_QRKoIPGhJmk___9y97S7nkbpInY,1566
41
41
  operate/data/contracts/optimism_mintable_erc20/contract.yaml,sha256=kX4RBON_ajqOVJffhKtMSjf0FA0hMuVTUPUbCMaZCz4,717
42
- operate/data/contracts/recovery_module/__init__.py,sha256=mkoUIiE0NPmybypzUQbYGHOvU5-PSRH5YP2urAS07hE,868
43
- operate/data/contracts/recovery_module/build/RecoveryModule.json,sha256=QRfZH_dAjXEhCRZMv3VOyEmSn6vy3ggDgXePLYhv6as,60660
44
- operate/data/contracts/recovery_module/contract.py,sha256=-9eaMdUBXRN-0GCw3hozbc_ZyvrTAi_R0VGnAcDfiI0,1907
45
- operate/data/contracts/recovery_module/contract.yaml,sha256=Kxf2GCWPwT0QqjuhsM8eMYNm8YtTWE9y571tYq3NtlE,680
46
42
  operate/data/contracts/requester_activity_checker/__init__.py,sha256=BrOe5cib0jItJCsygrAYejy0v16xayRUoJUWubyw1yA,878
47
43
  operate/data/contracts/requester_activity_checker/build/RequesterActivityChecker.json,sha256=KbZbZDEred3LvxIY30igz5w9ubaD0-PvDbFdlg7F-y4,9748
48
44
  operate/data/contracts/requester_activity_checker/contract.py,sha256=preNvyk8kmtUE0LgEIZMLorYevgCmoxBqI-1STrX0_4,1252
@@ -59,7 +55,7 @@ operate/data/contracts/uniswap_v2_erc20/tests/__init__.py,sha256=3Arw8dsCsJz6hVO
59
55
  operate/data/contracts/uniswap_v2_erc20/tests/test_contract.py,sha256=z4GfybA_oZUA6-sl61qaJ78rXdbcW_rk4APzgMzQD38,13456
60
56
  operate/keys.py,sha256=qfT3-ZS1R2jG_t7BdqUdgrAYqHnj6dNrtK5c0-_AODU,6179
61
57
  operate/ledger/__init__.py,sha256=c41SqGLSpLBvG_q1cPyDh1aunByopsIIC5Mfk1vdmQE,6207
62
- operate/ledger/profiles.py,sha256=ElxkFcZ9gt9Cetn6nWC0v63Ca0Eo8YTt9_amnI1v6RQ,15153
58
+ operate/ledger/profiles.py,sha256=xeHRM_qGAj9Ksl1DaMrAmn5GENmsVgpiI8s3QDBrLyM,15463
63
59
  operate/migration.py,sha256=hdZlhhdkoPPzkOD0CFyNYAp-eqUrVu_PJnw8_PoxpWk,21015
64
60
  operate/operate_http/__init__.py,sha256=MTS1tMZ5qnA_WzaoeLxlK9IJToMGIpkNr7_vyBeAqZ8,4680
65
61
  operate/operate_http/exceptions.py,sha256=4UFzrn-GyDD71RhkaOyFPBynL6TrrtP3eywaaU3o4fc,1339
@@ -70,7 +66,7 @@ operate/quickstart/claim_staking_rewards.py,sha256=K7X1Yq0mxe3qWmFLb1Xu9-Jghhml9
70
66
  operate/quickstart/reset_configs.py,sha256=DVPM4mh6Djunwq16hf8lD9-nGkkm7wVtwr2JUXr1if8,3380
71
67
  operate/quickstart/reset_password.py,sha256=jEBk2ROR1q8PkTIHlqum7E8PRQtXHwrauiy0_bik3RQ,2394
72
68
  operate/quickstart/reset_staking.py,sha256=SB5LZq9EctG4SYn2M6oPZ7R7ARHSFLRGzAqfKkpRcy0,5111
73
- operate/quickstart/run_service.py,sha256=myncdvwHD9DDgjj6fBVC2Ju4SplfBUZnPyXu0Z2gNYg,30279
69
+ operate/quickstart/run_service.py,sha256=zn-TC7xlRc036C9tXMKIDKPB4GDXMWI2pRG3AeziLWk,30355
74
70
  operate/quickstart/stop_service.py,sha256=a3-1vVyZma2UtFUPKMvVrOso1Iwpz5Rzpus9VAI4qOc,2169
75
71
  operate/quickstart/terminate_on_chain_service.py,sha256=5ENU8_mkj06i80lKUX-v1QbLU0YzKeOZDUL1e_jzySE,2914
76
72
  operate/quickstart/utils.py,sha256=i1juhJCPkzB7ZKgSk5tNiRmYxGcx8MG-dTjVyC5sKys,9287
@@ -79,11 +75,11 @@ operate/serialization.py,sha256=mf2uJCj1WULaTIJSYQ-XuaW3bdwc0vn-cxk2q0IJQf4,3885
79
75
  operate/services/__init__.py,sha256=isrThS-Ccu5Sc15JZgkN4uTAVaSg-NwUUSDeTyJEqLk,855
80
76
  operate/services/agent_runner.py,sha256=JGjyrzA5hX4Nuh79h81-dl2hdt74ZkC63t7UsGXY6Rw,7500
81
77
  operate/services/deployment_runner.py,sha256=7A94QpZu100BwIk1Q9Cr0SVK5Sj7nTWx2GRCwr0gvaM,30772
82
- operate/services/funding_manager.py,sha256=q-mO6kQWthCLI5uW8qbrMQw_6i--zd1rJ3SG4tbw6FM,41672
78
+ operate/services/funding_manager.py,sha256=pURhGwo2-3c7_EiQE_BuECLQsD7t_86KgL27bzliHkc,41680
83
79
  operate/services/health_checker.py,sha256=dARikrgzU1jEuK4NUqlZ7N0DQq4Ah1ZiRKHmrlh8v-A,11472
84
80
  operate/services/manage.py,sha256=9dTjXhBq6tgcFWfhU61JQL67L2h3_b_7p8OICimWWB4,113292
85
- operate/services/protocol.py,sha256=4wAMHoELkqJJlETsMJa-XT8xVA0jfueiaKMn7X4SUKo,71898
86
- operate/services/service.py,sha256=g5P7DmOv-DtITTLJ3m2MdH8L5gMx0Nt50O06Jd3enW0,45407
81
+ operate/services/protocol.py,sha256=afq9x0MbWV0ry2h7DusVTxFWUVe6Q3pVAZGhzb2RznQ,71310
82
+ operate/services/service.py,sha256=YOU0rlPe5PjDnFRlAcThYLvr5MrPOftBDKZHMRNzZ78,46647
87
83
  operate/services/utils/__init__.py,sha256=TvioaZ1mfTRUSCtrQoLNAp4WMVXyqEJqFJM4PxSQCRU,24
88
84
  operate/services/utils/mech.py,sha256=98gNw8pMNvv_O34V1blr7JUwenqxFeeyFuXLuSYv10w,3864
89
85
  operate/services/utils/tendermint.py,sha256=M4zjF97SOJomhmj97bWKIphnia30lbDie65fs_vy_q8,25686
@@ -95,8 +91,8 @@ operate/utils/ssl.py,sha256=O5DrDoZD4T4qQuHP8GLwWUVxQ-1qXeefGp6uDJiF2lM,4308
95
91
  operate/wallet/__init__.py,sha256=NGiozD3XhvkBi7_FaOWQ8x1thZPK4uGpokJaeDY_o2w,813
96
92
  operate/wallet/master.py,sha256=019VvWsMfzAV3fUienhcYVLB12BcSVvub3weAeMOlSA,33808
97
93
  operate/wallet/wallet_recovery_manager.py,sha256=kZIKBCIVb-ufntUoCE0IqAJ-Q2YUIl7955UYY6sp8Os,19856
98
- olas_operate_middleware-0.14.0.dist-info/METADATA,sha256=zv5wkUhi9SFBx0kX1eardkHgBIxoRO3EeT7EX41JtW8,1492
99
- olas_operate_middleware-0.14.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
100
- olas_operate_middleware-0.14.0.dist-info/entry_points.txt,sha256=dM1g2I7ODApKQFcgl5J4NGA7pfBTo6qsUTXM-j2OLlw,44
101
- olas_operate_middleware-0.14.0.dist-info/licenses/LICENSE,sha256=mdBDB-mWKV5Cz4ejBzBiKqan6Z8zVLAh9xwM64O2FW4,11339
102
- olas_operate_middleware-0.14.0.dist-info/RECORD,,
94
+ olas_operate_middleware-0.14.2.dist-info/METADATA,sha256=RMbhPtaO2PcCJJJxdgyi2N0ihdzE0Rt1M83ETVeLltM,1492
95
+ olas_operate_middleware-0.14.2.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
96
+ olas_operate_middleware-0.14.2.dist-info/entry_points.txt,sha256=dM1g2I7ODApKQFcgl5J4NGA7pfBTo6qsUTXM-j2OLlw,44
97
+ olas_operate_middleware-0.14.2.dist-info/licenses/LICENSE,sha256=mdBDB-mWKV5Cz4ejBzBiKqan6Z8zVLAh9xwM64O2FW4,11339
98
+ olas_operate_middleware-0.14.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.2.1
2
+ Generator: poetry-core 2.3.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -140,7 +140,11 @@ STAKING: t.Dict[Chain, t.Dict[str, str]] = {
140
140
  "modius_alpha_3": "0x9034D0413D122015710f1744A19eFb1d7c2CEB13",
141
141
  "modius_alpha_4": "0x8BcAdb2c291C159F9385964e5eD95a9887302862",
142
142
  },
143
- Chain.POLYGON: {},
143
+ Chain.POLYGON: {
144
+ "polygon_beta_1": "0x9F1936f6afB5EAaA2220032Cf5e265F2Cc9511Cc",
145
+ "polygon_beta_2": "0x22D58680F643333F93205B956a4Aa1dC203a16Ad",
146
+ "polygon_beta_3": "0x8887C2852986e7cbaC99B6065fFe53074A6BCC26", # Note: “Polygon Alpha 3” is a typo in apps — the correct name is Polygon Beta 3.
147
+ },
144
148
  }
145
149
 
146
150
 
@@ -46,6 +46,7 @@ from operate.ledger import DEFAULT_RPCS
46
46
  from operate.ledger.profiles import STAKING, get_staking_contract
47
47
  from operate.operate_types import (
48
48
  Chain,
49
+ ChainAmounts,
49
50
  LedgerType,
50
51
  ServiceEnvProvisionType,
51
52
  ServiceTemplate,
@@ -489,15 +490,13 @@ def configure_local_config(
489
490
 
490
491
  print()
491
492
 
492
- template["env_variables"][env_var_name]["value"] = (
493
+ template["env_variables"][env_var_name]["value"] = str(
493
494
  config.user_provided_args[env_var_name]
494
495
  )
495
496
 
496
497
  # TODO: Handle it in a more generic way
497
498
  if (
498
- template["env_variables"][env_var_name]["provision_type"]
499
- == ServiceEnvProvisionType.COMPUTED
500
- and "SUBGRAPH_API_KEY" in config.user_provided_args
499
+ "SUBGRAPH_API_KEY" in config.user_provided_args
501
500
  and "{SUBGRAPH_API_KEY}" in template["env_variables"][env_var_name]["value"]
502
501
  ):
503
502
  template["env_variables"][env_var_name]["value"] = template[
@@ -566,7 +565,10 @@ def get_service(manager: ServiceManager, template: ServiceTemplate) -> Service:
566
565
  if env_var_name not in service.env_variables:
567
566
  service.env_variables[env_var_name] = env_var_data
568
567
 
569
- if env_var_data["provision_type"] == ServiceEnvProvisionType.FIXED:
568
+ if env_var_data["provision_type"] in (
569
+ ServiceEnvProvisionType.FIXED,
570
+ ServiceEnvProvisionType.USER,
571
+ ):
570
572
  service.env_variables[env_var_name]["value"] = env_var_data["value"]
571
573
 
572
574
  service.update_user_params_from_template(service_template=template)
@@ -649,7 +651,9 @@ def _ask_funds_from_requirements(
649
651
  )
650
652
 
651
653
  if not requirements["is_refill_required"] and requirements["allow_start_agent"]:
652
- for chain_name, balances in requirements["balances"].items():
654
+ for chain_name, balances in ChainAmounts.from_json(
655
+ requirements["balances"]
656
+ ).items():
653
657
  ledger_api = wallet.ledger_api(
654
658
  chain=Chain(chain_name),
655
659
  rpc=service.chain_configs[chain_name].ledger_config.rpc,
@@ -662,17 +666,19 @@ def _ask_funds_from_requirements(
662
666
 
663
667
  return True
664
668
 
665
- for chain_name, chain_requirements in requirements["refill_requirements"].items():
669
+ for chain_name, chain_requirements in ChainAmounts.from_json(
670
+ requirements["refill_requirements"]
671
+ ).items():
666
672
  chain = Chain(chain_name)
667
673
  ledger_api = wallet.ledger_api(
668
674
  chain=chain,
669
675
  rpc=service.chain_configs[chain_name].ledger_config.rpc,
670
676
  )
671
- for wallet_address, requirements in chain_requirements.items():
677
+ for wallet_address, _requirements in chain_requirements.items():
672
678
  if wallet_address in ("master_safe", "service_safe"):
673
679
  continue # we can't ask funds in placeholder addresses
674
680
 
675
- for asset_address, requirement in requirements.items():
681
+ for asset_address, requirement in _requirements.items():
676
682
  ask_funds_in_address(
677
683
  ledger_api=ledger_api,
678
684
  chain=chain_name,
@@ -388,7 +388,7 @@ class FundingManager:
388
388
  )
389
389
 
390
390
  if not staking_contract:
391
- return dict(bonded_assets)
391
+ return ChainAmounts(bonded_assets)
392
392
 
393
393
  staking_manager = StakingManager(Chain(chain))
394
394
  staking_params = staking_manager.get_staking_params(
@@ -69,7 +69,6 @@ from operate.constants import (
69
69
  )
70
70
  from operate.data import DATA_DIR
71
71
  from operate.data.contracts.dual_staking_token.contract import DualStakingTokenContract
72
- from operate.data.contracts.recovery_module.contract import RecoveryModule
73
72
  from operate.data.contracts.staking_token.contract import StakingTokenContract
74
73
  from operate.ledger import (
75
74
  get_default_ledger_api,
@@ -1807,21 +1806,10 @@ class EthSafeTxBuilder(_ChainUtil):
1807
1806
 
1808
1807
  def get_recover_access_data(self, service_id: int) -> t.Dict:
1809
1808
  """Get recover access tx data."""
1810
- instance = t.cast(
1811
- RecoveryModule,
1812
- RecoveryModule.from_dir(
1813
- directory=str(DATA_DIR / "contracts" / "recovery_module"),
1814
- ),
1815
- ).get_instance(
1809
+ instance = registry_contracts.recovery_module.get_instance(
1816
1810
  ledger_api=self.ledger_api,
1817
1811
  contract_address=self.contracts["recovery_module"],
1818
1812
  )
1819
- # TODO Replace the line above by this one once the recovery_module is
1820
- # included in the release of OpenAutonomy.
1821
- # instance = registry_contracts.recovery_module.get_instance( # noqa: E800
1822
- # ledger_api=self.ledger_api, # noqa: E800
1823
- # contract_address=self.contracts["recovery_module"], # noqa: E800
1824
- # ) # noqa: E800
1825
1813
  txd = instance.encode_abi(
1826
1814
  abi_element_identifier="recoverAccess",
1827
1815
  args=[service_id],
@@ -77,6 +77,7 @@ from operate.constants import (
77
77
  )
78
78
  from operate.keys import KeysManager
79
79
  from operate.ledger import get_default_ledger_api, get_default_rpc
80
+ from operate.ledger.profiles import WRAPPED_NATIVE_ASSET
80
81
  from operate.operate_http.exceptions import NotAllowed
81
82
  from operate.operate_types import (
82
83
  AgentRelease,
@@ -1200,10 +1201,13 @@ class Service(LocalResource):
1200
1201
 
1201
1202
  return amounts
1202
1203
 
1203
- def get_balances(self) -> ChainAmounts:
1204
- """Get balances of the agent addresses and service safe."""
1204
+ def get_balances(self, unify_wrapped_native_tokens: bool = True) -> ChainAmounts:
1205
+ """Get balances of the agent addresses and service safe.
1206
+
1207
+ :param unify_wrapped_native_tokens: Whether to consider wrapped native tokens as native tokens.
1208
+ """
1205
1209
  initial_funding_amounts = self.get_initial_funding_amounts()
1206
- return ChainAmounts(
1210
+ absolute_balances = ChainAmounts(
1207
1211
  {
1208
1212
  chain_str: {
1209
1213
  address: {
@@ -1222,6 +1226,27 @@ class Service(LocalResource):
1222
1226
  for chain_str, addresses in initial_funding_amounts.items()
1223
1227
  }
1224
1228
  )
1229
+ if unify_wrapped_native_tokens:
1230
+ for chain_str, addresses in absolute_balances.items():
1231
+ chain = Chain.from_string(chain_str)
1232
+ wrapped_asset = WRAPPED_NATIVE_ASSET[chain]
1233
+ for address, assets in addresses.items():
1234
+ if ZERO_ADDRESS in assets or wrapped_asset in assets:
1235
+ if ZERO_ADDRESS not in assets:
1236
+ assets[ZERO_ADDRESS] = 0
1237
+
1238
+ if wrapped_asset in assets:
1239
+ assets[ZERO_ADDRESS] += assets[wrapped_asset]
1240
+ del assets[wrapped_asset]
1241
+ else:
1242
+ assets[ZERO_ADDRESS] += get_asset_balance(
1243
+ ledger_api=get_default_ledger_api(chain),
1244
+ asset_address=wrapped_asset,
1245
+ address=address,
1246
+ raise_on_invalid_address=False,
1247
+ )
1248
+
1249
+ return absolute_balances
1225
1250
 
1226
1251
  def get_funding_requests(self) -> ChainAmounts:
1227
1252
  """Get funding amounts requested by the agent."""
@@ -1,20 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # ------------------------------------------------------------------------------
3
- #
4
- # Copyright 2025 Valory AG
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- # ------------------------------------------------------------------------------
19
-
20
- """This module contains the support resources for the `RecoveryModule` contract."""
@@ -1,811 +0,0 @@
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
- }
@@ -1,61 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # ------------------------------------------------------------------------------
3
- #
4
- # Copyright 2025 Valory AG
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
- # ------------------------------------------------------------------------------
19
-
20
- """This module contains the class to connect to the `RecoveryModule` contract."""
21
-
22
-
23
- from typing import Any, Dict
24
-
25
- from aea.configurations.base import PublicId
26
- from aea.contracts.base import Contract
27
- from aea.crypto.base import LedgerApi
28
-
29
-
30
- PUBLIC_ID = PublicId.from_str("valory/recovery_module:0.1.0")
31
-
32
-
33
- class RecoveryModule(Contract):
34
- """The RecoveryModule contract"""
35
-
36
- contract_id = PUBLIC_ID
37
-
38
- @classmethod
39
- def get_recover_access_transaction(
40
- cls,
41
- ledger_api: LedgerApi,
42
- contract_address: str,
43
- owner: str,
44
- service_id: int,
45
- raise_on_try: bool = False,
46
- ) -> Dict[str, Any]:
47
- """Get the recover access transaction."""
48
-
49
- tx_params = ledger_api.build_transaction(
50
- contract_instance=cls.get_instance(
51
- ledger_api=ledger_api, contract_address=contract_address
52
- ),
53
- method_name="recoverAccess",
54
- method_args={
55
- "serviceId": service_id,
56
- },
57
- tx_args={"sender_address": owner},
58
- raise_on_try=raise_on_try,
59
- )
60
-
61
- return tx_params
@@ -1,23 +0,0 @@
1
- name: recovery_module
2
- author: valory
3
- version: 0.1.0
4
- type: contract
5
- description: Recovery module
6
- license: Apache-2.0
7
- aea_version: '>=2.0.0, <3.0.0'
8
- fingerprint:
9
- __init__.py: bafybeicjlkmxs5ikpgdtgndifstpmmpaixwcbgouvmt6gowuhf5dy3dpgu
10
- build/RecoveryModule.json: bafybeifsyjdbprcp4kxpijlpqfovxcf7cv2ujapt3d5zn34wby26ldv4ky
11
- contract.py: bafybeifihpwb3etbrnn2hqdizsp5zolis3ur23slt3q5zctcykm5nlvv7q
12
- fingerprint_ignore_patterns: []
13
- contracts: []
14
- class_name: RecoveryModule
15
- contract_interface_paths:
16
- ethereum: build/RecoveryModule.json
17
- dependencies:
18
- open-aea-ledger-ethereum:
19
- version: ==1.60.0
20
- open-aea-test-autonomy:
21
- version: ==0.18.3
22
- web3:
23
- version: <7,>=6.0.0