The VOLT system is forked from the FEI protocol codebase and leverages FEI protocol's code as it is audited and battle tested. FEI is pegged to a dollar and thus does not need an oracle to determine the current price of FEI. The reason the FEI system doesn't need an oracle for its own price is because from the system's perspective, 1 FEI equals 1 USD. Because VOLT is not pegged to a dollar, but rather the yield earned on VOLT in underlying venues, it uses a custom system oracle. If there are gains in underlying venues, those will need to be passed onto holders by causing the price of VOLT to increase over time. To support this use case, a custom oracle was built.
The VOLT Oracle System consists of two contracts. The first is the VoltSystemOracle, which has a monthly rate the Volt system will increase its price by, and then applies that change with a linear interpolation over a 30.42 day timeframe. This contract is ungoverned and immutable. This contract outputs the system redemption price. The next contract is the Oracle Pass Through, which stores a reference to the VoltSystemOracle and passes all calls for the current oracle price through to the VoltSystemOracle. The Oracle Pass Through is governed by a 1 day timelock that is owned by a multisig that has the VOLT core team and advisors as signers. The Peg Stability Module and all oracles will pull price data from the VoltSystemOracle through a pass through contract called the OraclePassThrough contract. The Oracle pass through contract will pull data directly from the VoltSystemOracle and is in place so that the Peg Stability Module does not need governance actions to upgrade their oracle if logic is changed in the underlying VoltSystemOracle.
This contract contains a pointer to the VoltSystemOracle contract and contains two methods which exposes the price by calling the VoltSystemOracle and returning the current system target price. One method read turns the VoltSystemOracle's price as a decimal for backwards compatibility with the OracleRef contract and the getCurrentOraclePrice method returns the current VoltSystemOracle price as a uint256 scaled up by 1e18.
Only the VOLT timelock can change the address of the VoltSystemOracle in the OraclePassThrough.
VOLT has undergone extensive internal review within the TRIBE DAO and has undergone an audit from Zellic and Code4rena.
VOLT Protocol Whitepaper
Note that this has only been tested on Linux; you may encounter issues running on other operating systems.
- Node v12 or v16 (you can manage Node versions easily with NVM)
- Foundry
- run
npm installin the root directory - curl -L https://foundry.paradigm.xyz | bash && foundryup
- run
npm run testto run forge unit tests - run
npm run test:integrationto run forge integration tests - run
npm run test:hardhatto run hardhat unit tests - run
npm run test:allto run all tests - run
npm run lintto lint ts files and sol files - run
npm lint:allto lint ts AND js files - run
npm run lint:solto lint .sol files - run
npm run lint:fixto fix linting errors, if fixable automatically - run
npm run prettier:tsto run prettier and automatically format all ts files automatically - run
npm run prettier:solto run prettier and automatically format all Solidity files automatically - run
npm run prettierto run prettier and format all files - run
npm run coverage:hardhatto run smart-contract coverage based off of all tests - run
npm run calldatato generate calldata for a proposal - run
npm run check-proposalto run tests for a specific dao proposal - run
npm run compileto compile smart contracts, if needed
- Setup your environment variables as found in
.env.example - Copy
.env.exampleto.env - run
npx hardhat nodeto to run Hardhat Network locally - run
npx hardhat --network <insert network> run scripts/oracleDeploy.tsto deploy oracle contracts - Fill in
scripts/config.tsfile with newly deployed oracle contracts - run
npx hardhat --network <insert network> run scripts/systemDeploy.tsto deploy the core contracts