[VeBetterDAO Proposal] Auto-Voting for X Allocation with Gasless Voting and Relayer Rewards

Hey there,

We would like to propose an auto-voting system for X Allocation Voting that simplifies voting for users while creating new earning opportunities for community members who act as relayers.

Users who opt in to auto-voting have votes cast and rewards claimed each round automatically with no gas fees or manual steps. Relayers take care of all the work for you and take a small fee of the rewards for their service.

Current System Challenges

The current voting allocation system requires users to:

  • Vote Manually each round to earn rewards

  • Cover Gas Fees for both voting and claiming

  • Stay Constantly Engaged or risk missing a round

  • Lock Tokens with third-party services that offer a similar capability, fuelling centralisation and adding counterparty risks


Auto‑Voting Workflow

For Users

  • Opt In & Choose

    • Toggle to enable auto-voting
    • Select up to 10 projects you care about
    • Votes will be distributed equally
  • Snapshot
    When enabled, your auto-voting status is locked in at round start. No mid-cycle tweaks.

  • Manual Rewards Conversion
    We never touch your funds: after rewards arrive, you convert B3TR → VOT3 yourself for the next round.

For Relayers

  • When the round starts, relayers can:

    • Participate to submit your votes and claim rewards for you.
  • When the round is finished, relayers:

    • Claim rewards when all required actions fulfilled.
    • Take a small percentage of those rewards as their service fee (capped at a set limit)

Gas & Relayer Fee Payout

Each relayer must perform two on-chain actions per user per round: vote submission and reward claim.

Gas Estimation (Simulated via Thor Solo)

Action Avg. Gas Used VTHO Cost
Vote submission 245,322 2.4532 VTHO
Reward claim 60,869 0.6087 VTHO
Total — 3.0619 VTHO

Conversion Rate

  • 1,000 gas = 0.01 VTHO

  • 100,000 gas = 1 VTHO

  • 1 VTHO ≈ 0.017 B3TR (Date: 5 Aug 2025 from BetterSwap)

So, each relayer pays approximately 3.0619 VTHO ≈ 0.051 B3TR per user per round.

Fee Structure

To make relayer participation sustainable, a default fee and a maximum cap are applied to user reward transactions.

Parameter Value (TBD) Description Governance Configurable
Default Fee [TBD] % A proportional fee from the user’s reward to compensate the relayer. YES
Fee Cap [TBD] B3TR Ensures relayers don’t overcharge on large payouts. YES

These parameters are currently left as TBD and are open to community feedback.

Relayer Fee Calculation

Each round, relayers share a common Rewards Pool which is funded by taking a fixed percentage from every user’s reward claim. From that pool, each relayer payout is determined by their share of the total work performed:

  • Reward Pool Funding: A set percentage of each user’s claimed rewards is collected into the relayer Rewards Pool.

  • Relayer Actions: Each relayer action is weighted to reflect cost differences.

  • Action Weights:

    • Vote = 3 points (Governance Configurable)

    • Claim = 1 point (Governance Configurable)

  • Total Weight: Sum of all relayers weighted actions in that round.

  • Relayer Payout: (Relayer Weight / Total Weight) × Rewards Pool

Example

Let’s set the relayer fee at 10% for demonstration purposes.

Imagine two users, each earning 20 B3TR this week:

  1. Relayer claims 20 B3TR for User A → 2 B3TR (10%) goes to the pool, 18 B3TR to User A.

  2. Relayer claims 20 B3TR for User B → 2 B3TR (10%) goes to the pool, 18 B3TR to User B.

Resulting Rewards Pool = 2 + 2 = 4 B3TR

Two relayers process all 4 required actions this round:

  • Alice: 2 votes + 1 claim
    → (2 × 3) + (1 × 1) = 7 weight points

  • Bob: 0 votes + 1 claim
    → (0 × 3) + (1 × 1) = 1 weight point

Relayer Vote Claim Weighted Points Share Of Total Payout
Alice 2 1 7 7/8 = 87.5% 0.875 × 4 = 3.5 B3TR
Bob 0 1 1 1/8 = 12.5% 0.125 × 4 = 0.5 B3TR

In this scenario, relayers divide the 4 B3TR pool based on the weighted effort of their work. Alice earns 3.5 B3TR while Bob earns 0.5 B3TR which creates a fairer distribution aligned with actual gas costs.


Benefits

For Users

  • Your VOT3 never leaves your wallet

  • App preferences can be updated at anytime to reflect your interests

  • Automatic vote casting and reward claiming without gas costs

  • Higher participation rates in governance

For Relayers

  • Sustainable business model with predictable fees

  • Fair reward distribution based on work performed

  • Protected income through pooled rewards

  • Scalable service opportunity

For the Ecosystem

  • Break up centralisation on existing third-party services that offer similar abilities to users in exchange for their tokens lock-up

  • Increased governance participation

  • Stronger network effects

  • Lowers technical and engagement barriers


Technical Specifications

Key Functions

// User Functions
function toggleAutoVoting() external
function setUserVotingPreferences(bytes32[] memory apps) external

