Skip to content

Delegating Stake

Any BESC holder can delegate their tokens to a registered validator to earn a proportional share of block rewards.

How Delegation Works

When you delegate BESC to a validator:

  1. Your BESC is locked in the registry contract
  2. You earn rewards proportional to your stake relative to the validator's total stake
  3. The validator keeps their commission percentage — you earn the remainder
  4. Rewards accumulate continuously and can be claimed at any time

Delegation Formula

Your daily rewards ≈ (yourStake / validatorTotalStake)
                    × validatorDailyRewards
                    × (1 - commission)

Where validatorDailyRewards is the validator's share of the total 0.002 BESC × 28,800 blocks/day block reward pool.

Delegating

First, find a validator that has delegationEnabled = true:

javascript
const registry = new ethers.Contract(REGISTRY_ADDRESS, REGISTRY_ABI, provider);
const validators = await registry.getValidators();

for (const addr of validators) {
  const info = await registry.getValidatorInfo(addr);
  if (info.delegationEnabled && info.active) {
    console.log(`${info.name}: ${ethers.formatEther(info.totalStake)} BESC total, ${info.commission / 100}% commission`);
  }
}

Then delegate (BESC sent as msg.value):

javascript
const registry = new ethers.Contract(REGISTRY_ADDRESS, REGISTRY_ABI, signer);
const amount = ethers.parseEther("500"); // 500 BESC to delegate

await registry.delegate(validatorAddress, { value: amount });

Checking Your Delegation

javascript
const { stake, pending } = await registry.getDelegatorInfo(
  yourAddress,
  validatorAddress
);
console.log(`Staked: ${ethers.formatEther(stake)} BESC`);
console.log(`Pending rewards: ${ethers.formatEther(pending)} BESC`);

Claiming Rewards

Rewards can be claimed at any time with no cooldown:

javascript
await registry.claimRewards(validatorAddress);

Undelegating

javascript
await registry.undelegate(validatorAddress, amount);

Cooldown Period

After undelegating, there is a 1-day unbond cooldown before your BESC is returned. This prevents flash-delegation attacks and ensures reward accounting is clean.

Validators That Require Approval

Some validators enable requireDelegatorApproval = true. In this case, you must apply to delegate before your stake is accepted:

javascript
await registry.applyToDelegate(
  validatorAddress,
  "yourTelegramUsername",
  "Brief description of who you are"
);

The validator reviews your application and calls approveDelegator(yourAddress, true) to accept it. Once approved, you can delegate normally.

Max Stake Per Validator

Each validator has a maximum total stake cap of 20,000 BESC (self-stake + all delegations combined). If a validator is near their cap, you may need to choose a different one or wait for the cap to be raised by governance.

BESC Hyperchain — Built for Institutions.