Contract | Purpose | Access Control | Upgradable |
---|---|---|---|
veVirtualToken | 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. | Roles: DEFAULT_ADMIN_ROLE, VALIDATOR_ADMIN_ROLE, MINTER_ROLE | Y |
ContributionNft | 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 |
- 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
- Create proposal at AgentDAO (action = ServiceNft.mint)
- Mint ContributionNft , it will authenticate by checking whether sender is the proposal's proposer.
- 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.
- 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
- Protocol calls AgentReward.withdrawProtocolRewards
- Stakers, Validators, Dataset Contributors, Model Contributors calls AgentReward.claimAllRewards
- Call AgentToken.stake , pass in the validator that you would like to delegate your voting power to. It will take in sVIRTUAL and mint $PERSONA to you.
- Call AgentToken.withdraw to withdraw , will burn your $PERSONA and return sVIRTUAL to you.