// Relayer Functions  
function castVoteOnBehalfOf(address voter, uint256 roundId) external
function claimRewards(uint256 roundId, address voter) external

// Relayer Rewards Pool Management
function claimRewards(uint256 roundId, address relayer) external
function deposit(uint256 amount, uint256 roundId) external

// For Dapp Developers
function isUserAutoVotingEnabled(address account)
function isUserAutoVotingEnabledAtTimepoint(address account, uint48 timepoint) 
function getUserVotingPreferences(address account)

Additional Considerations

  • Voting Scope
    Auto-voting applies only to X Allocation voting. Governance Proposals must still be voted on manually to ensure thoughtful participation.

  • Equal Allocation Voting Power
    Auto-voting splits your voting power equally across all selected applications.

  • Manual Voting Disabled
    While auto-voting is active, you can’t cast manual allocation-round votes to prevent conflicts.

  • Opt-Out Anytime
    Disable auto-voting at any time and your preferences will clear and take effect in the next round.

  • Fee Claim Condition
    Relayers can only withdraw their fee once all expected vote and reward-claim actions for that round have successfully completed.

  • Standard Governance Checks
    You must hold ≄1 VOT3 and satisfy all normal voting prerequisites (e.g., VeBetterPassport eligibility).


Architecture Diagram

  • User: the on-chain account opting in and setting their app preferences.

  • Relayer: Executes votes and reward claims on users’ behalf.

  • XAllocationVoting: the core contract that tracks auto-voting settings, aggregates rounds, and registers relayer actions.

  • VoterRewards: handles the split and distribution of rewards (fee vs. payout).

  • RewardRelayersPool: accumulates the fees and handle the distribution to the relayers.

Note: The 10% fee percentage in the diagram is for demonstration purposes only and do not reflect actual data or final parameter values.


Q&A

  1. Do we still check for 3 sustainable actions?

We still do.

  1. Manual rewards conversion: Reasoning behind this decision and not an opt-in too? Many users appreciate the VeDelegate experience due to auto conversion too.
  • User Control and Security
    To automatically convert rewards like VeDelegate does, we’d need access to user wallets. That adds complexity and potential security risks. By keeping it manual, users stay fully in control of their funds at all times.

  • Avoiding Centralisation Risks
    Platforms like VeDelegate swap your tokens and give you their own. This lets them stake on your behalf and earn higher rewards but it also means they gain more control over staking power. That kind of setup can slowly shift power into fewer hands and lead to more centralisation, which we want to avoid.

  • Simplicity First
    Since this feature is still new, we’re keeping things simple to avoid unnecessary risks. As we see how users interact with the system, we can explore smarter solutions in the future — but only if they don’t compromise trust or safety.

  1. Is the Default Fee (under Fee Structure) also configurable by the user? If the user wants to give a greater percentage than the base, can he be able to do that? This would incentivise relayers to target priority users first.

No, users can’t change or raise the default fee. There’s no real reason to do that, because relayers have to process everyone’s votes and reward claims. If they skip even one user, no one gets their reward. So it doesn’t make sense to prioritise one user over another.

Also, it doesn’t matter if someone has just 1 VOT3 or 1 million. All the fees go into one pool and get shared among relayers based on how many actions they completed. You can check the example under the Architecture Diagrams section for more details.

  1. Could the shares of a relayer be determined by gas consumed?

That’s another good approach but it adds complexity at this early stage of the feature. We aim for simplicity at this phase so the weighted solution seems sufficient.

  1. What happens if multiple relayers vote/claim for one user?

It will fail if the action has already completed. It operates on a first-come, first-served basis.

  1. What if the vote/claim actions are not all completed by the relayers (e.g., they ran out of gas, or their system breaks)?

All required actions need to be completed for each round. Or else, none of the relayers can claim the rewards for the round.

Initially, I anticipated that VeChain will be the main relayers. This gives us full control to monitor gas usage and implement retry mechanisms, so we can make sure that every user vote is successfully submitted. Later on, as third-party relayers join in, we’ll still keep our own relayers active as a safety net to ensure all voting actions are properly handled.

  1. What factors should be considered when setting the default fee and fee cap for relayers?
  • Covering Costs:
    Relayers spend about 3.06 VTHO (≈ 0.051 B3TR) per user each round. To break even with a 10% fee, users need to earn at least 0.51 B3TR weekly or hold about 50 VOT3.

  • Fairness for Users:
    A small holder might not earn much, so charging a % of their reward is fairer than a flat fee. A cap is also needed make sure big holders don’t get overcharged.

  • Price Changes:
    Since B3TR and VTHO prices can change, fees should be flexible enough to adjust over time.

  • Governance Control:
    Both the fee and cap can be updated through governance, so we can tweak things based on real-world data and feedback.


We’d Love Your Feedback

  1. Does the proposed auto-voting flow feel clear and intuitive?

  2. What do you think is a fair fee and cap for relayers?

  3. What would you tweak, improve, or add to make this system better?

12 Likes

Great work by the team!

A tip for any relayer implementor is dynamic gas fee’s, and many votes to cast, you might consider to stagger casting those votes over a few blocks to optimise your gas costs.

