VeBetterDAO Docs
  • VeBetterDAO
    • VeBetterDAO
    • B3TR & VOT3 Tokens
    • B3TR Emissions
    • Treasury
    • X2Earn Allocations
    • X2Earn Apps
    • Governance
    • Voter Rewards
    • Smart Contracts
    • Roles And Permissions
    • Trust Assumptions
    • Verify contract
  • Developer Guides
    • Get Started
    • Test Environment
    • Testnet B3TR tokens
    • Reward Distribution
      • JavaScript
      • Solidity
      • Manage distributors funds
    • Sustainability Proof and Impacts
    • Reward Metadata
    • Security Considerations
    • Submit Your App
    • X2Earn Creators NFT
    • Resources
  • VePassport
    • VePassport
    • Checks
      • Personhood Check
      • Proof of Participation
      • Proof of investment
      • Bot Signaling
      • Blacklisting and Whitelisting
    • Passport Delegation
    • Accounts Linking
    • Roles
  • Vechain Node Holders Guides
    • Endorsement Guide for VeChain Node Holders
    • Node Management
    • Vechain Nodes X GM NFTs: Maximizing Benefits within VeBetter DAO
Powered by GitBook
On this page
  • Apps security levels
  • Cumulative score
  • Threshold
  • Endpoints

Was this helpful?

Export as PDF
  1. VePassport
  2. Checks

Proof of Participation

Proof of Participation is a module of VePassport that allows tracking the amount of times an address has used the apps of VeBetter DAO. For every action, a score (from 0 to 400 based on the app security level) is attributed to the user interacting with the X2Earn App.

The points are then summed, generating a cumulative score for the user and if it exceeds a certain threshold, the wallet can be considered a person.

Only the X2EarnRewardsPool contract can call the registerAction function, this means that if an app is not using the X2EarnRewardsPool contract to distribute their rewards then that action is never taken into account.

Apps security levels

When an action is registered a score is being assigned to the user based on the security level of the app. The VeBetterDAO team will be responsible for initially analyzing apps and setting the security score for each app and will open this power to the entire DAO in the future.

There are 4 security levels:

  • NONE = 0 points

  • LOW = 100 points

  • MEDIUM = 200 points

  • HIGH = 400 points

Currently, all apps are assigned a security score of type "LOW", therefore, for any app used, a user will receive 100 points for each action.

Cumulative score

Per each account, a score is calculated based on the points he gathered until now.

The formula to calculate the score takes into account 2 arguments:

  • Amount of rounds to use: currently set to 12, which means that the contract will sum all the points gathered during the last 12 weeks;

  • Decay percentage: currently set to 0, which reduces the points of previous rounds (eg: if set to 20%, the score calculated until the previous round will be reduced by 20% in the next, in a linear fashion).

This approach ensures that a person must continue to participate in the VeBetter DAO ecosystem and use the apps to maintain eligibility for voting.

The following is the current implemented formula to calculate the cumulative score of the user in the last t amount of rounds:

Threshold

The threshold an address must meet to be considered a person is 300 points accumulated during the last 12 rounds.

Endpoints

Other apps or contracts can interact with the Proof of Participation module through the following functions of the VePassport contract:

interface IVeBetterPassport {
  ...
  function getCumulativeScoreWithDecay(address user, uint256 lastRound) external view returns (uint256);
  
  function userRoundScore(address user, uint256 round) external view returns (uint256);
  function userTotalScore(address user) external view returns (uint256);
  function userAppTotalScore(address user, bytes32 appId) external view returns (uint256);
  
  function thresholdPoPScore() external view returns (uint256);
  function roundsForCumulativeScore() external view returns (uint256);
  function securityMultiplier(PassportTypes.APP_SECURITY security) external view returns (uint256);
  function appSecurity(bytes32 appId) external view returns (PassportTypes.APP_SECURITY);
  ...
}

PreviousPersonhood CheckNextProof of investment

Last updated 6 months ago

Was this helpful?

(a is the total scores, r is the rate of decay, t is number of rounds)