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:
- Your BESC is locked in the registry contract
- You earn rewards proportional to your stake relative to the validator's total stake
- The validator keeps their commission percentage — you earn the remainder
- 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:
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):
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
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:
await registry.claimRewards(validatorAddress);Undelegating
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:
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.
