ERC20 tokens are fungible tokens on Ethereum. Sets support all standard ERC20 implementations.


A smart contract deployed from the SetTokenCreator contract is an abstraction for a basket of positions generally referred to as a Set. Set tokens are always fully collateralized by their positions.


Each SetToken contract has a manager address state variable that is the only address permissioned to call module interactions. In most use cases, this will be a wallet address (EOA). However, this can also be a smart contract address that has other permissioning properties.


A position on a Set can either be Default (any ERC20 token), or External, marking collateral owned by the sent that is held on another contract (e.g. when staked on Uniswap or lend on Aave/Compound)


Units are maintained for each position by the Set Protocol system and refer to the notional quantity in 10 ** 18 per 1 Set. All sets have 18 decimals so 1 Set means 10 ** 18 in balance.


Issuance/redemption is the process around minting and burning SetToken balances. We currently have three forms of issuance: Basic Issuance. Exchange Issuance, and NAV Issuance.

Basic Issuance

Basic Issuance is the process of wrapping your collateral in the correct proportions into the SetToken itself and minting a new balance of the Set. For example, if a Set is 50% WBTC, 50% WETH, anyone basic issuing needs to have the correct amounts of WBTC and WETH in the wallet calling issuance. You can see that in action here.
TokenSet Issuance
Exchange Issuance requires the user provide a single purchase token (ETH, USDC, etc.). The smart contract will go to decentralized exchanges such as Uniswap and swap the provided token for each of the components in the Set. The components will then be wrapped into the SetToken as per Basic Issuance.
Net Asset Value, or NAV Issuance is the process by which the Set is priced on-chain using oracles. Users can then send a single token in and mint a proportion of the Set equal to the value of the collateral deposited. If a Set's total market cap is worth $90, and a user deposits 10 USDC, the user should be enough SetTokens such that the user would own 10% of all outstanding SetToken balance.


Modules are smart contracts enable functionality such as trading, margining, and issuance functionality. Modules serve as the entry point for interactions with other DeFi protocols and can hold common state across SetTokens.


Smart contracts responsible for generating call data that is used by a Module to perform an interaction.


Rebalancing is any interaction through modules that alters the positions or units of a SetToken. In V2, this can be anything from trading all or a proportion of a token on a decentralized exchange (through the Trade module), or wrapping a USDC position into cUSDC or aUSDC (through the Wrap module).