|
105 | 105 | STAKEFISH_ORACLE_MEMBER_OLD = "0x946D3b081ed19173dC83Cd974fC69e1e760B7d78" |
106 | 106 | STAKEFISH_ORACLE_MEMBER_NEW = "0x042a9e5acCfa17e28300F1b5967f20891E973922" |
107 | 107 |
|
| 108 | +# Stakefish DSM council daemon rotation |
| 109 | +DEPOSIT_SECURITY_MODULE = "0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD" |
| 110 | +STAKEFISH_DSM_GUARDIAN_OLD = "0xd4EF84b638B334699bcf5AF4B0410B8CCD71943f" |
| 111 | +STAKEFISH_DSM_GUARDIAN_NEW = "0x4B87F16B8d32cb5a859a4C48a88edB5adBe3498E" |
| 112 | +DSM_QUORUM_SIZE = 4 |
| 113 | + |
108 | 114 | # Node operators |
109 | 115 | A41_NO_ID = 32 |
110 | 116 | A41_NAME = "A41" |
|
178 | 184 | EXPECTED_VOTE_ID = 199 |
179 | 185 | EXPECTED_DG_PROPOSAL_ID = 9 |
180 | 186 | EXPECTED_VOTE_EVENTS_COUNT = 11 # 1 DG submit + 5 factory removes + 5 factory adds |
181 | | -EXPECTED_DG_EVENTS_FROM_AGENT = 23 |
182 | | -EXPECTED_DG_EVENTS_COUNT = 23 |
| 187 | +EXPECTED_DG_EVENTS_FROM_AGENT = 25 |
| 188 | +EXPECTED_DG_EVENTS_COUNT = 25 |
183 | 189 | IPFS_DESCRIPTION_HASH = "bafkreic2fhcjelgdwpiiy7vxm7kf4g3kuhmmbaerfyoxkns2x5jzovqvaa" |
184 | | -DG_PROPOSAL_METADATA = "Deactivate A41, change name and reward address for Stakin, upgrade Lazy Oracle, Vault Hub and ZKSync Bridge, rotate addresses for Chorus One and Stakefish oracle set members, set Chorus One target validators limit, decrease Gas Supply ET limit and reset spent amount, raise CSM stake share limit and priority exit threshold" |
| 190 | +DG_PROPOSAL_METADATA = "Deactivate A41, change name and reward address for Stakin, upgrade Lazy Oracle, Vault Hub and ZKSync Bridge, rotate addresses for Chorus One and Stakefish oracle set members, set Chorus One target validators limit, decrease Gas Supply ET limit and reset spent amount, raise CSM stake share limit and priority exit threshold, rotate Stakefish council daemon in DSM" |
185 | 191 |
|
186 | 192 |
|
187 | 193 | @pytest.fixture(scope="module") |
@@ -489,6 +495,7 @@ def test_vote(helpers, accounts, ldo_holder, vote_ids_from_env, stranger, dual_g |
489 | 495 | gas_supply_registry = interface.AllowedRecipientRegistry(GAS_SUPPLY_ALLOWED_RECIPIENTS_REGISTRY) |
490 | 496 | staking_router = interface.StakingRouter(STAKING_ROUTER) |
491 | 497 | vebo = interface.ValidatorsExitBusOracle(VEBO) |
| 498 | + dsm = interface.DepositSecurityModule(DEPOSIT_SECURITY_MODULE) |
492 | 499 |
|
493 | 500 | # ========================================================================= |
494 | 501 | # ======================== Identify or Create vote ======================== |
@@ -728,6 +735,12 @@ def test_vote(helpers, accounts, ldo_holder, vote_ids_from_env, stranger, dual_g |
728 | 735 | assert csm_module_before["maxDepositsPerBlock"] == CSM_MAX_DEPOSITS_PER_BLOCK |
729 | 736 | assert csm_module_before["minDepositBlockDistance"] == CSM_MIN_DEPOSIT_BLOCK_DISTANCE |
730 | 737 |
|
| 738 | + # 1.24-1.25. Stakefish DSM guardian rotation before |
| 739 | + assert dsm.isGuardian(STAKEFISH_DSM_GUARDIAN_OLD) |
| 740 | + assert not dsm.isGuardian(STAKEFISH_DSM_GUARDIAN_NEW) |
| 741 | + dsm_guardians_before = dsm.getGuardians() |
| 742 | + dsm_quorum_before = dsm.getGuardianQuorum() |
| 743 | + |
731 | 744 | ao_quorum_before = hash_consensus_for_ao.getQuorum() |
732 | 745 | ao_members_before = len(hash_consensus_for_ao.getMembers()[0]) |
733 | 746 | csm_quorum_before = cs_hash_consensus.getQuorum() |
@@ -936,6 +949,16 @@ def test_vote(helpers, accounts, ldo_holder, vote_ids_from_env, stranger, dual_g |
936 | 949 | emitted_by=STAKING_ROUTER, |
937 | 950 | ) |
938 | 951 |
|
| 952 | + # 1.24. Remove Stakefish council daemon from DSM |
| 953 | + assert "GuardianRemoved" in dg_events[23] |
| 954 | + assert dg_events[23]["GuardianRemoved"]["guardian"].lower() == STAKEFISH_DSM_GUARDIAN_OLD.lower() |
| 955 | + assert dg_events[23]["GuardianRemoved"]["_emitted_by"].lower() == DEPOSIT_SECURITY_MODULE.lower() |
| 956 | + |
| 957 | + # 1.25. Add new Stakefish council daemon to DSM |
| 958 | + assert "GuardianAdded" in dg_events[24] |
| 959 | + assert dg_events[24]["GuardianAdded"]["guardian"].lower() == STAKEFISH_DSM_GUARDIAN_NEW.lower() |
| 960 | + assert dg_events[24]["GuardianAdded"]["_emitted_by"].lower() == DEPOSIT_SECURITY_MODULE.lower() |
| 961 | + |
939 | 962 | # ========================================================================= |
940 | 963 | # ==================== After DG proposal executed checks ================== |
941 | 964 | # ========================================================================= |
@@ -1015,6 +1038,13 @@ def test_vote(helpers, accounts, ldo_holder, vote_ids_from_env, stranger, dual_g |
1015 | 1038 | assert csm_module_after["maxDepositsPerBlock"] == CSM_MAX_DEPOSITS_PER_BLOCK |
1016 | 1039 | assert csm_module_after["minDepositBlockDistance"] == CSM_MIN_DEPOSIT_BLOCK_DISTANCE |
1017 | 1040 |
|
| 1041 | + # 1.24-1.25. Stakefish DSM guardian rotation after |
| 1042 | + assert not dsm.isGuardian(STAKEFISH_DSM_GUARDIAN_OLD) |
| 1043 | + assert dsm.isGuardian(STAKEFISH_DSM_GUARDIAN_NEW) |
| 1044 | + assert len(dsm.getGuardians()) == len(dsm_guardians_before) |
| 1045 | + assert dsm.getGuardianQuorum() == dsm_quorum_before |
| 1046 | + assert dsm.getGuardianQuorum() == DSM_QUORUM_SIZE |
| 1047 | + |
1018 | 1048 | ao_quorum_after = hash_consensus_for_ao.getQuorum() |
1019 | 1049 | ao_members_after = len(hash_consensus_for_ao.getMembers()[0]) |
1020 | 1050 | csm_quorum_after = cs_hash_consensus.getQuorum() |
|
0 commit comments