1 Like

Definitely a very interesting solution! Great work on the proposal.

I have some suggestions I’d like to add. Sorry if some of them already exist in the proposal and I missed it.

  • Require a minimum of Moon GM NFT to act as relayers. This rewards user investment and act as an additional incentive to upgrade your GM NFT from Earth, further strengthening the VeBetterDAO treasury. Also acts as a barrier to protect against abuse.
  • Have a higher auto-vote cap than ≄1 VOT3. veDelegate has a ≄50 VOT3 requirement to user their service (without manual execution).
    • This proved very effectful in removing ‘burner wallets’ from just voting with a very low amount to receive certain rewards:
      • Most recently Mugshot’s leaderboard, earning burner wallets XP with just 1 vot3
      • It also protects against bad actors using hundreds/thousands of wallets to auto-vote on a dApp in order to abuse quadratic funding.
    • The higher the threshold, the harder to abuse at scale.
    • I would set at a ≄10-50 VOT3 requirement. Earning that amount of B3TR is entirely feasible in a couple of days as a new VeBetterDAO user.
  • If I didn’t miss it already being proposed, I would also set a cap on the amount of actions a relayer can take. I worry that a user could otherwise build some automation solution to automatically complete every relay action available as soon as one is listed, leaving none for ‘legit’ relayers.
    • The exact cap and implementation I’ll leave up to discussion.
  • I would also propose that an ‘auto-vote’ should not last indefinitely.
    • This can lead to dApps that exist now having a huge benefit over dApps that join later as users have ‘set-and-forget’ their votes on the dApps they liked then. A lot can change over time.
    • I suggest a 12-round duration at most. After that, a new auto-vote has to be started by the user.
  • I think the fee needs to be at 1-5% to compete with other solutions (that all currently charge 10%)
  • Add the new required section “added, modified, removed features” to comply with the governance proposal rules coming soon :slight_smile:

Finally, some situations to consider:

  • What happens if a dApp that a user has selected to vote for loses endorsements or gets blacklisted/delisted? Do we rebalance the remaining <9 dApps to equal share?
  • Do all existing relay actions show up instantly with new round start? This would create a disadvantage for regions where rounds start in the middle of the night.
  • GM NFT Rewards (of moon+) are distributed as normal with the users’ voting rewards? Does it require some technical solution?

I really like the concept. Would love to see something like this iterated on.

7 Likes

This will be HUGE updates in coming weeks👀

3 Likes

This is an interesting topic for sure. A couple notes, if they don’t make things too complicated - I’m keeping in kind that you’ve mentioned wanting to keep this simple.

  • I suggest having the ability for the user to delegate to a relayer to have first dibs to carry out the actions. If not completed in a certain timeframe (24 hours for example) then it gets opened up to the floor.

  • On the reverse - I suggest a “reservation” system where a relayer can claim a user’s action slot for a given round before executing it (again, reserved for a given time-frame such as 24hrs).

The above two points would prevent wasted gas from several duplicate attempts that come from a first-come fist-serve system.

In the interest of abuse prevention, these above suggestions would only make sense if there was an action cap and GM Moon NFT or higher was necessary to be a relayer.

  • Is there a reason, other than simplicity, as to why the vote weight needs to be split evenly amongst the dApps? I would still love to see people select their voting percentages.
  • I would propose that there be a dashboard to publicly display total votes processed, relayers involved, pool distribution, and participation rates of the relayers. This would provide important information to both users and relayers, whilst also driving competition and promoting participation.
  • Going off of @reheat’s action cap suggestion. I would suggest that the cap is determined based on the amount of relayers and the amount of users with automated votes, with the cap being raised dynamically as the week progresses if there is low participation from relayers.

Quite frankly, whether I am on-board or not with this system would rely heavily on the anti-abuse mechanisms and safeguards.

I agree with all of @reheat’s points, particularly regarding the minimum VOT3 requirement, GM Moon NFT requirement, and having an action cap for the relayer. We have seen many systems get abused where new wallets can be spun up by users to inflate numbers to reward themselves unfairly, and these measures would act as a very effective barrier to this abuse.

I’ll be following this discussion with interest. Looking forward to seeing further community participation regarding this one.

3 Likes

I don’t see how adding this requirement will make anything better for this use case.
There won’t be many relayers, so this won’t bring prices up for GM in any way, and there can be no abuse: if you cast the vote for a user, good for you, someone has to do it. And that’s it, you cannot do actually much.
Also, relayers will use some software running and attaching a GM to a private key just to run a software is not something that really makes sense to me.

But that’s the thing: there is no such thing as good relayer or bad relayer. The goal here is to have a way to cast votes and claim rewards for the users without a single entity that has any sort of power and in a way that this can survive even without VeChain. So if someone builds an automation tool to cast votes before anyone else I consider that a success! It means that all votes are cast, rewards are claimed and all is good. The point here imho is not to find a way for someone to make money, but to find a way to be 100% sure that those votes will be cast.
Adding a cap will only introduce issues imho, eg: relayers cannot claim their rewards if even 1 single user is still missing from having his rewards claimed or vote cast; in this scenario all relayers are incentivized to actually be sure to claim/vote for ALL. If you now introduce a cap it means that this could be at risk or that someone just switch wallet and get around the cap.

