---
# System prepended metadata

title: Set Protocol 文件閱讀

---

# Set Protocol 文件閱讀

缺點：界面設計(沒有線圖,數據揭露)

### 實做筆記
![](https://i.imgur.com/rQ7WQBy.png)
光是設定一個Set就要900美
選幣的時候很麻煩,索引會出現一堆小幣,真正要找的在很下面

![](https://i.imgur.com/Ztb9qeJ.png)
Polygon 手續費就少很多,但是幣的選擇很少,也沒有Mirror的合成資產,大概1美金

### 文件筆記
User Roles

#### Investors
Investors allocate capital, receiving the Set tokens that represent their share in the portfolio or structured product. Investors retain full custody of assets as funds are inaccessible to managers outside of managing the Set via the underlying smart contract.
#### Managers
Managers create and maintain structured products in the form of Sets to cater for their use-case, whether they intend to offer their Sets as an investment opportunity for investors as an individual or organisation, or a DAO with a treasury needing an on-chain, transparent method of management. Managers can use streaming fees to monetise their products and build lucrative avenues of income through their products as they grow.
#### Developers
Developers build the next generation of financial applications using the Set Protocol layer as their base and achieve their objectives faster. Whether you are running an algorithmically rebalanced cryptocurrency index or a long-only large investment portfolio that caters to an existing customer base - the Set Protocol has limitless opportunities on what innovative projects can be built, with TokenSets being a core example.

#### Social Trading
Anyone can become a social trader using our V2 Portfolio Sets that give the Set manager the ability to replicate their trading strategy on-chain, build assets under management and monetise their clients.
TokenSets gives a user-friendly experience to Set managers to perform these actions, but also a frictionless experience for clients to invest into your Set too.

#### Treasury Management
Ethereum ecosystem projects are trusting Set Protocol to manage project treasuries in a trustless, decentralised manner. One example of this is YamHOUSE, which is an actively managed portfolio by Yam.Finance DAO with the aim to achieve long term capital appreciation to support the growth and development of the Yam.

### Protocol Fee Structure

As a Manager, there are currently no fees for utilizing the Set Protocol directly for your business products outside of standard Ethereum network gas fees. If interacting with Set Protocol via the TokenSets UI the only fee currently invoked is a 0.10% fee on trades executed through the trade module on the UI.
As an Investor, in addition to the standard Ethereum network fees, you might encounter a 'streaming fee' on Sets, which is the manager's way of monetizing their product.

#### Streaming Fees
The streaming fees are fees that are paid out to Set managers over time based on the entire market cap of the Set (e.g. 2% of market cap over 1 year). This incentivizes managers to increase the value of their Sets over time for their users.
The streaming fee is calculated linearly over the lifespan of the Set. For example, if a Set has a 2% streaming fee and 6 months has passed, 1% of streaming fees would have been collected.

### FAQ
1. Guides & FAQ's
The protocol documentation here has a wealth of knowledge for all types of users to get acquainted quickly. Whether you are an individual Investor looking to allocate capital into performance-proven products, an aspiring Set Manager wanting to create a structured product to offer to investors, or finally a Developer aiming to build a bespoke application on top of Set - you will find what you need to succeed here.
Have a question? Join the Discord community and get chatting with us!
2. TokenSets 

TokenSets is an open-sourced UI that enables interactions with the Set Protocol system via Web3. With it, anyone can get started creating Set strategies and interacting with their Sets. There are also consumer flows for your strategy customers to issue your Strategy. As features are developed, audited and deployed, the team will be adding them to TokenSets.
3. Index Coop

The Index-Coop is a cooperative focused on building the greatest products and financial building blocks. It is most commonly known for creating, maintaining, and growing the DeFi Pulse Index (DPI), powered by Set Protocol. If you're interested in launching a structured product and taking advantage of INDEX liquidity mining rewards, join the Index Coop today and apply for the Index Coop methodologist program.


[TokenSets](https://tokensets.com/) is the first and most popular UI interface built on top of the Set Protocol to fill this niche.

> Anyone can create bespoke interfaces to interact with Set, one of the key advantages of the protocol is that there is no downtime to the underlying contracts due to being built on Ethereum and so there is no requirement to trust any centralised identity

### Explore Tabs
#### Featured Sets
Featured Sets are a collection of successful, highly liquid products created using Set Protocol that we showcase to show what is possible in the world of decentralised asset management.
#### Community Sets
Community Sets are a subset of deployed Sets where the managers have taken the time to customise the logos and descriptions via our Customisation Form. This is a great way to create a unique, professional-looking product whilst also improving your discoverability.

### Set Details Page
When you click into a Set via the search field or Explore page you will be presented with the Set details page. It is here when you will find various important pieces of information. For this example, we will be running through the DeFi Pulse Index details page, but the same checks can be applied to any Set that interests you.
#### The header consists of:
Set Creator - click into this to be taken to the Set creators wallet via Etherscan. 
Market Cap - derived from the total assets under management within the underlying Set contract deployed on Ethereum 
Streaming Fee - the method a set is monetised by the Manager that is payable by you the Investor over time.
- Performance via Zerion - everyone wants to track the performance of the assets they invest in and currently Zerion tracks the performance of all created Sets on the protocol out of the box for the entire duration. It's worth noting that if the Set has enough liquidity on a DEX or is listed on a CEX it would also by default be chartable on the likes of TradingView and other 3rd party charting services.
- Current Balance - the total dollar value of the total amount of that particular Set token you own. This is based on the Wallet you are connected with to TokenSets.

#### Allocation Table

The Allocation Table is where you will see all the key information regarding what assets are backing each Set token! It's important to remember that Sets are 100% collateralised baskets of Tokens. This means that the value of a Set is directly related to the underlying assets and will never be any discrepancy on the matter. In the above example, the DeFi Pulse Index is a sector-based structured product with a central aim to capture the performance of DeFi based projects using a detailed methodology. 

### Buy & Sell Sets
Learn how to buy and sell Sets via TokenSets.com
https://www.youtube.com/watch?v=R-OHWBNkIuE&feature=emb_logo

![](https://i.imgur.com/PUYTc84.png)
#### Via TokenSets

To buy a Set via TokenSets you first need to navigate to the particular Sets details page. For the example of the DeFi Pulse Index that would be here. Once you're on the Set details page you then have access to the buy & sell buttons pictured below to show the overlay. The following user journey is for buying a Set, but the exact same UI is used for facilitating selling a Set too via the Sell button.

From the buy and sell overlay you have presented the option to input how many of a particular Set you would like to purchase, the amount of ETH required to facilitate the transaction, your current ETH balance associated with the wallet you have connected to TokenSets and finally, a button to preview the transaction for your approval. There are two options for buying on TokenSets, TokenSets Issuance & DEX Swap orders.
TokenSet Issuances is the operation of using your single asset in the transaction (e.g. ETH, USDC, DAI) and exchanging it for all the required collateral to issue the Set before sending it back to you. 
DEX Swap orders are where we have detected decentralised exchange liquidity for your chosen Set on, for example, Uniswap or Sushi - if this is the case choosing this option allows you to swap your single asset for pre-issued Sets that already exist, the major advantage being that this is a much less gas-intensive operation and recommended if available. The only downside is that not all Sets have DEX liquidity as it can be quite capital intensive for them to facilitate.
>WETH Liquidity & TokenSet Issuance
One caveat currently for TokenSet Issuance to be enabled is that all the assets included in the Set must have liquidity on a corresponding WETH pair. For example, if a Set contained DPI as a token, there would need to be DPI-WETH liquidity on a DEX. 

Soon TokenSets Issuance will utilise 0x order routing where this limitation will lift and so assets only liquid with assets other then WETH, such as BTC2X-FLI, will not disable the Buy and Sell buttons on the TokenSets UI (TokenSets Issuance).

Curious about  how to check liquidity on a DEX for a particular asset?  The 'Markets' section on CoinGecko provides this information

When you are happy with the transaction preview you can click the Submit Buy button which will then, depending on the Wallet provider you are using, ask you to confirm your transaction as seen below. This is the final step of the purchasing process and will now exchange your $ETH for the quoted amount of $DPI, all verifiable on-chain.
>What's happening under the covers here? Well, for TokenSets Issuance, because Sets are 100% collateralised by their underlying assets when you buy a Set you are sending your ETH to a smart contract that creates exchange orders for all the underlying assets required to mint the Set token and send it back to you. In the case of buying $DPI, you send your $ETH, the contract then buys the underlying DeFi tokens to mint $DPI tokens relative to the amount of ETH you paid and sends them to your wallet. For DEX Swap orders, we simply route your transaction to where the liquidity lies for the pre-issued Sets, conduct the swap and send you your Set in return.

#### Via DEX
Sets are fully compliant with the ERC-20 token standard, therefore they can be listed and traded easily on decentralised exchanges if liquidity permits. As market-making/liquidity-providing is a capital intensive task, this is predominately seen for the largest initiatives built on top of the protocol, such as the DeFi Pulse Index, Metaverse Index and the ETH 2x Flexible Leverage Index.
In this example, we'll be using Uniswap to purchase the DeFi Pulse Index, which has ample liquidity outside of TokenSets, though to clarify, anywhere ERC-20 token liquidity is supported, so are Sets!
Navigate to the Set details page and scroll to the key information (https://www.tokensets.com/portfolio/dpi in this case). When navigated, click on the Copy Address text. This will copy the Sets contract address to your clipboard for later.

### Via Ecosystem
Various projects within the Ethereum ecosystem have integrated Set support with more continuously coming. This is because Sets are simply ERC-20 tokens and therefore share the exact same properties and the ease of integrating as other Ethereum based tokens. Here are some examples of ecosystem projects that have connected with the protocol.
* Zerion
* Index Coop
* Zapper
* Argent
* 1Inch
* Ember Fund

## Issue & Redeem Sets
Set Contracts have the ability for Investors to provide their own collateral via their connected wallet to Issue a desired Set token in return, inversely Investors are able to Redeem Set tokens in return for their allocation of the underlying collateral. 
三種方式：
- Buy
    - 用AMM方式購買
    - 大額會有滑點問題
- Issue -> 把手中不同的token組合成set token 
    - 需要事前準備好要組合的token
    - 不會有滑點問題,適合大額操作
- Redeem
    - 把set token銷毀,並產出其組成部分的token

## Set Creation
## Set Management
## Set Trading
## Set Customisation
加圖片,敘述

## Security

## Litepaper
### Abstract
Set is an Ethereum-based protocol that enables users to passively implement an asset management strategy by owning an ERC20 token and managers to execute a strategy which others can follow. By supporting external integrations with exchanges, lending platforms, automated market makers and asset protocols, Set enables any type of strategy including those employing DEX trades, yield farming, and margin trading. Set aims to be community owned and employs decentralized governance.

### Motivation
- Increasing Scope of Yield Opportunities: With the advent of AMMs and liquidity mining pioneered by Compound and Balancer, there is an explosion of new yield opportunities such as market making and protocol equity. We imagine that the cardinality of yield opportunities will grow significantly in the coming years. Users and managers want to utilize 3+ assets, leveraged long/short, and yield farming strategies in gas-efficient methods.
- Difficulty of Implementing Strategies: With the complexity of yield opportunities rising, most retail users do not have the time, effort, or technical knowledge to monitor, conceive, and implement these strategies themselves.

### Set Protocol V2 Overview
Set Protocol V2 (“Set V2”) is an Ethereum-based protocol that enables the following:
* Multi-Asset: Set V2 enables the creation and implementation of strategies employing single asset, pairs, and 3+ assets.
* Margin Trading: Set V2 allows traders to safely implement margin trading through Set’s native lending pool. This enables traders to take leveraged long and short positions and enables Set owners to mint/redeem positions.
* 3rd Party Protocol Support for Tokenized Positions: Set V2 enables Set traders to take advantage of yield opportunities from 3rd party lending protocols (e.g. Compound, Aave) and automated market makers (e.g. Balancer, Uniswap, Curve). In addition, Set V2 allows the retrieval of airdropped tokens if strategies are employing yield farming.
* Trader Subscription and Performance Fees: Traders can implement time-based (subscription) and performance-based (profit) fees
* SetToken Compatibility: Set V2’s SetTokens are implemented using the ERC20 standard, are fully collateralized by the underlying, can be issued/redeemed similar to ETFs, are trustless, have specified components,units/natural unit, and are trustless as specified by the Set Protocol whitepaper.
* Protocol Fees: To allow for protocol sustainability, the Protocol will charge fees for protocol-native transactions such as trading via dutch auctions, borrowing using the protocol’s lending pool, and subscription/profit fee sharing.
* Protocol Token Distribution Support: In anticipation of a Protocol Token that requires on-chain distribution mechanisms, protocol design will anticipate the needs of token distribution logic.
* Manager Admin: Set V2 gives managers greater control over how and when Sets can be minted and by whom.

### Use Cases
ETH RSI 60/40 Yield Set: The Set should be able to rebalance $1M+ from 100% WETH to 100% cUSDC and vice versa using a TWAP auction. Traders are able to charge streaming, performance, and buy fees. Users are able to mint on the primary markets using an asset of their choice. If tokens are airdropped to a Set, those tokens can be auctioned off for a supported asset. This should also handle portfolios of 2 assets (50% eth, 50% usdc)
To initiate an auction-style trade, traders designate the asset they want to dispose of, its quantity (in unit terms) and the asset to acquire.
DeFi Basket and Stablecoin Index Yield Basket: The Set is composed of 6 interest-generating stablecoins (e.g. cToken or Aave) that can be periodically rebalanced. Stablecoins can be added and removed from the Index. If COMP is airdropped as yield, it should be recoverable to users. [Users can mint these Yield Baskets themselves by bringing their own asset and performing 6 swaps.] Authorized participants can mint the majority of these baskets, and they are traded widely on secondary markets.
Curve / Balancer / Uniswap Pool Set on AMM and retrieve Airdrops: For tokenized strategies, the trader can take advantage of market making strategies on Uniswap by swapping USDC, DAI to mint a Uniswap LP pool token.

The same can be done with other AMMs like Curve/Balancer and interest-rate yielding assets such as Aave and Compound.
1.5x Long / 100% ETH / 100% USDC /  0.5x Short ETH RSI 60/40 Strategy (Margin Trading): The Set should be able to oscillate from 100% ETH to posting ETH as collateral, borrowing 50% USDC at an interest rate of 8%, swapping the USDC for more 50% ETH. The initial margin requirement is [70]% (configurable based on the asset pair), and the maintenance margin is [30]% - as set forth by the borrow module. The Set’s entire collateral is used as margin, also known as cross-margin. This is a levered position with a 28 day expiration to qualify for the 28 day delivery exemption.

The trader should be able to unwind the position by swapping ETH for USDC, and paying back the USDC loan (with interest). If the 28 day expiration has elapsed, then a keeper can initiate the unwind. If the collateral position falls below the maintenance margin, then a keeper can initiate a liquidation. During a liquidation, owned collateral is auctioned off for the borrowed asset + interest and used to repay the loan.

Minting and redeeming can be done in an atomic fashion.
### Architecture
Set V2 employs a modular architecture consisting of a collection of modular smart contracts where additional components (e.g. modules, factories) can be seamlessly integrated or removed. This architecture is extensible, allowing new features and integrations to be easily added. Detailed system diagram here.
![](https://i.imgur.com/22m909I.png)

Set’s system consists of:
SetToken Factories: SetTokenFactories are smart contracts that contain the template for creating SetTokens. There can be many factories, but we do not expect there to be many Factories given the extensibility of SetTokens.
SetToken: SetTokens are smart contracts that implement the ERC20 standard and house the state of component composition, user balances, managers, and enabled modules. SetTokens house privileged functionality that is available only to its enabled Modules such as mint, burn, invoke, and reconfigure.
Modules: Modules are smart contracts appendable to SetTokens that enable functionality such as trading, margining, and issuance functionality. Modules serve as the entry point for Module-related interactions and can hold common state across SetTokens. Some modules include BasicIssuanceModule (allows minting/redeeming of Sets with Default Positions), TradeModule (allows DEX trading), WrapModule (allows components to be wrapped on external protocols such as Compound and AAVE), and StreamingFeeModule (allows managers to charge subscription fees).
Resources: Resources are contracts that provide data, functionality, or permissions that can be drawn upon from Module, SetToken, or SetTokenCreator contracts. Some resources include the MasterPriceOracle (single contract to retrieve token price information) and IntegrationRegistry (single contract that houses all adapter contracts for external protocol integrations. E.g. Kyber, 1Inch, AAVE, Compound etc).
Controller: Houses valid SetTokens, Modules, Factories, Resources, user approvals, protocol fee settings, and governance functionality.

### Current Smart Contracts
SetTokenCreator: Smart contract with a create function to erect a SetToken. All components are instantiated in the Default state.
SetToken: ERC20 Smart contract that keeps track of Positions, allows modules to update Positions, and enables permission changes via the manager. 
Controller: Contains state for user approvals, oracles, integrations, modules, factories, protocol fee settings, enabled Sets. 
PriceOracle: Single contract for all supported token prices. Returns a token to token price if exists, or produces it from 2 oracles. Read requires passing in two token addresses. This is a permissioned contract, as only system contracts can read from it.
IntegrationRegistry: Single contract that houses all adapter contracts for external protocol integrations. E.g. Kyber, 1Inch, AAVE, Compound etc
BasicIssuanceModule: Simple issuance that only works with Sets with default positions. Includes normal issue / redeem functionality. Performs the actions of moving funds to / from user’s possession to the Set as needed. Has access to the RebalancingSet’s mint, burn, transfer functionality.
StreamingFeeModule: Module responsible for implementing subscription fees or time-based fees.
NAVIssuanceModule: Module enabling Default Position minting accepting a specific token and minting SetTokens based on a % of total market cap.
TradeModule: Enables single-transaction trades using a DEX such as Kyber 1inch, or Synthetix.
AirdropModule: Allows claiming of non-whitelisted token by liquidating it for a supported asset.
WrapModule: Enables minting / redeeming of wrapped tokens via managers. Supports any asset where you are simply wrapping one token such as AAVE aTokens, Compound cTokens and Wrapped ETH.
AMMModule: Enables minting / redeeming of AMM or pooled Tokens via traders. This includes Curve, Balancer, Uniswap and Sushiswap. This is separate from the WrapModule as AMMs allow for deposits / withdrawals of single and multiple tokens.
IssuanceModule: IssuanceModule that is able to handle both Default, and External (and Debt) positions as well as module pre-issuance hooks

### SetToken Considerations
Position Definition: SetTokens are defined by their component address, units, component state, module the component is associated with, and arbitrary byte data.
Virtual and Real Position Accounting: To allow efficient updating of Position units, we use an index or multiplier concept similar to what is utilized by Compound and Ampleforth. SetTokens store Position Units in virtual values, which are converted to real values when utilized by modules. To retrieve the real value, we apply the following formula:

realUnit = positionUnit * positionMultiplier

Position multipliers are typically used in applications which require updating all position units (e.g. subscription fee actualization).
Module Approval and Tracking: Because approved modules have full functionality to alter SetToken state, invoke calling functions to 3rd party contracts, and mint SetTokens, modules must be carefully considered for addition.
Multi-Step Action Lock: SetTokens support both single-transaction and multi-transaction actions. A single-transaction action completes within a single block, and a multi-transaction completes in multiple blocks. A single-transaction transaction includes actions like issuance and fee actualizations. Multi-step actions include rebalance dutch auctions. When a multi-step action is in place, the SetToken is considered locked.

Module Initialization
![](https://i.imgur.com/Y1S1ZN1.png)
1. Module Addition: A module can be added via SetToken creation through the Factory or can be added by the manager after-the-fact.
2. Initialized: To initialize the module, the manager needs to call initialize on the module. Once called, the module is considered initialized.

Module Definition
Modules by default are able to be removed by the managers. However, additional logic in the IssuanceModule does not allow for it to be removed. This is to enable user redemption of SetTokens at any point in time. Modules typically have the following state and interfaces:

General Issuance Module and Issuance Steps
Issuance modules are special modules that enable the minting and redeeming of Sets through collateralizing / de-collateralizing positions. The issuance process allows managers to specify 3rd party contract hooks to enforce any type of product-level validations or enforcements (e.g. maximum $ in Set, denylists). Initially, there will be a BasicIssuanceModule that only handles Default positions and eventually multiple issuance modules for external positions, such as staking or margin positions.
![](https://i.imgur.com/2NF9ukf.png)
Below are steps for the basic issuance process:
* Manager Pre-Issue Hook: The manager can specify validations that are called before the issuance function. Some example pre-issue logic could be fee actualization, absorbing airdrops and allowing mint addresses
* Module Issue: The basic IssuanceModule loops through each of the Positions. For each Position in Default state, the Set simply deposits the component to the Set. For positions in External states, the issuance functions will revert.

### SetToken Key Flows
SetTokenCreator.create
![](https://i.imgur.com/OHNGjlh.png)
1. User wishes to create a Set that utilizes the IssuanceModule and the TradeModule. The user creates a SetToken from the SetTokenCreator passing in the manager address, component addresses, units, name, symbol, module addresses. Creation can only be created initially with Default State assets.
2. The SetTokenCreator checks with the Controller that the modules have been approved.
3. The SetTokenCreator creates the SetToken, committing all the passed in addresses to storage. At this point, none of the modules have been initialized.
4. The SetTokenCreator now registers the SetToken to the Controller as a valid SetToken.

BasicIssuanceModule.issue
![](https://i.imgur.com/NUgDDat.png)
1. SetToken is composed of 3 assets (1A, 2B, 3C). The user first approves his A, B, and C tokens to the Controller
2. The user then calls the issue function on the IssuanceModule, specifying the Set address and the quantity to mint (10 SetTokens). Check with the Controller that the SetToken is valid
3. The IssuanceModule calls the SetToken to check the components, and units. The Module checks that the issue quantity is valid.
4. The Module calls the preIssuanceHook contract. This can be specified by the manager, which can contain requirements such as an address allow-list.
5. The IssuanceModules loops through the tokens and calls the Controller, transferring the tokens to the SetToken. The IssuanceModule provides checks that the tokens have been properly transferred.
6. After all the tokens have been transferred, the IssuanceModule calls the SetToken’s privileged mint function (callable as the SetToken has authorized the IssuanceModule as a privileged caller).

BasicIssuanceModule.redeem
![](https://i.imgur.com/YzcjoCg.png)
1. After minting 10 units of the SetToken, the user wishes to redeem the SetToken for the underlying. The user then calls the redeem function on the IssuanceModule, specifying the Set address and the quantity to redeem (10 units). Check with the Controller that the SetToken is valid
2. Check that quantity is greater than 0.
3. The IssuanceModule then calls burn on the User’s balance for 10 units.
4. The IssuanceModules loops through the tokens and invokes the SetToken to transfer A, B, and C to the user.

StreamingFeeModule.accrueFee
![](https://i.imgur.com/XDusRAV.png)
1. The User calls the StreamingFeeModule’s accrueFee function. Check with the Controller that the SetToken is valid
2. Check that the streaming fee percentage on the SetToken is greater than 0.
3. The StreamingFeeModule gets the SetToken’s streaming fee percentage stored on the module.
4. The fee is paid in inflation, and the new component units are calculated. The StreamingFeeModule then calls “mint” with the inflation shares to the SetToken’s feeRecipient (state held on StreamingFeeModule), and edits the SetToken position multiplier accordingly

### Oracle Architecture
Set’s smart contract architecture has a single PriceOracle contract that houses the oracle prices for all prices. With this architecture, a module only needs to authorize a single smart contract for price data. In addition, external dependencies and price feeds are all managed via a single contract.
![](https://i.imgur.com/bzLuPmC.png)
The PriceOracle returns the price for a given base and quote asset. Base/Quote prices can be generated by either taking the individual Base/Quote prices or reading a price directly if the quote/asset pair is directly supported.
![](https://i.imgur.com/eRQJrQ7.png)
The flow is as follows:
Check if the asset 1 / asset 2 price exists.
Check if the asset 2 / asset 1 price exists. If yes, imply the inverse price (asset 1 / asset 2) and return price
Check if asset 1 / master quote asset price exists.
Check if inverse price of asset 1 exists
Check if asset 2 / master quote asset price exists
Check if inverse price of asset 2 exists. If yes to 3 or 4, and 5 or 6, then imply asset 1 / asset 2 price using master quote asset as an intermediary. Return price
Loop through adapters, and check price. If not, revert.

### Protocol Fees
The Protocol can extract value into a few specified places that accrue to a Vault smart contract (an upgradable contract):
* Trade Module Fees: When a Set manager executes a trade on a DEX, the protocol will take 5 bps fee.
* Auction Outflows: When a market-maker bids, the protocol will take a 0.1% fee - denominated in the outflow token.
* Trader Fees: 15% of streaming or performance-based fees earned by traders are captured by the protocol. In the future, we may also create an entry/exit fee. Fees are paid in inflation and denominated in the SetToken itself.
* Airdrop Fees: When a token is airdropped in a SetToken through yield farming, or other means, the protocol takes a fee
Fees can ultimately be distributed to users via direct distribution, dividends, and buy and burns - in which governance would play a role in making decisions. Tokens received denominated in SetTokens eventually may need to either be redeemed into their underlying.

### Governance
The intentions of protocol governance is to decentralize over time - eventually to a DAO. Governance is allowed to perform the following actions:
Controller
Add/Remove Modules
Add/Remove Factories
Add/Remove Resources
Remove SetTokens
Add/Edit/Change Fees
Edit Fee Recipient
IntegrationRegistry
Add/Edit/Remove Integrations
PriceOracle
Add/Edit/Remove Oracles and Adapters
Modules
Modules are meant to be governance-minimized, but there can be instances