Skip to content

Validator Registry

The SafudevPoweredValidatorRegistryV2 is the on-chain contract that manages the economic layer of BESC Hyperchain's validator system.

Contract Details

FieldValue
Address0x76bF888EB22f6d11AD8C2348847062db746647E0
VersionSafudevPoweredValidatorRegistryV2 v1.0.1
Security Contactsecurity@bescfinancial.com
Total Staked~490,000 BESC
Total Transactions10,000+

Registry Parameters

ParameterValueDescription
minSelfStake10,000 BESCMinimum self-stake to register
maxTotalStake20,000 BESCMaximum total stake per validator
maxCommission2,500 bps (25%)Maximum commission rate
busdcFee40 BUSDCSubscription fee per period
subscriptionPeriod30 daysHow often the fee is due
gracePeriod7 daysGrace period before deactivation
unbondCooldown1 dayWait time after undelegating
commissionCooldown7 daysWait time between commission changes

Validator Lifecycle

APPLY          → registerValidator(name, commission, delegationEnabled)
                 (must include minSelfStake BESC as msg.value)


PENDING        → Existing validators vote via voteToApproveValidator()
                 Requires supermajority (> 50% of active validators)


ACTIVE         → Validator receives reward distributions
                 Must call payFee() every 30 days (40 BUSDC)

      ├─ Grace period expires without fee → DEACTIVATED
      ├─ Governance vote → forceDeactivated
      └─ Self-exit → startValidatorExit() → exitValidator()

Key Functions

For Validators

solidity
// Register as a new validator (payable — send minSelfStake BESC)
function registerValidator(
    string memory name,
    uint16 commission,      // basis points, e.g. 500 = 5%
    bool delegationEnabled
) external payable;

// Pay monthly subscription fee (requires BUSDC approval first)
function payFee() external;

// Increase your self-stake
function increaseSelfStake() external payable;

// Withdraw self-stake (after exit process)
function withdrawSelfStake(uint256 amount) external;

// Update commission rate (subject to 7-day cooldown)
function updateCommission(uint16 newCommission) external;

// Begin validator exit process
function startValidatorExit() external;

// Approve or reject a delegator application
function approveDelegator(address delegator, bool status) external;

For Delegators

solidity
// Delegate BESC to a validator (payable — send BESC amount)
function delegate(address validator) external payable;

// Undelegate from a validator
function undelegate(address validator, uint256 amount) external;

// Claim accumulated rewards
function claimRewards(address validator) external;

// Apply to delegate (if validator requires approval)
function applyToDelegate(
    address validator,
    string memory tgUsername,
    string memory basicInfo
) external;

For Governance (Validators Voting)

solidity
// Vote to approve a pending validator applicant
function voteToApproveValidator(address applicant) external;

// Vote to deactivate an existing validator
function voteToDeactivate(address target) external;

Read Functions

solidity
// Get all active validators
function getValidators() external view returns (address[] memory);

// Get full info for a validator
function getValidatorInfo(address validator) external view returns (
    string memory name,
    uint256 selfStake,
    uint256 totalStake,
    uint16 commission,
    bool delegationEnabled,
    bool active,
    uint256 lastFeePaid,
    bool requireDelegatorApproval
);

// Get pending reward for any user
function getPendingReward(address user) external view returns (uint256);

// Get delegator info
function getDelegatorInfo(
    address delegator,
    address validator
) external view returns (uint256 stake, uint256 pending);

Reward Sources

The registry contract tracks two reward sources:

SourceDescription
Block reward0.002 BESC forwarded by relayers after each block
Direct rewardAdditional rewards forwarded by relayers from other sources

Both are distributed identically — proportionally to stake across all active validators.

BESC Hyperchain — Built for Institutions.