Could be an issue from an ux point of view and a big disadvantege of the dao since veDelegate can do whatever.

But other solutions (veDelegate) don’t cap, we instead have a cap. Eg: we could decide that max fee is 100 B3TR, so even if you have 1 Milion B3TR the fee will still be 10’0, while on veDelegate that 10% will be 10000 B3TR.

We rebalance. Not sure what will happen if the only app selected is delisted though, we should for sure double check this scenario.

Not sure what you mean. Once the round start relayers can start casting the vote and claim the rewards (aka do their actions).

Yes.

That’s a nice idea, what is the vision here though? Have apps like Cleanify, Mugshot, etc as relayers for their users? Would those apps like this tho? Maybe they don’t really care and just want to allow their users to vote for them in their app (as Mugshot and Cleanify are doing). Still, this could add some pretty complicated logic, so I’m thinking: should we consider this for an MVP? I think we should start with a simple and functioning design first, see how it evolves in the first month or so and then iterate.

True, but theoretically simulating the transaction could prevent this, even if I agree, it will still be possible that 2 relayers cast/claim for the same user in same block.

The issue is with validating that the relayer is not changing the votes of the user. In the first iterations we did it was very gas consuming and required quite a few of loopings to validate that, but we could try to give it another shot and maybe we find a better solution.

Hey! Thanks for responding. Sorry in advance for the long post in advance haha.

I think I’m a bit confused with the intent of the system then, my apologies. I read it as an open system that anyone could opt into, basically some kind of “bounty board” of votes, where anyone can just go in and click "vote” on ‘available votes’, if that makes sense.

In my head, I was envisioning it having the same issues that Nubila’s “validator/auto-validator” system has. In there, validators can ‘validate’ the weather report from user’s Nubila weather tation. Doing so, validators earn rewards. Exactly how relayers (validators) would vote on users (the nubila devices) and earn rewards.

Their issue is that these validations go up each day, and every validation is instantly completed by bots for the rewards, leaving actual users unable to claim any rewards for themselves. With time, nobody bothers doing it manually as its pointless. All rewards are instantly taken by bots.

That’s what I envisioned this auto-voter system would face too. I (as someone who would definitely act as a relayer if possible) would go in and instantly see every vote already handled by bots. And therefore, my suggestions of anti-abuse mechanics.

The GM NFT of moon+ would act as the anti-bot mechanic in this case. The abuse I was envisioning was the scenario of there being no votes to cast as all votes have already been claimed by bots.

When you said ‘there won’t be many relayers’, I’m curious. It’s a missing piece of the puzzle for me. If it’s not open to anyone, how will the relayers be selected? If it’s open, I do think there will be many relayers (if the rewards are worth it of course).

This definitely highlights an interesting conversation. I agree that limiting the amounts of relay actions per wallet isn’t right, I forgot about the ‘rewards cap’ in the original proposal when I wrote that. It serves the same purpose without risking having votes unhandled.

The system is designed to compensate the relayer, with a set fee cap per wallet, and if there is no gating (moon nfts or otherwise), my worry is that someone will find a way to claim 99% of the relay rewards for themselves over multiple wallets (going around the rewards cap).

Every vote would be handled yes, but it would mean that they’re only handled by software from a few individuals and not spread out over multiple different relayers. And the rewards would be with the same few.

  • The ‘good relayer’ in my example would be the people going into VBD on their own, completing votes as they’re available, and earning a fair reward for their time.
  • The ‘bad relayer’ would be the person automating every vote and draining the rewards pool for themselves. Exactly what’s happened with the Nubila validation example above.

Both complete the vote for the users, yes, but the rewards end up in the hands of a few, leaving us with a centralized system in a sense.

But yes, if the goal of this is just to handle votes and to simply cover gas fees for the relayer, then sure, it doesn’t matter who does it.

Sure. It’s an UX issue, I can understand that. But when the user opts into auto-voting, a timestamp for when it expires could be added. And an in-app notification sent through VeWorld as it’s getting close to expiring/has expired. I think it’s a reasonable compromise personally.

This proposal specifically says that voting on proposals would be handled outside the voter/relayer system as those require thoughtful input, but in my opinion what dApps users vote for is of even higher importance than for/against/abstain on a proposal. So asking users to resubmit every three months (and requiring a new dapp selection in the process) makes sense.

A dApp currently lives and dies on getting votes (as there is no base allocation), and voter count matters monumentally. Proposals don’t care about the individual voters in the same way, they care about the %s of agreement. Therefore, it doesn’t make sense for me to design a system where a user could lock votes on 10 apps indefinitely.

veDelegate (and other solutions) can always do whatever, that’s true, but I think an official solution should aim to be better than its competitors and learn from mistakes already made (much harder to add time-restricted auto-voting after the fact).

