contracts icon indicating copy to clipboard operation
contracts copied to clipboard

The requirements about auctionPeriod are different in two functions.

Open VictorECDSA opened this issue 3 years ago • 0 comments

This issue and the two preceding issues is about the code at the latest version of the Main branch currently. Author: Jaynti Kanani [email protected]#mailto:[email protected] Date: 6 months ago (2022/1/26 16:43:04) Committer: GitHub [email protected]#mailto:[email protected] Commit hash: 5dace23fd378b89aef3ef9ad6407cc44eac4d7db Children: 61170c6a82#gitext://gotocommit/61170c6a824468800dc2187be73f2869ed82b82b 5d82635a65#gitext://gotocommit/5d82635a65fdc7c76fe5d281c3f208b3e955b6cc Parent(s): 7c0af26ec3#gitext://gotocommit/7c0af26ec34ccedadda6ccf5a1f57f65e03b0af2 746dfd6f61#gitext://gotocommit/746dfd6f61a6052c8c3985d34c408737d3bc1740

The requirements about auctionPeriod in the functions startAuction and confirmAuctionBid use two different startEpoch. Because the validator activationEpoch is unchanged, from hope the validator is not continuous auction, I understand two should use auction startEpoch.

    function startAuction(uint256 validatorId, uint256 amount, bool _acceptDelegation, bytes calldata _signerPubkey) external {

// ......

        require(
            (_currentEpoch.sub(validators[validatorId].activationEpoch) % dynasty.add(auctionPeriod)) < auctionPeriod,
            "Invalid auction period"
        );
    function confirmAuctionBid(
        uint256 validatorId,
        uint256 heimdallFee, /** for new validator */
        IStakeManager stakeManager
    ) external {

// ......

       require(
            _currentEpoch.sub(auction.startEpoch) % auctionPeriod.add(dynasty) >= auctionPeriod,
            "Not allowed before auctionPeriod"
        );

Another possible small problem in the confirmAuctionBid function is that once in the logical branch of dethroneAndStake, setting validatorAuction[validatorId].startepoch becomes meaningless, as deactivationEpoch != 0 and can not startAuction any more.

        if (perceivedStake >= auctionAmount && validators[validatorId].deactivationEpoch == 0) {
            require(token.transfer(auctionUser, auctionAmount), "Bid return failed");
            //cleanup auction data
            auction.startEpoch = _currentEpoch;
            logger.logConfirmAuction(validatorId, validatorId, validatorAmount);
        } else {
            stakeManager.dethroneAndStake(
                auctionUser, 
                heimdallFee,
                validatorId,
                auctionAmount,
                auction.acceptDelegation,
                auction.signerPubkey
            );
        }
        uint256 startEpoch = auction.startEpoch;
        delete validatorAuction[validatorId];
        validatorAuction[validatorId].startEpoch = startEpoch;

So, I think replacing 'auction.startEpoch = _currentEpoch' with 'validatorAuction[validatorId].startEpoch = _currentEpoch'. Subsequent logic does not need to set validatorAuction[validatorId].startEpoch.

VictorECDSA avatar Aug 04 '22 08:08 VictorECDSA