Set Protocol v2
Set Protocol v2 is an EVM-based protocol developed by Set Labs that enables asset management strategies by translating them into ERC20 tokens. It has historically been the primary platform for Index Coop products, as Set Labs is a founding member of the DAO.
The following Index Coop products have been deployed on Set Protocol v2:
Set Protocol v2 employs a modular architecture comprised of core contracts, modules, adapters, and ancillary contracts. Product-specific contracts (like SetToken, BaseManagerv2, FeeSplitExtension) rely on general-purpose contracts and resources (like DebtIssuanceModuleV2, StreamingFeeModule, IntegrationRegistry) for complete functionality. The following sections outline contracts currently used by Index Coop products; however, not all contracts included in the Set Documentation are used by Index Coop products.
Core Contracts
perform critical functions for the protocol like verifying permissions and enabling general-purpose resources
Contract | Description | Link |
SetToken | ERC20 Token contract that allows privileged modules to make modifications to its positions and invoke function calls; deployed on a per-product basis | |
BaseManagerV2 | Manager contract that contains permissions and administrative functionality for a SetToken; deployed on a per-product basis | |
BaseManager | Manager contract that contains permissions and administrative functionality for a SetToken; deployed on a per-product basis | |
ICManager | Manager contract that contains permissions and administrative functionality for a SetToken; deployed on a per-product basis | |
SetTokenCreator | Factory contract that is enabled by the controller to create and register new SetTokens | |
Controller | contract that registers protocol contracts such as products, modules, factories, price oracles, and other resources | |
IntegrationRegistry | contract that holds state relating to modules and the integrations they are connected with | |
PriceOracle | contract that returns the price for any given asset pair; price is retrieved either directly from an oracle, calculated using common asset pairs, or uses external data to calculate price |
* source code linked for contracts that may have many different instances on-chain
Modules
extend setToken functionality by adding fees, enabling composability, and accessing DeFi services; modules can be considered general purpose, or usable by multiple products at once
Module | Description | Link |
BasicIssuanceModule | enables issuance and redemption functionality on a SetToken for default-only positions | |
DebtIssuanceModuleV2 | enables users to issue and redeem SetTokens that contain default and external positions, including–but not limited to–debt positions | |
DebtIssuanceModuleV1 | enables users to issue and redeem SetTokens that contain default and external positions, including–but not limited to–debt positions | |
AaveLeverageModule | enables management of collateralized debt positions in Aave v2; it is paired with a Debt Issuance Module that will call functions on this module to keep interest accrual and liquidation state updated | |
CompoundLeverageModule | Enables management of collateralized debt positions in Compound v2; it is paired with a Debt Issuance Module that will call functions on this module to keep interest accrual and liquidation state updated | |
TradeModule | enables SetTokens to perform atomic trades using DEXs or DEX aggregators; integration mappings are stored on the IntegrationRegistry contract | |
GeneralIndexModule | facilitates rebalancing for SetTokens | |
StreamingFeeModule | accrues streaming fees for managers; streaming fees are denominated as percent per year and realized as inflation rewarded to the manager | |
GovernanceModule | enables participation in governance of component tokens held in the SetToke; examples include Compound, Uniswap, and Maker | |
WrapModule | enables the wrapping of ERC20 and ETH positions via third party protocols; works in conjunction with WrapAdapters | |
AirdropModule | enables manager to absorb tokens sent to the SetToken into the token's positions |
Adapters & Extensions
interface with external protocols and used by modules to gather and validate transaction parameters
Adapter | Description | Link |
0x API Adapter | Exchange Adapter for 0x API that returns data for swaps | |
Curve stETH Exchange Adapter | Exchange Adapter for Curve specialized for stETH/ETH exchange contracts | |
Synthetix Exchange Adapter | Exchange Adapter for Synthetix that returns data for swaps | |
Uniswap v2 Exchange Adapter v2 | Exchange Adapter for Uniswap v2 that returns data for swaps | |
Uniswap v3 Exchange Adapter v2 | Exchange Adapter for Uniswap v3 that returns data for swaps | |
Sushiswap Exchange Adapter | Exchange Adapter for Sushiswap that returns data for swaps | |
AMM Splitter Exchange Adapter | Exchange Adapter that splits trades efficiently between Uniswap V2 and Sushiswap | |
Aave Governance Adapter | Governance Adapter for Aave that returns data for voting, delegating, and creating proposals | |
Compound Governance Adapter | Governance Adapter for Compound that returns data for voting, delegating, and creating proposals | |
Uniswap Governance Adapter | Governance Adapter for Uniswap that returns data for voting, delegating, and creating proposals | |
Fee Split Extension | Smart Contract Extension that allows for splitting and setting streaming, mint, and redeem fees; deployed on a per-product basis | |
Compound Leverage Strategy Extension | Smart Contract Extension that enables automated management of leverage tokens and pairs with the Compound Leverage Module; deployed on a per-product basis | |
Aave Leverage Strategy Extension | Smart Contract Extension that enables automated management of leverage tokens and pairs with the Aave Leverage Module; deployed on a per-product basis | |
Airdrop Extension | Smart Contract Extension that enables a manager to claim incentives accrued to a SetToken contract; pairs with the AirdropModule | |
General Index Module Extension | Smart Contract Extension that acts as a pass-through contract for interacting with the GeneralIndexModule |
* source code linked for contracts that may have many different instances on-chain
Ancillary Contracts
built on top off and/or used in conjunction with protocol contracts
Contract | Description | Link |
Supply Cap Issuance Hook | Issuance Hook that checks a new issuance won't push SetToken totalSupply over defined supply cap; deployed on a per-product basis | |
0x Flash Mint | Contract that swaps an input token for proportional components of an index and issues said index token in an atomic fashion via exchange issuance | |
Leveraged Flash Mint | Contract that enables exchange issuance and redemption for leveraged SetTokens |
* source code linked for contracts that may have many different instances on-chain
All Core Contracts or Modules have been audited by security professionals prior to deployment, and Adapters and Ancillary Contracts undergo rigorous testing before being enabled as well. Excerpt from Set Protocol documentation:
“Security of our system is of the utmost importance to us. We recognize the complexity of the protocol, the difficulties in deploying issue-free software, and the responsibility of maintaining a value-bearing protocol. Therefore, we’ve made a considerable effort to ensure the system has been reviewed by top security firms and heavily scrutinized line by line internally…
Our Set Protocol contracts repo has 100% line and branch coverage over the span of over 840+ unit, integration and simulation tests. Every line of smart contract code for Set Protocol is open source, and we encourage technical community members to review and verify our code. For more information on our system, view the Litepaper.”
More information on auditors and audit reports can be found on the Security page. Source code for all Set Protocol v2 and Index Coop contracts can be found in the following GitHub repositories:
Additional information about contracts and capabilities can be found in the official Set Protocol v2 Documentation. Not all Set Protocol v2 contracts support Index Coop products, but any contract that does support an Index Coop product will be documented here.
Last updated