@@ -84,6 +84,7 @@ contract DKGContractTest is Test {
8484 keyperSet0.addMembers (members);
8585 keyperSet0.setThreshold (2 );
8686 keyperSet0.setPublisher (address (dkgContract));
87+ keyperSet0.setDKGContract (address (dkgContract));
8788 keyperSet0.setFinalized ();
8889 vm.prank (dao);
8990 keyperSetManager.addKeyperSet (ACTIVATION_BLOCK_0, address (keyperSet0));
@@ -550,6 +551,7 @@ contract DKGContractTest is Test {
550551 keyperSet1.addMembers (members);
551552 keyperSet1.setThreshold (2 );
552553 keyperSet1.setPublisher (address (0xDEAD )); // not the DKG contract
554+ keyperSet1.setDKGContract (address (dkgContract));
553555 keyperSet1.setFinalized ();
554556 uint64 activation1 = ACTIVATION_BLOCK_0 * 2 ;
555557 vm.prank (dao);
@@ -652,6 +654,7 @@ contract DKGContractTest is Test {
652654 keyperSet1.addMembers (members);
653655 keyperSet1.setThreshold (2 );
654656 keyperSet1.setPublisher (address (dkgContract));
657+ keyperSet1.setDKGContract (address (dkgContract));
655658 keyperSet1.setFinalized ();
656659 uint64 activation1 = ACTIVATION_BLOCK_0 * 2 ; // 2000
657660 vm.prank (dao);
@@ -706,4 +709,87 @@ contract DKGContractTest is Test {
706709 vm.prank (keyper0);
707710 dkgContract.submitDealing (0 , 1 , 0 , hex "01 " , emptyEvals);
708711 }
712+
713+ // ---------------------------------------------------------------------
714+ // WrongDKGContract guard tests
715+ // ---------------------------------------------------------------------
716+
717+ function _makeKeyperSetWithWrongDKGContract ()
718+ internal
719+ returns (KeyperSet ks , uint64 ksi )
720+ {
721+ ks = new KeyperSet ();
722+ address [] memory members = new address [](3 );
723+ members[0 ] = keyper0;
724+ members[1 ] = keyper1;
725+ members[2 ] = keyper2;
726+ ks.addMembers (members);
727+ ks.setThreshold (2 );
728+ ks.setPublisher (address (dkgContract));
729+ // dkgContract left as address(0) — intentional mismatch
730+ ks.setFinalized ();
731+ uint64 activation = ACTIVATION_BLOCK_0 * 10 ;
732+ vm.prank (dao);
733+ keyperSetManager.addKeyperSet (activation, address (ks));
734+ ksi = 1 ; // first new set added after keyperSet0
735+ }
736+
737+ function testSubmitDealingRevertsOnWrongDKGContract () public {
738+ (, uint64 ksi ) = _makeKeyperSetWithWrongDKGContract ();
739+ uint64 activation = ACTIVATION_BLOCK_0 * 10 ;
740+ uint64 dealingBlock = activation - DKG_LEAD_LENGTH;
741+ vm.roll (dealingBlock);
742+ bytes [] memory evals = new bytes [](0 );
743+ vm.prank (keyper0);
744+ vm.expectRevert (DKGContract.WrongDKGContract.selector );
745+ dkgContract.submitDealing (ksi, 0 , 0 , hex "01 " , evals);
746+ }
747+
748+ function testSubmitAccusationRevertsOnWrongDKGContract () public {
749+ (, uint64 ksi ) = _makeKeyperSetWithWrongDKGContract ();
750+ uint64 activation = ACTIVATION_BLOCK_0 * 10 ;
751+ uint64 accusingBlock = activation - DKG_LEAD_LENGTH + PHASE_LENGTH;
752+ vm.roll (accusingBlock);
753+ uint64 [] memory accused = new uint64 [](1 );
754+ accused[0 ] = 1 ;
755+ vm.prank (keyper0);
756+ vm.expectRevert (DKGContract.WrongDKGContract.selector );
757+ dkgContract.submitAccusation (ksi, 0 , 0 , accused);
758+ }
759+
760+ function testSubmitApologyRevertsOnWrongDKGContract () public {
761+ (, uint64 ksi ) = _makeKeyperSetWithWrongDKGContract ();
762+ uint64 activation = ACTIVATION_BLOCK_0 * 10 ;
763+ uint64 apologizingBlock = activation - DKG_LEAD_LENGTH + 2 * PHASE_LENGTH;
764+ vm.roll (apologizingBlock);
765+ uint64 [] memory accusers = new uint64 [](1 );
766+ accusers[0 ] = 1 ;
767+ bytes [] memory evals = new bytes [](1 );
768+ evals[0 ] = hex "aa " ;
769+ vm.prank (keyper0);
770+ vm.expectRevert (DKGContract.WrongDKGContract.selector );
771+ dkgContract.submitApology (ksi, 0 , 0 , accusers, evals);
772+ }
773+
774+ function testSubmitSuccessVoteRevertsOnWrongDKGContract () public {
775+ (, uint64 ksi ) = _makeKeyperSetWithWrongDKGContract ();
776+ uint64 activation = ACTIVATION_BLOCK_0 * 10 ;
777+ uint64 finalizingBlock = activation - DKG_LEAD_LENGTH + 3 * PHASE_LENGTH;
778+ vm.roll (finalizingBlock);
779+ vm.prank (keyper0);
780+ vm.expectRevert (DKGContract.WrongDKGContract.selector );
781+ dkgContract.submitSuccessVote (ksi, 0 , 0 , EON_KEY_A);
782+ }
783+
784+ function testSubmitDealingRevertsWhenDKGContractIsZero () public {
785+ // address(0) is an explicit mismatch — no special case.
786+ (, uint64 ksi ) = _makeKeyperSetWithWrongDKGContract ();
787+ uint64 activation = ACTIVATION_BLOCK_0 * 10 ;
788+ uint64 dealingBlock = activation - DKG_LEAD_LENGTH;
789+ vm.roll (dealingBlock);
790+ bytes [] memory evals = new bytes [](0 );
791+ vm.prank (keyper0);
792+ vm.expectRevert (DKGContract.WrongDKGContract.selector );
793+ dkgContract.submitDealing (ksi, 0 , 0 , hex "01 " , evals);
794+ }
709795}
0 commit comments