@@ -425,11 +425,27 @@ contract HubConfigTest is HubBase {
425425 uint256 liquidity = hub1.getAssetLiquidity (assetId);
426426 (uint256 drawn , ) = hub1.getAssetOwed (assetId);
427427
428+ address oldFeeReceiver = _getFeeReceiver (hub1, assetId);
429+ IHub.SpokeConfig memory oldFeeReceiverConfig = hub1.getSpokeConfig (assetId, oldFeeReceiver);
430+
428431 // new spoke is added only if it is different from the old one and not yet listed
429432 if (
430433 newConfig.feeReceiver != _getFeeReceiver (hub1, assetId) &&
431434 ! hub1.isSpokeListed (assetId, newConfig.feeReceiver)
432435 ) {
436+ vm.expectEmit (address (hub1));
437+ emit IHub.UpdateSpokeConfig (
438+ assetId,
439+ oldFeeReceiver,
440+ IHub.SpokeConfig ({
441+ active: oldFeeReceiverConfig.active,
442+ paused: oldFeeReceiverConfig.paused,
443+ addCap: 0 ,
444+ drawCap: 0 ,
445+ riskPremiumThreshold: 0
446+ })
447+ );
448+
433449 vm.expectEmit (address (hub1));
434450 emit IHub.AddSpoke (assetId, newConfig.feeReceiver);
435451 vm.expectEmit (address (hub1));
@@ -530,6 +546,45 @@ contract HubConfigTest is HubBase {
530546 assertEq (spokeConfig.drawCap, 0 , 'old fee receiver draw cap ' );
531547 }
532548
549+ /// Updates the fee receiver to a new spoke; old fee receiver active/paused flags are preserved
550+ function test_updateAssetConfig_oldFeeReceiver_flags () public {
551+ _test_updateAssetConfig_oldFeeReceiver_flags ({active: true , paused: true });
552+ _test_updateAssetConfig_oldFeeReceiver_flags ({active: true , paused: false });
553+ _test_updateAssetConfig_oldFeeReceiver_flags ({active: false , paused: true });
554+ _test_updateAssetConfig_oldFeeReceiver_flags ({active: false , paused: false });
555+ }
556+
557+ function _test_updateAssetConfig_oldFeeReceiver_flags (bool active , bool paused ) internal {
558+ uint256 assetId = _randomAssetId (hub1);
559+
560+ address oldFeeReceiver = _getFeeReceiver (hub1, assetId);
561+ IHub.SpokeConfig memory oldFeeReceiverConfig = hub1.getSpokeConfig (assetId, oldFeeReceiver);
562+ oldFeeReceiverConfig.active = active;
563+ oldFeeReceiverConfig.paused = paused;
564+
565+ // update old fee receiver config flags
566+ Utils.updateSpokeConfig (hub1, ADMIN, assetId, oldFeeReceiver, oldFeeReceiverConfig);
567+ assertEq (hub1.getSpokeConfig (assetId, oldFeeReceiver).active, active);
568+ assertEq (hub1.getSpokeConfig (assetId, oldFeeReceiver).paused, paused);
569+
570+ // update asset config to new fee receiver; old fee receiver paused/active flags should be unchanged
571+ IHub.AssetConfig memory config = hub1.getAssetConfig (assetId);
572+ config.feeReceiver = makeAddr ('newFeeReceiver ' );
573+ test_updateAssetConfig_fuzz (assetId, config);
574+
575+ assertEq (_getFeeReceiver (hub1, assetId), config.feeReceiver, 'new fee receiver ' );
576+ assertEq (
577+ hub1.getSpokeConfig (assetId, oldFeeReceiver).active,
578+ active,
579+ 'old fee receiver active '
580+ );
581+ assertEq (
582+ hub1.getSpokeConfig (assetId, oldFeeReceiver).paused,
583+ paused,
584+ 'old fee receiver paused '
585+ );
586+ }
587+
533588 /// Updates the fee receiver by reusing a previously assigned spoke, with no impact on accrued fees
534589 function test_updateAssetConfig_fuzz_ReuseFeeReceiver_revertsWith_SpokeAlreadyListed (
535590 uint256 assetId
0 commit comments