MarketFactory
Market factory is used to create prediction markets of different types.
Market creation logic:
Ask reality questions.
Prepare condition.
Create new erc20 outcome tokens.
Initialize a new market contract.
Variables
CreateMarketParams
Workaround "stack too deep" errors.
struct CreateMarketParams {
string marketName;
string[] outcomes;
string questionStart;
string questionEnd;
string outcomeType;
uint256 parentOutcome;
address parentMarket;
string category;
string lang;
uint256 lowerBound;
uint256 upperBound;
uint256 minBond;
uint32 openingTime;
string[] tokenNames;
}
InternalMarketConfig
Workaround "stack too deep" errors.
struct InternalMarketConfig {
string[] encodedQuestions;
uint256 outcomeSlotCount;
uint256 templateId;
}
REALITY_UINT_TEMPLATE
uint8 REALITY_UINT_TEMPLATE
Template for scalar and multi scalar markets.
REALITY_SINGLE_SELECT_TEMPLATE
uint8 REALITY_SINGLE_SELECT_TEMPLATE
Template for categorical markets.
REALITY_MULTI_SELECT_TEMPLATE
uint8 REALITY_MULTI_SELECT_TEMPLATE
Template for multi categorical markets.
questionTimeout
uint32 questionTimeout
Reality question timeout.
arbitrator
address arbitrator
Arbitrator contract.
realitio
contract IRealityETH_v3_0 realitio
Reality.eth contract.
wrapped1155Factory
contract IWrapped1155Factory wrapped1155Factory
Wrapped1155Factory contract.
conditionalTokens
contract IConditionalTokens conditionalTokens
Conditional Tokens contract.
collateralToken
address collateralToken
Conditional Tokens collateral token contract.
realityProxy
contract RealityProxy realityProxy
Oracle contract.
markets
address[] markets
Markets created by this factory.
market
address market
Market contract.
Events
NewMarket
event NewMarket(address market, string marketName, address parentMarket, bytes32 conditionId, bytes32 questionId, bytes32[] questionsIds)
To be emitted when a new market is created.
Parameters
market
address
The new market address.
marketName
string
The name of the market.
parentMarket
address
Conditional market to use.
conditionId
bytes32
Conditional Tokens conditionId.
questionId
bytes32
Conditional Tokens questionId.
questionsIds
bytes32[]
Reality questions ids.
Functions
constructor
constructor(address _market, address _arbitrator, contract IRealityETH_v3_0 _realitio, contract IWrapped1155Factory _wrapped1155Factory, contract IConditionalTokens _conditionalTokens, address _collateralToken, contract RealityProxy _realityProxy, uint32 _questionTimeout) public
Constructor.
_market
address
Address of the market contract that is going to be used for each new deployment.
_arbitrator
address
Address of the arbitrator that is going to resolve Realitio disputes.
_realitio
contract IRealityETH_v3_0
Address of the Realitio implementation.
_wrapped1155Factory
contract IWrapped1155Factory
Address of the Wrapped1155Factory implementation.
_conditionalTokens
contract IConditionalTokens
Address of the ConditionalTokens implementation.
_collateralToken
address
Address of the collateral token.
_realityProxy
contract RealityProxy
Address of the RealityProxy implementation.
_questionTimeout
uint32
Reality question timeout.
createCategoricalMarket
function createCategoricalMarket(struct MarketFactory.CreateMarketParams params) external returns (address)
Categorical markets are associated with a Reality question that has only one answer.
Creates a Categorical market.
Parameters
params
struct MarketFactory.CreateMarketParams
CreateMarketParams instance.
Return Values
[0]
address
The new market address.
Logic
Validate outcomes length (>= 2).
Encode 1 reality question.
Call
createMarket
.
createMultiCategoricalMarket
function createMultiCategoricalMarket(struct MarketFactory.CreateMarketParams params) external returns (address)
Multi Categorical markets are associated with a Reality question that has one or more answers.
Creates a Multi Categorical market.
Parameters
params
struct MarketFactory.CreateMarketParams
CreateMarketParams instance.
Return Values
[0]
address
The new market address.
Logic
Validate outcomes length (>=2).
Encode 1 reality question.
Call
createMarket
.
createScalarMarket
function createScalarMarket(struct MarketFactory.CreateMarketParams params) external returns (address)
Scalar markets are associated with a Reality question that resolves to a numeric value.
Creates a Scalar market.
Parameters
params
struct MarketFactory.CreateMarketParams
CreateMarketParams instance.
Return Values
[0]
address
The new market address.
Logic
Validate
upperBound
andlowerBound
.Validate outcomes length (2).
Encode 1 reality question.
Call
createMarket
.
createMultiScalarMarket
function createMultiScalarMarket(struct MarketFactory.CreateMarketParams params) external returns (address)
Multi Scalar markets are associated with two or more Reality questions, and each one of them resolves to a numeric value.
Creates a Multi Scalar market.
Parameters
params
struct MarketFactory.CreateMarketParams
CreateMarketParams instance.
Return Values
[0]
address
The new market address.
Logic
Validate outcomes length (>=2).
Encode reality questions, one for each outcome.
Instead of using
params.marketName
, encode a newmarketName
.abi.encodePacked( params.questionStart, "[", params.outcomeType, "]", params.questionEnd )
Call
createMarket
.
createMarket
function createMarket(struct MarketFactory.CreateMarketParams params, string marketName, struct MarketFactory.InternalMarketConfig config) internal returns (address)
Creates the Market and deploys the wrapped ERC20 tokens.
Parameters
params
struct MarketFactory.CreateMarketParams
CreateMarketParams instance.
marketName
string
The market name.
config
struct MarketFactory.InternalMarketConfig
InternalMarketConfig instance.
Return Values
[0]
address
The new market address.
Logic
Ask reality questions.
Prepare condition.
Create new erc20 outcome tokens.
Initialize a new market contract.
createNewMarketParams
function createNewMarketParams(struct MarketFactory.CreateMarketParams params, struct MarketFactory.InternalMarketConfig config) internal returns (struct Market.ConditionalTokensParams, struct Market.RealityParams)
Creates the structures needed to initialize the new market.
Parameters
params
struct MarketFactory.CreateMarketParams
CreateMarketParams instance.
config
struct MarketFactory.InternalMarketConfig
InternalMarketConfig instance.
Return Values
[0]
struct Market.ConditionalTokensParams
Market.ConditionalTokensParams instance.
[1]
struct Market.RealityParams
Market.RealityParams instance.
encodeRealityQuestionWithOutcomes
function encodeRealityQuestionWithOutcomes(string question, string[] outcomes, string category, string lang) internal pure returns (string)
Encodes the question, outcomes, category and language following the Reality structure. If any parameter has a special character like quotes, it must be properly escaped.
Parameters
question
string
The question text.
outcomes
string[]
category
string
The question category.
lang
string
The question language.
Return Values
[0]
string
The encoded question.
encodeRealityQuestionWithoutOutcomes
function encodeRealityQuestionWithoutOutcomes(string question, string category, string lang) internal pure returns (string)
Encodes the question, category and language following the Reality structure. If any parameter has a special character like quotes, it must be properly escaped.
Parameters
question
string
The question text.
category
string
The question category.
lang
string
The question language.
Return Values
[0]
string
The encoded question.
askRealityQuestion
function askRealityQuestion(string encodedQuestion, uint256 templateId, uint32 openingTime, uint256 minBond) internal returns (bytes32)
Asks a question on reality.
Parameters
encodedQuestion
string
The encoded question containing the Reality parameters.
templateId
uint256
The Reality template id.
openingTime
uint32
The question opening time.
minBond
uint256
The question min bond.
Return Values
[0]
bytes32
The question id
prepareCondition
function prepareCondition(bytes32 questionId, uint256 outcomeSlotCount) internal returns (bytes32)
Prepares the CTF condition and returns the conditionId.
Parameters
questionId
bytes32
An identifier for the question to be answered by the oracle.
outcomeSlotCount
uint256
The number of outcome slots which must be used for this condition. Must not exceed 256.
Return Values
[0]
bytes32
Condition ID.
Pre-condition
Reality questions asked and return
questionsIds
.questionId
is hashed from all the values thatRealityProxy.resolve()
uses to resolve a market (questionsIds
,outcomes.length
,templateId
,lowerBound
,upperBound
).
Logic
It will check if there is a prepared condition on
ConditionalTokens
, and callconditionalTokens.prepareCondition()
if there isn't any.
deployERC20Positions
function deployERC20Positions(bytes32 parentCollectionId, bytes32 conditionId, uint256 outcomeSlotCount, string[] tokenNames) internal returns (contract IERC20[] wrapped1155, bytes[] data)
Wraps the ERC1155 outcome tokens to ERC20. The INVALID_RESULT outcome is always called SER-INVALID.
Parameters
parentCollectionId
bytes32
The parentCollectionId.
conditionId
bytes32
The conditionId.
outcomeSlotCount
uint256
The amount of outcomes.
tokenNames
string[]
The name of each outcome token.
Return Values
wrapped1155
contract IERC20[]
Array of outcome tokens wrapped to ERC20.
data
bytes[]
Array of token data used to create each ERC20.
Logic
It will call
wrapped1155Factory.requireWrapped1155
to create an ERC20 token contract for each position. The new tokens addresses and data is saved inMarket
contract.
toString31
function toString31(string value) internal pure returns (bytes32 encodedString)
Encodes a short string (less than than 31 bytes long) as for storage as expected by Solidity. See https://github.com/gnosis/1155-to-20/pull/4#discussion_r573630922.
Parameters
value
string
String to encode
Return Values
encodedString
bytes32
The encoded string.
allMarkets
function allMarkets() external view returns (address[])
Returns all the markets created by this factory.
Return Values
[0]
address[]
The addresses of the markets.
marketCount
function marketCount() external view returns (uint256)
Returns the amount of markets created by this factory.
Return Values
[0]
uint256
The amount of markets.
Last updated