I was going off the 10% relayer fee in the example scenario in the proposal (the b3tr going to the pool). That’s what the user will lose on using the auto-voting service, and that’s why I think it needs to be 1-5%, otherwise everyone would just keep using 3rd party services. Not the fee cap of raw B3TR that the relayer can claim.

That’s what I meant, sorry for the confusing wording. At minute one of the round, all relayers can then cast the votes then.

Disregarding any bots, if all current votes to handle show up at the first minute of the round, that would mean at 3AM my time (CEST), typically.

Unless there are votes to handle for multiple hours each round, that would mean it’s a useless system for me (and most of Europe) to partake in as all possible rewards for the round would be claimed by the time I wake up.

Obviously that’s a hard scenario to design around, and if there are always votes to handle, it wouldn’t matter. I just figured it’d be worth bringing up :slight_smile:


Again, I think the proposed system has a lot of potential. I was mostly focused on the relayer side of things as I agree, all votes just needs to be handled. I just don’t want to see a world where all votes are handled within 1 minute each round by one individual with a bot, claiming all the relayer rewards over multiple wallets.

2 Likes

Cheers Dara on face value and without being a technical guru who can envisage potential issues this looks like a great improvement. ReHeat and Plunk do a great job raising potential issues and Dan has obviously put a lot of thought into this as well.

From my perspective cheers everyone for the proposal and considerations to potential issues that arise. I’d be happy to support it, implement it, analyse how it goes and make future adjustments as required to fix issues from excessive relayer farming, monopolies of relayer or anything else if it arises.

As a simple user of VeBetterDao I find myself pretty focused on just using dapps. So I greatly appreciate the time, thought and effort by VeChain and VeFam to dig deep into the nuanced issues surrounding VeBetter and to come up with solutions. Legends

2 Likes

Let me try to put this technical implementation proposal into easier words: we want to allow auto voting, but we do not want to control the user’s funds (as veDelegate does) because it could be a security issue, so we will update the smart contracts to allow the user to toggle an option where they can turn on autovoting and define a list of apps; Now we need a system in place that can guarantee that the votes of the user will be cast each round. To do that the foundation will create a server that will index and cast votes / claim rewards for users that opted in. But we do not want to be a central point of failure or need to be always there in order to make this function to work, this is why anyone can do those transactions. But performing those transactions costs VTHO and to incentivize services to cast the votes those fees needs to be covered (this is why the fee). To makes things fair all the fees goes to a pool and everyone will claim the rewards based on their activity. To be sure that some users are left out the limitation was added that all votes must be cast otherwise no one gets any reward.

From our point of view our goal is only to guarantee that the votes are cast and rewards are claimed. This autovoting functionality must work 100% of the times. So for me personally if there is a single guy casting all the votes on monday after the round starts would be a win situation: vote is cast, users claimed rewards, all very efficiently.

5 Likes

We could allow people to register as a relayer. Then for the first N blocks of a round they will have exclusive rights to do actions for a fair portion of the accounts that have enabled autovoting. After N blocks the restrictions are removed. Dead relayers get ejected from the system.

This would allow more relayers to participate and will help to avoid collisions. However it will add more complexity. We generally take the approach of start simple and iterate. But maybe this is an important enough feature to implement in the MVP.

4 Likes

Thanks everyone for joining the discussion,

I would also propose that an ‘auto-vote’ should not last indefinitely.

It won’t be indefinitely.

In the current DAO system, the user is required to perform 3 sustainable actions within each 12-round window to stay eligible. This proposal already takes this consideration. For example, if the user enables auto-voting and doesn’t do anything, their auto-voting will be disabled once the decay period is reached. This essentially acts as a built-in restriction. By adding an extra rule on top for auto-voting might cause friction.

That being said, we can improve the UI to make it clearer for the users and add further changes in the next iteration if needed.

Ref: Proof of Participation | VeBetterDAO Docs

If I didn’t miss it already being proposed, I would also set a cap on the amount of actions a relayer can take.

Placing a limit on relayer actions makes sense to some extent. While it may seem fair, it could also cause problems if we depend on a fixed number of relayers to finish their tasks so that others can get rewards. For example, if one relayer wallet is compromised and they cannot complete their actions, it could prevent others from receiving their share of the fees and could also risk missing votes for users in that round.

What Daithi proposed might help with this. “We could allow people to register as a relayer. Then for the first N blocks of a round they will have exclusive rights to do actions 
”.

I would also add that any action-limit or time-frame should apply only to voting, not to claiming rewards. Claims should be done quickly so that users get their rewards and relayers are paid. Having back-to-back restrictions would slow everything down.

Basically, relayers can register and voting actions are divided among them. These actions must be completed within a set time frame. Once the time limit is reached, they are released for other relayers to participate.

This autovoting functionality must work 100% of the times.

I agree that the relayer system should aim for a degree of fairness but not at the cost of reliability. Just wanting to echo this comment from Dan that reliability for users should remain the top priority.

1 Like

Thanks @Dan for the explanation. Makes sense from that point of view!

What you’re saying @daithihearn would suffice as a good first step in my opinion. It would solve the issue of one person claiming all rewards and it would solve my Europe-example of rounds starting in the middle of the night.

