GnosisRouter

Router implementation with functions to interact with xDAI on Gnosis Chain.

Variables

sDAI

contract IERC20 sDAI

sDAI address.

savingsXDaiAdapter

contract SavingsXDaiAdapter savingsXDaiAdapter

SavingsXDaiAdapter address.

Functions

constructor

constructor(contract IConditionalTokens _conditionalTokens, contract IWrapped1155Factory _wrapped1155Factory) public

Constructor.

Parameters

NameTypeDescription

_conditionalTokens

contract IConditionalTokens

Conditional Tokens contract.

_wrapped1155Factory

contract IWrapped1155Factory

Wrapped1155Factory contract.

splitFromBase

function splitFromBase(contract Market market) external payable

Splits a position using xDAI and sends the ERC20 outcome tokens back to the user.

The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.

Parameters

NameTypeDescription

market

contract Market

The Market to split.

Pre-condition

  1. The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.

Logic

  1. The user send native tokens (xDAI), which will be converted to Savings xDAI (sDAI) and transferred to GnosisRouter.

  2. Call conditionalTokens.splitPosition to transfer sDAI from GnosisRouter to ConditionalTokens, while minting corresponding ERC1155 outcome tokens to GnosisRouter.

  3. Transfer ERC1155 outcome tokens from GnosisRouter to Wrapped1155Factory contract. There is a callback function in Wrapped1155Factory that will wrap the tokens into ERC20 tokens, then transfer the wrapped tokens back to the original user.

mergeToBase

function mergeToBase(contract Market market, uint256 amount) external

Merges positions and sends xDAI to the user.

The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.

Parameters

NameTypeDescription

market

contract Market

The Market to merge.

amount

uint256

The amount of outcome tokens to merge.

Pre-condition

  1. The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.

  2. The caller must have <amount> ERC20 tokens of all the outcomes of a market. For example, to call mergeToBase of 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.

  1. Unwraps ERC20 outcome tokens (which will burn these tokens and transfer corresponding ERC1155 outcome tokens back to the GnosisRouter contract).

  2. Call conditionalTokens.mergePositions to burn ERC1155 outcome tokens.

  3. Return sDAI to GnosisRouter, which will then be converted to xDAI and sent to the user.

redeemToBase

function redeemToBase(contract Market market, uint256[] outcomeIndexes, uint256[] amounts) external

Redeems positions and sends xDAI to the user.

The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.

Parameters

NameTypeDescription

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

  1. The ERC20 associated to each outcome must be previously created on the wrapped1155Factory.

  2. The caller must have ERC20 tokens of the outcomes they want to redeem. For example, to call redeemToBase for 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).

  3. conditionalTokens.reportPayouts has been called by an oracle.

Logic

  1. Unwraps ERC20 outcome tokens (which will burn these tokens and transfer corresponding ERC1155 outcome tokens back to the GnosisRouter contract).

  2. Call conditionalTokens.redeemPositions to burn ERC1155 outcome tokens.

  3. Return sDAI to GnosisRouter . GnosisRouter will calculate the sDAI difference before and after redeeming, which will then be converted to xDAI and sent to the user.

Last updated