MainnetRouter
Router implementation with functions to interact with DAI on Ethereum Mainnet.
Variables
DAI
contract IERC20 DAIDAI address.
sDAI
contract SavingsDai sDAISavingsDai address.
Functions
constructor
constructor(contract IConditionalTokens _conditionalTokens, contract IWrapped1155Factory _wrapped1155Factory) publicConstructor.
Parameters
_conditionalTokens
contract IConditionalTokens
Conditional Tokens contract.
_wrapped1155Factory
contract IWrapped1155Factory
Wrapped1155Factory contract.
splitFromDai
function splitFromDai(contract Market market, uint256 amount) externalSplits a position using DAI and sends the ERC20 outcome tokens back to the user.
The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.
Parameters
market
contract Market
The Market to split.
amount
uint256
The amount of collateral to split.
Pre-condition
- The ERC20 associated to each outcome must be previously created on the wrapped1155Factory. 
Logic
- Transfer DAI from the user to - MainnetRouter, which will be converted to Savings DAI (sDAI).
- Call - conditionalTokens.splitPositionto transfer sDAI from- MainnetRouterto- ConditionalTokens, while minting corresponding ERC1155 outcome tokens to- MainnetRouter.
- Transfer ERC1155 outcome tokens from - MainnetRouterto- Wrapped1155Factorycontract. There is a callback function in- Wrapped1155Factorythat will wrap the tokens into ERC20 tokens, then transfer the wrapped tokens back to the original user.
mergeToDai
function mergeToDai(contract Market market, uint256 amount) externalMerges positions and sends DAI to the user.
The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.
Parameters
market
contract Market
The Market to merge.
amount
uint256
The amount of outcome tokens to merge.
Pre-condition
- The ERC20 associated to each outcome must be previously created on the wrapped1155Factory. 
- The caller must have <amount> ERC20 tokens of all the outcomes of a market. For example, to call - mergeToDaiof a market with 3 outcomes: Yes, No, Invalid, the caller must have <amount> tokens for each outcome.
Logic
Merging positions does precisely the opposite of what splitting a position does.
- Unwraps ERC20 outcome tokens (which will burn these tokens and transfer corresponding ERC1155 outcome tokens tokens back to the - Routercontract).
- Call - conditionalTokens.mergePositionsto burn ERC1155 outcome tokens.
- Return sDAI to - MainnetRouter, which will then be converted to DAI and sent to the user.
redeemToDai
function redeemToDai(contract Market market, uint256[] outcomeIndexes, uint256[] amounts) externalRedeems positions and sends DAI to the user.
The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.
Parameters
market
contract Market
The Market to redeem.
outcomeIndexes
uint256[]
The index of the outcomes to redeem.
amounts
uint256[]
Amount to redeem of each outcome.
Pre-condition
- The ERC20 associated to each outcome must be previously created on the wrapped1155Factory. 
- The caller must have ERC20 tokens of the outcomes they want to redeem. For example, to call - redeemToDaifor outcome Yes of a market with 3 outcomes: Yes, No, Invalid, the caller must have Yes tokens. (The call will still be processed even if the caller does not have tokens, but it will have no effect).
- conditionalTokens.reportPayoutshas been called by an oracle.
Logic
- Unwraps ERC20 outcome tokens (which will burn these tokens and transfer corresponding ERC1155 outcome tokens back to the - MainnetRoutercontract).
- Call - conditionalTokens.redeemPositionsto burn ERC1155 outcome tokens.
- Return sDAI to - MainnetRouter.- MainnetRouterwill calculate the sDAI difference before and after redeeming, which will then be converted to DAI and sent to the user.
Last updated