If its not too complex I think that would be a good compromise :slight_smile:

@Dara yes, I know about the proof of participation requirement. I also know that a lot of users do not update their voting preferences nearly as often as they complete better actions.

Would it be a fair compromise to leave the technical implementation as is, but add an item to the “governance carousel”:

(where you claim weekly voting rewards, click to go vote for apps, see new apps that have been added etc)

It would simply prompt the user to “revisit” their selected dapps every N weeks? Just to make sure their vote preferences are still valid.

This would not require a redesign of any other UX component of this proposal imo.


These two changes would be great to see and I’d consider that a very good start for the MVP and can be analyzed for any future changes once implemented.

3 Likes

@reheat Thanks for your suggestions!

I’ll update the technical plan to include relayer registration with an early exclusive action window. For the MVP, relayers will be limited to a small internal group and once the feature is stable and working as intended, we’ll open it up for wider registration.

On the carousel idea, I’m not convinced it would add much for new app awareness, especially since we already have a banner promoting them. I like the simplicity of your approach though, and the UX team is already working on site improvements, so I’ll pass it along.

For now, I’d like to keep this thread focused on auto-voting if possible.

1 Like

Thanks! That sounds fair.

A clarification on the carousel. I wasn’t trying to focus only on new apps. I’m simply suggesting you add a reminder to check in on your vote preference every N weeks/months. Doesn’t need to be for only new apps.

There can be multiple reasons for why someone should consider updating their vote preference:

  • An app adds a new feature making it now usable for you or simply improve its functionality
  • An app could have lost endorsements (rebalancing your votes as @Dan explained) since you setup auto-voting.
  • An app could stop working, stop distribution of rewards, remove functionality, etc.

The carousel item would specifically target the users who keep doing better actions (keeping their vepassport valid) but who use auto-voting.

It would simply serve as a reminder for the users to go “oh hey, i havent updated who I’m voting for since i setup auto-voting two months ago, and since then I’ve really started to like app A, B and C, but I don’t use app Z anymore. I should update who i vote for!”

In the future the same logic could be used to prompt the user to check in on their votes every now and then directly in VeWorld, from an inapp notification, etc.

Nothing else on the subject though, ill leave it there for further discussions on the actual implementation of the auto-voting :+1:

1 Like

Hi @Dara

I have a question:

If the Vote2Earn reward rate is assumed at 1% (it could get lower as the token issuance decays), then based on current token prices a user would need to hold a minimum threshold X amount of B3TR for the reward to offset the gas + fee cost of voting.

Only above this threshold does voting generate a net positive economic outcome.

If the above assumption is correct, I think that’s the threshold.

1 Like

Hey @Ben, You’re right about the decay and threshold. But the idea is to ensure users can enable auto-voting without costing too much of their weekly rewards while relayers are correctly compensated. That’s why it’s crucial the fee is percentage-based rather than a flat fee. Small holders can still join with as little as 10 VOT3 while larger holders effectively help cover the relayer costs. Another thing to keep in mind is that B3TR token price fluctuates. The fee relayers collect from small VOT3 holders might look like a loss today but could become a gain if the B3TR token price trends upward. That’s also why it’s important to keep the fee configurable so the model can be adjusted over time in line with market conditions.

During the MVP phase, we should be able to determine the average weekly reward earnings and adjust the fee percentage accordingly if need be.

Hey @daithihearn, I’ve been giving your proposed solution more thought. The main challenge is deciding who should be allowed to register as early relayers. Simply holding a certain GM NFT level might not be sufficient as it’s not a solid proof that someone who can be a reliable relayer. Not being reliable means users could miss out on their votes being casted → miss out on rewards. We might need to pair it with other registration models. More thought is needed on exploring alternative forms of registration whether informal (community-driven reputation, whitelisting) or formal (on-chain registration, track records, or governance approval).

Another issue with allowing more relayer participation is that if two relayers try to cast a vote for the same user, both transactions get submitted but one ends up being reverted. This is not ideal for relayers since they still pay gas fees on the reverted transaction without receiving any reward. The technical solution for this is quite complex and we should opt this in for future iteration.

Once a solid relayer registration model is in place, we could introduce a system where users select a relayer from a list of verified and reliable options. Those chosen relayers could then be given early access to vote/claim on behalf of specific users within a 24-hour window. This could help reduce the duplicate transaction issue since actions would be assigned to specific relayers rather than left open to everyone at once.

During the MVP stage, we should keep it simple by having only the internal team act as relayers so we can guarantee reliable execution while we validate the core mechanics.

We plan to propose an MVP rollout. Here are the key parameters worth noting:

  • Fee: 10%, capped at 100 B3TR

  • Requirement: Hold at least 1 VOT3 and complete 3 sustainable actions to enable auto-voting

These settings keep the system simple at launch and lower the entry barrier. The goal is to gather real mainnet data before making adjustments. Both the fee and requirements can be updated through future proposals once participation levels and average holdings are clearer.

