This repository contains the Virtual governance ecosystem for Virtual DAO and Virtual-specific DAO Governance part. It also covers how Contribution is being recorded and rewarded.
This is a non-transferrable voting token to be used to vote on Virtual Protocol DAO and Virtual Genesis DAO
Ownable
N
VirtualProtocolDAO
Regular DAO to maintain the VIRTUAL ecosystem
-
N
VirtualGenesisDAO
Used to vote for instantiation of a VIRTUAL. This DAO allows early execution of proposal as soon as quorum (10k votes) is reached.
-
N
AgentFactory
Handles the application & instantiation of a new VIRTUAL. References to TBA registry, VIRTUAL DAO/Token implementation and Persona NFT vault contracts are stored here.
Roles : DEFAULT_ADMIN_ROLE, WITHDRAW_ROLE
Y
AgentNft
This is the main registry for Persona, Core and Validator. Used to generate ICV wallet address.
Each contribution will mint a new ContributionNft. Anyone can propose a new contribution at the VIRTUAL DAO and mint token using the proposal Id.
-
Y
ServiceNft
Accepted contribution will mint a ServiceNft, restricted to only VIRTUAL DAO can mint a ServiceNft. User can query the latest service NFT for a VIRTUAL CORE.
-
Y
AgentToken
This is implementation contract for VIRTUAL staking. AgentFactory will clone this during VIRTUAL instantiation. Staked token is non-transferable.
-
N
AgentDAO
This is implementation contract for VIRTUAL specific DAO. AgentFactory will clone this during VIRTUAL instantiation. It holds the maturity score for each core service.
-
N
AgentReward
This is reward distribution center.
Roles: GOV_ROLE, TOKEN_SAVER_ROLE
Y
TimeLockStaking
Allows user to stake their VIRTUAL in exchange for sVIRTUAL
Roles: GOV_ROLE, TOKEN_SAVER_ROLE
N
Virtual
VIRTUAL token
Ownable
N
Airdrop
Airdrop token to holders
-
N
Main Activities
VIRTUAL Genesis
Submit a new application at AgentFactory
a. It will transfer VIRTUAL to AgentFactory
Propose at VirtualGenesisDAO (action = VirtualFactory.executeApplication )
Start voting at VirtualGenesisDAO
Execute proposal at VirtualGenesisDAO , it will do following:
a. Clone AgentToken
b. Clone AgentDAO
c. Mint AgentNft
d. Stake VIRTUAL -> $PERSONA (depending on the symbol sent to application)
e. Create TBA with AgentNft
Submit Contribution
Create proposal at AgentDAO (action = ServiceNft.mint)
Mint ContributionNft , it will authenticate by checking whether sender is the proposal's proposer.
Upgrading Core
Validator vote for contribution proposal at AgentDAO
Execute proposal at AgentDAO, it will mint a ServiceNft, and trigger following actions:
a. Update maturity score
b. Update VIRTUAL core service id.
Distribute Reward
On daily basis, protocol backend will conclude daily profits into a single amount.
Protocol backend calls AgentReward.distributeRewards , triggering following:
a. Transfer VIRTUAL into AgentReward
b. Account & update claimable amounts for: Protocol, Stakers, Validators, Dataset Contributors, Model Contributors