mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 09:50:01 +00:00
fix: consider deregistration time before forcing deregistration
This commit is contained in:
parent
8034d12c9e
commit
b424e6d708
1 changed files with 35 additions and 13 deletions
|
|
@ -134,9 +134,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave
|
|||
}
|
||||
|
||||
function _checkValidator() internal view {
|
||||
OperatorSet memory operatorSet = OperatorSet({avs: address(this), id: VALIDATORS_SET_ID});
|
||||
require(
|
||||
_ALLOCATION_MANAGER.isMemberOfOperatorSet(msg.sender, operatorSet),
|
||||
_ALLOCATION_MANAGER.isMemberOfOperatorSet(msg.sender, _validatorsOperatorSet()),
|
||||
CallerIsNotValidator()
|
||||
);
|
||||
}
|
||||
|
|
@ -337,7 +336,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave
|
|||
address oldSolochainAddress = validatorEthAddressToSolochainAddress[msg.sender];
|
||||
require(oldSolochainAddress != solochainAddress, SolochainAddressAlreadyAssigned());
|
||||
|
||||
address existingEthOperator = validatorSolochainAddressToEthAddress[solochainAddress];
|
||||
address existingEthOperator = _consumeExpiredSolochainMapping(solochainAddress);
|
||||
require(existingEthOperator == address(0), SolochainAddressAlreadyAssigned());
|
||||
|
||||
delete validatorSolochainAddressToEthAddress[oldSolochainAddress];
|
||||
|
|
@ -380,10 +379,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave
|
|||
);
|
||||
|
||||
address solochainAddress = _toAddress(data);
|
||||
require(
|
||||
validatorSolochainAddressToEthAddress[solochainAddress] == address(0),
|
||||
SolochainAddressAlreadyAssigned()
|
||||
);
|
||||
address existingEthOperator = _consumeExpiredSolochainMapping(solochainAddress);
|
||||
require(existingEthOperator == address(0), SolochainAddressAlreadyAssigned());
|
||||
|
||||
validatorEthAddressToSolochainAddress[operator] = solochainAddress;
|
||||
validatorSolochainAddressToEthAddress[solochainAddress] = operator;
|
||||
|
|
@ -404,9 +401,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave
|
|||
validatorEthAddressToSolochainAddress[operator] != address(0), OperatorNotRegistered()
|
||||
);
|
||||
|
||||
address oldSolochainAddress = validatorEthAddressToSolochainAddress[operator];
|
||||
delete validatorEthAddressToSolochainAddress[operator];
|
||||
delete validatorSolochainAddressToEthAddress[oldSolochainAddress];
|
||||
|
||||
emit OperatorDeregistered(operator, operatorSetIds[0]);
|
||||
}
|
||||
|
|
@ -539,9 +534,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave
|
|||
uint256 totalAmount = 0;
|
||||
uint256 resolvedCount = 0;
|
||||
for (uint256 i = 0; i < len; i++) {
|
||||
address ethOp = validatorSolochainAddressToEthAddress[
|
||||
translatedSubmission.operatorRewards[i].operator
|
||||
];
|
||||
address ethOp =
|
||||
_resolveSlashableEthOperator(translatedSubmission.operatorRewards[i].operator);
|
||||
if (ethOp == address(0)) continue;
|
||||
translated[resolvedCount] = translatedSubmission.operatorRewards[i];
|
||||
translated[resolvedCount].operator = ethOp;
|
||||
|
|
@ -621,7 +615,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave
|
|||
SlashingRequest[] calldata slashings
|
||||
) external onlyRewardsInitiator {
|
||||
for (uint256 i = 0; i < slashings.length; i++) {
|
||||
address ethOperator = validatorSolochainAddressToEthAddress[slashings[i].operator];
|
||||
address ethOperator = _resolveSlashableEthOperator(slashings[i].operator);
|
||||
if (ethOperator == address(0)) continue;
|
||||
IAllocationManagerTypes.SlashingParams memory slashingParams =
|
||||
IAllocationManagerTypes.SlashingParams({
|
||||
|
|
@ -711,4 +705,32 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave
|
|||
}
|
||||
return opA < opB;
|
||||
}
|
||||
|
||||
function _validatorsOperatorSet() internal view returns (OperatorSet memory) {
|
||||
return OperatorSet({avs: address(this), id: VALIDATORS_SET_ID});
|
||||
}
|
||||
|
||||
function _resolveSlashableEthOperator(
|
||||
address solochainAddress
|
||||
) internal view returns (address) {
|
||||
address ethOperator = validatorSolochainAddressToEthAddress[solochainAddress];
|
||||
if (ethOperator == address(0)) return address(0);
|
||||
if (!_ALLOCATION_MANAGER.isOperatorSlashable(ethOperator, _validatorsOperatorSet())) {
|
||||
return address(0);
|
||||
}
|
||||
return ethOperator;
|
||||
}
|
||||
|
||||
function _consumeExpiredSolochainMapping(
|
||||
address solochainAddress
|
||||
) internal returns (address) {
|
||||
address existingEthOperator = validatorSolochainAddressToEthAddress[solochainAddress];
|
||||
if (existingEthOperator == address(0)) return address(0);
|
||||
if (_ALLOCATION_MANAGER.isOperatorSlashable(existingEthOperator, _validatorsOperatorSet()))
|
||||
{
|
||||
return existingEthOperator;
|
||||
}
|
||||
delete validatorSolochainAddressToEthAddress[solochainAddress];
|
||||
return address(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue