Contracts

Storage.sol — The GoGoPool smart contract architecture is based around techniques from RocketPool. The Storage.sol contract is non-upgradeable, and contains generic getters/setters to access it's storage. Other contracts are "registered" with the storage contract as a "Network Contract", and can then use it to read and write typed key/value pairs. In this way, other contracts can be upgraded at will, as they contain no local storage of their own.

Vault.sol — Non-upgradeable contract used to store AVAX/ERC20 tokens on behalf of other network contracts. Not storing value in network contracts allows them to be upgradeable.

MultisigManager.sol — Registry of Rialto TSS (Threshold Signatures) wallets that are allowed to extract protocol funds and deploy them into yield-bearing staking transactions on the Avalanche P-chain.

Ocyticus.sol — Protocol emergency pause feature, such that any one of a specified group of "Defenders" can pause the entire protocol should that be necessary. The Defenders will be a different set of users from Guardians, and their only permission will be the ability to call the Pause function. Only the Guardian can add and remove Defenders.

TokenGGP.sol — Fixed-supply, non-upgradeable GGP utility token. GGP is our protocol token used to collateralize minipools and rewards Node Operators in addition to the AVAX Validation rewards.

TokenggAVAX.sol — Upgradeable (via OpenZeppelin proxy) ERC4626 yield-bearing liquid staking token. Additionally, the xERC4626 technique is used to stream rewards to users over a set cycle period. AVAX funds from TokenggAVAX are used by Node Operators to create a full validator from their minipool.

Base.sol BaseAbstract.sol BaseUpgradeable.sol — modifiers, helper methods and storage wrapper methods. BaseAbstract is where the implementation lives, and it’s inherited by both Base and BaseUpgradeable to be used in standard network contracts and the proxy upgradeable TokenggAVAX , respectively

ClaimNodeOp.sol ClaimProtocolDAO.sol — Two contracts for claiming inflated GGP Tokens. Multisig isn’t included here as a separate contract, we instead distribute those rewards right from RewardsPool.sol

Oracle.sol — GGP price submission from Rialto oracle.

ProtocolDAO.sol — Maintains protocol settings used across all network contracts. Currently all settings are controlled by the Guardian. In a future iteration will include a DAO mechanism for modifying settings.

RewardsPool.sol — Handles GGP rewards cycles which includes inflation of new tokens and distribution of the tokens to the claiming contracts.

Staking.sol — Access point for staking GGP. Also maintains information on Node Operators. GGP staked, AVAX staked, AVAX assigned, rewards eligibility time.

Protocol Overview

The protocol can be split into 4 components.

Data Separation Upgrade mechanism