From 9b0394beb84bbacb59e81b5aef70954e7999c40c Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:38:29 -0500 Subject: [PATCH 01/22] -- duplicated function --- .../test-sol/unit/governance/voting/Election.t.sol | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/protocol/test-sol/unit/governance/voting/Election.t.sol b/packages/protocol/test-sol/unit/governance/voting/Election.t.sol index 9cff990b322..296a4022736 100644 --- a/packages/protocol/test-sol/unit/governance/voting/Election.t.sol +++ b/packages/protocol/test-sol/unit/governance/voting/Election.t.sol @@ -168,14 +168,6 @@ contract ElectionTest is Utils { deployCodeTo("Registry.sol", abi.encode(false), PROXY_ADMIN_ADDRESS); epochManager.initializeSystem(l1EpochNumber, block.number, _elected); } - - function travelNEpoch(uint256 n) public { - if (isL2()) { - epochManager.setCurrentEpochNumber(epochManager.getCurrentEpochNumber() + n); - } else { - blockTravel((n * ph.epochSize()) + 1); - } - } } contract TransitionToL2After is ElectionTest { From 932802450895f93e519ea25c4ff203fbbec82e13 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 12 Nov 2024 14:26:39 -0500 Subject: [PATCH 02/22] general L2 tests --- .../unit/governance/network/Governance.t.sol | 168 +++++++++++++++--- 1 file changed, 139 insertions(+), 29 deletions(-) diff --git a/packages/protocol/test-sol/unit/governance/network/Governance.t.sol b/packages/protocol/test-sol/unit/governance/network/Governance.t.sol index ae669e956f2..e2b0d4cbfd5 100644 --- a/packages/protocol/test-sol/unit/governance/network/Governance.t.sol +++ b/packages/protocol/test-sol/unit/governance/network/Governance.t.sol @@ -263,6 +263,13 @@ contract GovernanceTest is Test, TestConstants, Utils { } } +contract TransitionToL2After is GovernanceTest { + function setUp() public { + super.setUp(); + _whenL2(); + } +} + contract GovernanceTest_initialize is GovernanceTest { function test_SetsTheOwner() public { assertEq(governance.owner(), accOwner); @@ -368,6 +375,8 @@ contract GovernanceTest_setApprover is GovernanceTest { } } +contract GovernanceTest_setApprover_L2 is TransitionToL2After, GovernanceTest_setApprover {} + contract GovernanceTest_setMinDeposit is GovernanceTest { uint256 NEW_MINDEPOSIT = 45; event MinDepositSet(uint256 minDeposit); @@ -398,6 +407,8 @@ contract GovernanceTest_setMinDeposit is GovernanceTest { } } +contract GovernanceTest_setMinDeposit_L2 is TransitionToL2After, GovernanceTest_setMinDeposit {} + contract GovernanceTest_setConcurrentProposals is GovernanceTest { uint256 NEW_CONCURRENT_PROPOSALS = 45; event ConcurrentProposalsSet(uint256 concurrentProposals); @@ -434,6 +445,11 @@ contract GovernanceTest_setConcurrentProposals is GovernanceTest { } } +contract GovernanceTest_setConcurrentProposals_L2 is + TransitionToL2After, + GovernanceTest_setConcurrentProposals +{} + contract GovernanceTest_setQueueExpiry is GovernanceTest { event QueueExpirySet(uint256 queueExpiry); @@ -469,6 +485,8 @@ contract GovernanceTest_setQueueExpiry is GovernanceTest { } } +contract GovernanceTest_setQueueExpiry_L2 is TransitionToL2After, GovernanceTest_setQueueExpiry {} + contract GovernanceTest_setDequeueFrequency is GovernanceTest { event DequeueFrequencySet(uint256 dequeueFrequency); @@ -504,6 +522,11 @@ contract GovernanceTest_setDequeueFrequency is GovernanceTest { } } +contract GovernanceTest_setDequeueFrequency_L2 is + TransitionToL2After, + GovernanceTest_setDequeueFrequency +{} + contract GovernanceTest_setReferendumStageDuration is GovernanceTest { event ReferendumStageDurationSet(uint256 value); @@ -539,6 +562,11 @@ contract GovernanceTest_setReferendumStageDuration is GovernanceTest { } } +contract GovernanceTest_setReferendumStageDuration_L2 is + TransitionToL2After, + GovernanceTest_setReferendumStageDuration +{} + contract GovernanceTest_setExecutionStageDuration is GovernanceTest { event ExecutionStageDurationSet(uint256 dequeueFrequency); @@ -574,6 +602,11 @@ contract GovernanceTest_setExecutionStageDuration is GovernanceTest { } } +contract GovernanceTest_setExecutionStageDuration_L2 is + TransitionToL2After, + GovernanceTest_setExecutionStageDuration +{} + contract GovernanceTest_setParticipationFloor is GovernanceTest { event ParticipationFloorSet(uint256 value); @@ -604,6 +637,11 @@ contract GovernanceTest_setParticipationFloor is GovernanceTest { } } +contract GovernanceTest_setParticipationFloor_L2 is + TransitionToL2After, + GovernanceTest_setParticipationFloor +{} + contract GovernanceTest_setBaselineUpdateFactor is GovernanceTest { event ParticipationBaselineUpdateFactorSet(uint256 value); @@ -634,6 +672,11 @@ contract GovernanceTest_setBaselineUpdateFactor is GovernanceTest { } } +contract GovernanceTest_setBaselineUpdateFactor_L2 is + TransitionToL2After, + GovernanceTest_setBaselineUpdateFactor +{} + contract GovernanceTest_setBaselineQuorumFactor is GovernanceTest { event ParticipationBaselineQuorumFactorSet(uint256 value); @@ -664,6 +707,11 @@ contract GovernanceTest_setBaselineQuorumFactor is GovernanceTest { } } +contract GovernanceTest_setBaselineQuorumFactor_L2 is + TransitionToL2After, + GovernanceTest_setBaselineQuorumFactor +{} + contract GovernanceTest_setConstitution is GovernanceTest { event ConstitutionSet(address indexed destination, bytes4 indexed functionId, uint256 threshold); @@ -740,6 +788,8 @@ contract GovernanceTest_setConstitution is GovernanceTest { } } +contract GovernanceTest_setConstitution_L2 is TransitionToL2After, GovernanceTest_setConstitution {} + contract GovernanceTest_setSecurityCouncil is GovernanceTest { event SecurityCouncilSet(address indexed council); @@ -785,6 +835,11 @@ contract GovernanceTest_setSecurityCouncil is GovernanceTest { } } +contract GovernanceTest_setSecurityCouncil_L2 is + TransitionToL2After, + GovernanceTest_setSecurityCouncil +{} + contract GovernanceTest_setHotfixExecutionTimeWindow is GovernanceTest { event HotfixExecutionTimeWindowSet(uint256 timeDelta); @@ -815,6 +870,11 @@ contract GovernanceTest_setHotfixExecutionTimeWindow is GovernanceTest { } } +contract GovernanceTest_setHotfixExecutionTimeWindow_L2 is + TransitionToL2After, + GovernanceTest_setHotfixExecutionTimeWindow +{} + contract GovernanceTest_propose is GovernanceTest { event ProposalQueued( uint256 indexed proposalId, @@ -989,6 +1049,8 @@ contract GovernanceTest_propose is GovernanceTest { } } +contract GovernanceTest_propose_L2 is TransitionToL2After, GovernanceTest_propose {} + contract GovernanceTest_upvote is GovernanceTest { event ProposalUpvoted(uint256 indexed proposalId, address indexed account, uint256 upvotes); event ProposalExpired(uint256 indexed proposalId); @@ -1188,6 +1250,8 @@ contract GovernanceTest_upvote is GovernanceTest { } } +contract GovernanceTest_upvote_L2 is TransitionToL2After, GovernanceTest_upvote {} + contract GovernanceTest_revokeUpvote is GovernanceTest { event ProposalExpired(uint256 indexed proposalId); event ProposalUpvoteRevoked( @@ -1277,6 +1341,8 @@ contract GovernanceTest_revokeUpvote is GovernanceTest { } } +contract GovernanceTest_revokeUpvote_L2 is TransitionToL2After, GovernanceTest_revokeUpvote {} + contract GovernanceTest_withdraw is GovernanceTest { address accProposer; @@ -1314,6 +1380,8 @@ contract GovernanceTest_withdraw is GovernanceTest { } } +contract GovernanceTest_withdraw_L2 is TransitionToL2After, GovernanceTest_withdraw {} + contract GovernanceTest_approve is GovernanceTest { uint256 INDEX = 0; // first proposal index @@ -1488,6 +1556,8 @@ contract GovernanceTest_approve is GovernanceTest { } } +contract GovernanceTest_approve_L2 is TransitionToL2After, GovernanceTest_approve {} + contract GovernanceTest_revokeVotes is GovernanceTest { uint256 numVoted; @@ -1616,6 +1686,8 @@ contract GovernanceTest_revokeVotes is GovernanceTest { } } +contract GovernanceTest_revokeVotes_L2 is TransitionToL2After, GovernanceTest_revokeVotes {} + contract GovernanceTest_vote_WhenProposalIsApproved is GovernanceTest { event ProposalVotedV2( uint256 indexed proposalId, @@ -1854,6 +1926,11 @@ contract GovernanceTest_vote_WhenProposalIsApproved is GovernanceTest { } } +contract GovernanceTest_vote_WhenProposalIsApproved_L2 is + TransitionToL2After, + GovernanceTest_vote_WhenProposalIsApproved +{} + contract GovernanceTest_vote_WhenProposalIsApprovedAndHaveSigner is GovernanceTest { address accSigner; @@ -1933,6 +2010,11 @@ contract GovernanceTest_vote_WhenProposalIsApprovedAndHaveSigner is GovernanceTe } } +contract GovernanceTest_vote_WhenProposalIsApprovedAndHaveSigner_L2 is + TransitionToL2After, + GovernanceTest_vote_WhenProposalIsApprovedAndHaveSigner +{} + contract GovernanceTest_vote_WhenProposalIsNotApproved is GovernanceTest { event ProposalVotedV2( uint256 indexed proposalId, @@ -2013,6 +2095,11 @@ contract GovernanceTest_vote_WhenProposalIsNotApproved is GovernanceTest { } } +contract GovernanceTest_vote_WhenProposalIsNotApproved_L2 is + TransitionToL2After, + GovernanceTest_vote_WhenProposalIsNotApproved +{} + contract GovernanceTest_vote_WhenVotingOnDifferentProposalWithSameIndex is GovernanceTest { function test_IgnoreVotesFromPreviousProposal() public { uint256 proposalId1 = makeValidProposal(); @@ -2063,6 +2150,11 @@ contract GovernanceTest_vote_WhenVotingOnDifferentProposalWithSameIndex is Gover } } +contract GovernanceTest_vote_WhenVotingOnDifferentProposalWithSameIndex_L2 is + TransitionToL2After, + GovernanceTest_vote_WhenVotingOnDifferentProposalWithSameIndex +{} + contract GovernanceTest_vote_PartiallyWhenProposalIsApproved is GovernanceTest { event ProposalVotedV2( uint256 indexed proposalId, @@ -2291,6 +2383,11 @@ contract GovernanceTest_vote_PartiallyWhenProposalIsApproved is GovernanceTest { } } +contract GovernanceTest_vote_PartiallyWhenProposalIsApproved_L2 is + TransitionToL2After, + GovernanceTest_vote_PartiallyWhenProposalIsApproved +{} + contract GovernanceTest_votePartially_WhenProposalIsApprovedAndHaveSigner is GovernanceTest { address accSigner; @@ -2405,6 +2502,11 @@ contract GovernanceTest_votePartially_WhenProposalIsApprovedAndHaveSigner is Gov } } +contract GovernanceTest_votePartially_WhenProposalIsApprovedAndHaveSigner_L2 is + TransitionToL2After, + GovernanceTest_votePartially_WhenProposalIsApprovedAndHaveSigner +{} + contract GovernanceTest_votePartially_WhenProposalIsNotApproved is GovernanceTest { event ProposalVotedV2( uint256 indexed proposalId, @@ -2485,6 +2587,11 @@ contract GovernanceTest_votePartially_WhenProposalIsNotApproved is GovernanceTes } } +contract GovernanceTest_votePartially_WhenProposalIsNotApproved_L2 is + TransitionToL2After, + GovernanceTest_votePartially_WhenProposalIsNotApproved +{} + contract GovernanceTest_votePartially_WhenVotingOnDifferentProposalWithSameIndex is GovernanceTest { function test_IgnoreVotesFromPreviousProposal() public { uint256 proposalId1 = makeValidProposal(); @@ -2535,6 +2642,11 @@ contract GovernanceTest_votePartially_WhenVotingOnDifferentProposalWithSameIndex } } +contract GovernanceTest_votePartially_WhenVotingOnDifferentProposalWithSameIndex_L2 is + TransitionToL2After, + GovernanceTest_votePartially_WhenVotingOnDifferentProposalWithSameIndex +{} + contract GovernanceTest_execute is GovernanceTest { event ParticipationBaselineUpdated(uint256 participationBaseline); event ProposalExecuted(uint256 indexed proposalId); @@ -2966,6 +3078,8 @@ contract GovernanceTest_execute is GovernanceTest { } } +contract GovernanceTest_execute_L2 is TransitionToL2After, GovernanceTest_execute {} + contract GovernanceTest_approveHotfix is GovernanceTest { bytes32 constant HOTFIX_HASH = bytes32(uint256(0x123456789)); event HotfixApproved(bytes32 indexed hash, address approver); @@ -3088,7 +3202,7 @@ contract GovernanceTest_whitelistHotfix is GovernanceTest { governance.whitelistHotfix(HOTFIX_HASH); } - function test_Reverts_WhenCalledOnL2() public { + function test_Reverts_WhenL2() public { address validator = actor("validator1"); governance.addValidator(validator); _whenL2(); @@ -3164,7 +3278,7 @@ contract GovernanceTest_hotfixWhitelistValidatorTally is GovernanceTest { assertEq(governance.hotfixWhitelistValidatorTally(HOTFIX_HASH), 3); } - function test_Reverts_WhenCalledOnL2() public { + function test_Reverts_WhenL2() public { address validator = actor("validator1"); governance.addValidator(validator); _whenL2(); @@ -3207,7 +3321,7 @@ contract GovernanceTest_isHotfixPassing is GovernanceTest { assertTrue(governance.isHotfixPassing(HOTFIX_HASH)); } - function test_Reverts_WhenCalledOnL2() public { + function test_Reverts_WhenL2() public { _whenL2(); vm.expectRevert("This method is no longer supported in L2."); governance.isHotfixPassing(HOTFIX_HASH); @@ -3282,7 +3396,7 @@ contract GovernanceTest_prepareHotfix_L2 is GovernanceTest { governance.setSecurityCouncil(accCouncil); } - function test_markHotfixRecordExecutionTimeLimit_whenHotfixApproved() public { + function test_shouldMarkHotfixRecordExecutionTimeLimit_whenHotfixApproved() public { vm.prank(accOwner); governance.setHotfixExecutionTimeWindow(DAY); @@ -3408,8 +3522,10 @@ contract GovernanceTest_resetHotfix is GovernanceTest { vm.prank(accCouncil); governance.approveHotfix(HOTFIX_HASH); + vm.prank(accApprover); governance.approveHotfix(HOTFIX_HASH); + (bool approved, bool councilApproved, , uint256 _preparedTimeLimit) = governance .getL2HotfixRecord(HOTFIX_HASH); @@ -3612,22 +3728,14 @@ contract GovernanceTest_executeHotfix_L2 is GovernanceTest { } function test_ShouldExecuteHotfix_WhenApprovedByApproverAndSecurityCouncil() public { - vm.prank(accApprover); - governance.approveHotfix(hotfixHash); - vm.prank(accCouncil); - governance.approveHotfix(hotfixHash); - governance.prepareHotfix(hotfixHash); + approveAndPrepareHotfix(); executeHotfixTx(); assertEq(testTransactions.getValue(1), 1); } function test_ShouldMarkHotfixAsExecuted_WhenApprovedByApproverAndSecurityCouncil() public { - vm.prank(accApprover); - governance.approveHotfix(hotfixHash); - vm.prank(accCouncil); - governance.approveHotfix(hotfixHash); - governance.prepareHotfix(hotfixHash); + approveAndPrepareHotfix(); executeHotfixTx(); (, , bool executed, ) = governance.getL2HotfixRecord(hotfixHash); @@ -3635,11 +3743,7 @@ contract GovernanceTest_executeHotfix_L2 is GovernanceTest { } function test_Emits_HotfixExecutedEventWhenApprovedByApproverAndSecurityCouncil() public { - vm.prank(accApprover); - governance.approveHotfix(hotfixHash); - vm.prank(accCouncil); - governance.approveHotfix(hotfixHash); - governance.prepareHotfix(hotfixHash); + approveAndPrepareHotfix(); vm.expectEmit(true, true, true, true); emit HotfixExecuted(hotfixHash); @@ -3647,11 +3751,7 @@ contract GovernanceTest_executeHotfix_L2 is GovernanceTest { } function test_Reverts_WhenExecutingSameHotfixTwice() public { - vm.prank(accApprover); - governance.approveHotfix(hotfixHash); - vm.prank(accCouncil); - governance.approveHotfix(hotfixHash); - governance.prepareHotfix(hotfixHash); + approveAndPrepareHotfix(); executeHotfixTx(); vm.expectRevert("hotfix already executed"); @@ -3679,11 +3779,8 @@ contract GovernanceTest_executeHotfix_L2 is GovernanceTest { executeHotfixTx(); } function test_Reverts_WhenExecutedBeyondTheExecutionTimeLimit() public { - vm.prank(accApprover); - governance.approveHotfix(hotfixHash); - vm.prank(accCouncil); - governance.approveHotfix(hotfixHash); - governance.prepareHotfix(hotfixHash); + approveAndPrepareHotfix(); + timeTravel(2 * DAY); vm.expectRevert("Execution time limit has already been reached."); executeHotfixTx(); @@ -3698,6 +3795,14 @@ contract GovernanceTest_executeHotfix_L2 is GovernanceTest { SALT ); } + + function approveAndPrepareHotfix() private { + vm.prank(accApprover); + governance.approveHotfix(hotfixHash); + vm.prank(accCouncil); + governance.approveHotfix(hotfixHash); + governance.prepareHotfix(hotfixHash); + } } contract GovernanceTest_isVoting is GovernanceTest { @@ -4249,3 +4354,8 @@ contract GovernanceTest_removeVotesWhenRevokingDelegatedVotes is GovernanceTest assertVoteRecord(2, proposalIds[2], 0, 0, 51); } } + +contract GovernanceTest_removeVotesWhenRevokingDelegatedVotes_L2 is + TransitionToL2After, + GovernanceTest_removeVotesWhenRevokingDelegatedVotes +{} From eb37996f623799f50464dbfc08257f57f0533ddc Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 12 Nov 2024 14:37:39 -0500 Subject: [PATCH 03/22] ++ L1 GovernanceTest_resetHotfix --- .../unit/governance/network/Governance.t.sol | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/packages/protocol/test-sol/unit/governance/network/Governance.t.sol b/packages/protocol/test-sol/unit/governance/network/Governance.t.sol index e2b0d4cbfd5..2465db2660a 100644 --- a/packages/protocol/test-sol/unit/governance/network/Governance.t.sol +++ b/packages/protocol/test-sol/unit/governance/network/Governance.t.sol @@ -3502,6 +3502,59 @@ contract GovernanceTest_resetHotfix is GovernanceTest { bytes32 hotfixHash; event HotfixRecordReset(bytes32 indexed hash); + function setUp() public { + super.setUp(); + + address val1 = actor("validator1"); + governance.addValidator(val1); + vm.prank(val1); + accounts.createAccount(); + + // _whenL2(); + vm.prank(accOwner); + governance.setSecurityCouncil(accCouncil); + + hotfixHash = governance.getHotfixHash( + okProp.values, + okProp.destinations, + okProp.data, + okProp.dataLengths, + SALT + ); + } + + function test_Reverts_whenCalledOnL1() public { + vm.prank(accOwner); + governance.setHotfixExecutionTimeWindow(DAY); + + vm.prank(accApprover); + governance.approveHotfix(HOTFIX_HASH); + + (bool approved, , ) = governance.getHotfixRecord(HOTFIX_HASH); + + assertTrue(approved); + + vm.roll(block.number + governance.getEpochSize()); + vm.prank(actor("validator1")); + governance.whitelistHotfix(HOTFIX_HASH); + + uint256 epoch = governance.getEpochNumber(); + + governance.prepareHotfix(HOTFIX_HASH); + + timeTravel(DAY + 1); + + vm.expectRevert("hotfix not prepared"); + governance.resetHotFixRecord(HOTFIX_HASH); + } +} + +contract GovernanceTest_resetHotfix_L2 is GovernanceTest { + bytes32 constant HOTFIX_HASH = bytes32(uint256(0x123456789)); + bytes32 constant SALT = 0x657ed9d64e84fa3d1af43b3a307db22aba2d90a158015df1c588c02e24ca08f0; + bytes32 hotfixHash; + event HotfixRecordReset(bytes32 indexed hash); + function setUp() public { super.setUp(); _whenL2(); From f7d886d4abf386beb8924c6f91dd522affa22ef8 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 12 Nov 2024 14:42:16 -0500 Subject: [PATCH 04/22] ++ remaining tests --- .../unit/governance/network/Governance.t.sol | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/protocol/test-sol/unit/governance/network/Governance.t.sol b/packages/protocol/test-sol/unit/governance/network/Governance.t.sol index 2465db2660a..68a9eef38ab 100644 --- a/packages/protocol/test-sol/unit/governance/network/Governance.t.sol +++ b/packages/protocol/test-sol/unit/governance/network/Governance.t.sol @@ -3912,6 +3912,8 @@ contract GovernanceTest_isVoting is GovernanceTest { } } +contract GovernanceTest_isVoting_L2 is TransitionToL2After, GovernanceTest_isVoting {} + contract GovernanceTest_isProposalPassing is GovernanceTest { address accSndVoter; @@ -3954,6 +3956,11 @@ contract GovernanceTest_isProposalPassing is GovernanceTest { } } +contract GovernanceTest_isProposalPassing_L2 is + TransitionToL2After, + GovernanceTest_isProposalPassing +{} + contract GovernanceTest_dequeueProposalsIfReady is GovernanceTest { function test_notUpdateLastDequeueWhenThereAreNoQueuedProposals() public { uint256 originalLastDequeue = governance.lastDequeue(); @@ -3987,6 +3994,11 @@ contract GovernanceTest_dequeueProposalsIfReady is GovernanceTest { } } +contract GovernanceTest_dequeueProposalsIfReady_L2 is + TransitionToL2After, + GovernanceTest_dequeueProposalsIfReady +{} + contract GovernanceTest_getProposalStage is GovernanceTest { function test_returnNoneStageWhenProposalDoesNotExists() public { assertEq(uint256(governance.getProposalStage(0)), uint256(Proposals.Stage.None)); @@ -4119,6 +4131,11 @@ contract GovernanceTest_getProposalStage is GovernanceTest { } } +contract GovernanceTest_getProposalStage_L2 is + TransitionToL2After, + GovernanceTest_getProposalStage +{} + contract GovernanceTest_getAmountOfGoldUsedForVoting is GovernanceTest { function test_showCorrectNumberOfVotes_whenVotingOn1ConcurrentProposal() public { makeAndApprove3ConcurrentProposals(); @@ -4247,6 +4264,11 @@ contract GovernanceTest_getAmountOfGoldUsedForVoting is GovernanceTest { } } +contract GovernanceTest_getAmountOfGoldUsedForVoting_L2 is + TransitionToL2After, + GovernanceTest_getAmountOfGoldUsedForVoting +{} + contract GovernanceTest_removeVotesWhenRevokingDelegatedVotes is GovernanceTest { uint256[] proposalIds; From 0ad41744c807151b31096e689bfd17577f1c6ebd Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 12 Nov 2024 18:00:10 -0500 Subject: [PATCH 05/22] debuging --- packages/celotool/src/e2e-tests/governance_tests.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 3bdffa5fb79..39ef34b11e7 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -310,7 +310,7 @@ describe('governance tests', () => { if (myceloAddress === groupAddress) { return '0x' + generatePrivateKey(mnemonic, AccountType.VALIDATOR_GROUP, 0) } - // Otherwise, the validator group key is encoded in its name (see 25_elect_validators.ts) + // Otherwise, the validator group key is encoded in its name (see 30_elect_validators.ts) const name = await accounts.methods.getName(groupAddress).call() const encryptedKeystore64 = name.split(' ')[1] const encryptedKeystore = JSON.parse(Buffer.from(encryptedKeystore64, 'base64').toString()) @@ -515,7 +515,7 @@ describe('governance tests', () => { assert.equal(validatorSetSize, groupMembership.length) } }) - + // TODO (soloseng) fix test such that it returns expected validators it('should always return a validator set equal to the signing keys of the group members at the end of the last epoch', async function (this: any) { this.timeout(0) for (const blockNumber of blockNumbers) { @@ -538,11 +538,13 @@ describe('governance tests', () => { // Fetch the round robin order if it hasn't already been set for this epoch. if (roundRobinOrder.length === 0 || blockNumber === lastEpochBlock + 1) { const validatorSet = await getValidatorSetSignersAtBlock(blockNumber) + console.log(`### validatorSet: ${validatorSet}`) roundRobinOrder = await Promise.all( validatorSet.map( async (_, i) => (await web3.eth.getBlock(lastEpochBlock + i + 1)).miner ) ) + console.log(`### roundRobinOrder: ${roundRobinOrder}`) assert.sameMembers(roundRobinOrder, validatorSet) } const indexInEpoch = blockNumber - lastEpochBlock - 1 From dd47374ee8b8cbcc72347bc67bd3d7208aefe501 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:41:19 -0500 Subject: [PATCH 06/22] more debug logs --- packages/celotool/src/e2e-tests/governance_tests.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 39ef34b11e7..f323499e78d 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -521,11 +521,18 @@ describe('governance tests', () => { for (const blockNumber of blockNumbers) { const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const memberAccounts = await getValidatorGroupMembers(lastEpochBlock) + console.log(`### Got memberAccounts: ${memberAccounts}`) const memberSigners = await Promise.all( memberAccounts.map((v: string) => getValidatorSigner(v, lastEpochBlock)) ) + console.log(`### Got memberSigners: ${memberSigners}`) + const validatorSetSigners = await getValidatorSetSignersAtBlock(blockNumber) + console.log(`### Got validatorSetSigners: ${validatorSetSigners}`) + const validatorSetAccounts = await getValidatorSetAccountsAtBlock(blockNumber) + console.log(`### Got validatorSetAccounts: ${validatorSetAccounts}`) + assert.sameMembers(memberSigners, validatorSetSigners) assert.sameMembers(memberAccounts, validatorSetAccounts) } From b1f6ee6190d758ce509db0fac9e5fc4a4f51ad15 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Wed, 13 Nov 2024 16:16:50 -0500 Subject: [PATCH 07/22] more debug --- packages/celotool/src/e2e-tests/governance_tests.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index f323499e78d..811eead623c 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -442,18 +442,21 @@ describe('governance tests', () => { // groupKit uses a different node than kit does, so wait a second in case kit's node // got the new block before groupKit's node did. - await sleep(1) + await sleep(5) const txos = await (await groupKit.contracts.getElection()).activate(group) for (const txo of txos) { await txo.sendAndWaitForReceipt({ from: group }) } + const validatorSetSigners0 = await election.methods.getCurrentValidatorSigners().call() + console.log(`### Got _validatorSetSigners0: ${validatorSetSigners0}`) validators = await groupKit._web3Contracts.getValidators() const membersToSwap = [validatorAccounts[0], validatorAccounts[1]] const memberSwapper = await newMemberSwapper(groupKit, membersToSwap) // The memberSwapper makes a change when it's created, so we wait for epoch change so it takes effect await waitForEpochTransition(web3, epoch) - + const validatorSetSigners1 = await election.methods.getCurrentValidatorSigners().call() + console.log(`### Got _validatorSetSigners1: ${validatorSetSigners1}`) const handled: any = {} let errorWhileChangingValidatorSet = '' @@ -498,6 +501,7 @@ describe('governance tests', () => { const getValidatorSetAccountsAtBlock = async (blockNumber: number) => { const signingKeys = await getValidatorSetSignersAtBlock(blockNumber) + console.log(`### Got signingKeys: ${signingKeys}`) return Promise.all( signingKeys.map((address: string) => accounts.methods.signerToAccount(address).call({}, blockNumber) From 8a6e82382b77ce6f671b3ed756c6f1c2e45c5998 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 27 Jan 2025 13:42:22 -0500 Subject: [PATCH 08/22] ++ debugs --- packages/celotool/src/e2e-tests/governance_tests.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 811eead623c..53ed3eaacc1 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -287,10 +287,12 @@ describe('governance tests', () => { const groupInfo = await validators.methods .getValidatorGroup(groupAddress) .call({}, blockNumber) + console.log(`### Got memberAccounts when given blockNumber: ${groupInfo[0]}`) return groupInfo[0] } else { const [groupAddress] = await validators.methods.getRegisteredValidatorGroups().call() const groupInfo = await validators.methods.getValidatorGroup(groupAddress).call() + console.log(`### Got memberAccounts without blockNumber: ${groupInfo[0]}`) return groupInfo[0] } } @@ -449,6 +451,7 @@ describe('governance tests', () => { } const validatorSetSigners0 = await election.methods.getCurrentValidatorSigners().call() + console.log(`### current block: ${await groupKit.connection.getBlockNumber()}`) console.log(`### Got _validatorSetSigners0: ${validatorSetSigners0}`) validators = await groupKit._web3Contracts.getValidators() const membersToSwap = [validatorAccounts[0], validatorAccounts[1]] @@ -457,6 +460,7 @@ describe('governance tests', () => { await waitForEpochTransition(web3, epoch) const validatorSetSigners1 = await election.methods.getCurrentValidatorSigners().call() console.log(`### Got _validatorSetSigners1: ${validatorSetSigners1}`) + console.log(`### current block: ${await groupKit.connection.getBlockNumber()}`) const handled: any = {} let errorWhileChangingValidatorSet = '' @@ -488,6 +492,7 @@ describe('governance tests', () => { // Prepare for member swapping. await sleep(epoch) } + console.log(`### current block after 40 block: ${await groupKit.connection.getBlockNumber()}`) ;(subscription as any).unsubscribe() // Wait for the current epoch to complete. @@ -511,6 +516,7 @@ describe('governance tests', () => { it('should always return a validator set size equal to the number of group members at the end of the last epoch', async () => { for (const blockNumber of blockNumbers) { + console.log(`### blockNumber: ${blockNumber}`) const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const validatorSetSize = await election.methods .numberValidatorsInCurrentSet() @@ -523,6 +529,7 @@ describe('governance tests', () => { it('should always return a validator set equal to the signing keys of the group members at the end of the last epoch', async function (this: any) { this.timeout(0) for (const blockNumber of blockNumbers) { + console.log(`### here`) const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const memberAccounts = await getValidatorGroupMembers(lastEpochBlock) console.log(`### Got memberAccounts: ${memberAccounts}`) @@ -532,7 +539,7 @@ describe('governance tests', () => { console.log(`### Got memberSigners: ${memberSigners}`) const validatorSetSigners = await getValidatorSetSignersAtBlock(blockNumber) - console.log(`### Got validatorSetSigners: ${validatorSetSigners}`) + console.log(`### Got validatorSetSigners at ${blockNumber}: ${validatorSetSigners}`) const validatorSetAccounts = await getValidatorSetAccountsAtBlock(blockNumber) console.log(`### Got validatorSetAccounts: ${validatorSetAccounts}`) From 60170d53465019d6276104a14f0f7031b5e85026 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:03:51 -0500 Subject: [PATCH 09/22] suppress other tests --- .github/workflows/celo-monorepo.yml | 262 +++++++++--------- .../src/e2e-tests/governance_tests.ts | 1 + 2 files changed, 132 insertions(+), 131 deletions(-) diff --git a/.github/workflows/celo-monorepo.yml b/.github/workflows/celo-monorepo.yml index a60af96775e..50fa4ceba27 100644 --- a/.github/workflows/celo-monorepo.yml +++ b/.github/workflows/celo-monorepo.yml @@ -160,93 +160,93 @@ jobs: - run: yarn run prettify:diff - run: yarn run lint - protocol-test-release: - name: Protocol Test Release - runs-on: ['self-hosted', 'monorepo-node18'] - timeout-minutes: 500 - needs: [install-dependencies, lint-checks] - if: | - github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'production') || - contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || - contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || - contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || - false - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Sync workspace - uses: ./.github/actions/sync-workspace - with: - artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} - - name: Download protocol devchain artifact - uses: dawidd6/action-download-artifact@v3 - with: - workflow: protocol-devchain.yml - name: devchain-${{ env.RELEASE_TAG }} - path: packages/protocol/.tmp/devchain - - name: Copy DevChain and Build generated from released tag - run: | - BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) - (cp -r packages/protocol/.tmp/devchain packages/protocol/$BUILD_AND_DEVCHAIN_DIR) - - name: Test against current release - run: | - echo "Comparing against $RELEASE_TAG" - BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) - yarn --cwd packages/protocol ci:test-make-release -b $RELEASE_TAG -d $BUILD_AND_DEVCHAIN_DIR + # protocol-test-release: + # name: Protocol Test Release + # runs-on: ['self-hosted', 'monorepo-node18'] + # timeout-minutes: 500 + # needs: [install-dependencies, lint-checks] + # if: | + # github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'production') || + # contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || + # contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || + # contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || + # false + # steps: + # - uses: actions/checkout@v4 + # with: + # fetch-depth: 0 + # submodules: recursive + # - name: Sync workspace + # uses: ./.github/actions/sync-workspace + # with: + # artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} + # - name: Download protocol devchain artifact + # uses: dawidd6/action-download-artifact@v3 + # with: + # workflow: protocol-devchain.yml + # name: devchain-${{ env.RELEASE_TAG }} + # path: packages/protocol/.tmp/devchain + # - name: Copy DevChain and Build generated from released tag + # run: | + # BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) + # (cp -r packages/protocol/.tmp/devchain packages/protocol/$BUILD_AND_DEVCHAIN_DIR) + # - name: Test against current release + # run: | + # echo "Comparing against $RELEASE_TAG" + # BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) + # yarn --cwd packages/protocol ci:test-make-release -b $RELEASE_TAG -d $BUILD_AND_DEVCHAIN_DIR - protocol-test-matrix: - # Keeping name short because GitHub UI does not handle long names well - name: ${{ matrix.name }} - runs-on: ['self-hosted', 'monorepo-node18'] - timeout-minutes: 60 - needs: [install-dependencies, lint-checks] - if: | - github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || - contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || - contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || - contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || - contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || - false - strategy: - fail-fast: false - matrix: - include: - - name: Protocol Release Snapshots - command: | - yarn --cwd packages/protocol test:release-snapshots - if [[ $(git status packages/protocol/releaseData/versionReports --porcelain) ]]; then - git --no-pager diff packages/protocol/releaseData/versionReports - echo "There are git differences after generating release version report snapshots" - echo "If these changes are intended, update the 'releaseData/versionReports' accordingly" - exit 1 - fi - - name: Protocol Common tests - command: | - yarn --cwd packages/protocol test common/ - - name: Protocol Compatibility - command: | - yarn --cwd packages/protocol test compatibility/ - - name: Protocol scripts test - command: | - yarn --cwd packages/protocol test:scripts - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Sync workspace - uses: ./.github/actions/sync-workspace - with: - rebuild-package: 'true' - artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} - - name: Execute matrix command for test - uses: nick-fields/retry@v3 - with: - timeout_minutes: 40 - max_attempts: 3 - command: | - ${{ matrix.command }} + # protocol-test-matrix: + # # Keeping name short because GitHub UI does not handle long names well + # name: ${{ matrix.name }} + # runs-on: ['self-hosted', 'monorepo-node18'] + # timeout-minutes: 60 + # needs: [install-dependencies, lint-checks] + # if: | + # github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || + # contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || + # contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || + # contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || + # contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || + # false + # strategy: + # fail-fast: false + # matrix: + # include: + # - name: Protocol Release Snapshots + # command: | + # yarn --cwd packages/protocol test:release-snapshots + # if [[ $(git status packages/protocol/releaseData/versionReports --porcelain) ]]; then + # git --no-pager diff packages/protocol/releaseData/versionReports + # echo "There are git differences after generating release version report snapshots" + # echo "If these changes are intended, update the 'releaseData/versionReports' accordingly" + # exit 1 + # fi + # - name: Protocol Common tests + # command: | + # yarn --cwd packages/protocol test common/ + # - name: Protocol Compatibility + # command: | + # yarn --cwd packages/protocol test compatibility/ + # - name: Protocol scripts test + # command: | + # yarn --cwd packages/protocol test:scripts + # steps: + # - uses: actions/checkout@v4 + # with: + # submodules: recursive + # - name: Sync workspace + # uses: ./.github/actions/sync-workspace + # with: + # rebuild-package: 'true' + # artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} + # - name: Execute matrix command for test + # uses: nick-fields/retry@v3 + # with: + # timeout_minutes: 40 + # max_attempts: 3 + # command: | + # ${{ matrix.command }} end-to-end-geth-matrix: # Keeping name short because GitHub UI does not handle long names well @@ -266,57 +266,57 @@ jobs: fail-fast: false matrix: include: - - name: Transfer test - command: | - set -e - # Forcing to load go and rust paths - export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - cd packages/celotool - ./ci_test_transfers.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - - name: Blockchain Parameters test - command: | - set -e - export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - cd packages/celotool - ./ci_test_blockchain_parameters.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - - name: Slashing test - command: | - set -e - export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - cd packages/celotool - ./ci_test_slashing.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + # - name: Transfer test + # command: | + # set -e + # # Forcing to load go and rust paths + # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + # cd packages/celotool + # ./ci_test_transfers.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + # - name: Blockchain Parameters test + # command: | + # set -e + # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + # cd packages/celotool + # ./ci_test_blockchain_parameters.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + # - name: Slashing test + # command: | + # set -e + # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + # cd packages/celotool + # ./ci_test_slashing.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - name: Governance test command: | set -e export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" cd packages/celotool ./ci_test_governance.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - - name: Replica test - command: | - set -e - export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - cd packages/celotool - ./ci_test_replicas.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - - name: Sync test - command: | - set -e - export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - cd packages/celotool - ./ci_test_sync.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - - name: CIP35 eth compatibility test - command: | - set -e - export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - cd packages/celotool - echo "Test is skipped because migrations somehow fail" - # ./ci_test_cip35.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - - name: Validator order test - command: | - set -e - export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - cd packages/celotool + # - name: Replica test + # command: | + # set -e + # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + # cd packages/celotool + # ./ci_test_replicas.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + # - name: Sync test + # command: | + # set -e + # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + # cd packages/celotool + # ./ci_test_sync.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + # - name: CIP35 eth compatibility test + # command: | + # set -e + # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + # cd packages/celotool + # echo "Test is skipped because migrations somehow fail" + # # ./ci_test_cip35.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + # - name: Validator order test + # command: | + # set -e + # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + # cd packages/celotool - ./ci_test_validator_order.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + # ./ci_test_validator_order.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} steps: - uses: actions/checkout@v4 with: @@ -329,7 +329,7 @@ jobs: uses: nick-fields/retry@v3 with: timeout_minutes: 30 - max_attempts: 3 + max_attempts: 1 command: | ${{ matrix.command }} diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 53ed3eaacc1..d4e83c5f3b7 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -477,6 +477,7 @@ describe('governance tests', () => { // 1. Swap validator0 and validator1 so one is a member of the group and the other is not. // 2. Rotate keys for validator 2 by authorizing a new validating key. await memberSwapper.swap() + console.log(`### swapped members at block: ${header.number}`) } } catch (e: any) { console.error(e) From 9a61ace390428e514f6d3004715df754510bebbb Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 27 Jan 2025 15:48:19 -0500 Subject: [PATCH 10/22] ++ more debug --- packages/celotool/src/lib/geth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/celotool/src/lib/geth.ts b/packages/celotool/src/lib/geth.ts index 8c7da6d364d..9f9690ca220 100644 --- a/packages/celotool/src/lib/geth.ts +++ b/packages/celotool/src/lib/geth.ts @@ -1477,7 +1477,7 @@ export async function writeGenesisWithMigrations( const genesisPath = path.join(gethConfig.runPath, 'genesis.json') if (verbose) { - console.info('writing genesis') + console.info('writing genesis with migrations') } fs.writeFileSync(genesisPath, genesis) From 0b7dd2bff5e812fb54e385b94327a01181ebe7c8 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 28 Jan 2025 10:33:01 -0500 Subject: [PATCH 11/22] test with previous release --- .github/workflows/celo-monorepo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/celo-monorepo.yml b/.github/workflows/celo-monorepo.yml index 50fa4ceba27..7505d1114ed 100644 --- a/.github/workflows/celo-monorepo.yml +++ b/.github/workflows/celo-monorepo.yml @@ -39,7 +39,7 @@ env: # Git Tag for contract release to use RELEASE_TAG: core-contracts.v11 # CELO_BLOCKCHAIN_BRANCH_TO_TEST: master - CELO_BLOCKCHAIN_BRANCH_TO_TEST: release/1.8.x + CELO_BLOCKCHAIN_BRANCH_TO_TEST: release/1.7.x # EXAMPLE on debug ssh step # - name: Setup tmate session From 654ca9264a8a0cca64bded10d8b527b2138fc21e Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 28 Jan 2025 10:46:43 -0500 Subject: [PATCH 12/22] force CI test --- packages/protocol/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/package.json b/packages/protocol/package.json index e9210652a2c..2a4734b399c 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -152,4 +152,4 @@ "typechain-target-ethers-v5": "^5.0.1", "yargs": "^14.0.0" } -} +} \ No newline at end of file From 0883239e9ef750e4438e46b33d91dbf15156faf2 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 28 Jan 2025 11:57:24 -0500 Subject: [PATCH 13/22] calling election function ditrectly --- packages/celotool/src/e2e-tests/governance_tests.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index d4e83c5f3b7..116c48c827d 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -534,6 +534,17 @@ describe('governance tests', () => { const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const memberAccounts = await getValidatorGroupMembers(lastEpochBlock) console.log(`### Got memberAccounts: ${memberAccounts}`) + + const signer0 = await election.methods + .validatorSignerAddressFromCurrentSet(0) + .call({}, blockNumber) + + const signer1 = await election.methods + .validatorSignerAddressFromCurrentSet(1) + .call({}, blockNumber) + + console.log(`### Got signer0: ${signer0}`) + console.log(`### Got signer1: ${signer1}`) const memberSigners = await Promise.all( memberAccounts.map((v: string) => getValidatorSigner(v, lastEpochBlock)) ) From a08791de2efb053310d878722c4e757051c4964b Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Tue, 28 Jan 2025 13:35:00 -0500 Subject: [PATCH 14/22] migration debug --- .../protocol/migrations_ts/30_elect_validators.ts | 3 +++ packages/protocol/scripts/truffle/make-release.ts | 14 +++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/protocol/migrations_ts/30_elect_validators.ts b/packages/protocol/migrations_ts/30_elect_validators.ts index 17d35a0b6c7..92d4eaaef94 100644 --- a/packages/protocol/migrations_ts/30_elect_validators.ts +++ b/packages/protocol/migrations_ts/30_elect_validators.ts @@ -279,6 +279,9 @@ module.exports = async (_deployer: any, networkName: string) => { // * Validator 1-n holds funds needed for their own stake const validator0Key = valKeys[0] + console.log(`min elect val: ${parseInt(config.election.minElectableValidators, 10)}`) + console.log(`val keys length: ${valKeys.length}`) + if (valKeys.length < parseInt(config.election.minElectableValidators, 10)) { console.info( ` Warning: Have ${valKeys.length} Validator keys but require a minimum of ${config.election.minElectableValidators} Validators in order for a new validator set to be elected.` diff --git a/packages/protocol/scripts/truffle/make-release.ts b/packages/protocol/scripts/truffle/make-release.ts index 4a8b30add34..b3543d28688 100644 --- a/packages/protocol/scripts/truffle/make-release.ts +++ b/packages/protocol/scripts/truffle/make-release.ts @@ -108,11 +108,11 @@ const deployImplementation = async ( from: string, requireVersion = true ) => { - // const testingDeployment = false + const testingDeployment = false if (from) { Contract.defaults({ from }) // override truffle with provided from address } - console.info(`Deploying ${contractName}`) + console.info(`Deploying implementation: ${contractName}`) // Hack to trick truffle, which checks that the provided address has code // without this delay it sometimes fails with ProviderError @@ -123,9 +123,10 @@ const deployImplementation = async ( const contract = await (dryRun ? Contract.at(celoRegistryAddress) - : Contract.new({ - gas: 5000000, // Setting the gas limit - })) + : Contract.new(testingDeployment)) + // : Contract.new({ + // gas: 5000000, // Setting the gas limit + // })) // Sanity check that any contracts that are being changed set a version number. const getVersionNumberAbi = contract.abi.find( @@ -188,6 +189,7 @@ const deployCoreContract = async ( isDryRun: boolean, from: string ) => { + console.log(`Deploying core contract: ${contractName}`) const contract = await deployImplementation(contractName, instance, isDryRun, from) const setImplementationTx: ProposalTx = { contract: `${contractName}Proxy`, @@ -211,6 +213,8 @@ const deployCoreContract = async ( description: `Registry: ${contractName} -> ${proxy.address}`, }) + console.log(`propose set to registry`) + // If the implementation has an initialize function, add it to the proposal const initializeAbi = (contract as any).abi.find( (abi: any) => abi.type === 'function' && abi.name === 'initialize' From 0ab7ae6beb0af6001d48481fa45d55339f438ac4 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:25:45 -0500 Subject: [PATCH 15/22] min elected during test --- packages/celotool/src/e2e-tests/governance_tests.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 116c48c827d..433b2845531 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -531,6 +531,9 @@ describe('governance tests', () => { this.timeout(0) for (const blockNumber of blockNumbers) { console.log(`### here`) + const minElected = await election.methods.electableValidators().call({}, blockNumber) + console.log(`### minElected: ${minElected}`) + const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const memberAccounts = await getValidatorGroupMembers(lastEpochBlock) console.log(`### Got memberAccounts: ${memberAccounts}`) From a913012880520a506534cc5b2c38844b99e1b008 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:30:12 -0500 Subject: [PATCH 16/22] ++ logs --- packages/protocol/migrations_ts/14_election.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/protocol/migrations_ts/14_election.ts b/packages/protocol/migrations_ts/14_election.ts index 94bc55add3a..754e838e15c 100644 --- a/packages/protocol/migrations_ts/14_election.ts +++ b/packages/protocol/migrations_ts/14_election.ts @@ -5,6 +5,7 @@ import { toFixed } from '@celo/utils/lib/fixidity' import { ElectionInstance } from 'types' const initializeArgs = async (): Promise => { + console.log(`### minElectableValidators deployed: ${config.election.minElectableValidators}`) return [ config.registry.predeployedProxyAddress, config.election.minElectableValidators, From 1880875c1c051875bb2e72e59a453475a97e1d40 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:02:21 -0500 Subject: [PATCH 17/22] stringify --- packages/celotool/src/e2e-tests/governance_tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 433b2845531..77556538736 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -532,7 +532,7 @@ describe('governance tests', () => { for (const blockNumber of blockNumbers) { console.log(`### here`) const minElected = await election.methods.electableValidators().call({}, blockNumber) - console.log(`### minElected: ${minElected}`) + console.log(`### minElected: ${JSON.stringify(minElected, null, 2)}`) const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const memberAccounts = await getValidatorGroupMembers(lastEpochBlock) From e2a353d55adf807a880381cf15f83888743cf543 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Fri, 31 Jan 2025 10:51:16 -0500 Subject: [PATCH 18/22] ++ return value --- packages/protocol/contracts/common/PrecompilesOverride.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/contracts/common/PrecompilesOverride.sol b/packages/protocol/contracts/common/PrecompilesOverride.sol index 5be5a83ce29..fbbb37921f2 100644 --- a/packages/protocol/contracts/common/PrecompilesOverride.sol +++ b/packages/protocol/contracts/common/PrecompilesOverride.sol @@ -42,7 +42,7 @@ contract PrecompilesOverride is UsingPrecompiles, UsingRegistry { if (isL2()) { return getEpochManager().getElectedSignerByIndex(index); } else { - super.validatorSignerAddressFromCurrentSet(index); + return super.validatorSignerAddressFromCurrentSet(index); } } From 6c3c78521440e35cb1599a6a156a207c3bbc38d2 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Fri, 31 Jan 2025 13:49:16 -0500 Subject: [PATCH 19/22] revert debug changes --- .github/workflows/celo-monorepo.yml | 4 ++-- packages/protocol/migrations_ts/14_election.ts | 1 - packages/protocol/migrations_ts/30_elect_validators.ts | 3 --- packages/protocol/scripts/truffle/make-release.ts | 9 ++++----- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/.github/workflows/celo-monorepo.yml b/.github/workflows/celo-monorepo.yml index 7505d1114ed..22a903bc66c 100644 --- a/.github/workflows/celo-monorepo.yml +++ b/.github/workflows/celo-monorepo.yml @@ -39,7 +39,7 @@ env: # Git Tag for contract release to use RELEASE_TAG: core-contracts.v11 # CELO_BLOCKCHAIN_BRANCH_TO_TEST: master - CELO_BLOCKCHAIN_BRANCH_TO_TEST: release/1.7.x + CELO_BLOCKCHAIN_BRANCH_TO_TEST: release/1.8.x # EXAMPLE on debug ssh step # - name: Setup tmate session @@ -329,7 +329,7 @@ jobs: uses: nick-fields/retry@v3 with: timeout_minutes: 30 - max_attempts: 1 + max_attempts: 3 command: | ${{ matrix.command }} diff --git a/packages/protocol/migrations_ts/14_election.ts b/packages/protocol/migrations_ts/14_election.ts index 754e838e15c..94bc55add3a 100644 --- a/packages/protocol/migrations_ts/14_election.ts +++ b/packages/protocol/migrations_ts/14_election.ts @@ -5,7 +5,6 @@ import { toFixed } from '@celo/utils/lib/fixidity' import { ElectionInstance } from 'types' const initializeArgs = async (): Promise => { - console.log(`### minElectableValidators deployed: ${config.election.minElectableValidators}`) return [ config.registry.predeployedProxyAddress, config.election.minElectableValidators, diff --git a/packages/protocol/migrations_ts/30_elect_validators.ts b/packages/protocol/migrations_ts/30_elect_validators.ts index 92d4eaaef94..17d35a0b6c7 100644 --- a/packages/protocol/migrations_ts/30_elect_validators.ts +++ b/packages/protocol/migrations_ts/30_elect_validators.ts @@ -279,9 +279,6 @@ module.exports = async (_deployer: any, networkName: string) => { // * Validator 1-n holds funds needed for their own stake const validator0Key = valKeys[0] - console.log(`min elect val: ${parseInt(config.election.minElectableValidators, 10)}`) - console.log(`val keys length: ${valKeys.length}`) - if (valKeys.length < parseInt(config.election.minElectableValidators, 10)) { console.info( ` Warning: Have ${valKeys.length} Validator keys but require a minimum of ${config.election.minElectableValidators} Validators in order for a new validator set to be elected.` diff --git a/packages/protocol/scripts/truffle/make-release.ts b/packages/protocol/scripts/truffle/make-release.ts index b3543d28688..28ffcb69f1d 100644 --- a/packages/protocol/scripts/truffle/make-release.ts +++ b/packages/protocol/scripts/truffle/make-release.ts @@ -108,7 +108,7 @@ const deployImplementation = async ( from: string, requireVersion = true ) => { - const testingDeployment = false + // const testingDeployment = false if (from) { Contract.defaults({ from }) // override truffle with provided from address } @@ -123,10 +123,9 @@ const deployImplementation = async ( const contract = await (dryRun ? Contract.at(celoRegistryAddress) - : Contract.new(testingDeployment)) - // : Contract.new({ - // gas: 5000000, // Setting the gas limit - // })) + : Contract.new({ + gas: 5000000, // Setting the gas limit + })) // Sanity check that any contracts that are being changed set a version number. const getVersionNumberAbi = contract.abi.find( From 3350d1e979c901538d8e042483a0def422125a02 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Fri, 31 Jan 2025 15:56:36 -0500 Subject: [PATCH 20/22] revert debug comments --- .../src/e2e-tests/governance_tests.ts | 39 +------------------ packages/celotool/src/lib/geth.ts | 2 +- .../protocol/scripts/truffle/make-release.ts | 5 +-- 3 files changed, 4 insertions(+), 42 deletions(-) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 77556538736..63a0577901f 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -287,12 +287,10 @@ describe('governance tests', () => { const groupInfo = await validators.methods .getValidatorGroup(groupAddress) .call({}, blockNumber) - console.log(`### Got memberAccounts when given blockNumber: ${groupInfo[0]}`) return groupInfo[0] } else { const [groupAddress] = await validators.methods.getRegisteredValidatorGroups().call() const groupInfo = await validators.methods.getValidatorGroup(groupAddress).call() - console.log(`### Got memberAccounts without blockNumber: ${groupInfo[0]}`) return groupInfo[0] } } @@ -450,17 +448,12 @@ describe('governance tests', () => { await txo.sendAndWaitForReceipt({ from: group }) } - const validatorSetSigners0 = await election.methods.getCurrentValidatorSigners().call() - console.log(`### current block: ${await groupKit.connection.getBlockNumber()}`) - console.log(`### Got _validatorSetSigners0: ${validatorSetSigners0}`) validators = await groupKit._web3Contracts.getValidators() const membersToSwap = [validatorAccounts[0], validatorAccounts[1]] const memberSwapper = await newMemberSwapper(groupKit, membersToSwap) // The memberSwapper makes a change when it's created, so we wait for epoch change so it takes effect await waitForEpochTransition(web3, epoch) - const validatorSetSigners1 = await election.methods.getCurrentValidatorSigners().call() - console.log(`### Got _validatorSetSigners1: ${validatorSetSigners1}`) - console.log(`### current block: ${await groupKit.connection.getBlockNumber()}`) + const handled: any = {} let errorWhileChangingValidatorSet = '' @@ -477,7 +470,6 @@ describe('governance tests', () => { // 1. Swap validator0 and validator1 so one is a member of the group and the other is not. // 2. Rotate keys for validator 2 by authorizing a new validating key. await memberSwapper.swap() - console.log(`### swapped members at block: ${header.number}`) } } catch (e: any) { console.error(e) @@ -493,7 +485,6 @@ describe('governance tests', () => { // Prepare for member swapping. await sleep(epoch) } - console.log(`### current block after 40 block: ${await groupKit.connection.getBlockNumber()}`) ;(subscription as any).unsubscribe() // Wait for the current epoch to complete. @@ -507,7 +498,6 @@ describe('governance tests', () => { const getValidatorSetAccountsAtBlock = async (blockNumber: number) => { const signingKeys = await getValidatorSetSignersAtBlock(blockNumber) - console.log(`### Got signingKeys: ${signingKeys}`) return Promise.all( signingKeys.map((address: string) => accounts.methods.signerToAccount(address).call({}, blockNumber) @@ -517,7 +507,6 @@ describe('governance tests', () => { it('should always return a validator set size equal to the number of group members at the end of the last epoch', async () => { for (const blockNumber of blockNumbers) { - console.log(`### blockNumber: ${blockNumber}`) const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const validatorSetSize = await election.methods .numberValidatorsInCurrentSet() @@ -526,39 +515,17 @@ describe('governance tests', () => { assert.equal(validatorSetSize, groupMembership.length) } }) - // TODO (soloseng) fix test such that it returns expected validators + it('should always return a validator set equal to the signing keys of the group members at the end of the last epoch', async function (this: any) { this.timeout(0) for (const blockNumber of blockNumbers) { - console.log(`### here`) - const minElected = await election.methods.electableValidators().call({}, blockNumber) - console.log(`### minElected: ${JSON.stringify(minElected, null, 2)}`) - const lastEpochBlock = getLastEpochBlock(blockNumber, epoch) const memberAccounts = await getValidatorGroupMembers(lastEpochBlock) - console.log(`### Got memberAccounts: ${memberAccounts}`) - - const signer0 = await election.methods - .validatorSignerAddressFromCurrentSet(0) - .call({}, blockNumber) - - const signer1 = await election.methods - .validatorSignerAddressFromCurrentSet(1) - .call({}, blockNumber) - - console.log(`### Got signer0: ${signer0}`) - console.log(`### Got signer1: ${signer1}`) const memberSigners = await Promise.all( memberAccounts.map((v: string) => getValidatorSigner(v, lastEpochBlock)) ) - console.log(`### Got memberSigners: ${memberSigners}`) - const validatorSetSigners = await getValidatorSetSignersAtBlock(blockNumber) - console.log(`### Got validatorSetSigners at ${blockNumber}: ${validatorSetSigners}`) - const validatorSetAccounts = await getValidatorSetAccountsAtBlock(blockNumber) - console.log(`### Got validatorSetAccounts: ${validatorSetAccounts}`) - assert.sameMembers(memberSigners, validatorSetSigners) assert.sameMembers(memberAccounts, validatorSetAccounts) } @@ -571,13 +538,11 @@ describe('governance tests', () => { // Fetch the round robin order if it hasn't already been set for this epoch. if (roundRobinOrder.length === 0 || blockNumber === lastEpochBlock + 1) { const validatorSet = await getValidatorSetSignersAtBlock(blockNumber) - console.log(`### validatorSet: ${validatorSet}`) roundRobinOrder = await Promise.all( validatorSet.map( async (_, i) => (await web3.eth.getBlock(lastEpochBlock + i + 1)).miner ) ) - console.log(`### roundRobinOrder: ${roundRobinOrder}`) assert.sameMembers(roundRobinOrder, validatorSet) } const indexInEpoch = blockNumber - lastEpochBlock - 1 diff --git a/packages/celotool/src/lib/geth.ts b/packages/celotool/src/lib/geth.ts index 9f9690ca220..8c7da6d364d 100644 --- a/packages/celotool/src/lib/geth.ts +++ b/packages/celotool/src/lib/geth.ts @@ -1477,7 +1477,7 @@ export async function writeGenesisWithMigrations( const genesisPath = path.join(gethConfig.runPath, 'genesis.json') if (verbose) { - console.info('writing genesis with migrations') + console.info('writing genesis') } fs.writeFileSync(genesisPath, genesis) diff --git a/packages/protocol/scripts/truffle/make-release.ts b/packages/protocol/scripts/truffle/make-release.ts index 28ffcb69f1d..4a8b30add34 100644 --- a/packages/protocol/scripts/truffle/make-release.ts +++ b/packages/protocol/scripts/truffle/make-release.ts @@ -112,7 +112,7 @@ const deployImplementation = async ( if (from) { Contract.defaults({ from }) // override truffle with provided from address } - console.info(`Deploying implementation: ${contractName}`) + console.info(`Deploying ${contractName}`) // Hack to trick truffle, which checks that the provided address has code // without this delay it sometimes fails with ProviderError @@ -188,7 +188,6 @@ const deployCoreContract = async ( isDryRun: boolean, from: string ) => { - console.log(`Deploying core contract: ${contractName}`) const contract = await deployImplementation(contractName, instance, isDryRun, from) const setImplementationTx: ProposalTx = { contract: `${contractName}Proxy`, @@ -212,8 +211,6 @@ const deployCoreContract = async ( description: `Registry: ${contractName} -> ${proxy.address}`, }) - console.log(`propose set to registry`) - // If the implementation has an initialize function, add it to the proposal const initializeAbi = (contract as any).abi.find( (abi: any) => abi.type === 'function' && abi.name === 'initialize' From 0acdda4fb826869b839a17445a12a2b497f6743d Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Fri, 31 Jan 2025 15:57:49 -0500 Subject: [PATCH 21/22] reenable all ci test --- .github/workflows/celo-monorepo.yml | 260 ++++++++++++++-------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/.github/workflows/celo-monorepo.yml b/.github/workflows/celo-monorepo.yml index 22a903bc66c..a60af96775e 100644 --- a/.github/workflows/celo-monorepo.yml +++ b/.github/workflows/celo-monorepo.yml @@ -160,93 +160,93 @@ jobs: - run: yarn run prettify:diff - run: yarn run lint - # protocol-test-release: - # name: Protocol Test Release - # runs-on: ['self-hosted', 'monorepo-node18'] - # timeout-minutes: 500 - # needs: [install-dependencies, lint-checks] - # if: | - # github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'production') || - # contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || - # contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || - # contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || - # false - # steps: - # - uses: actions/checkout@v4 - # with: - # fetch-depth: 0 - # submodules: recursive - # - name: Sync workspace - # uses: ./.github/actions/sync-workspace - # with: - # artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} - # - name: Download protocol devchain artifact - # uses: dawidd6/action-download-artifact@v3 - # with: - # workflow: protocol-devchain.yml - # name: devchain-${{ env.RELEASE_TAG }} - # path: packages/protocol/.tmp/devchain - # - name: Copy DevChain and Build generated from released tag - # run: | - # BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) - # (cp -r packages/protocol/.tmp/devchain packages/protocol/$BUILD_AND_DEVCHAIN_DIR) - # - name: Test against current release - # run: | - # echo "Comparing against $RELEASE_TAG" - # BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) - # yarn --cwd packages/protocol ci:test-make-release -b $RELEASE_TAG -d $BUILD_AND_DEVCHAIN_DIR + protocol-test-release: + name: Protocol Test Release + runs-on: ['self-hosted', 'monorepo-node18'] + timeout-minutes: 500 + needs: [install-dependencies, lint-checks] + if: | + github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'production') || + contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || + contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || + contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || + false + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive + - name: Sync workspace + uses: ./.github/actions/sync-workspace + with: + artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} + - name: Download protocol devchain artifact + uses: dawidd6/action-download-artifact@v3 + with: + workflow: protocol-devchain.yml + name: devchain-${{ env.RELEASE_TAG }} + path: packages/protocol/.tmp/devchain + - name: Copy DevChain and Build generated from released tag + run: | + BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) + (cp -r packages/protocol/.tmp/devchain packages/protocol/$BUILD_AND_DEVCHAIN_DIR) + - name: Test against current release + run: | + echo "Comparing against $RELEASE_TAG" + BUILD_AND_DEVCHAIN_DIR=$(echo build/$(echo $RELEASE_TAG | sed -e 's/\//_/g')) + yarn --cwd packages/protocol ci:test-make-release -b $RELEASE_TAG -d $BUILD_AND_DEVCHAIN_DIR - # protocol-test-matrix: - # # Keeping name short because GitHub UI does not handle long names well - # name: ${{ matrix.name }} - # runs-on: ['self-hosted', 'monorepo-node18'] - # timeout-minutes: 60 - # needs: [install-dependencies, lint-checks] - # if: | - # github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || - # contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || - # contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || - # contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || - # contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || - # false - # strategy: - # fail-fast: false - # matrix: - # include: - # - name: Protocol Release Snapshots - # command: | - # yarn --cwd packages/protocol test:release-snapshots - # if [[ $(git status packages/protocol/releaseData/versionReports --porcelain) ]]; then - # git --no-pager diff packages/protocol/releaseData/versionReports - # echo "There are git differences after generating release version report snapshots" - # echo "If these changes are intended, update the 'releaseData/versionReports' accordingly" - # exit 1 - # fi - # - name: Protocol Common tests - # command: | - # yarn --cwd packages/protocol test common/ - # - name: Protocol Compatibility - # command: | - # yarn --cwd packages/protocol test compatibility/ - # - name: Protocol scripts test - # command: | - # yarn --cwd packages/protocol test:scripts - # steps: - # - uses: actions/checkout@v4 - # with: - # submodules: recursive - # - name: Sync workspace - # uses: ./.github/actions/sync-workspace - # with: - # rebuild-package: 'true' - # artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} - # - name: Execute matrix command for test - # uses: nick-fields/retry@v3 - # with: - # timeout_minutes: 40 - # max_attempts: 3 - # command: | - # ${{ matrix.command }} + protocol-test-matrix: + # Keeping name short because GitHub UI does not handle long names well + name: ${{ matrix.name }} + runs-on: ['self-hosted', 'monorepo-node18'] + timeout-minutes: 60 + needs: [install-dependencies, lint-checks] + if: | + github.base_ref == 'master' || contains(github.base_ref, 'release') || contains(github.base_ref, 'staging') || contains(github.base_ref, 'production') || + contains(needs.install-dependencies.outputs.all_modified_files, 'packages/protocol') || + contains(needs.install-dependencies.outputs.all_modified_files, 'packages/typescript') || + contains(needs.install-dependencies.outputs.all_modified_files, ',package.json') || + contains(needs.install-dependencies.outputs.all_modified_files, ',yarn.lock') || + false + strategy: + fail-fast: false + matrix: + include: + - name: Protocol Release Snapshots + command: | + yarn --cwd packages/protocol test:release-snapshots + if [[ $(git status packages/protocol/releaseData/versionReports --porcelain) ]]; then + git --no-pager diff packages/protocol/releaseData/versionReports + echo "There are git differences after generating release version report snapshots" + echo "If these changes are intended, update the 'releaseData/versionReports' accordingly" + exit 1 + fi + - name: Protocol Common tests + command: | + yarn --cwd packages/protocol test common/ + - name: Protocol Compatibility + command: | + yarn --cwd packages/protocol test compatibility/ + - name: Protocol scripts test + command: | + yarn --cwd packages/protocol test:scripts + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Sync workspace + uses: ./.github/actions/sync-workspace + with: + rebuild-package: 'true' + artifacts_to_cache: ${{ needs.install-dependencies.outputs.artifacts_to_cache }} + - name: Execute matrix command for test + uses: nick-fields/retry@v3 + with: + timeout_minutes: 40 + max_attempts: 3 + command: | + ${{ matrix.command }} end-to-end-geth-matrix: # Keeping name short because GitHub UI does not handle long names well @@ -266,57 +266,57 @@ jobs: fail-fast: false matrix: include: - # - name: Transfer test - # command: | - # set -e - # # Forcing to load go and rust paths - # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - # cd packages/celotool - # ./ci_test_transfers.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - # - name: Blockchain Parameters test - # command: | - # set -e - # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - # cd packages/celotool - # ./ci_test_blockchain_parameters.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - # - name: Slashing test - # command: | - # set -e - # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - # cd packages/celotool - # ./ci_test_slashing.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + - name: Transfer test + command: | + set -e + # Forcing to load go and rust paths + export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + cd packages/celotool + ./ci_test_transfers.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + - name: Blockchain Parameters test + command: | + set -e + export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + cd packages/celotool + ./ci_test_blockchain_parameters.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + - name: Slashing test + command: | + set -e + export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + cd packages/celotool + ./ci_test_slashing.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - name: Governance test command: | set -e export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" cd packages/celotool ./ci_test_governance.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - # - name: Replica test - # command: | - # set -e - # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - # cd packages/celotool - # ./ci_test_replicas.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - # - name: Sync test - # command: | - # set -e - # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - # cd packages/celotool - # ./ci_test_sync.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - # - name: CIP35 eth compatibility test - # command: | - # set -e - # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - # cd packages/celotool - # echo "Test is skipped because migrations somehow fail" - # # ./ci_test_cip35.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} - # - name: Validator order test - # command: | - # set -e - # export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" - # cd packages/celotool + - name: Replica test + command: | + set -e + export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + cd packages/celotool + ./ci_test_replicas.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + - name: Sync test + command: | + set -e + export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + cd packages/celotool + ./ci_test_sync.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + - name: CIP35 eth compatibility test + command: | + set -e + export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + cd packages/celotool + echo "Test is skipped because migrations somehow fail" + # ./ci_test_cip35.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + - name: Validator order test + command: | + set -e + export PATH="/usr/local/go/bin:$HOME/.cargo/bin:${PATH}" + cd packages/celotool - # ./ci_test_validator_order.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} + ./ci_test_validator_order.sh checkout ${CELO_BLOCKCHAIN_BRANCH_TO_TEST} steps: - uses: actions/checkout@v4 with: From e395185f01fee0b1681d75119e01880c3a5e0fa5 Mon Sep 17 00:00:00 2001 From: soloseng <102702451+soloseng@users.noreply.github.com> Date: Mon, 3 Feb 2025 10:08:41 -0500 Subject: [PATCH 22/22] revert to 1 sec sleep --- packages/celotool/src/e2e-tests/governance_tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/celotool/src/e2e-tests/governance_tests.ts b/packages/celotool/src/e2e-tests/governance_tests.ts index 63a0577901f..d3cdbc042a7 100644 --- a/packages/celotool/src/e2e-tests/governance_tests.ts +++ b/packages/celotool/src/e2e-tests/governance_tests.ts @@ -442,7 +442,7 @@ describe('governance tests', () => { // groupKit uses a different node than kit does, so wait a second in case kit's node // got the new block before groupKit's node did. - await sleep(5) + await sleep(1) const txos = await (await groupKit.contracts.getElection()).activate(group) for (const txo of txos) { await txo.sendAndWaitForReceipt({ from: group })