Roles And Permissions
Roles define the permissions and access levels across different contracts and modules. This page outlines the structure of roles, their functions, and the path toward full decentralization.
To maintain a secure and flexible smart contract system, we leverage roles to manage administrative tasks and define who has the authority to perform specific actions. These roles control everything from minting tokens to upgrading contracts, pausing operations, and setting governance parameters.
The central goal of this structure is to gradually decentralize power from individual wallets to the DAO (the B3TRGovernor governance contract).
Roles
This document categorizes roles and outlines their functionalities, detailing what permissions each role grants. Here's a quick summary of some common roles and what they do:
DEFAULT_ADMIN_ROLE: The superuser role with the ability to grant, revoke, and renounce roles.
PAUSER_ROLE: Controls the ability to pause and unpause contract functionality.
MINTER_ROLE: Allows for token minting.
UPGRADER_ROLE: Permits contract upgrades and modifications.
CONTRACTS_ADDRESS_MANAGER_ROLE: Manages critical contract addresses.
DECAY_SETTINGS_MANAGER_ROLE: Manages parameters surrounding cycle lengths, allocation percentages and decay rates in the Emission contract.
GOVERNANCE_ROLE: Involved in governance decisions, proposal management, and voting.
All roles have in common the following functionality: they can renounce that role.
Once there isn’t any address that has the DEFAULT_ADMIN_ROLE then it won’t be possible to grant or revoke any role. If some contract is upgradeable and the DAO has the UPGRADER_ROLE then the DAO could decide to upgrade the contract and assign the role to whoever they want.
Permissions
The ultimate aim is to create a self-governing system where no single entity holds absolute control. This section of the page provides a detailed plan for achieving this goal, outlining the steps for transitioning roles to the B3TRGovernor contract, removing direct admin control, and enabling decentralized governance.
Follow the outlined steps to understand the current state of role assignments and the specific actions required to achieve a more autonomous system. Through this journey, we aim to establish a resilient and community-driven ecosystem where the power of decision-making rests in the hands of the DAO and its stakeholders.
Contract: B3TR
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole | Grants or revokes roles; allows renunciation of its role | Admin Wallet |
PAUSER_ROLE | Pause, Unpause | Pauses or unpauses contract operations | Admin Wallet |
MINTER_ROLE | Mint | Mints new tokens | Admin Wallet, Emissions Contract |
Steps for full decentralization:
Contract: B3TRGovernor
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole, cancel, _authorizeUpgrade, relay, setDepositThreshold, setVotingThreshold, setMinVotingDelay, updateQuorumNumerator | Grants or revokes roles; allows renunciation of its role; cancel pending proposals; | Admin Wallet |
PROPOSAL_EXECUTOR_ROLE | Execute | Executes queued proposals | Admin Wallet |
PAUSER_ROLE | Pause, Unpause | Pauses or unpauses contract (no proposal creation, queuing, or execution) | Admin Wallet |
GOVERNOR_FUNCTIONS_SETTINGS_ROLE | setWhitelistFunction, setWhitelistFunctions, setIsFunctionRestrictionEnabled | Whitelist function that people can trigger in their proposals, or disable this check. | Admin Wallet, BTRGovernor |
CONTRACTS_ADDRESS_MANAGER_ROLE | setVoterRewards, setXAllocationVoting, updateTimelock | Manages contract addresses | Admin Wallet, BTRGovernor |
Steps for full decentralization:
Contract: Emissions
Role Name | Functions | Function Descriptions | Initial Assignees |
MINTER_ROLE | Bootstrap, Start, renounceRole | Allows minting of tokens, initializing processes | Admin Wallet |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole | Manages roles and contract parameters | Admin Wallet |
DECAY_SETTINGS_MANAGER_ROLE | setCycleDuration, setXAllocationsDecay, setVote2EarnDecay | Sets emission cycle durations and related parameters | Admin Wallet |
setXAllocationsDecayPeriod, setVote2EarnDecayPeriod | Sets decay periods for various emission-related settings | ||
setTreasuryPercentage, setScalingFactor, setMaxVote2EarnDecay | Configures emission scaling factors and treasury settings | ||
CONTRACTS_ADDRESS_MANAGER_ROLE | setXAllocationAddress, setVote2EarnAddress, setTreasuryAddress, setXAllocationsGovernorAddress | Configures addresses for key contracts | Admin Wallet |
UPGRADER_ROLE | upgrade, renounceRole | Allows contract upgrades | Admin Wallet |
Steps for full decentralization:
Contract: GalaxyMember
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | setMaxLevel, setMaxMintableLevels, setBaseURI, setB3TRtoUpgradeToLevel, setIsPublicMintingPaused | Sets contract parameters for levels, minting, and URI, Controls public minting | Admin Wallet |
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
PAUSER_ROLE | Pause, Unpause | Pauses and unpauses the contract | Admin Wallet |
MINTER_ROLE | Mint | Mint tokens for migration purposes | Admin Wallet |
CONTRACTS_ADDRESS_MANAGER_ROLE | setXAllocationsGovernorAddress, setB3trGovernorAddress | Configures critical contract addresses | Admin Wallet |
Steps for full decentralization:
Contract: Timelock
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole | Grants or revokes roles; allows renunciation of its own role | Admin Wallet, Timelock contract |
Proposer | schedule, cancel | Proposes, schedules, and cancels transactions | B3TRGovernor |
Executor | Execute | Executes approved proposals and transactions | B3TRGovernor |
UPGRADER_ROLE | upgrade | Allows contract upgrades | Admin Wallet |
Steps for full decentralization:
Contract: Treasury
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole | Grants/revokes roles; can renounce its own role | Admin Wallet |
GOVERNANCE_ROLE | transferVTHO, transferB3TR, transferVOT3, transferVET | Manages VOT3, B3TR, VET and VTHO transfers | B3TRGovernor |
transferTokens, transferNFT | Manages NFT and ERC20 token transfers | ||
stakeB3TR, unstakeB3TR | Manages staking and unstaking | ||
PAUSER_ROLE | Pause, Unpause | Pauses and unpauses contract operations | Admin Wallet |
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
Steps for full decentralization:
Contract: VOT3
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole | Grants or revokes roles; allows renunciation of its role | Admin Wallet |
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
PAUSER_ROLE | Pause, Unpause | Pauses or unpauses contract operations | Admin Wallet |
Steps for full decentralization:
Contract: VoterRewards
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | setLevelToMultiplier, setScalingFactor | Sets reward scaling factors and levels | Admin Wallet |
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
VOTE_REGISTRAR_ROLE | registerVote | Registers user votes for rewards | XAllocationVoting, B3TRGovernor |
setVoteRegistrarRole | Assigns who has permission to register votes | ||
CONTRACTS_ADDRESS_MANAGER_ROLE | setEmissions, setGalaxyMember | Sets key contract addresses | Admin Wallet |
Steps for full decentralization:
Contract: X2EarnApps
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | setBaseURI, UpdateAppMetadata | Configures base URI and updates app metadata | Admin Wallet |
Update receiver address/ app admin | Sets or updates app receiver address and admin | ||
Add/Remove app moderators | Manages app moderators | ||
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
GOVERNANCE_ROLE | Add app, setVotingEligibility | Adds new apps and defines voting eligibility | Admin Wallet |
Steps for full decentralization:
NB: This contract will be upgraded to handle app endorsement, so the “Add app” functionality triggered by a GOVERNANCE_ROLE could be removed in a future release
Contract: X2EarnRewardsPool
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | Admin Wallet | ||
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
CONTRACTS_ADDRESS_MANAGER_ROLE | setX2EarnApps | Update the contract address of X2EarnApps | Admin Wallet |
Steps for full decentralization:
Contract: XAllocationPool
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole | Grants, revokes, or renounces roles | Admin Wallet |
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
CONTRACTS_ADDRESS_MANAGER_ROLE | setXAllocationVotingAddress, setEmissionsAddress, setTreasuryAddress, setX2EarnAppsAddress | Manages key contract addresses | Admin Wallet |
Steps for full decentralization:
Contract: XAllocationVoting
Role Name | Functions | Function Descriptions | Initial Assignees |
DEFAULT_ADMIN_ROLE | grantRole, revokeRole, renounceRole | Grants, revokes, or renounces roles | Admin Wallet |
UPGRADER_ROLE | Upgrade | Allows contract upgrades | Admin Wallet |
ROUND_STARTER_ROLE | startNewRound | Initiates a new voting round | Emissions Contract |
GOVERNANCE_ROLE | setVotingThreshold, setAppSharesCap | Sets parameters for voting | Admin Wallet, B3TRGovernor |
setBaseAllocationPercentage, setVotingPeriod | Establishes voting periods and percentages | ||
updateQuorumNumerator | Updates quorum requirements | ||
CONTRACTS_ADDRESS_MANAGER_ROLE | setX2EarnAppsAddress, setEmissionsAddress, setVoterRewardsAddress | Manages key contract addresses | Admin Wallet |
Steps for full decentralization:
Last updated