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.
- {olas_operate_middleware-0.14.0.dist-info → olas_operate_middleware-0.14.2.dist-info}/METADATA +1 -1
- {olas_operate_middleware-0.14.0.dist-info → olas_operate_middleware-0.14.2.dist-info}/RECORD +10 -14
- {olas_operate_middleware-0.14.0.dist-info → olas_operate_middleware-0.14.2.dist-info}/WHEEL +1 -1
- operate/ledger/profiles.py +5 -1
- operate/quickstart/run_service.py +15 -9
- operate/services/funding_manager.py +1 -1
- operate/services/protocol.py +1 -13
- operate/services/service.py +28 -3
- operate/data/contracts/recovery_module/__init__.py +0 -20
- operate/data/contracts/recovery_module/build/RecoveryModule.json +0 -811
- operate/data/contracts/recovery_module/contract.py +0 -61
- operate/data/contracts/recovery_module/contract.yaml +0 -23
- {olas_operate_middleware-0.14.0.dist-info → olas_operate_middleware-0.14.2.dist-info}/entry_points.txt +0 -0
- {olas_operate_middleware-0.14.0.dist-info → olas_operate_middleware-0.14.2.dist-info}/licenses/LICENSE +0 -0
{olas_operate_middleware-0.14.0.dist-info → olas_operate_middleware-0.14.2.dist-info}/RECORD
RENAMED
|
@@ -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=
|
|
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=
|
|
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=
|
|
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=
|
|
86
|
-
operate/services/service.py,sha256=
|
|
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.
|
|
99
|
-
olas_operate_middleware-0.14.
|
|
100
|
-
olas_operate_middleware-0.14.
|
|
101
|
-
olas_operate_middleware-0.14.
|
|
102
|
-
olas_operate_middleware-0.14.
|
|
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,,
|
operate/ledger/profiles.py
CHANGED
|
@@ -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
|
-
|
|
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"]
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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,
|
operate/services/protocol.py
CHANGED
|
@@ -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 =
|
|
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],
|
operate/services/service.py
CHANGED
|
@@ -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
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|