Spool Core contracts implementation.
Spool is permissionless middleware that allows users and builders to access DeFi in a fully composable manner. It lays the foundation for a customizable, scalable, and efficient financial services ecosystem that bridges the gap between end users and DeFi primitives.
Contracts can be found in the contracts
folder.
Main Spool Core contracts consist of:
Controller.sol
- Holds the information about the system validity
- Vaults are deployed from here
Vault.sol
- Vaults (or spools) can be deployed by any user from a Controller
- Deposits assets into the stratgies according to the set allocation.
- Holds user-vault shares
- All vault abstract contracts can be found inside the
contracts/vault
folder
Spool.sol
- Spool central contract
- Holds the vault-strategy shares
- All spool abstract contracts can be found inside the
contracts/spool
folder
- strategies (found in
contracts/strategies
)- An implementation contract interacting with the external protocols
- Strategy contracts are called by the
Spool.sol
as adelegatecall
- Additional strategies can be added by the Spool DAO
FeeHandler.sol
- Calculates and stores all the performance fees
FastWithdraw.sol
- Holds shares when a user performs a fast withdrawal and doesn't exit the strategies right away
- Shares can be larew withdrawn at anytime
RiskProviderRegistry.sol
- Holds registry of the valid risk providers and their risk scores of the supported strategies
SpoolOwner.sol
- Simple contract holding the address of the Spool DAO
- All the contracts controlled by the Spool DAO inherit
contracts/shares/SpoolOwnable.sol
that holds the logic to verify if the caller is the Spool DAO - If Spool DAO changes it's address only one call to this contract needs to be performed to transfer the contract ownership privileges.
npm install
npm run compile
The documentation can be generated from the comments of the contract external functions.
npm run generate-docs
NOTE: Skips strategy tests, these use mainnet addresses
npm run test-local
cp .env.sample .env
- add mainnet archive node url under
MAINNET_URL
npm run test-fork
To run full coverage you have to run tests on forked mainnet
npm run coverage-fork
To run only local net coverage run:
npm run coverage-local
The primary license for Spool is the Business Source License 1.1 (BUSL-1.1
), see LICENSE
.
- All files in
contracts/external/
are licensed under the license they were originally published with (as indicated in their SPDX headers) - All files in
contracts/mocks/
are licensed underMIT
. - All files in
contracts/libraries
are licensed underMIT
. - All files in
contracts/utils
are licensed underMIT
. - All files in
test
remain unlicensed.