We’re aware of concerns that a 1 VOT3 threshold could be abused by bots but pairing it with 3 sustainable action requirements helps mitigate this risk during MVP. If loopholes are found with sustainable actions, they will need to be addressed at the dApp level. And if that’s proven ineffective, we’ll increase the threshold.

Draft Proposal

Proposal Title

Auto-Voting for X Allocation Relayer Rewards

Proposal Desc

This proposal introduces an auto-voting system for VeBetterDAO’s X Allocation Voting. Users can turn on auto-voting to have their votes cast and rewards claimed automatically. Relayers handle the process on their behalf and earn a small fee from the user’s weekly rewards. This makes voting easier, gets more people involved, and gives relayers a fair way to be rewarded for their work.

Proposal Type

Specify the type of proposal:

On-chain Action

Text-only Proposal

Proposal Changes

  • Removed : N/A

  • Modified:

    • X Allocation Voting process allows optional auto-voting with relayer execution.

    • Include a relayer fee pool mechanism in reward distribution.

    • Disable manual voting and rewards claiming when auto-voting is enabled to avoid conflicts with relayer actions.

  • Added:

    • Auto-voting workflow with an opt-in toggle and project selection (up to 15 apps per user).

    • Relayer fee set at 10%, capped at 100 B3TR.

    • Weighted rewards pool mechanism.

Motivation

Currently, X Allocation Voting requires manual participation, gas fees, and constant user engagement. Many users miss rewards or rely on third-party centralised services that require locking tokens.

This proposal addresses these issues by:

  • Enabling seamless, gas-less participation.

  • Incentivising relayers with a sustainable reward model.

  • Reducing reliance on centralised services, strengthening decentralisation.

  • Increasing overall participation and strengthening VeBetterDAO governance.

This rollout will begin as an MVP with further details outlined in the Future Plans section.

How It Works

  1. Requirement: Hold at least 1 VOT3 and have completed ≄ 3 sustainable actions.

  2. You Toggle On: Turn on auto-voting once, no need to vote every week.

  3. You Pick Apps: Choose up to 15 projects you want to support.

  4. Relayers Do the Work: They cast your votes and claim your rewards on time.

  5. Relayer Fee: A 10% fee (capped at 100 B3TR) comes out of your weekly rewards to cover gas.

  6. You Stay in Control: Your VOT3 never leaves your wallet, and you can turn auto-voting off anytime.

Detailed Specification

Please refer to VeChain discourse for more details.

Fee

A 10% fee (capped at 100 B3TR) is automatically deducted from each auto-voting user’s weekly rewards. This fee covers the gas costs of relayers and ensures the system remains fair and sustainable.

Example: Bob holds 200 VOT3 and earns 2 B3TR in one round.

  • A 10% fee = 0.2 B3TR goes to the relayer pool.

  • Relayers spend about 0.2 B3TR in gas for a 5–8 app user.

  • Bob keeps 1.8 B3TR net without paying gas directly.

    • For a whale earning 1,200 B3TR, the raw 10% fee would be 120 B3TR but the cap limits it to 100 B3TR.

For Users

  • Opt-in toggle:

    • Enable or disable auto-voting with a simple toggle

    • When enabled, your auto-voting status is locked in at the start of next round

    • Any mid-cycle changes are saved but will only apply from the next round to avoid gaming the system.

  • Preference setting:

    • Choose up to 15 projects (update your preferences at any time)

    • Votes are equally distributed

  • Manual reward conversion:

    • No token lock-up required which means the users maintain full control of their B3TR/VOT3

    • Users manually convert B3TR → VOT3 when they choose

Example:

  • Toggle on: Alice enables auto-voting in Round 1. Nothing changes immediately but when Round 2 begins, her auto-voting status is active and relayers automatically cast her votes.

  • Toggle off: Alice disables auto-voting in Round 2. She still auto-votes for that round, but when Round 3 begins, her auto-voting stops and she returns to manual participation.

For Relayers

  • Execute votes and reward claims per user each round.

  • Cost per user per round: ~7.8 VTHO (1 app) to ~17.6 VTHO (15 apps).

    • Note: Gas costs are based on PoC simulations and may see minor adjustments in the final implementation.
  • Compensated from a shared rewards pool funded by a percentage fee from each user’s weekly rewards.

    • Relayer Payout: (Relayer Weight / Total Weight) × Rewards Pool

    • Weighted system: Vote = 3 points, Claim = 1 point.

Example: In one round, two relayers share the work:

  • Relayer A does 2 votes + 1 claim = 7 weight points

  • Relayer B does 0 vote + 1 claim = 1 weight point

    • Total = 8 points

    • If the rewards pool is 4 B3TR of that round, Relayer A earns 3.5 B3TR, Relayer B earns 0.5 B3TR.

