@gnosis.pm/pm-contracts
Version:
Collection of smart contracts for the Gnosis prediction market platform
1,037 lines (1,036 loc) • 323 kB
JSON
{
"contractName": "ScalarEventData",
"abi": [
{
"constant": true,
"inputs": [],
"name": "LONG",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "OUTCOME_RANGE",
"outputs": [
{
"name": "",
"type": "uint24"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "lowerBound",
"outputs": [
{
"name": "",
"type": "int256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "SHORT",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "upperBound",
"outputs": [
{
"name": "",
"type": "int256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.6+commit.b259423e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"LONG\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OUTCOME_RANGE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint24\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lowerBound\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SHORT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"upperBound\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol\":\"ScalarEventData\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/Event.sol\":{\"keccak256\":\"0xdcacfa25145426b5681ad7d8bafb3c117c92a37b7a0175d72a10b42f130fb8c1\",\"urls\":[\"bzzr://bd10fbdb82f0d50866442c9e95317b3176c8ee067def27d764529973fb36420a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol\":{\"keccak256\":\"0xb8113f1a3f63ec0b6ae2d1a833fbffcf2b2af9470d4d7591d8e2c2784a163b32\",\"urls\":[\"bzzr://feb468d84fdda273585ba31abbbf8cceb906df5a9142695ec30c98f000a05bd4\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/Oracle.sol\":{\"keccak256\":\"0xf4d12f4a59c17e66dfa6791188f621a8914e2038a4e3f72d6fc9fb903ca8e18e\",\"urls\":[\"bzzr://a477ccd203e677cc904b1a4f8fcc85251c5b5e09c5c10eed27e01318584b16d1\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Tokens/OutcomeToken.sol\":{\"keccak256\":\"0x3d4c9ec14a60cf7577d366da5116e919a4331da8d6d993174f7d599f84ae74e0\",\"urls\":[\"bzzr://20f87450259a3af24ff1769faa9ab3b714d01921e9d8fa4efa75a0c277837a8a\"]},\"@gnosis.pm/util-contracts/contracts/Proxy.sol\":{\"keccak256\":\"0xeab0e83a9ec9e7f052c0455a11577061ec6d1994db08dae429abd6faaabf6555\",\"urls\":[\"bzzr://b2c1273d4ec30e2f9e768eea8c510f8493a7359b03e01923d93eea86b57ec145\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzzr://07fb42206812a17c1f71e548cfa5cec6f9aa1ae0ca5df870718ca4aa9759d1a5\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b50610151806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063561cce0a1461005c5780636e5452fe14610080578063a384d6ff146100a8578063a871da91146100c6578063b09ad8a0146100ea575b600080fd5b610064610108565b604051808260ff1660ff16815260200191505060405180910390f35b61008861010d565b604051808262ffffff1662ffffff16815260200191505060405180910390f35b6100b0610114565b6040518082815260200191505060405180910390f35b6100ce61011a565b604051808260ff1660ff16815260200191505060405180910390f35b6100f261011f565b6040518082815260200191505060405180910390f35b600181565b620f424081565b60005481565b600081565b6001548156fea165627a7a723058205ae0d49e995f4959162ec3f5fc59be815b5430ee8394a280340b0794b07b09560029",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063561cce0a1461005c5780636e5452fe14610080578063a384d6ff146100a8578063a871da91146100c6578063b09ad8a0146100ea575b600080fd5b610064610108565b604051808260ff1660ff16815260200191505060405180910390f35b61008861010d565b604051808262ffffff1662ffffff16815260200191505060405180910390f35b6100b0610114565b6040518082815260200191505060405180910390f35b6100ce61011a565b604051808260ff1660ff16815260200191505060405180910390f35b6100f261011f565b6040518082815260200191505060405180910390f35b600181565b620f424081565b60005481565b600081565b6001548156fea165627a7a723058205ae0d49e995f4959162ec3f5fc59be815b5430ee8394a280340b0794b07b09560029",
"sourceMap": "112:273:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;112:273:3;;;;;;;",
"deployedSourceMap": "112:273:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;112:273:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;214:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;250:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;334:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;177:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;361:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;214:30;243:1;214:30;:::o;250:46::-;289:7;250:46;:::o;334:21::-;;;;:::o;177:31::-;207:1;177:31;:::o;361:21::-;;;;:::o",
"source": "pragma solidity ^0.5.0;\nimport \"../Events/Event.sol\";\nimport \"@gnosis.pm/util-contracts/contracts/Proxy.sol\";\n\n\ncontract ScalarEventData {\n\n /*\n * Constants\n */\n uint8 public constant SHORT = 0;\n uint8 public constant LONG = 1;\n uint24 public constant OUTCOME_RANGE = 1000000;\n\n /*\n * Storage\n */\n int public lowerBound;\n int public upperBound;\n}\n\ncontract ScalarEventProxy is Proxy, EventData, ScalarEventData {\n\n /// @dev Contract constructor validates and sets basic event properties\n /// @param _collateralToken Tokens used as collateral in exchange for outcome tokens\n /// @param _oracle Oracle contract used to resolve the event\n /// @param _lowerBound Lower bound for event outcome\n /// @param _upperBound Lower bound for event outcome\n constructor(\n address proxied,\n address outcomeTokenMasterCopy,\n ERC20 _collateralToken,\n Oracle _oracle,\n int _lowerBound,\n int _upperBound\n )\n Proxy(proxied)\n public\n {\n // Validate input\n require(address(_collateralToken) != address(0) && address(_oracle) != address(0));\n collateralToken = _collateralToken;\n oracle = _oracle;\n // Create an outcome token for each outcome\n for (uint8 i = 0; i < 2; i++) {\n OutcomeToken outcomeToken = OutcomeToken(address(new OutcomeTokenProxy(outcomeTokenMasterCopy)));\n outcomeTokens.push(outcomeToken);\n emit OutcomeTokenCreation(outcomeToken, i);\n }\n\n // Validate bounds\n require(_upperBound > _lowerBound);\n lowerBound = _lowerBound;\n upperBound = _upperBound;\n }\n}\n\n/// @title Scalar event contract - Scalar events resolve to a number within a range\n/// @author Stefan George - <stefan@gnosis.pm>\ncontract ScalarEvent is Proxied, Event, ScalarEventData {\n using SafeMath for *;\n\n /*\n * Public functions\n */\n /// @dev Exchanges sender's winning outcome tokens for collateral tokens\n /// @return Sender's winnings\n function redeemWinnings()\n public\n returns (uint winnings)\n {\n // Winning outcome has to be set\n require(isOutcomeSet);\n // Calculate winnings\n uint24 convertedWinningOutcome;\n // Outcome is lower than defined lower bound\n if (outcome < lowerBound)\n convertedWinningOutcome = 0;\n // Outcome is higher than defined upper bound\n else if (outcome > upperBound)\n convertedWinningOutcome = OUTCOME_RANGE;\n // Map outcome to outcome range\n else\n convertedWinningOutcome = uint24(OUTCOME_RANGE * (outcome - lowerBound) / (upperBound - lowerBound));\n uint factorShort = OUTCOME_RANGE - convertedWinningOutcome;\n uint factorLong = OUTCOME_RANGE - factorShort;\n uint shortOutcomeTokenCount = outcomeTokens[SHORT].balanceOf(msg.sender);\n uint longOutcomeTokenCount = outcomeTokens[LONG].balanceOf(msg.sender);\n winnings = shortOutcomeTokenCount.mul(factorShort).add(longOutcomeTokenCount.mul(factorLong)) / OUTCOME_RANGE;\n // Revoke all outcome tokens\n outcomeTokens[SHORT].revoke(msg.sender, shortOutcomeTokenCount);\n outcomeTokens[LONG].revoke(msg.sender, longOutcomeTokenCount);\n // Payout winnings to sender\n require(collateralToken.transfer(msg.sender, winnings));\n emit WinningsRedemption(msg.sender, winnings);\n }\n\n /// @dev Calculates and returns event hash\n /// @return Event hash\n function getEventHash()\n public\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(collateralToken, oracle, lowerBound, upperBound));\n }\n}\n",
"sourcePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol",
"ast": {
"absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol",
"exportedSymbols": {
"ScalarEvent": [
870
],
"ScalarEventData": [
620
],
"ScalarEventProxy": [
720
]
},
"id": 871,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 604,
"literals": [
"solidity",
"^",
"0.5",
".0"
],
"nodeType": "PragmaDirective",
"src": "0:23:3"
},
{
"absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/Event.sol",
"file": "../Events/Event.sol",
"id": 605,
"nodeType": "ImportDirective",
"scope": 871,
"sourceUnit": 393,
"src": "24:29:3",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "@gnosis.pm/util-contracts/contracts/Proxy.sol",
"file": "@gnosis.pm/util-contracts/contracts/Proxy.sol",
"id": 606,
"nodeType": "ImportDirective",
"scope": 871,
"sourceUnit": 6829,
"src": "54:55:3",
"symbolAliases": [],
"unitAlias": ""
},
{
"baseContracts": [],
"contractDependencies": [],
"contractKind": "contract",
"documentation": null,
"fullyImplemented": true,
"id": 620,
"linearizedBaseContracts": [
620
],
"name": "ScalarEventData",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": true,
"id": 609,
"name": "SHORT",
"nodeType": "VariableDeclaration",
"scope": 620,
"src": "177:31:3",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 607,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "177:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30",
"id": 608,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "207:1:3",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"visibility": "public"
},
{
"constant": true,
"id": 612,
"name": "LONG",
"nodeType": "VariableDeclaration",
"scope": 620,
"src": "214:30:3",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 610,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "214:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": {
"argumentTypes": null,
"hexValue": "31",
"id": 611,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "243:1:3",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"visibility": "public"
},
{
"constant": true,
"id": 615,
"name": "OUTCOME_RANGE",
"nodeType": "VariableDeclaration",
"scope": 620,
"src": "250:46:3",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint24",
"typeString": "uint24"
},
"typeName": {
"id": 613,
"name": "uint24",
"nodeType": "ElementaryTypeName",
"src": "250:6:3",
"typeDescriptions": {
"typeIdentifier": "t_uint24",
"typeString": "uint24"
}
},
"value": {
"argumentTypes": null,
"hexValue": "31303030303030",
"id": 614,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "289:7:3",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_1000000_by_1",
"typeString": "int_const 1000000"
},
"value": "1000000"
},
"visibility": "public"
},
{
"constant": false,
"id": 617,
"name": "lowerBound",
"nodeType": "VariableDeclaration",
"scope": 620,
"src": "334:21:3",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
},
"typeName": {
"id": 616,
"name": "int",
"nodeType": "ElementaryTypeName",
"src": "334:3:3",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"id": 619,
"name": "upperBound",
"nodeType": "VariableDeclaration",
"scope": 620,
"src": "361:21:3",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
},
"typeName": {
"id": 618,
"name": "int",
"nodeType": "ElementaryTypeName",
"src": "361:3:3",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
},
"value": null,
"visibility": "public"
}
],
"scope": 871,
"src": "112:273:3"
},
{
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 621,
"name": "Proxy",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 6828,
"src": "416:5:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Proxy_$6828",
"typeString": "contract Proxy"
}
},
"id": 622,
"nodeType": "InheritanceSpecifier",
"src": "416:5:3"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 623,
"name": "EventData",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 204,
"src": "423:9:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_EventData_$204",
"typeString": "contract EventData"
}
},
"id": 624,
"nodeType": "InheritanceSpecifier",
"src": "423:9:3"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 625,
"name": "ScalarEventData",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 620,
"src": "434:15:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ScalarEventData_$620",
"typeString": "contract ScalarEventData"
}
},
"id": 626,
"nodeType": "InheritanceSpecifier",
"src": "434:15:3"
}
],
"contractDependencies": [
204,
620,
5721,
6798,
6828
],
"contractKind": "contract",
"documentation": null,
"fullyImplemented": true,
"id": 720,
"linearizedBaseContracts": [
720,
620,
204,
6828,
6798
],
"name": "ScalarEventProxy",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": {
"id": 718,
"nodeType": "Block",
"src": "1032:649:3",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 659,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 651,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 646,
"name": "_collateralToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 632,
"src": "1084:16:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ERC20_$7778",
"typeString": "contract ERC20"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ERC20_$7778",
"typeString": "contract ERC20"
}
],
"id": 645,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1076:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 647,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1076:25:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 649,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1113:1:3",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 648,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1105:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 650,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1105:10:3",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "1076:39:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 658,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 653,
"name": "_oracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 634,
"src": "1127:7:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Oracle_$4841",
"typeString": "contract Oracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_Oracle_$4841",
"typeString": "contract Oracle"
}
],
"id": 652,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1119:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 654,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1119:16:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 656,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1147:1:3",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 655,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1139:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 657,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1139:10:3",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "1119:30:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "1076:73:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 644,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
7923,
7924
],
"referencedDeclaration": 7923,
"src": "1068:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 660,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1068:82:3",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 661,
"nodeType": "ExpressionStatement",
"src": "1068:82:3"
},
{
"expression": {
"argumentTypes": null,
"id": 664,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 662,
"name": "collateralToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 194,
"src": "1160:15:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ERC20_$7778",
"typeString": "contract ERC20"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 663,
"name": "_collateralToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 632,
"src": "1178:16:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ERC20_$7778",
"typeString": "contract ERC20"
}
},
"src": "1160:34:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ERC20_$7778",
"typeString": "contract ERC20"
}
},
"id": 665,
"nodeType": "ExpressionStatement",
"src": "1160:34:3"
},
{
"expression": {
"argumentTypes": null,
"id": 668,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 666,
"name": "oracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 196,
"src": "1204:6:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Oracle_$4841",
"typeString": "contract Oracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 667,
"name": "_oracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 634,
"src": "1213:7:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Oracle_$4841",
"typeString": "contract Oracle"
}
},
"src": "1204:16:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Oracle_$4841",
"typeString": "contract Oracle"
}
},
"id": 669,
"nodeType": "ExpressionStatement",
"src": "1204:16:3"
},
{
"body": {
"id": 702,
"nodeType": "Block",
"src": "1312:223:3",
"statements": [
{
"assignments": [
681
],
"declarations": [
{
"constant": false,
"id": 681,
"name": "outcomeToken",
"nodeType": "VariableDeclaration",
"scope": 702,
"src": "1326:25:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_OutcomeToken_$5793",
"typeString": "contract OutcomeToken"
},
"typeName": {
"contractScope": null,
"id": 680,
"name": "OutcomeToken",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 5793,
"src": "1326:12:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_OutcomeToken_$5793",
"typeString": "contract OutcomeToken"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 690,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 686,
"name": "outcomeTokenMasterCopy",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 630,
"src": "1397:22:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 685,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "NewExpression",
"src": "1375:21:3",
"typeDescriptions": {
"typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_OutcomeTokenProxy_$5721_$",
"typeString": "function (address) returns (contract OutcomeTokenProxy)"
},
"typeName": {
"contractScope": null,
"id": 684,
"name": "OutcomeTokenProxy",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 5721,
"src": "1379:17:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_OutcomeTokenProxy_$5721",
"typeString": "contract OutcomeTokenProxy"
}
}
},
"id": 687,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1375:45:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_OutcomeTokenProxy_$5721",
"typeString": "contract OutcomeTokenProxy"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_OutcomeTokenProxy_$5721",
"typeString": "contract OutcomeTokenProxy"
}
],
"id": 683,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1367:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 688,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1367:54:3",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"id": 682,
"name": "OutcomeToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 5793,
"src": "1354:12:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_OutcomeToken_$5793_$",
"typeString": "type(contract OutcomeToken)"
}
},
"id": 689,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1354:68:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_OutcomeToken_$5793",
"typeString": "contract OutcomeToken"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "1326:96:3"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 694,
"name": "outcomeToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 681,
"src": "1455:12:3",
"typeDescriptions": {
"typeIdentifier": "t_contract$_OutcomeToken_$5793",
"typeString": "contract OutcomeToken"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_OutcomeToken_$5793",
"typeString": "contract OutcomeToken"
}
],
"expression": {
"argumentTypes": null,
"id": 691,
"name": "outcomeTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 203,
"src": "1436:13:3",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_OutcomeToken_$5793_$dyn_storage",
"typeString": "contract OutcomeToken[] storage ref"
}