From a37f1d8b629e89ede6ae38feae23379dd6b587a8 Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 19:23:48 +0700 Subject: [PATCH 1/9] chore: add vote to enable sandbox et factories --- archive/scripts/vote_2025_05_01_hoodi.py | 111 +++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 archive/scripts/vote_2025_05_01_hoodi.py diff --git a/archive/scripts/vote_2025_05_01_hoodi.py b/archive/scripts/vote_2025_05_01_hoodi.py new file mode 100644 index 000000000..74c4fba91 --- /dev/null +++ b/archive/scripts/vote_2025_05_01_hoodi.py @@ -0,0 +1,111 @@ +""" +Voting may slot '25 + +I. Deploy sandbox EVM script factories for EasyTrack: + +1. Add `RemoveAllowedRecipients` EVM script factory +2. Add `AddAllowedRecipient` EVM script factory +3. Add `TopUpAllowedRecipient` EVM script factory +4. Add `CREATE_PAYMENTS_ROLE` permission to EasyTrackEVMScriptExecutor +""" + +import time +from typing import Dict +from brownie import interface +from brownie.network.transaction import TransactionReceipt +from utils.permissions import encode_permission_grant + +from utils.agent import agent_forward +from utils.voting import bake_vote_items, confirm_vote_script, create_vote +from utils.ipfs import calculate_vote_ipfs_description, upload_vote_ipfs_description +from utils.config import ( + contracts, + EASYTRACK_EVMSCRIPT_EXECUTOR, + get_deployer_account, + get_is_live, + get_priority_fee, +) +from utils.easy_track import ( + add_evmscript_factory, + create_permissions, +) + +DESCRIPTION = """ +Voting may slot '25 + +I. Deploy sandbox EVM script factories for EasyTrack: + +1. Add `RemoveAllowedRecipients` EVM script factory +2. Add `AddAllowedRecipient` EVM script factory +3. Add `TopUpAllowedRecipient` EVM script factory +4. Add `CREATE_PAYMENTS_ROLE` permission to EasyTrackEVMScriptExecutor + +II. ... +""" + + +def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | TransactionReceipt | None]: + """Prepare and run voting""" + + removeAllowed = "0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69" + addAllowed = "0x056561d0F1314CB3932180b3f0B3C03174F2642B" + topUp = "0x8D9Fd9cD208f57c6735174B848180B53A0F7F560" + + registry = interface.AllowedRecipientRegistry("0xd57FF1ce54F572F4E8DaF0cB7038F1Bd6049cAa8") + + vote_desc_items, call_script_items = zip( + ( + "1) Add `RemoveAllowedRecipients` EVM script factory with address {removeAllowed}", + add_evmscript_factory( + factory=removeAllowed, + permissions=(create_permissions(registry, "add_relay"),), + ), + ), + ( + "2) Add `AddAllowedRecipient` EVM script factory with address {addAllowed}", + add_evmscript_factory( + factory=addAllowed, + permissions=(create_permissions(registry, "remove_relay"),), + ), + ), + ( + "3) Add `TopUpAllowedRecipient` EVM script factory with address {topUp}", + add_evmscript_factory( + factory=topUp, + permissions=create_permissions(contracts.finance, "newImmediatePayment") + + create_permissions(registry, "updateSpentAmount")[2:], + ), + ), + ( + "4) Add CREATE_PAYMENTS_ROLE permission to EasyTrackEVMScriptExecutor", + encode_permission_grant( + acl=contracts.acl, + target_app=contracts.finance, + permission_name="CREATE_PAYMENTS_ROLE", + grant_to=EASYTRACK_EVMSCRIPT_EXECUTOR, + ), + ), + ) + + vote_items = bake_vote_items(list(vote_desc_items), list(call_script_items)) + + if silent: + desc_ipfs = calculate_vote_ipfs_description(DESCRIPTION) + else: + desc_ipfs = upload_vote_ipfs_description(DESCRIPTION) + + return confirm_vote_script(vote_items, silent, desc_ipfs) and list( + create_vote(vote_items, tx_params, desc_ipfs=desc_ipfs) + ) + + +def main(): + tx_params = {"from": get_deployer_account()} + if get_is_live(): + tx_params["priority_fee"] = get_priority_fee() + + vote_id, _ = start_vote(tx_params=tx_params, silent=False) + + vote_id >= 0 and print(f"Vote created: {vote_id}.") + + time.sleep(5) # hack for waiting thread #2. From 7b6d5546da39132ba6a4dce573ab68a48602259e Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 19:29:25 +0700 Subject: [PATCH 2/9] fix: vote description --- archive/scripts/vote_2025_05_01_hoodi.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/archive/scripts/vote_2025_05_01_hoodi.py b/archive/scripts/vote_2025_05_01_hoodi.py index 74c4fba91..a3adb9503 100644 --- a/archive/scripts/vote_2025_05_01_hoodi.py +++ b/archive/scripts/vote_2025_05_01_hoodi.py @@ -1,5 +1,5 @@ """ -Voting may slot '25 +Voting 01/05/2025. Hoodi network. I. Deploy sandbox EVM script factories for EasyTrack: @@ -31,7 +31,7 @@ ) DESCRIPTION = """ -Voting may slot '25 +Voting 01/05/2025. Hoodi network. I. Deploy sandbox EVM script factories for EasyTrack: @@ -39,8 +39,6 @@ 2. Add `AddAllowedRecipient` EVM script factory 3. Add `TopUpAllowedRecipient` EVM script factory 4. Add `CREATE_PAYMENTS_ROLE` permission to EasyTrackEVMScriptExecutor - -II. ... """ @@ -55,21 +53,21 @@ def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | Tra vote_desc_items, call_script_items = zip( ( - "1) Add `RemoveAllowedRecipients` EVM script factory with address {removeAllowed}", + "1) Add `RemoveAllowedRecipients` EVM script factory with address 0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69", add_evmscript_factory( factory=removeAllowed, permissions=(create_permissions(registry, "add_relay"),), ), ), ( - "2) Add `AddAllowedRecipient` EVM script factory with address {addAllowed}", + "2) Add `AddAllowedRecipient` EVM script factory with address 0x056561d0F1314CB3932180b3f0B3C03174F2642B", add_evmscript_factory( factory=addAllowed, permissions=(create_permissions(registry, "remove_relay"),), ), ), ( - "3) Add `TopUpAllowedRecipient` EVM script factory with address {topUp}", + "3) Add `TopUpAllowedRecipient` EVM script factory with address 0x8D9Fd9cD208f57c6735174B848180B53A0F7F560", add_evmscript_factory( factory=topUp, permissions=create_permissions(contracts.finance, "newImmediatePayment") From fa1de598106352e95d126593e770541bcedccd9b Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 19:31:48 +0700 Subject: [PATCH 3/9] fix: permissions --- archive/scripts/vote_2025_05_01_hoodi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/archive/scripts/vote_2025_05_01_hoodi.py b/archive/scripts/vote_2025_05_01_hoodi.py index a3adb9503..9338d61de 100644 --- a/archive/scripts/vote_2025_05_01_hoodi.py +++ b/archive/scripts/vote_2025_05_01_hoodi.py @@ -56,14 +56,14 @@ def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | Tra "1) Add `RemoveAllowedRecipients` EVM script factory with address 0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69", add_evmscript_factory( factory=removeAllowed, - permissions=(create_permissions(registry, "add_relay"),), + permissions=(create_permissions(registry, "removeRecipient"),), ), ), ( "2) Add `AddAllowedRecipient` EVM script factory with address 0x056561d0F1314CB3932180b3f0B3C03174F2642B", add_evmscript_factory( factory=addAllowed, - permissions=(create_permissions(registry, "remove_relay"),), + permissions=(create_permissions(registry, "addRecipient"),), ), ), ( From cf75e7e0d0733e6f399ec2a68028cbff03821d2a Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 20:30:16 +0700 Subject: [PATCH 4/9] chore: add test --- archive/tests/test_vote_2025_05_01_hoodi.py | 117 ++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 archive/tests/test_vote_2025_05_01_hoodi.py diff --git a/archive/tests/test_vote_2025_05_01_hoodi.py b/archive/tests/test_vote_2025_05_01_hoodi.py new file mode 100644 index 000000000..39e9115dd --- /dev/null +++ b/archive/tests/test_vote_2025_05_01_hoodi.py @@ -0,0 +1,117 @@ +""" +Tests for voting 01/05/2025. Hoodi network. + +""" + +from brownie import interface +from archive.scripts.vote_2025_04_08_hoodi import start_vote +from utils.test.tx_tracing_helpers import * +from utils.config import ( + contracts, + LDO_HOLDER_ADDRESS_FOR_TESTS, + EASYTRACK_EVMSCRIPT_EXECUTOR, +) +from utils.test.event_validators.permission import ( + Permission, + validate_permission_grant_event, +) +from utils.test.event_validators.easy_track import ( + validate_evmscript_factory_added_event, + EVMScriptFactoryAdded, +) +from utils.easy_track import create_permissions +from utils.voting import find_metadata_by_vote_id + + +def test_vote(helpers, accounts, vote_ids_from_env): + # new code + easy_track = contracts.easy_track + voting = contracts.voting + finance = contracts.finance + + add_allowed_recipient_evm_script_factory = "0x056561d0F1314CB3932180b3f0B3C03174F2642B" + remove_allowed_recipient_evm_script_factory = "0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69" + top_up_allowed_recipient_evm_script_factory = "0x8D9Fd9cD208f57c6735174B848180B53A0F7F560" + + registry = interface.AllowedRecipientRegistry("0xd57FF1ce54F572F4E8DaF0cB7038F1Bd6049cAa8") + trusted_caller = "0x418B816A7c3ecA151A31d98e30aa7DAa33aBf83A" + token_registry = "0xA51b9ecfa754F619971f3Dc58Def517F267F84dB" + + evm_script_factories_before = easy_track.getEVMScriptFactories() + + assert add_allowed_recipient_evm_script_factory not in evm_script_factories_before + assert remove_allowed_recipient_evm_script_factory not in evm_script_factories_before + assert top_up_allowed_recipient_evm_script_factory not in evm_script_factories_before + # START VOTE + + if len(vote_ids_from_env) > 0: + (vote_id,) = vote_ids_from_env + else: + tx_params = {"from": LDO_HOLDER_ADDRESS_FOR_TESTS} + vote_id, _ = start_vote(tx_params, silent=True) + + vote_tx = helpers.execute_vote(accounts, vote_id, voting) + print(f"voteId = {vote_id}, gasUsed = {vote_tx.gas_used}") + + # I. EasyTrack factories + evm_script_factories = easy_track.getEVMScriptFactories() + + assert add_allowed_recipient_evm_script_factory in evm_script_factories + assert remove_allowed_recipient_evm_script_factory in evm_script_factories + assert top_up_allowed_recipient_evm_script_factory in evm_script_factories + + removeRecipientsContract = interface.RemoveAllowedRecipients(remove_allowed_recipient_evm_script_factory) + addRecipientsContract = interface.AddAllowedRecipient(add_allowed_recipient_evm_script_factory) + topUpRecipientsContract = interface.TopUpAllowedRecipient(top_up_allowed_recipient_evm_script_factory) + + assert removeRecipientsContract.allowedRecipientRegistry() == registry + assert removeRecipientsContract.trustedCaller() == trusted_caller + + assert addRecipientsContract.allowedRecipientRegistry() == registry + assert addRecipientsContract.trustedCaller() == trusted_caller + + assert topUpRecipientsContract.allowedRecipientRegistry() == registry + assert topUpRecipientsContract.trustedCaller() == trusted_caller + assert topUpRecipientsContract.finance() == contracts.finance + assert topUpRecipientsContract.easyTrack() == easy_track + assert topUpRecipientsContract.allowedTokenRegistry() == token_registry + + # validate vote events + assert count_vote_items_by_events(vote_tx, voting) == 4, "Incorrect voting items count" + metadata = find_metadata_by_vote_id(vote_id) + print("metadata", metadata) + + evs = group_voting_events_from_receipt(vote_tx) + + # Grant permissions to make operational changes to EasyTrack module + validate_evmscript_factory_added_event( + evs[1], + EVMScriptFactoryAdded( + factory_addr=remove_allowed_recipient_evm_script_factory, + permissions=create_permissions(registry, "removeRecipient"), + ), + ) + + validate_evmscript_factory_added_event( + evs[2], + EVMScriptFactoryAdded( + factory_addr=add_allowed_recipient_evm_script_factory, + permissions=create_permissions(registry, "addRecipient"), + ), + ) + validate_evmscript_factory_added_event( + evs[3], + EVMScriptFactoryAdded( + factory_addr=top_up_allowed_recipient_evm_script_factory, + permissions=create_permissions(contracts.finance, "newImmediatePayment") + + create_permissions(registry, "updateSpentAmount")[2:], + ), + ) + + permission = Permission( + entity=EASYTRACK_EVMSCRIPT_EXECUTOR, + app=finance, + role="0x5de467a460382d13defdc02aacddc9c7d6605d6d4e0b8bd2f70732cae8ea17bc", + ) # keccak256('CREATE_PAYMENTS_ROLE') + + validate_permission_grant_event(evs[4], permission) From 913bf45a8b8556de7f200212ef27b266a2510312 Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 21:13:29 +0700 Subject: [PATCH 5/9] fix: move files to correct dirs --- .../vote_2025_05_01_hoodi.py | 0 tests/test_vote_2025_04_08_hoodi.py | 250 ++++++++++++++++++ .../test_vote_2025_05_01_hoodi.py | 2 +- 3 files changed, 251 insertions(+), 1 deletion(-) rename {archive/scripts => scripts}/vote_2025_05_01_hoodi.py (100%) create mode 100644 tests/test_vote_2025_04_08_hoodi.py rename {archive/tests => tests}/test_vote_2025_05_01_hoodi.py (100%) diff --git a/archive/scripts/vote_2025_05_01_hoodi.py b/scripts/vote_2025_05_01_hoodi.py similarity index 100% rename from archive/scripts/vote_2025_05_01_hoodi.py rename to scripts/vote_2025_05_01_hoodi.py diff --git a/tests/test_vote_2025_04_08_hoodi.py b/tests/test_vote_2025_04_08_hoodi.py new file mode 100644 index 000000000..1207d51c0 --- /dev/null +++ b/tests/test_vote_2025_04_08_hoodi.py @@ -0,0 +1,250 @@ +""" +Tests for voting 08/04/2025. Hoodi network. + +""" + +import pytest +from typing import List +from brownie import interface +from archive.scripts.vote_2025_04_08_hoodi import start_vote + +from utils.test.simple_dvt_helpers import ( + fill_simple_dvt_ops, + get_managers_address, +) +from utils.test.tx_tracing_helpers import * +from utils.config import ( + contracts, + LDO_HOLDER_ADDRESS_FOR_TESTS, + EASYTRACK_EVMSCRIPT_EXECUTOR, +) +from utils.test.event_validators.permission import ( + Permission, + validate_permission_grant_event, + validate_permission_create_event, + validate_set_permission_manager_event, +) +from utils.test.event_validators.easy_track import ( + validate_evmscript_factory_added_event, + EVMScriptFactoryAdded, +) +from utils.easy_track import create_permissions, create_permissions_for_overloaded_method +from utils.voting import find_metadata_by_vote_id + + +STAKING_ROUTER_ROLE = "0xbb75b874360e0bfd87f964eadd8276d8efb7c942134fc329b513032d0803e0c6" +MANAGE_NODE_OPERATOR_ROLE = "0x78523850fdd761612f46e844cf5a16bda6b3151d6ae961fd7e8e7b92bfbca7f8" +SET_NODE_OPERATOR_LIMIT_ROLE = "0x07b39e0faf2521001ae4e58cb9ffd3840a63e205d288dc9c93c3774f0d794754" +MANAGE_SIGNING_KEYS = "0x75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee" + + +def test_vote(helpers, accounts, vote_ids_from_env): + simple_dvt = contracts.simple_dvt + voting = contracts.voting + easy_track = contracts.easy_track + + evm_script_factories_before = easy_track.getEVMScriptFactories() + + add_node_operators_evm_script_factory = "0x42f2532ab3d41dfD6030db1EC2fF3DBC8DCdf89a" + activate_node_operators_evm_script_factory = "0xfA3B3EE204E1f0f165379326768667300992530e" + deactivate_node_operators_evm_script_factory = "0x3114bEbC222Faec27DF8AB7f9bD8dF2063d7fc77" + set_vetted_validators_limits_evm_script_factory = "0x956c5dC6cfc8603b2293bF8399B718cbf61a9dda" + set_node_operator_names_evm_script_factory = "0x2F98760650922cf65f1b596635bC5835b6E561d4" + set_node_operator_reward_addresses_evm_script_factory = "0x3d267e4f8d9dCcc83c2DE66729e6A5B2B0856e31" + update_target_validator_limits_evm_script_factory = "0xc3975Bc4091B585c57357990155B071111d7f4f8" + change_node_operator_managers_evm_script_factory = "0x8a437cd5685e270cDDb347eeEfEbD22109Fa42a9" + + EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER = "0xbB958292042c604855d23F8db458855d20e16996" + + # assert add_node_operators_evm_script_factory not in evm_script_factories_before + # assert activate_node_operators_evm_script_factory not in evm_script_factories_before + # assert deactivate_node_operators_evm_script_factory not in evm_script_factories_before + # assert set_vetted_validators_limits_evm_script_factory not in evm_script_factories_before + # assert set_node_operator_names_evm_script_factory not in evm_script_factories_before + # assert set_node_operator_reward_addresses_evm_script_factory not in evm_script_factories_before + # assert update_target_validator_limits_evm_script_factory not in evm_script_factories_before + # assert change_node_operator_managers_evm_script_factory not in evm_script_factories_before + + # START VOTE + if len(vote_ids_from_env) > 0: + (vote_id,) = vote_ids_from_env + else: + tx_params = {"from": LDO_HOLDER_ADDRESS_FOR_TESTS} + vote_id, _ = start_vote(tx_params, silent=True) + + vote_tx = helpers.execute_vote(accounts, vote_id, voting) + + print(f"voteId = {vote_id}, gasUsed = {vote_tx.gas_used}") + + # I. EasyTrack factories + evm_script_factories = easy_track.getEVMScriptFactories() + + assert add_node_operators_evm_script_factory in evm_script_factories + assert activate_node_operators_evm_script_factory in evm_script_factories + assert deactivate_node_operators_evm_script_factory in evm_script_factories + assert set_vetted_validators_limits_evm_script_factory in evm_script_factories + assert update_target_validator_limits_evm_script_factory in evm_script_factories + assert set_node_operator_names_evm_script_factory in evm_script_factories + assert set_node_operator_reward_addresses_evm_script_factory in evm_script_factories + assert change_node_operator_managers_evm_script_factory in evm_script_factories + + assert interface.AddNodeOperators(add_node_operators_evm_script_factory).nodeOperatorsRegistry() == simple_dvt + assert ( + interface.AddNodeOperators(add_node_operators_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + assert ( + interface.ActivateNodeOperators(activate_node_operators_evm_script_factory).nodeOperatorsRegistry() + == simple_dvt + ) + assert ( + interface.ActivateNodeOperators(activate_node_operators_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + assert ( + interface.DeactivateNodeOperators(deactivate_node_operators_evm_script_factory).nodeOperatorsRegistry() + == simple_dvt + ) + assert ( + interface.DeactivateNodeOperators(deactivate_node_operators_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + assert ( + interface.SetVettedValidatorsLimits(set_vetted_validators_limits_evm_script_factory).nodeOperatorsRegistry() + == simple_dvt + ) + assert ( + interface.SetVettedValidatorsLimits(set_vetted_validators_limits_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + assert ( + interface.SetNodeOperatorNames(set_node_operator_names_evm_script_factory).nodeOperatorsRegistry() == simple_dvt + ) + assert ( + interface.SetNodeOperatorNames(set_node_operator_names_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + assert ( + interface.SetNodeOperatorRewardAddresses( + set_node_operator_reward_addresses_evm_script_factory + ).nodeOperatorsRegistry() + == simple_dvt + ) + assert ( + interface.SetNodeOperatorRewardAddresses(set_node_operator_reward_addresses_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + assert ( + interface.UpdateTargetValidatorLimits(update_target_validator_limits_evm_script_factory).nodeOperatorsRegistry() + == simple_dvt + ) + assert ( + interface.UpdateTargetValidatorLimits(update_target_validator_limits_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + assert ( + interface.ChangeNodeOperatorManagers(change_node_operator_managers_evm_script_factory).nodeOperatorsRegistry() + == simple_dvt + ) + assert ( + interface.ChangeNodeOperatorManagers(change_node_operator_managers_evm_script_factory).trustedCaller() + == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER + ) + + # validate vote events + assert count_vote_items_by_events(vote_tx, voting) == 12, "Incorrect voting items count" + + metadata = find_metadata_by_vote_id(vote_id) + print("metadata", metadata) + + # assert get_lido_vote_cid_from_str(metadata) == "xxxxx" + + evs = group_voting_events_from_receipt(vote_tx) + + # Grant permissions to make operational changes to SimpleDVT module + permission = Permission( + entity=EASYTRACK_EVMSCRIPT_EXECUTOR, + app=simple_dvt, + role=MANAGE_NODE_OPERATOR_ROLE, # simple_dvt.MANAGE_NODE_OPERATOR_ROLE(), + ) + validate_permission_grant_event(evs[0], permission) + + permission = Permission( + entity=EASYTRACK_EVMSCRIPT_EXECUTOR, + app=simple_dvt, + role=SET_NODE_OPERATOR_LIMIT_ROLE, # simple_dvt.SET_NODE_OPERATOR_LIMIT_ROLE(), + ) + validate_permission_grant_event(evs[1], permission) + + validate_set_permission_manager_event( + evs[2], app=simple_dvt, role=MANAGE_SIGNING_KEYS, manager=EASYTRACK_EVMSCRIPT_EXECUTOR + ) + + permission = Permission(entity=EASYTRACK_EVMSCRIPT_EXECUTOR, app=simple_dvt, role=STAKING_ROUTER_ROLE) + validate_permission_grant_event(evs[3], permission) + + # Add EasyTrack EVM script factories for SimpleDVT module + validate_evmscript_factory_added_event( + evs[4], + EVMScriptFactoryAdded( + factory_addr=add_node_operators_evm_script_factory, + permissions=create_permissions(simple_dvt, "addNodeOperator") + + create_permissions(contracts.acl, "grantPermissionP")[2:], + ), + ) + validate_evmscript_factory_added_event( + evs[5], + EVMScriptFactoryAdded( + factory_addr=activate_node_operators_evm_script_factory, + permissions=create_permissions(simple_dvt, "activateNodeOperator") + + create_permissions(contracts.acl, "grantPermissionP")[2:], + ), + ) + validate_evmscript_factory_added_event( + evs[6], + EVMScriptFactoryAdded( + factory_addr=deactivate_node_operators_evm_script_factory, + permissions=create_permissions(simple_dvt, "deactivateNodeOperator") + + create_permissions(contracts.acl, "revokePermission")[2:], + ), + ) + validate_evmscript_factory_added_event( + evs[7], + EVMScriptFactoryAdded( + factory_addr=set_vetted_validators_limits_evm_script_factory, + permissions=create_permissions(simple_dvt, "setNodeOperatorStakingLimit"), + ), + ) + validate_evmscript_factory_added_event( + evs[8], + EVMScriptFactoryAdded( + factory_addr=update_target_validator_limits_evm_script_factory, + permissions=( + create_permissions_for_overloaded_method( + contracts.simple_dvt, "updateTargetValidatorsLimits", ("uint", "uint", "uint") + ) + ), + ), + ) + validate_evmscript_factory_added_event( + evs[9], + EVMScriptFactoryAdded( + factory_addr=set_node_operator_names_evm_script_factory, + permissions=create_permissions(simple_dvt, "setNodeOperatorName"), + ), + ) + validate_evmscript_factory_added_event( + evs[10], + EVMScriptFactoryAdded( + factory_addr=set_node_operator_reward_addresses_evm_script_factory, + permissions=create_permissions(simple_dvt, "setNodeOperatorRewardAddress"), + ), + ) + validate_evmscript_factory_added_event( + evs[11], + EVMScriptFactoryAdded( + factory_addr=change_node_operator_managers_evm_script_factory, + permissions=create_permissions(contracts.acl, "revokePermission") + + create_permissions(contracts.acl, "grantPermissionP")[2:], + ), + ) diff --git a/archive/tests/test_vote_2025_05_01_hoodi.py b/tests/test_vote_2025_05_01_hoodi.py similarity index 100% rename from archive/tests/test_vote_2025_05_01_hoodi.py rename to tests/test_vote_2025_05_01_hoodi.py index 39e9115dd..3d3d6a319 100644 --- a/archive/tests/test_vote_2025_05_01_hoodi.py +++ b/tests/test_vote_2025_05_01_hoodi.py @@ -42,8 +42,8 @@ def test_vote(helpers, accounts, vote_ids_from_env): assert add_allowed_recipient_evm_script_factory not in evm_script_factories_before assert remove_allowed_recipient_evm_script_factory not in evm_script_factories_before assert top_up_allowed_recipient_evm_script_factory not in evm_script_factories_before - # START VOTE + # START VOTE if len(vote_ids_from_env) > 0: (vote_id,) = vote_ids_from_env else: From 6f077e2b2e0e60d72fe9946cf4417ec2dd212fdb Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 21:53:11 +0700 Subject: [PATCH 6/9] fix: quickfixes --- scripts/vote_2025_05_01_hoodi.py | 5 ++--- tests/test_vote_2025_05_01_hoodi.py | 22 ++++++++++------------ 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/scripts/vote_2025_05_01_hoodi.py b/scripts/vote_2025_05_01_hoodi.py index 9338d61de..a74a61498 100644 --- a/scripts/vote_2025_05_01_hoodi.py +++ b/scripts/vote_2025_05_01_hoodi.py @@ -56,14 +56,14 @@ def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | Tra "1) Add `RemoveAllowedRecipients` EVM script factory with address 0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69", add_evmscript_factory( factory=removeAllowed, - permissions=(create_permissions(registry, "removeRecipient"),), + permissions=create_permissions(registry, "removeRecipient"), ), ), ( "2) Add `AddAllowedRecipient` EVM script factory with address 0x056561d0F1314CB3932180b3f0B3C03174F2642B", add_evmscript_factory( factory=addAllowed, - permissions=(create_permissions(registry, "addRecipient"),), + permissions=create_permissions(registry, "addRecipient"), ), ), ( @@ -77,7 +77,6 @@ def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | Tra ( "4) Add CREATE_PAYMENTS_ROLE permission to EasyTrackEVMScriptExecutor", encode_permission_grant( - acl=contracts.acl, target_app=contracts.finance, permission_name="CREATE_PAYMENTS_ROLE", grant_to=EASYTRACK_EVMSCRIPT_EXECUTOR, diff --git a/tests/test_vote_2025_05_01_hoodi.py b/tests/test_vote_2025_05_01_hoodi.py index 3d3d6a319..4ac433108 100644 --- a/tests/test_vote_2025_05_01_hoodi.py +++ b/tests/test_vote_2025_05_01_hoodi.py @@ -4,7 +4,7 @@ """ from brownie import interface -from archive.scripts.vote_2025_04_08_hoodi import start_vote +from scripts.vote_2025_05_01_hoodi import start_vote from utils.test.tx_tracing_helpers import * from utils.config import ( contracts, @@ -60,21 +60,20 @@ def test_vote(helpers, accounts, vote_ids_from_env): assert remove_allowed_recipient_evm_script_factory in evm_script_factories assert top_up_allowed_recipient_evm_script_factory in evm_script_factories - removeRecipientsContract = interface.RemoveAllowedRecipients(remove_allowed_recipient_evm_script_factory) + removeRecipientsContract = interface.RemoveAllowedRecipient(remove_allowed_recipient_evm_script_factory) addRecipientsContract = interface.AddAllowedRecipient(add_allowed_recipient_evm_script_factory) - topUpRecipientsContract = interface.TopUpAllowedRecipient(top_up_allowed_recipient_evm_script_factory) + topUpRecipientsContract = interface.TopUpAllowedRecipients(top_up_allowed_recipient_evm_script_factory) - assert removeRecipientsContract.allowedRecipientRegistry() == registry + assert removeRecipientsContract.allowedRecipientsRegistry() == registry assert removeRecipientsContract.trustedCaller() == trusted_caller - assert addRecipientsContract.allowedRecipientRegistry() == registry + assert addRecipientsContract.allowedRecipientsRegistry() == registry assert addRecipientsContract.trustedCaller() == trusted_caller - assert topUpRecipientsContract.allowedRecipientRegistry() == registry + assert topUpRecipientsContract.allowedRecipientsRegistry() == registry assert topUpRecipientsContract.trustedCaller() == trusted_caller assert topUpRecipientsContract.finance() == contracts.finance assert topUpRecipientsContract.easyTrack() == easy_track - assert topUpRecipientsContract.allowedTokenRegistry() == token_registry # validate vote events assert count_vote_items_by_events(vote_tx, voting) == 4, "Incorrect voting items count" @@ -85,22 +84,21 @@ def test_vote(helpers, accounts, vote_ids_from_env): # Grant permissions to make operational changes to EasyTrack module validate_evmscript_factory_added_event( - evs[1], + evs[0], EVMScriptFactoryAdded( factory_addr=remove_allowed_recipient_evm_script_factory, permissions=create_permissions(registry, "removeRecipient"), ), ) - validate_evmscript_factory_added_event( - evs[2], + evs[1], EVMScriptFactoryAdded( factory_addr=add_allowed_recipient_evm_script_factory, permissions=create_permissions(registry, "addRecipient"), ), ) validate_evmscript_factory_added_event( - evs[3], + evs[2], EVMScriptFactoryAdded( factory_addr=top_up_allowed_recipient_evm_script_factory, permissions=create_permissions(contracts.finance, "newImmediatePayment") @@ -114,4 +112,4 @@ def test_vote(helpers, accounts, vote_ids_from_env): role="0x5de467a460382d13defdc02aacddc9c7d6605d6d4e0b8bd2f70732cae8ea17bc", ) # keccak256('CREATE_PAYMENTS_ROLE') - validate_permission_grant_event(evs[4], permission) + validate_permission_grant_event(evs[3], permission) From 11d2b4cd676c994160bdf9db5a150d5d71ef5f07 Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 21:59:43 +0700 Subject: [PATCH 7/9] chore: remove old test; refactor variable names --- scripts/vote_2025_05_01_hoodi.py | 23 +-- tests/test_vote_2025_04_08_hoodi.py | 250 ---------------------------- 2 files changed, 13 insertions(+), 260 deletions(-) delete mode 100644 tests/test_vote_2025_04_08_hoodi.py diff --git a/scripts/vote_2025_05_01_hoodi.py b/scripts/vote_2025_05_01_hoodi.py index a74a61498..36d564b9f 100644 --- a/scripts/vote_2025_05_01_hoodi.py +++ b/scripts/vote_2025_05_01_hoodi.py @@ -45,33 +45,36 @@ def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | TransactionReceipt | None]: """Prepare and run voting""" - removeAllowed = "0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69" - addAllowed = "0x056561d0F1314CB3932180b3f0B3C03174F2642B" - topUp = "0x8D9Fd9cD208f57c6735174B848180B53A0F7F560" + # 1. Add `RemoveAllowedRecipients` EVM script factory (sandbox) + remove_allowed_recipient = "0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69" + # 2. Add `AddAllowedRecipient` EVM script factory (sandbox) + add_allowed_recipient = "0x056561d0F1314CB3932180b3f0B3C03174F2642B" + # 3. Add `TopUpAllowedRecipient` EVM script factory (sandbox) + top_up_allowed_recipients = "0x8D9Fd9cD208f57c6735174B848180B53A0F7F560" - registry = interface.AllowedRecipientRegistry("0xd57FF1ce54F572F4E8DaF0cB7038F1Bd6049cAa8") + allowed_recipient_registry = interface.AllowedRecipientRegistry("0xd57FF1ce54F572F4E8DaF0cB7038F1Bd6049cAa8") vote_desc_items, call_script_items = zip( ( "1) Add `RemoveAllowedRecipients` EVM script factory with address 0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69", add_evmscript_factory( - factory=removeAllowed, - permissions=create_permissions(registry, "removeRecipient"), + factory=remove_allowed_recipient, + permissions=create_permissions(allowed_recipient_registry, "removeRecipient"), ), ), ( "2) Add `AddAllowedRecipient` EVM script factory with address 0x056561d0F1314CB3932180b3f0B3C03174F2642B", add_evmscript_factory( - factory=addAllowed, - permissions=create_permissions(registry, "addRecipient"), + factory=add_allowed_recipient, + permissions=create_permissions(allowed_recipient_registry, "addRecipient"), ), ), ( "3) Add `TopUpAllowedRecipient` EVM script factory with address 0x8D9Fd9cD208f57c6735174B848180B53A0F7F560", add_evmscript_factory( - factory=topUp, + factory=top_up_allowed_recipients, permissions=create_permissions(contracts.finance, "newImmediatePayment") - + create_permissions(registry, "updateSpentAmount")[2:], + + create_permissions(allowed_recipient_registry, "updateSpentAmount")[2:], ), ), ( diff --git a/tests/test_vote_2025_04_08_hoodi.py b/tests/test_vote_2025_04_08_hoodi.py deleted file mode 100644 index 1207d51c0..000000000 --- a/tests/test_vote_2025_04_08_hoodi.py +++ /dev/null @@ -1,250 +0,0 @@ -""" -Tests for voting 08/04/2025. Hoodi network. - -""" - -import pytest -from typing import List -from brownie import interface -from archive.scripts.vote_2025_04_08_hoodi import start_vote - -from utils.test.simple_dvt_helpers import ( - fill_simple_dvt_ops, - get_managers_address, -) -from utils.test.tx_tracing_helpers import * -from utils.config import ( - contracts, - LDO_HOLDER_ADDRESS_FOR_TESTS, - EASYTRACK_EVMSCRIPT_EXECUTOR, -) -from utils.test.event_validators.permission import ( - Permission, - validate_permission_grant_event, - validate_permission_create_event, - validate_set_permission_manager_event, -) -from utils.test.event_validators.easy_track import ( - validate_evmscript_factory_added_event, - EVMScriptFactoryAdded, -) -from utils.easy_track import create_permissions, create_permissions_for_overloaded_method -from utils.voting import find_metadata_by_vote_id - - -STAKING_ROUTER_ROLE = "0xbb75b874360e0bfd87f964eadd8276d8efb7c942134fc329b513032d0803e0c6" -MANAGE_NODE_OPERATOR_ROLE = "0x78523850fdd761612f46e844cf5a16bda6b3151d6ae961fd7e8e7b92bfbca7f8" -SET_NODE_OPERATOR_LIMIT_ROLE = "0x07b39e0faf2521001ae4e58cb9ffd3840a63e205d288dc9c93c3774f0d794754" -MANAGE_SIGNING_KEYS = "0x75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee" - - -def test_vote(helpers, accounts, vote_ids_from_env): - simple_dvt = contracts.simple_dvt - voting = contracts.voting - easy_track = contracts.easy_track - - evm_script_factories_before = easy_track.getEVMScriptFactories() - - add_node_operators_evm_script_factory = "0x42f2532ab3d41dfD6030db1EC2fF3DBC8DCdf89a" - activate_node_operators_evm_script_factory = "0xfA3B3EE204E1f0f165379326768667300992530e" - deactivate_node_operators_evm_script_factory = "0x3114bEbC222Faec27DF8AB7f9bD8dF2063d7fc77" - set_vetted_validators_limits_evm_script_factory = "0x956c5dC6cfc8603b2293bF8399B718cbf61a9dda" - set_node_operator_names_evm_script_factory = "0x2F98760650922cf65f1b596635bC5835b6E561d4" - set_node_operator_reward_addresses_evm_script_factory = "0x3d267e4f8d9dCcc83c2DE66729e6A5B2B0856e31" - update_target_validator_limits_evm_script_factory = "0xc3975Bc4091B585c57357990155B071111d7f4f8" - change_node_operator_managers_evm_script_factory = "0x8a437cd5685e270cDDb347eeEfEbD22109Fa42a9" - - EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER = "0xbB958292042c604855d23F8db458855d20e16996" - - # assert add_node_operators_evm_script_factory not in evm_script_factories_before - # assert activate_node_operators_evm_script_factory not in evm_script_factories_before - # assert deactivate_node_operators_evm_script_factory not in evm_script_factories_before - # assert set_vetted_validators_limits_evm_script_factory not in evm_script_factories_before - # assert set_node_operator_names_evm_script_factory not in evm_script_factories_before - # assert set_node_operator_reward_addresses_evm_script_factory not in evm_script_factories_before - # assert update_target_validator_limits_evm_script_factory not in evm_script_factories_before - # assert change_node_operator_managers_evm_script_factory not in evm_script_factories_before - - # START VOTE - if len(vote_ids_from_env) > 0: - (vote_id,) = vote_ids_from_env - else: - tx_params = {"from": LDO_HOLDER_ADDRESS_FOR_TESTS} - vote_id, _ = start_vote(tx_params, silent=True) - - vote_tx = helpers.execute_vote(accounts, vote_id, voting) - - print(f"voteId = {vote_id}, gasUsed = {vote_tx.gas_used}") - - # I. EasyTrack factories - evm_script_factories = easy_track.getEVMScriptFactories() - - assert add_node_operators_evm_script_factory in evm_script_factories - assert activate_node_operators_evm_script_factory in evm_script_factories - assert deactivate_node_operators_evm_script_factory in evm_script_factories - assert set_vetted_validators_limits_evm_script_factory in evm_script_factories - assert update_target_validator_limits_evm_script_factory in evm_script_factories - assert set_node_operator_names_evm_script_factory in evm_script_factories - assert set_node_operator_reward_addresses_evm_script_factory in evm_script_factories - assert change_node_operator_managers_evm_script_factory in evm_script_factories - - assert interface.AddNodeOperators(add_node_operators_evm_script_factory).nodeOperatorsRegistry() == simple_dvt - assert ( - interface.AddNodeOperators(add_node_operators_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - assert ( - interface.ActivateNodeOperators(activate_node_operators_evm_script_factory).nodeOperatorsRegistry() - == simple_dvt - ) - assert ( - interface.ActivateNodeOperators(activate_node_operators_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - assert ( - interface.DeactivateNodeOperators(deactivate_node_operators_evm_script_factory).nodeOperatorsRegistry() - == simple_dvt - ) - assert ( - interface.DeactivateNodeOperators(deactivate_node_operators_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - assert ( - interface.SetVettedValidatorsLimits(set_vetted_validators_limits_evm_script_factory).nodeOperatorsRegistry() - == simple_dvt - ) - assert ( - interface.SetVettedValidatorsLimits(set_vetted_validators_limits_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - assert ( - interface.SetNodeOperatorNames(set_node_operator_names_evm_script_factory).nodeOperatorsRegistry() == simple_dvt - ) - assert ( - interface.SetNodeOperatorNames(set_node_operator_names_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - assert ( - interface.SetNodeOperatorRewardAddresses( - set_node_operator_reward_addresses_evm_script_factory - ).nodeOperatorsRegistry() - == simple_dvt - ) - assert ( - interface.SetNodeOperatorRewardAddresses(set_node_operator_reward_addresses_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - assert ( - interface.UpdateTargetValidatorLimits(update_target_validator_limits_evm_script_factory).nodeOperatorsRegistry() - == simple_dvt - ) - assert ( - interface.UpdateTargetValidatorLimits(update_target_validator_limits_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - assert ( - interface.ChangeNodeOperatorManagers(change_node_operator_managers_evm_script_factory).nodeOperatorsRegistry() - == simple_dvt - ) - assert ( - interface.ChangeNodeOperatorManagers(change_node_operator_managers_evm_script_factory).trustedCaller() - == EASYTRACK_SIMPLE_DVT_TRUSTED_CALLER - ) - - # validate vote events - assert count_vote_items_by_events(vote_tx, voting) == 12, "Incorrect voting items count" - - metadata = find_metadata_by_vote_id(vote_id) - print("metadata", metadata) - - # assert get_lido_vote_cid_from_str(metadata) == "xxxxx" - - evs = group_voting_events_from_receipt(vote_tx) - - # Grant permissions to make operational changes to SimpleDVT module - permission = Permission( - entity=EASYTRACK_EVMSCRIPT_EXECUTOR, - app=simple_dvt, - role=MANAGE_NODE_OPERATOR_ROLE, # simple_dvt.MANAGE_NODE_OPERATOR_ROLE(), - ) - validate_permission_grant_event(evs[0], permission) - - permission = Permission( - entity=EASYTRACK_EVMSCRIPT_EXECUTOR, - app=simple_dvt, - role=SET_NODE_OPERATOR_LIMIT_ROLE, # simple_dvt.SET_NODE_OPERATOR_LIMIT_ROLE(), - ) - validate_permission_grant_event(evs[1], permission) - - validate_set_permission_manager_event( - evs[2], app=simple_dvt, role=MANAGE_SIGNING_KEYS, manager=EASYTRACK_EVMSCRIPT_EXECUTOR - ) - - permission = Permission(entity=EASYTRACK_EVMSCRIPT_EXECUTOR, app=simple_dvt, role=STAKING_ROUTER_ROLE) - validate_permission_grant_event(evs[3], permission) - - # Add EasyTrack EVM script factories for SimpleDVT module - validate_evmscript_factory_added_event( - evs[4], - EVMScriptFactoryAdded( - factory_addr=add_node_operators_evm_script_factory, - permissions=create_permissions(simple_dvt, "addNodeOperator") - + create_permissions(contracts.acl, "grantPermissionP")[2:], - ), - ) - validate_evmscript_factory_added_event( - evs[5], - EVMScriptFactoryAdded( - factory_addr=activate_node_operators_evm_script_factory, - permissions=create_permissions(simple_dvt, "activateNodeOperator") - + create_permissions(contracts.acl, "grantPermissionP")[2:], - ), - ) - validate_evmscript_factory_added_event( - evs[6], - EVMScriptFactoryAdded( - factory_addr=deactivate_node_operators_evm_script_factory, - permissions=create_permissions(simple_dvt, "deactivateNodeOperator") - + create_permissions(contracts.acl, "revokePermission")[2:], - ), - ) - validate_evmscript_factory_added_event( - evs[7], - EVMScriptFactoryAdded( - factory_addr=set_vetted_validators_limits_evm_script_factory, - permissions=create_permissions(simple_dvt, "setNodeOperatorStakingLimit"), - ), - ) - validate_evmscript_factory_added_event( - evs[8], - EVMScriptFactoryAdded( - factory_addr=update_target_validator_limits_evm_script_factory, - permissions=( - create_permissions_for_overloaded_method( - contracts.simple_dvt, "updateTargetValidatorsLimits", ("uint", "uint", "uint") - ) - ), - ), - ) - validate_evmscript_factory_added_event( - evs[9], - EVMScriptFactoryAdded( - factory_addr=set_node_operator_names_evm_script_factory, - permissions=create_permissions(simple_dvt, "setNodeOperatorName"), - ), - ) - validate_evmscript_factory_added_event( - evs[10], - EVMScriptFactoryAdded( - factory_addr=set_node_operator_reward_addresses_evm_script_factory, - permissions=create_permissions(simple_dvt, "setNodeOperatorRewardAddress"), - ), - ) - validate_evmscript_factory_added_event( - evs[11], - EVMScriptFactoryAdded( - factory_addr=change_node_operator_managers_evm_script_factory, - permissions=create_permissions(contracts.acl, "revokePermission") - + create_permissions(contracts.acl, "grantPermissionP")[2:], - ), - ) From b0baae2f96daa9cec1809875fca3b17fb5d948c0 Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Thu, 1 May 2025 23:36:59 +0700 Subject: [PATCH 8/9] chore: add top up test --- configs/config_hoodi.py | 1 + scripts/vote_2025_05_01_hoodi.py | 2 +- tests/test_vote_2025_05_01_hoodi.py | 27 +++++++++++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/configs/config_hoodi.py b/configs/config_hoodi.py index 151841f6e..e8cd61ba5 100644 --- a/configs/config_hoodi.py +++ b/configs/config_hoodi.py @@ -50,3 +50,4 @@ # StakingRouter STAKING_ROUTER = "0xCc820558B39ee15C7C45B59390B503b83fb499A8" +USDC_TOKEN = "0x97bb030B93faF4684eAC76bA0bf3be5ec7140F36" diff --git a/scripts/vote_2025_05_01_hoodi.py b/scripts/vote_2025_05_01_hoodi.py index 36d564b9f..f2f43c641 100644 --- a/scripts/vote_2025_05_01_hoodi.py +++ b/scripts/vote_2025_05_01_hoodi.py @@ -50,7 +50,7 @@ def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | Tra # 2. Add `AddAllowedRecipient` EVM script factory (sandbox) add_allowed_recipient = "0x056561d0F1314CB3932180b3f0B3C03174F2642B" # 3. Add `TopUpAllowedRecipient` EVM script factory (sandbox) - top_up_allowed_recipients = "0x8D9Fd9cD208f57c6735174B848180B53A0F7F560" + top_up_allowed_recipients = "0x4A7B898981182c42ecC9444Cd40Cf42CEB6b71Ab" allowed_recipient_registry = interface.AllowedRecipientRegistry("0xd57FF1ce54F572F4E8DaF0cB7038F1Bd6049cAa8") diff --git a/tests/test_vote_2025_05_01_hoodi.py b/tests/test_vote_2025_05_01_hoodi.py index 4ac433108..d67ce0c49 100644 --- a/tests/test_vote_2025_05_01_hoodi.py +++ b/tests/test_vote_2025_05_01_hoodi.py @@ -3,7 +3,7 @@ """ -from brownie import interface +from brownie import interface, accounts from scripts.vote_2025_05_01_hoodi import start_vote from utils.test.tx_tracing_helpers import * from utils.config import ( @@ -11,6 +11,9 @@ LDO_HOLDER_ADDRESS_FOR_TESTS, EASYTRACK_EVMSCRIPT_EXECUTOR, ) +from configs.config_hoodi import ( + USDC_TOKEN, +) from utils.test.event_validators.permission import ( Permission, validate_permission_grant_event, @@ -21,9 +24,10 @@ ) from utils.easy_track import create_permissions from utils.voting import find_metadata_by_vote_id +from utils.test.easy_track_helpers import create_and_enact_payment_motion -def test_vote(helpers, accounts, vote_ids_from_env): +def test_vote(helpers, accounts, vote_ids_from_env, stranger): # new code easy_track = contracts.easy_track voting = contracts.voting @@ -31,11 +35,10 @@ def test_vote(helpers, accounts, vote_ids_from_env): add_allowed_recipient_evm_script_factory = "0x056561d0F1314CB3932180b3f0B3C03174F2642B" remove_allowed_recipient_evm_script_factory = "0xc84251D2959E976AfE95201E1e2B88dB56Bc0a69" - top_up_allowed_recipient_evm_script_factory = "0x8D9Fd9cD208f57c6735174B848180B53A0F7F560" + top_up_allowed_recipient_evm_script_factory = "0x4A7B898981182c42ecC9444Cd40Cf42CEB6b71Ab" registry = interface.AllowedRecipientRegistry("0xd57FF1ce54F572F4E8DaF0cB7038F1Bd6049cAa8") trusted_caller = "0x418B816A7c3ecA151A31d98e30aa7DAa33aBf83A" - token_registry = "0xA51b9ecfa754F619971f3Dc58Def517F267F84dB" evm_script_factories_before = easy_track.getEVMScriptFactories() @@ -113,3 +116,19 @@ def test_vote(helpers, accounts, vote_ids_from_env): ) # keccak256('CREATE_PAYMENTS_ROLE') validate_permission_grant_event(evs[3], permission) + + usdc_transfer_amount = 100 * 10**6 + + agent, usdc = contracts.agent, interface.Usdc(USDC_TOKEN) + print(usdc.balanceOf(agent), usdc_transfer_amount) + + if usdc.balanceOf(agent) >= usdc_transfer_amount: + create_and_enact_payment_motion( + easy_track, + trusted_caller=trusted_caller, + factory=top_up_allowed_recipient_evm_script_factory, + token=interface.Usdc(USDC_TOKEN), + recievers=[accounts.at(trusted_caller, force=True)], + transfer_amounts=[usdc_transfer_amount], + stranger=stranger, + ) From 1c987a4c45eaf75d85be10102e7aef70a3d0e77c Mon Sep 17 00:00:00 2001 From: Vitaly Galaichuk Date: Fri, 2 May 2025 00:04:37 +0700 Subject: [PATCH 9/9] fix: address in description --- scripts/vote_2025_05_01_hoodi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/vote_2025_05_01_hoodi.py b/scripts/vote_2025_05_01_hoodi.py index f2f43c641..734037d6d 100644 --- a/scripts/vote_2025_05_01_hoodi.py +++ b/scripts/vote_2025_05_01_hoodi.py @@ -70,7 +70,7 @@ def start_vote(tx_params: Dict[str, str], silent: bool) -> bool | list[int | Tra ), ), ( - "3) Add `TopUpAllowedRecipient` EVM script factory with address 0x8D9Fd9cD208f57c6735174B848180B53A0F7F560", + "3) Add `TopUpAllowedRecipient` EVM script factory with address 0x4A7B898981182c42ecC9444Cd40Cf42CEB6b71Ab", add_evmscript_factory( factory=top_up_allowed_recipients, permissions=create_permissions(contracts.finance, "newImmediatePayment")