Additional Considerations

  • Voting Scope: Auto-voting applies only to X Allocation Voting; governance proposals must still be voted manually to preserve thoughtful participation.

  • Equal Allocation: Voting power is split equally across all selected projects. If one of the selected apps becomes ineligible for the round, the votes will be automatically rebalanced equally across the remaining eligible apps.

  • Manual Voting Disabled: When auto-voting is active, users cannot cast manual votes for that round.

  • Opt-Out Anytime: Users can disable auto-voting at any time. Changes take effect from the next round.

  • Minimum Voting Requirement: Users must hold ≄1 VOT3 to enable auto-voting helping prevent abuse from low-balance wallets and ensuring meaningful participation.

  • Automatic Deactivation: Auto-voting will be automatically toggled off if

    • If a user’s balance falls below 1 VOT3

    • The user has selected only 1 app and that app becomes ineligible for the round. This ensures that users remain responsible for keeping their voting preferences up to date.

  • Governance Checks: Standard prerequisites (e.g., VeBetterPassport eligibility, Sustainable actions) still apply.

Technical Features

  • Auto-voting applies only to X Allocation Voting (not Governance Proposals).

  • Equal distribution of voting power across selected projects.

  • Relayer fees withdrawable only after all actions are completed.

  • Smart contract components: XAllocationVoting, VoterRewards, RewardRelayersPool.

  • Functions:

// User Functions
function toggleAutoVoting() external
function setUserVotingPreferences(bytes32[] memory apps) external

// Relayer Functions  
function castVoteOnBehalfOf(address voter, uint256 roundId) external
function claimRewards(uint256 roundId, address voter) external // Claim rewards for users

// Relayer Rewards Pool Management
function claimRewards(uint256 roundId, address relayer) external // Claim relayers fee
function deposit(uint256 amount, uint256 roundId) external

// For Dapp Developers
function isUserAutoVotingEnabled(address account) // Checks at the start of the current cycle
function getUserVotingPreferences(address account)

Risk Analysis

Fee structure unfair to users (small or large holders).

  • Mitigation: % fee + capped maximum ensures fairness across user sizes.

Relayers failing to complete all vote actions

  • Mitigation: The system requires all vote actions to be completed before the round ends. If not, none of the relayers can claim rewards.

Relayer Reliability

  • Challenge: Determining who qualifies as a reliable relayer is not straightforward. Relying solely on GM NFT ownership is insufficient, since it does not guarantee consistent execution. Unreliable relayers could cause users to miss votes and rewards which undermines trust in the system.

  • Mitigation (MVP): Relayer duties will be handled exclusively by the internal team to guarantee reliability while validating the core mechanics.

Duplicate Transactions & Gas Wastage

  • Challenge: When multiple relayers attempt the same vote/claim for a user, one transaction will succeed while the others are reverted. Relayers still incur gas costs on failed attempts which leads to inefficiency and disincentivizing participation.

  • Mitigation (MVP): Keep relayer operations limited to the internal team to eliminate the risk of overlapping submissions.

Future Plans

The rollout will begin as an MVP, running for six months to test the system in production, evaluate costs and participation, and gather concrete data.

During this period (6 months), parameters such as the fee, cap, and requirements may be adjusted as needed.

After the MVP stage, parameters will be fixed and any further changes will require approval through a governance proposal.

Relayer Registration

  • In the MVP, relayers will only be run by the internal team to guarantee reliability.

  • In future iterations, eligible wallets will be allowed to register as relayers.

  • Registered relayers will have an exclusive 24-hour early window (~8,640 blocks) at the start of each round to cast votes on behalf of users.

The relayer registration rules and early access windows will be introduced only after the challenges described in Risk Analysis have been addressed.

Relayer Reliability

Explore alternative registration models to ensure only proven and trustworthy relayers can participate. Possible approaches include:

  • Community-driven approaches such as reputation systems or whitelisting

  • Formal approaches such as on-chain registration, performance-based track records, or governance approval

Duplicate Transactions & Gas Wastage

Explore solutions such as:

  • Introduce assignment-based models where we allow users to link their accounts to verified relayers during an early access window. This ensures each action is assigned to a specific relayer which helps prevent duplication.

Conclusion

This proposal introduces a simple and fair way to make X Allocation Voting more accessible. By enabling auto-voting with a single toggle, users can participate consistently without worrying about gas fees or missed rounds. Relayers are compensated through a balanced fee model that is sustainable for small holders while protected by a cap for large holders.

Glossary

  • VOT3: Voting token required to participate in X Allocation Voting.

  • B3TR: Governance reward token distributed to voters.

  • Auto-Voting: Feature where relayers automatically cast votes and claim rewards on behalf of users who have enabled it.

  • Relayer: A participant who performs vote and reward claim transactions for users in exchange for a share of the reward pool.

  • Rewards Pool: Shared pool funded by a percentage of user rewards, distributed among relayers based on their completed actions.

  • Round: A weekly cycle of X Allocation Voting and reward distribution.

  • Weighting System: Distribution method for ensuring fair relayer compensation.

  • Gas (VTHO): The VeChain energy token used to pay transaction costs.

  • MVP (Minimum Viable Product): The initial rollout stage focused on core functionality and risk mitigation.

  • PoC (Proof of Concept): A test version or early trial used to check if an idea works, such as estimating gas costs before the real system is live.

References

Full discussion and feedback are available on the VeChain Discourse forum.

2 Likes