Smart Contracts

Contract Addresses

Contract
Address

RelayerRewardsPool

0x34b56f892c9e977b9ba2e43ba64c27d368ab3c86

XAllocationVoting

0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7

VoterRewards

0x838A33AF756a6366f93e201423E1425f67eC0Fa7

RelayerRewardsPool

Manages relayer registration, action tracking, and reward distribution.

Registration

Anyone can register as a relayer by calling registerRelayer(). No admin approval needed.

registerRelayer()           // Self-register as a relayer (open to anyone)
unregisterRelayer(address)  // Admin only (POOL_ADMIN_ROLE)
isRegisteredRelayer(address) -> bool
getRegisteredRelayers() -> address[]

Configuration

relayerFeePercentage = 10        // 10% of user rewards
feeCap = 100 ether               // Max 100 B3TR per user per round
voteWeight = 3                   // Points per vote action
claimWeight = 1                  // Points per claim action
earlyAccessBlocks = 432,000      // ~5 days on VeChain

Reward Distribution

Rewards are claimable when:

  • The round has ended

  • All work is done (completedWeightedActions >= totalWeightedActions)

Key Functions

XAllocationVoting (Auto-Voting Functions)

Auto-voting was added in v8 via the AutoVotingLogicUpgradeable module.

User Functions

Relayer Functions

This function:

  1. Validates early access (registered relayer during the 5-day window)

  2. Gets user preferences, filters eligible apps

  3. Splits voting power equally across eligible apps

  4. Casts the vote

  5. Registers a VOTE action on RelayerRewardsPool (3 weight points)

Snapshot Functions

Auto-voting status is checkpointed: changes take effect from the next round, not the current one.

VoterRewards (Fee Integration)

Fee deduction happens in VoterRewards.claimReward():

  1. Check user had auto-voting enabled at round start (checkpointed)

  2. Calculate raw rewards (voting + GM reward)

  3. If auto-voting: fee = min(totalReward * 10/100, 100 B3TR)

  4. Fee approved + deposited to RelayerRewardsPool.deposit(fee, cycle)

  5. Register CLAIM action for msg.sender (1 weight point)

  6. Net reward transferred to voter wallet

msg.sender calling claimReward() IS the relayer credited for the CLAIM action.

Early Access Windows

During the early access period, only registered relayers can act. Users cannot self-vote or self-claim.

Window
Duration
Start

Vote window

~5 days

Round snapshot

Claim window

~5 days

Round deadline

After the early access period, anyone can act — this is the safety net ensuring users always receive their rewards.

Round Lifecycle


Resources

Last updated

Was this helpful?