Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0x49244BD018Ca9fd1f06ecC07B9E9De773246e5AA
Balance 0 ETH
Nonce 1
Code Size 14751 bytes
Indexed Transactions 0 (1 on-chain, 1.6% indexed)
External Etherscan · Sourcify

Contract Bytecode

14751 bytes
Copy Bytecode
0x608060405234801561001057600080fd5b50600436106104805760003560e01c806392394f3211610257578063cb1d841811610146578063eceba876116100c3578063f45346dc11610087578063f45346dc14610ecb578063f7095d9d14610f01578063f76514c714610f1e578063fb03eaea14610f44578063fd1e5e7a14610f4c57610480565b8063eceba87614610e59578063ef7cd23414610e76578063efb106ba14610e7e578063f28b095614610ea4578063f2cf48f614610ec357610480565b8063df9fde7e1161010a578063df9fde7e14610e03578063e2d8edaf14610e0b578063e3fa4b0414610e2a578063e4372c3c14610e49578063e79609e214610e5157610480565b8063cb1d841814610db1578063ce483e8814610db9578063d372fbcd14610dd6578063d8270dce14610dde578063da834ac414610de657610480565b8063a9f4185d116101d4578063b62418a111610198578063b62418a114610d74578063b80907f214610d91578063becb1f3514610d99578063c38c0fa714610da1578063c675f22214610da957610480565b8063a9f4185d14610d2e578063ad7a672f14610d36578063af4cd45714610d3e578063b4eeb2d714610d46578063b53b321e14610d4e57610480565b80639ab448d91161021b5780639ab448d914610c215780639f7e1bf614610c29578063a63f135014610c4f578063a7e8d76214610c57578063a95b973c14610c5f57610480565b806392394f3214610ba65780639517317c14610bc5578063961be39114610beb5780639672e3ba14610bf357806398fedb0914610c1957610480565b80635f723b50116103735780637262f993116102f05780638689526b116102b45780638689526b14610b095780638699d43414610b2e578063879eefa514610b4d5780638d2ecfba14610b6c5780638f93bffe14610b9e57610480565b80637262f99314610acc57806377e71ee514610ae95780637a0d8f8a14610af15780637c377d7414610af95780637f7c390a14610b0157610480565b80636c9fa59e116103375780636c9fa59e14610a545780636f33ebb714610a5c5780636f70b9cb14610a645780636f84676e14610a6c578063705123dc14610ac457610480565b80635f723b50146109b757806360d9b489146109bf578063622ae175146109dc57806369328dec14610a015780636c23f72314610a3757610480565b80632c7faa4d1161040157806345a62887116103c557806345a62887146107dd57806347d20e3b1461092e57806348bc4eba146109545780635449aed51461095c57806357d7a3c41461099a57610480565b80632c7faa4d146106e15780633940b675146107065780633a5371761461070e5780633ec6b034146107af5780634591c060146107d557610480565b80630dcde5f5116104485780630dcde5f51461052b57806311a80ffc1461053357806311be56d71461068d57806313bf24c1146106b3578063180ef158146106bb57610480565b806301ba1fa314610485578063047825c7146104bf57806306ae7095146104d95780630bcde26d146104fd5780630d5a9e4d14610505575b600080fd5b6104ab6004803603602081101561049b57600080fd5b50356001600160a01b0316610f54565b604080519115158252519081900360200190f35b6104c7610fe2565b60408051918252519081900360200190f35b6104e1610fe9565b604080516001600160a01b039092168252519081900360200190f35b6104c7610ff8565b6104c76004803603602081101561051b57600080fd5b50356001600160a01b0316610ffe565b6104c7611010565b6104e1600480360361010081101561054a57600080fd5b8135916020810135916001600160a01b03604083013581169260608101359260808201359092169181019060c0810160a0820135600160201b81111561058f57600080fd5b8201836020820111156105a157600080fd5b803590602001918460208302840111600160201b831117156105c257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561061957600080fd5b82018360208201111561062b57600080fd5b803590602001918460018302840111600160201b8311171561064c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061106a945050505050565b6104ab600480360360208110156106a357600080fd5b50356001600160a01b031661121c565b6104c7611485565b6104ab600480360360208110156106d157600080fd5b50356001600160a01b0316611515565b6104c7600480360360408110156106f757600080fd5b50803590602001351515611589565b6104e16115e7565b6104e16004803603602081101561072457600080fd5b810190602081018135600160201b81111561073e57600080fd5b82018360208201111561075057600080fd5b803590602001918460208302840111600160201b8311171561077157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506115f6945050505050565b6104c7600480360360208110156107c557600080fd5b50356001600160a01b03166117b6565b6104ab6117c8565b6104e1600480360360e08110156107f357600080fd5b8135916020810135916001600160a01b03604083013581169260608101359260808201359092169181019060c0810160a0820135600160201b81111561083857600080fd5b82018360208201111561084a57600080fd5b803590602001918460208302840111600160201b8311171561086b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108ba57600080fd5b8201836020820111156108cc57600080fd5b803590602001918460018302840111600160201b831117156108ed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611922945050505050565b6104ab6004803603602081101561094457600080fd5b50356001600160a01b0316611acd565b6104e1611ae1565b6109816004803603604081101561097257600080fd5b50803590602001351515611af0565b6040805192835260208301919091528051918290030190f35b6104e1600480360360208110156109b057600080fd5b5035611b48565b6104c7611b63565b6104c7600480360360208110156109d557600080fd5b5035611b69565b6104e1600480360360408110156109f257600080fd5b50803590602001351515611b87565b6104ab60048036036060811015610a1757600080fd5b506001600160a01b03813581169160208101359160409091013516611bb4565b6104e160048036036020811015610a4d57600080fd5b5035611dbc565b6104e1611dd7565b6104c7611de6565b6104e1611dec565b610a74611f8c565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610ab0578181015183820152602001610a98565b505050509050019250505060405180910390f35b6104c7611fe4565b6104c760048036036020811015610ae257600080fd5b5035611fea565b6104c7612069565b6104e161206f565b6104c761207e565b6104e1612084565b6104e160048036036040811015610b1f57600080fd5b50803590602001351515612093565b6104e160048036036020811015610b4457600080fd5b5035151561223a565b6104c760048036036020811015610b6357600080fd5b503515156122bf565b6104ab60048036036060811015610b8257600080fd5b506001600160a01b0381351690602081013590604001356122db565b6104c76123ca565b6104e160048036036020811015610bbc57600080fd5b503515156124a3565b6104ab60048036036020811015610bdb57600080fd5b50356001600160a01b03166124ba565b6104e1612548565b6104c760048036036020811015610c0957600080fd5b50356001600160a01b0316612557565b6104ab612569565b6104ab612682565b6104ab60048036036020811015610c3f57600080fd5b50356001600160a01b0316612792565b6104e16127b0565b6104c76127bf565b6104e1600480360360c0811015610c7557600080fd5b8135916020810135916001600160a01b03604083013581169260608101359260808201359092169181019060c0810160a0820135600160201b811115610cba57600080fd5b820183602082011115610ccc57600080fd5b803590602001918460018302840111600160201b83111715610ced57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506127e5945050505050565b6104e161294d565b6104c761295c565b6104c7612962565b6104c7612add565b6104c760048036036020811015610d6457600080fd5b50356001600160a01b0316612ae3565b6104ab60048036036020811015610d8a57600080fd5b5035612af5565b6104e1612b2d565b6104ab612b3c565b6104c7612b4d565b6104c7612b53565b6104e1612b59565b6104ab60048036036020811015610dcf57600080fd5b5035612b68565b6104ab612b95565b6104c7612ba6565b6104c760048036036020811015610dfc57600080fd5b5035612bac565b6104c7612bcd565b6104e160048036036020811015610e2157600080fd5b50351515612c43565b6104e160048036036020811015610e4057600080fd5b50351515612cda565b6104c7612d5f565b6104c7612d64565b6104e160048036036020811015610e6f57600080fd5b5035612ebb565b6104c7612ed6565b6104c760048036036020811015610e9457600080fd5b50356001600160a01b0316612edc565b6104e160048036036020811015610eba57600080fd5b50351515612eee565b6104c7612f04565b6104ab60048036036060811015610ee157600080fd5b506001600160a01b03813581169160208101359160409091013516612f0f565b6104ab60048036036020811015610f1757600080fd5b50356130a7565b6104ab60048036036020811015610f3457600080fd5b50356001600160a01b0316613321565b6104c761343f565b6104c7613445565b600080826001600160a01b031663616db7986040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9057600080fd5b505afa158015610fa4573d6000803e3d6000fd5b505050506040513d6020811015610fba57600080fd5b50516000908152601160205260409020546001600160a01b038481169116149150505b919050565b600f545b90565b6015546001600160a01b031681565b601c5481565b601d6020526000908152604090205481565b60008061101d600061223a565b6001600160a01b0381166000908152601d60205260409020549091508015611048579150610fe69050565b601e5461106057611057613595565b92505050610fe6565b601e549250505090565b600061107d89898989893360028a61359b565b9050600260009054906101000a90046001600160a01b03166001600160a01b031663ed4d52448a8484338a8e8b8b6040518963ffffffff1660e01b81526004018089815260200180602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018581526020018060200184815260200183810383528a818151815260200191508051906020019080838360005b8381101561115557818101518382015260200161113d565b50505050905090810190601f1680156111825780820380516001836020036101000a031916815260200191505b508381038252855181528551602091820191808801910280838360005b838110156111b757818101518382015260200161119f565b505050509050019a5050505050505050505050602060405180830381600087803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b505050506040513d602081101561120e57600080fd5b505098975050505050505050565b60003361122881612792565b61123157600080fd5b336000908152601260209081526040808320805460ff1916905560018252808320548151635d6c264f60e11b8152915190939261134e926001600160a01b0387169263bad84c9e92600480840193919291829003018186803b15801561129657600080fd5b505afa1580156112aa573d6000803e3d6000fd5b505050506040513d60208110156112c057600080fd5b505160055460408051638c5e2f8760e01b81526001600160a01b0388811660048301526000602483015291519190921691638c5e2f87916044808301926020929190829003018186803b15801561131657600080fd5b505afa15801561132a573d6000803e3d6000fd5b505050506040513d602081101561134057600080fd5b50519063ffffffff6137af16565b905061135b308333611bb4565b5060145461136f908263ffffffff6137d616565b601455602080546002546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018790529051919092169263095ea7b392604480820193918290030181600087803b1580156113c857600080fd5b505af11580156113dc573d6000803e3d6000fd5b505050506040513d60208110156113f257600080fd5b50506040805163469767dd60e11b81526001600160a01b0385811660048301526024820185905260448201849052915191871691638d2ecfba916064808201926020929091908290030181600087803b15801561144e57600080fd5b505af1158015611462573d6000803e3d6000fd5b505050506040513d602081101561147857600080fd5b5060019695505050505050565b60215460085460408051632c6a65eb60e21b81526001600160a01b03928316600482015290516000938493169163b1a997ac91602480830192602092919082900301818787803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b5051905061150f816137eb565b91505090565b600061152033612792565b61152957600080fd5b6000611567836001600160a01b031663bad84c9e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561129657600080fd5b60145490915061157d908263ffffffff6137d616565b60145550600192915050565b6000806115bc611598846122bf565b6115b06115a361384b565b879063ffffffff6137d616565b9063ffffffff61385116565b905082156115de576115db81660b342eb7c3800063ffffffff61386616565b90505b90505b92915050565b6009546001600160a01b031681565b600a5460405163173029d760e01b815260206004820181815284516024840152845160009485946001600160a01b039091169363173029d79388939092839260449091019181860191028083838b5b8381101561165d578181015183820152602001611645565b505050509050019250505060206040518083038186803b15801561168057600080fd5b505afa158015611694573d6000803e3d6000fd5b505050506040513d60208110156116aa57600080fd5b5051905060006116b982612ebb565b90506001600160a01b0381166117af57600254604080516313d9ebc960e21b815260048101858152602482019283528751604483015287516001600160a01b0390941693634f67af249387938a93926064909101906020808601910280838360005b8381101561173357818101518382015260200161171b565b505050509050019350505050602060405180830381600087803b15801561175957600080fd5b505af115801561176d573d6000803e3d6000fd5b505050506040513d602081101561178357600080fd5b5051600083815260136020526040902080546001600160a01b0319166001600160a01b03831617905590505b9392505050565b60186020526000908152604090205481565b60006117d2612682565b506117db612b3c565b156117e557600080fd5b6117ee33612792565b6117f757600080fd5b600a80546001600160a01b0319163317905561189a611814613878565b600260009054906101000a90046001600160a01b03166001600160a01b031663188ec3566040518163ffffffff1660e01b815260040160206040518083038186803b15801561186257600080fd5b505afa158015611876573d6000803e3d6000fd5b505050506040513d602081101561188c57600080fd5b50519063ffffffff61386616565b600c55600254600a5460408051638ec6a77160e01b81526001600160a01b03928316600482015290519190921691638ec6a7719160248083019260209291908290030181600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050506040513d602081101561191957600080fd5b50600191505090565b600061193788888888883389516103e861359b565b9050600260009054906101000a90046001600160a01b03166001600160a01b0316633f6d798a89848433898d8a6040518863ffffffff1660e01b81526004018088815260200180602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200180602001838103835289818151815260200191508051906020019080838360005b83811015611a085781810151838201526020016119f0565b50505050905090810190601f168015611a355780820380516001836020036101000a031916815260200191505b508381038252845181528451602091820191808701910280838360005b83811015611a6a578181015183820152602001611a52565b505050509050019950505050505050505050602060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b5050979650505050505050565b6009546001600160a01b0390811691161490565b6021546001600160a01b031681565b600080611afc836122bf565b90506000611b0861384b565b9050611b3e81611b3284611b26816115b08b8663ffffffff6137d616565b9063ffffffff6137af16565b9063ffffffff61386616565b9250509250929050565b6011602052600090815260409020546001600160a01b031681565b60105490565b60078181548110611b7657fe5b600091825260209091200154905081565b600080611b948484611589565b6000908152601160205260409020546001600160a01b0316949350505050565b600082611bc3575060016117af565b600254604080516301120afb60e51b815233600482015290516001600160a01b03909216916322415f60916024808201926020929091908290030181600087803b158015611c1057600080fd5b505af1158015611c24573d6000803e3d6000fd5b505050506040513d6020811015611c3a57600080fd5b505180611cba57506002546040805163e62b888960e01b815233600482015290516001600160a01b039092169163e62b888991602480820192602092909190829003018186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d6020811015611cb757600080fd5b50515b80611ccf57506009546001600160a01b031633145b611cd857600080fd5b601f54611ceb908463ffffffff6137d616565b601f556001600160a01b038216600090815260016020526040902054611d17908463ffffffff6137d616565b6001600160a01b038084166000908152600160209081526040808320949094558054845163a9059cbb60e01b8152898516600482015260248101899052945193169363a9059cbb9360448083019491928390030190829087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b505050506040513d6020811015611da757600080fd5b5051611db257600080fd5b5060019392505050565b6000908152601160205260409020546001600160a01b031690565b6005546001600160a01b031681565b601e5481565b6000611df6612b3c565b611dff57600080fd5b600b54611e0b57600080fd5b6000611e18600b54612ebb565b90506000816001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5557600080fd5b505afa158015611e69573d6000803e3d6000fd5b505050506040513d6020811015611e7f57600080fd5b5051604080516391d76bbb60e01b815290516001600160a01b03909216916391d76bbb91600480820192602092909190829003018186803b158015611ec357600080fd5b505afa158015611ed7573d6000803e3d6000fd5b505050506040513d6020811015611eed57600080fd5b5051600d5490915081101580611f7d5750600c54600260009054906101000a90046001600160a01b03166001600160a01b031663188ec3566040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4f57600080fd5b505afa158015611f63573d6000803e3d6000fd5b505050506040513d6020811015611f7957600080fd5b5051115b611f8657600080fd5b50905090565b60606007805480602002602001604051908101604052809291908181526020018280548015611fda57602002820191906000526020600020905b815481526020019060010190808311611fc6575b5050505050905090565b6103e881565b6000611ff4611dec565b6001600160a01b031663da834ac4836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561203757600080fd5b505afa15801561204b573d6000803e3d6000fd5b505050506040513d602081101561206157600080fd5b505192915050565b600c5490565b6002546001600160a01b031681565b600d5490565b6004546001600160a01b031681565b6000806120a08484611589565b6000818152601160205260409020549091506001600160a01b031661221b576000806120cc8686611af0565b6016546002546040805163c9c2e4b360e01b81526001600160a01b0392831660048201526024810189905260448101859052606481018690528a156084820152905194965092945060009391169163c9c2e4b39160a480830192602092919082900301818787803b15801561214057600080fd5b505af1158015612154573d6000803e3d6000fd5b505050506040513d602081101561216a57600080fd5b5051600085815260116020908152604080832080546001600160a01b0319166001600160a01b038087169182179092556002548351633033aadf60e11b81526004810192909252602482018b90528c15156044830152925195965091169363606755be93606480840194938390030190829087803b1580156121eb57600080fd5b505af11580156121ff573d6000803e3d6000fd5b505050506040513d602081101561221557600080fd5b50505050505b6000908152601160205260409020546001600160a01b03169392505050565b60006115e1600260009054906101000a90046001600160a01b03166001600160a01b031663188ec3566040518163ffffffff1660e01b815260040160206040518083038186803b15801561228d57600080fd5b505afa1580156122a1573d6000803e3d6000fd5b505050506040513d60208110156122b757600080fd5b505183611b87565b6000816122d3576122ce61387f565b6115e1565b6115e1613886565b6003546000906001600160a01b031633146122f557600080fd5b6001600160a01b0384166000908152601260205260409020805460ff19166001179055612323338486612f0f565b50601454612337908363ffffffff61386616565b601455600254600354604080516317674e4d60e01b81526001600160a01b0388811660048301529283166024820152905191909216916317674e4d9160448083019260209291908290030181600087803b15801561239457600080fd5b505af11580156123a8573d6000803e3d6000fd5b505050506040513d60208110156123be57600080fd5b50600195945050505050565b6000806123d76000612cda565b6001600160a01b0381166000908152601d60205260409020549091508015612402579150610fe69050565b61240a61388d565b6001600160a01b038084166000908152601d60209081526040808320859055601e8590556002548151632ce5338b60e21b81526004810187905291519596509093169363b394ce2c93602480820194918390030190829087803b15801561247057600080fd5b505af1158015612484573d6000803e3d6000fd5b505050506040513d602081101561249a57600080fd5b50909250505090565b60006115e16124b4611814846122bf565b83612093565b600080826001600160a01b031663c38c0fa76040518163ffffffff1660e01b815260040160206040518083038186803b1580156124f657600080fd5b505afa15801561250a573d6000803e3d6000fd5b505050506040513d602081101561252057600080fd5b505190506001600160a01b03831661253782612ebb565b6001600160a01b0316149392505050565b6020546001600160a01b031681565b60016020526000908152604090205481565b60215460085460408051630d1a8eb160e11b81526001600160a01b039283166004820152905160009342938593911691631a351d6291602480820192602092909190829003018186803b1580156125bf57600080fd5b505afa1580156125d3573d6000803e3d6000fd5b505050506040513d60208110156125e957600080fd5b505182039050620151808111156126795760215460085460408051632c6a65eb60e21b81526001600160a01b0392831660048201529051919092169163b1a997ac9160248083019260209291908290030181600087803b15801561264c57600080fd5b505af1158015612660573d6000803e3d6000fd5b505050506040513d602081101561267657600080fd5b50505b60019250505090565b600061268c612b3c565b1561269657600080fd5b60085460408051630238d35960e41b815290516000926001600160a01b03169163238d3590916004808301926020929190829003018186803b1580156126db57600080fd5b505afa1580156126ef573d6000803e3d6000fd5b505050506040513d602081101561270557600080fd5b5051905061271a81600263ffffffff61385116565b600d5561273561272861391e565b829063ffffffff61385116565b600e556127646001611b32600261274a613923565b0360020a6115b06003600e5461385190919063ffffffff16565b601055612787612772613928565b600e549060010160020a63ffffffff61385116565b600f55506001905090565b6001600160a01b031660009081526012602052604090205460ff1690565b6003546001600160a01b031690565b60006127e06127cc612d64565b6127d4613445565b9063ffffffff61392d16565b905090565b60006127fa87878787873360026103e861359b565b9050600260009054906101000a90046001600160a01b03166001600160a01b0316632280068d88848433888c6040518763ffffffff1660e01b81526004018087815260200180602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156128c65781810151838201526020016128ae565b50505050905090810190601f1680156128f35780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561291757600080fd5b505af115801561292b573d6000803e3d6000fd5b505050506040513d602081101561294157600080fd5b50509695505050505050565b6016546001600160a01b031681565b601f5481565b60008061296f6000612cda565b9050600061297d6000612eee565b6001600160a01b03831660009081526017602052604090205490915080156129a9579250610fe6915050565b601a546129bc576129b8613944565b601a555b60048054601a546040805163c19b477d60e01b81526001600160a01b0387811695820195909552602481019290925251929091169163c19b477d91604480820192602092909190829003018186803b158015612a1757600080fd5b505afa158015612a2b573d6000803e3d6000fd5b505050506040513d6020811015612a4157600080fd5b50516001600160a01b038085166000908152601760209081526040808320859055601a8590556002548151635ad1462760e11b81526004810187905291519596509093169363b5a28c4e93602480820194918390030190829087803b158015612aa957600080fd5b505af1158015612abd573d6000803e3d6000fd5b505050506040513d6020811015612ad357600080fd5b5090935050505090565b601b5481565b60196020526000908152604090205481565b6005546000906001600160a01b03163314612b0f57600080fd5b601454612b22908363ffffffff6137d616565b601455506001919050565b6008546001600160a01b031690565b600a546001600160a01b0316151590565b60065490565b60145490565b600a546001600160a01b031690565b6005546000906001600160a01b03163314612b8257600080fd5b601454612b22908363ffffffff61386616565b600a546001600160a01b0316331490565b60005481565b600060078281548110612bbb57fe5b90600052602060002001549050919050565b600080612c29612bdb612b53565b600960009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561186257600080fd5b905061150f612c36613950565b829063ffffffff6137af16565b60006115e16124b4612c54846122bf565b600260009054906101000a90046001600160a01b03166001600160a01b031663188ec3566040518163ffffffff1660e01b815260040160206040518083038186803b158015612ca257600080fd5b505afa158015612cb6573d6000803e3d6000fd5b505050506040513d6020811015612ccc57600080fd5b50519063ffffffff6137d616565b60006115e1600260009054906101000a90046001600160a01b03166001600160a01b031663188ec3566040518163ffffffff1660e01b815260040160206040518083038186803b158015612d2d57600080fd5b505afa158015612d41573d6000803e3d6000fd5b505050506040513d6020811015612d5757600080fd5b505183612093565b600281565b6000612d6e612682565b506000612d7b6000612cda565b90506000612d896000612eee565b6001600160a01b0383166000908152601860205260409020549091508015612db5579250610fe6915050565b601b54612dc357601054601b555b60048054601b5460105460408051630c29faa960e41b81526001600160a01b03888116968201969096526024810193909352604483019190915251929091169163c29faa9091606480820192602092909190829003018186803b158015612e2957600080fd5b505afa158015612e3d573d6000803e3d6000fd5b505050506040513d6020811015612e5357600080fd5b50516001600160a01b038085166000908152601860209081526040808320859055601b859055600254815163973df5b960e01b81526004810187905291519596509093169363973df5b993602480820194918390030190829087803b158015612aa957600080fd5b6000908152601360205260409020546001600160a01b031690565b601a5481565b60176020526000908152604090205481565b60006115e16124b4612c546002611b26866122bf565b660b342eb7c3800081565b600254604080516301120afb60e51b815233600482015290516000926001600160a01b0316916322415f6091602480830192602092919082900301818787803b158015612f5b57600080fd5b505af1158015612f6f573d6000803e3d6000fd5b505050506040513d6020811015612f8557600080fd5b505180612f9a5750336001600160a01b038516145b80612faf57506009546001600160a01b031633145b612fb857600080fd5b60025460408051636743dcaf60e01b81526001600160a01b0387811660048301523060248301526044820187905291519190921691636743dcaf9160648083019260209291908290030181600087803b15801561301457600080fd5b505af1158015613028573d6000803e3d6000fd5b505050506040513d602081101561303e57600080fd5b5050601f54613053908463ffffffff61386616565b601f556001600160a01b03821660009081526001602052604090205461307f908463ffffffff61386616565b6001600160a01b03831660009081526001602081905260409091209190915590509392505050565b6000806130b5600b54612ebb565b905060006130c284612ebb565b905060006001600160a01b038316156131ab57826001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561310e57600080fd5b505afa158015613122573d6000803e3d6000fd5b505050506040513d602081101561313857600080fd5b5051604080516391d76bbb60e01b815290516001600160a01b03909216916391d76bbb91600480820192602092909190829003018186803b15801561317c57600080fd5b505afa158015613190573d6000803e3d6000fd5b505050506040513d60208110156131a657600080fd5b505190505b6000826001600160a01b031663b80907f26040518163ffffffff1660e01b815260040160206040518083038186803b1580156131e657600080fd5b505afa1580156131fa573d6000803e3d6000fd5b505050506040513d602081101561321057600080fd5b5051604080516391d76bbb60e01b815290516001600160a01b03909216916391d76bbb91600480820192602092909190829003018186803b15801561325457600080fd5b505afa158015613268573d6000803e3d6000fd5b505050506040513d602081101561327e57600080fd5b505190508181111561329057600b8690555b600d5481106123be57600a60009054906101000a90046001600160a01b03166001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156132e957600080fd5b505af11580156132fd573d6000803e3d6000fd5b505050506040513d602081101561331357600080fd5b505050600195945050505050565b600080826001600160a01b031663f1be16796040518163ffffffff1660e01b815260040160206040518083038186803b15801561335d57600080fd5b505afa158015613371573d6000803e3d6000fd5b505050506040513d602081101561338757600080fd5b505190506001600160a01b03811615806133a757506133a581612792565b155b156133b6576000915050610fdd565b806001600160a01b031663f76514c7846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561340c57600080fd5b505afa158015613420573d6000803e3d6000fd5b505050506040513d602081101561343657600080fd5b50519392505050565b600e5490565b6000806134526000612cda565b905060006134606000612eee565b6001600160a01b038316600090815260196020526040902054909150801561348c579250610fe6915050565b601c5461349a57601054601c555b60048054601c54601054604080516001620ddc4760e11b031981526001600160a01b03888116968201969096526024810193909352604483019190915251929091169163ffe4477291606480820192602092909190829003018186803b15801561350357600080fd5b505afa158015613517573d6000803e3d6000fd5b505050506040513d602081101561352d57600080fd5b50516001600160a01b038085166000908152601960209081526040808320859055601c8590556002548151631631024b60e21b8152600481018790529151959650909316936358c4092c93602480820194918390030190829087803b158015612aa957600080fd5b61271090565b6008546015546000916001600160a01b039081169163fe98184d918791166135c16127bf565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561362957600080fd5b505af115801561363d573d6000803e3d6000fd5b505050506040513d602081101561365357600080fd5b50506015546002546040805163200a231760e21b81526001600160a01b039283166004820152602481018d9052604481018c90528a83166064820152608481018a905288831660a482015287831660c482015260e481018790526101048101869052905191909216916380288c5c916101248083019260209291908290030181600087803b1580156136e457600080fd5b505af11580156136f8573d6000803e3d6000fd5b505050506040513d602081101561370e57600080fd5b50516001600160a01b03808216600081815260126020526040808220805460ff191660019081179091556005548251631da4048760e11b81526004810195909552908901602485015260448401889052905194955090921692633b48090e9260648084019391929182900301818387803b15801561378b57600080fd5b505af115801561379f573d6000803e3d6000fd5b5050505098975050505050505050565b6000826137be575060006115e1565b828202828482816137cb57fe5b04146115de57600080fd5b6000828211156137e557600080fd5b50900390565b60006115e1670de0b6b3a76400006115b084600860009054906101000a90046001600160a01b03166001600160a01b031663238d35906040518163ffffffff1660e01b815260040160206040518083038186803b15801561131657600080fd5b610e1090565b60008082848161385d57fe5b04949350505050565b6000828201838110156115de57600080fd5b624f1a0090565b62093a8090565b6201518090565b600080613898611485565b905060006138a4612bcd565b601e5490915060009015806138b7575081155b156138cb576138c4613595565b90506138e7565b6138e4826115b085601e546137af90919063ffffffff16565b90505b6139166138f2613595565b61390a6138fd613955565b849063ffffffff61392d16565b9063ffffffff61395a16565b935050505090565b602890565b601490565b600890565b600081831061393d5750816115e1565b50806115e1565b678ac7230489e8000090565b600590565b600390565b600081831161393d5750816115e156fea265627a7a72315820a0a5112f961375f02fefe17f5fcad0954846a2ad7c1af51cec07cb975fbc79ee64736f6c634300050f0032

Verified Source Code Partial Match

Compiler: v0.5.15+commit.6a57276f EVM: istanbul
Universe.sol 1398 lines
pragma solidity 0.5.15;

contract IAugur {
    function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] memory _parentPayoutNumerators) public returns (IUniverse);
    function isKnownUniverse(IUniverse _universe) public view returns (bool);
    function trustedCashTransfer(address _from, address _to, uint256 _amount) public returns (bool);
    function isTrustedSender(address _address) public returns (bool);
    function onCategoricalMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, bytes32[] memory _outcomes) public returns (bool);
    function onYesNoMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash) public returns (bool);
    function onScalarMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, int256[] memory _prices, uint256 _numTicks)  public returns (bool);
    function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, address _initialReporter, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] memory _payoutNumerators, string memory _description, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime) public returns (bool);
    function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _size, uint256 _disputeRound) public returns (bool);
    function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked, string memory description, uint256[] memory _payoutNumerators, uint256 _currentStake, uint256 _stakeRemaining, uint256 _disputeRound) public returns (bool);
    function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime, bool _pacingOn, uint256 _totalRepStakedInPayout, uint256 _totalRepStakedInMarket, uint256 _disputeRound) public returns (bool);
    function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool);
    function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool);
    function logMarketFinalized(IUniverse _universe, uint256[] memory _winningPayoutNumerators) public returns (bool);
    function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool);
    function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool);
    function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool);
    function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool);
    function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets, uint256 _fees) public returns (bool);
    function logMarketOIChanged(IUniverse _universe, IMarket _market) public returns (bool);
    function logTradingProceedsClaimed(IUniverse _universe, address _sender, address _market, uint256 _outcome, uint256 _numShares, uint256 _numPayoutTokens, uint256 _fees) public returns (bool);
    function logUniverseForked(IMarket _forkingMarket) public returns (bool);
    function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool);
    function logReputationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logReputationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logShareTokensBalanceChanged(address _account, IMarket _market, uint256 _outcome, uint256 _balance) public returns (bool);
    function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool);
    function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logDisputeWindowCreated(IDisputeWindow _disputeWindow, uint256 _id, bool _initial) public returns (bool);
    function logParticipationTokensRedeemed(IUniverse universe, address _sender, uint256 _attoParticipationTokens, uint256 _feePayoutShare) public returns (bool);
    function logTimestampSet(uint256 _newTimestamp) public returns (bool);
    function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool);
    function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool);
    function logParticipationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool);
    function logParticipationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logParticipationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool);
    function logMarketRepBondTransferred(address _universe, address _from, address _to) public returns (bool);
    function logWarpSyncDataUpdated(address _universe, uint256 _warpSyncHash, uint256 _marketEndTime) public returns (bool);
    function isKnownFeeSender(address _feeSender) public view returns (bool);
    function lookup(bytes32 _key) public view returns (address);
    function getTimestamp() public view returns (uint256);
    function getMaximumMarketEndDate() public returns (uint256);
    function isKnownMarket(IMarket _market) public view returns (bool);
    function derivePayoutDistributionHash(uint256[] memory _payoutNumerators, uint256 _numTicks, uint256 numOutcomes) public view returns (bytes32);
    function logValidityBondChanged(uint256 _validityBond) public returns (bool);
    function logDesignatedReportStakeChanged(uint256 _designatedReportStake) public returns (bool);
    function logNoShowBondChanged(uint256 _noShowBond) public returns (bool);
    function logReportingFeeChanged(uint256 _reportingFee) public returns (bool);
    function getUniverseForkIndex(IUniverse _universe) public view returns (uint256);
}

contract IDisputeWindowFactory {
    function createDisputeWindow(IAugur _augur, uint256 _disputeWindowId, uint256 _windowDuration, uint256 _startTime, bool _participationTokensEnabled) public returns (IDisputeWindow);
}

contract IMarketFactory {
    function createMarket(IAugur _augur, uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, address _sender, uint256 _numOutcomes, uint256 _numTicks) public returns (IMarket _market);
}

contract IOICashFactory {
    function createOICash(IAugur _augur) public returns (IOICash);
}

contract IReputationTokenFactory {
    function createReputationToken(IAugur _augur, IUniverse _parentUniverse) public returns (IV2ReputationToken);
}

contract IOwnable {
    function getOwner() public view returns (address);
    function transferOwnership(address _newOwner) public returns (bool);
}

contract ITyped {
    function getTypeName() public view returns (bytes32);
}

library SafeMathUint256 {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a <= b) {
            return a;
        } else {
            return b;
        }
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a >= b) {
            return a;
        } else {
            return b;
        }
    }

    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            uint256 x = (y + 1) / 2;
            z = y;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }

    function getUint256Min() internal pure returns (uint256) {
        return 0;
    }

    function getUint256Max() internal pure returns (uint256) {
        // 2 ** 256 - 1
        return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
    }

    function isMultipleOf(uint256 a, uint256 b) internal pure returns (bool) {
        return a % b == 0;
    }

    // Float [fixed point] Operations
    function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, b), base);
    }

    function fxpDiv(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, base), b);
    }
}

interface IERC1155 {

    /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred,
    ///      including zero value transfers as well as minting or burning.
    /// Operator will always be msg.sender.
    /// Either event from address `0x0` signifies a minting operation.
    /// An event to address `0x0` signifies a burning or melting operation.
    /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may
    /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID.
    /// To define a token ID with no initial balance, the contract SHOULD emit the TransferSingle event
    /// from `0x0` to `0x0`, with the token creator as `_operator`.
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );

    /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred,
    ///      including zero value transfers as well as minting or burning.
    ///Operator will always be msg.sender.
    /// Either event from address `0x0` signifies a minting operation.
    /// An event to address `0x0` signifies a burning or melting operation.
    /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may
    /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID.
    /// To define multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event
    /// from `0x0` to `0x0`, with the token creator as `_operator`.
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /// @dev MUST emit when an approval is updated.
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /// @dev MUST emit when the URI is updated for a token ID.
    /// URIs are defined in RFC 3986.
    /// The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema".
    event URI(
        string value,
        uint256 indexed id
    );

    /// @notice Transfers value amount of an _id from the _from address to the _to address specified.
    /// @dev MUST emit TransferSingle event on success.
    /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll).
    /// MUST throw if `_to` is the zero address.
    /// MUST throw if balance of sender for token `_id` is lower than the `_value` sent.
    /// MUST throw on any other error.
    /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0).
    /// If so, it MUST call `onERC1155Received` on `_to` and revert if the return value
    /// is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`.
    /// @param from    Source address
    /// @param to      Target address
    /// @param id      ID of the token type
    /// @param value   Transfer amount
    /// @param data    Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external;

    /// @notice Send multiple types of Tokens from a 3rd party in one transfer (with safety call).
    /// @dev MUST emit TransferBatch event on success.
    /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll).
    /// MUST throw if `_to` is the zero address.
    /// MUST throw if length of `_ids` is not the same as length of `_values`.
    ///  MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_values` sent.
    /// MUST throw on any other error.
    /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0).
    /// If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return value
    /// is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`.
    /// @param from    Source addresses
    /// @param to      Target addresses
    /// @param ids     IDs of each token type
    /// @param values  Transfer amounts per token type
    /// @param data    Additional data with no specified format, sent in call to `_to`
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external;

    /// @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
    /// @dev MUST emit the ApprovalForAll event on success.
    /// @param operator  Address to add to the set of authorized operators
    /// @param approved  True if the operator is approved, false to revoke approval
    function setApprovalForAll(address operator, bool approved) external;

    /// @notice Queries the approval status of an operator for a given owner.
    /// @param owner     The owner of the Tokens
    /// @param operator  Address of authorized operator
    /// @return           True if the operator is approved, false if not
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /// @notice Get the balance of an account's Tokens.
    /// @param owner  The address of the token holder
    /// @param id     ID of the Token
    /// @return        The _owner's balance of the Token type requested
    function balanceOf(address owner, uint256 id) external view returns (uint256);

    /// @notice Get the total supply of a Token.
    /// @param id     ID of the Token
    /// @return        The total supply of the Token type requested
    function totalSupply(uint256 id) external view returns (uint256);

    /// @notice Get the balance of multiple account/token pairs
    /// @param owners The addresses of the token holders
    /// @param ids    ID of the Tokens
    /// @return        The _owner's balance of the Token types requested
    function balanceOfBatch(
        address[] calldata owners,
        uint256[] calldata ids
    )
        external
        view
        returns (uint256[] memory balances_);
}

contract IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) public view returns (uint256);
    function transfer(address to, uint256 amount) public returns (bool);
    function transferFrom(address from, address to, uint256 amount) public returns (bool);
    function approve(address spender, uint256 amount) public returns (bool);
    function allowance(address owner, address spender) public view returns (uint256);

    // solhint-disable-next-line no-simple-event-func-name
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ICash is IERC20 {
}

contract IAffiliateValidator {
    function validateReference(address _account, address _referrer) external view returns (bool);
}

contract IDisputeWindow is ITyped, IERC20 {
    function invalidMarketsTotal() external view returns (uint256);
    function validityBondTotal() external view returns (uint256);

    function incorrectDesignatedReportTotal() external view returns (uint256);
    function initialReportBondTotal() external view returns (uint256);

    function designatedReportNoShowsTotal() external view returns (uint256);
    function designatedReporterNoShowBondTotal() external view returns (uint256);

    function initialize(IAugur _augur, IUniverse _universe, uint256 _disputeWindowId, bool _participationTokensEnabled, uint256 _duration, uint256 _startTime) public;
    function trustedBuy(address _buyer, uint256 _attotokens) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getReputationToken() public view returns (IReputationToken);
    function getStartTime() public view returns (uint256);
    function getEndTime() public view returns (uint256);
    function getWindowId() public view returns (uint256);
    function isActive() public view returns (bool);
    function isOver() public view returns (bool);
    function onMarketFinalized() public;
    function redeem(address _account) public returns (bool);
}

contract IMarket is IOwnable {
    enum MarketType {
        YES_NO,
        CATEGORICAL,
        SCALAR
    }

    function initialize(IAugur _augur, IUniverse _universe, uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, address _creator, uint256 _numOutcomes, uint256 _numTicks) public;
    function derivePayoutDistributionHash(uint256[] memory _payoutNumerators) public view returns (bytes32);
    function doInitialReport(uint256[] memory _payoutNumerators, string memory _description, uint256 _additionalStake) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getDisputeWindow() public view returns (IDisputeWindow);
    function getNumberOfOutcomes() public view returns (uint256);
    function getNumTicks() public view returns (uint256);
    function getMarketCreatorSettlementFeeDivisor() public view returns (uint256);
    function getForkingMarket() public view returns (IMarket _market);
    function getEndTime() public view returns (uint256);
    function getWinningPayoutDistributionHash() public view returns (bytes32);
    function getWinningPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getWinningReportingParticipant() public view returns (IReportingParticipant);
    function getReputationToken() public view returns (IV2ReputationToken);
    function getFinalizationTime() public view returns (uint256);
    function getInitialReporter() public view returns (IInitialReporter);
    function getDesignatedReportingEndTime() public view returns (uint256);
    function getValidityBondAttoCash() public view returns (uint256);
    function affiliateFeeDivisor() external view returns (uint256);
    function getNumParticipants() public view returns (uint256);
    function getDisputePacingOn() public view returns (bool);
    function deriveMarketCreatorFeeAmount(uint256 _amount) public view returns (uint256);
    function recordMarketCreatorFees(uint256 _marketCreatorFees, address _sourceAccount, bytes32 _fingerprint) public returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function isFinalizedAsInvalid() public view returns (bool);
    function finalize() public returns (bool);
    function isFinalized() public view returns (bool);
    function getOpenInterest() public view returns (uint256);
}

contract IOICash is IERC20 {
    function initialize(IAugur _augur, IUniverse _universe) external;
}

interface IRepOracle {
    function getLastUpdateTimestamp(address _reputationToken) external view returns (uint256);
    function poke(address _reputationTokenAddress) external returns (uint256);
}

contract IReportingParticipant {
    function getStake() public view returns (uint256);
    function getPayoutDistributionHash() public view returns (bytes32);
    function liquidateLosing() public;
    function redeem(address _redeemer) public returns (bool);
    function isDisavowed() public view returns (bool);
    function getPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getPayoutNumerators() public view returns (uint256[] memory);
    function getMarket() public view returns (IMarket);
    function getSize() public view returns (uint256);
}

contract IInitialReporter is IReportingParticipant, IOwnable {
    function initialize(IAugur _augur, IMarket _market, address _designatedReporter) public;
    function report(address _reporter, bytes32 _payoutDistributionHash, uint256[] memory _payoutNumerators, uint256 _initialReportStake) public;
    function designatedReporterShowed() public view returns (bool);
    function initialReporterWasCorrect() public view returns (bool);
    function getDesignatedReporter() public view returns (address);
    function getReportTimestamp() public view returns (uint256);
    function migrateToNewUniverse(address _designatedReporter) public;
    function returnRepFromDisavow() public;
}

contract IReputationToken is IERC20 {
    function migrateOutByPayout(uint256[] memory _payoutNumerators, uint256 _attotokens) public returns (bool);
    function migrateIn(address _reporter, uint256 _attotokens) public returns (bool);
    function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedDisputeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getTotalMigrated() public view returns (uint256);
    function getTotalTheoreticalSupply() public view returns (uint256);
    function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool);
}

contract IShareToken is ITyped, IERC1155 {
    function initialize(IAugur _augur) external;
    function initializeMarket(IMarket _market, uint256 _numOutcomes, uint256 _numTicks) public;
    function unsafeTransferFrom(address _from, address _to, uint256 _id, uint256 _value) public;
    function unsafeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _values) public;
    function claimTradingProceeds(IMarket _market, address _shareHolder, bytes32 _fingerprint) external returns (uint256[] memory _outcomeFees);
    function getMarket(uint256 _tokenId) external view returns (IMarket);
    function getOutcome(uint256 _tokenId) external view returns (uint256);
    function getTokenId(IMarket _market, uint256 _outcome) public pure returns (uint256 _tokenId);
    function getTokenIds(IMarket _market, uint256[] memory _outcomes) public pure returns (uint256[] memory _tokenIds);
    function buyCompleteSets(IMarket _market, address _account, uint256 _amount) external returns (bool);
    function buyCompleteSetsForTrade(IMarket _market, uint256 _amount, uint256 _longOutcome, address _longRecipient, address _shortRecipient) external returns (bool);
    function sellCompleteSets(IMarket _market, address _holder, address _recipient, uint256 _amount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee);
    function sellCompleteSetsForTrade(IMarket _market, uint256 _outcome, uint256 _amount, address _shortParticipant, address _longParticipant, address _shortRecipient, address _longRecipient, uint256 _price, address _sourceAccount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee);
    function totalSupplyForMarketOutcome(IMarket _market, uint256 _outcome) public view returns (uint256);
    function balanceOfMarketOutcome(IMarket _market, uint256 _outcome, address _account) public view returns (uint256);
    function lowestBalanceOfMarketOutcomes(IMarket _market, uint256[] memory _outcomes, address _account) public view returns (uint256);
}

contract IUniverse {
    function creationTime() external view returns (uint256);
    function marketBalance(address) external view returns (uint256);

    function fork() public returns (bool);
    function updateForkValues() public returns (bool);
    function getParentUniverse() public view returns (IUniverse);
    function createChildUniverse(uint256[] memory _parentPayoutNumerators) public returns (IUniverse);
    function getChildUniverse(bytes32 _parentPayoutDistributionHash) public view returns (IUniverse);
    function getReputationToken() public view returns (IV2ReputationToken);
    function getForkingMarket() public view returns (IMarket);
    function getForkEndTime() public view returns (uint256);
    function getForkReputationGoal() public view returns (uint256);
    function getParentPayoutDistributionHash() public view returns (bytes32);
    function getDisputeRoundDurationInSeconds(bool _initial) public view returns (uint256);
    function getOrCreateDisputeWindowByTimestamp(uint256 _timestamp, bool _initial) public returns (IDisputeWindow);
    function getOrCreateCurrentDisputeWindow(bool _initial) public returns (IDisputeWindow);
    function getOrCreateNextDisputeWindow(bool _initial) public returns (IDisputeWindow);
    function getOrCreatePreviousDisputeWindow(bool _initial) public returns (IDisputeWindow);
    function getOpenInterestInAttoCash() public view returns (uint256);
    function getTargetRepMarketCapInAttoCash() public view returns (uint256);
    function getOrCacheValidityBond() public returns (uint256);
    function getOrCacheDesignatedReportStake() public returns (uint256);
    function getOrCacheDesignatedReportNoShowBond() public returns (uint256);
    function getOrCacheMarketRepBond() public returns (uint256);
    function getOrCacheReportingFeeDivisor() public returns (uint256);
    function getDisputeThresholdForFork() public view returns (uint256);
    function getDisputeThresholdForDisputePacing() public view returns (uint256);
    function getInitialReportMinValue() public view returns (uint256);
    function getPayoutNumerators() public view returns (uint256[] memory);
    function getReportingFeeDivisor() public view returns (uint256);
    function getPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getWinningChildPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function isOpenInterestCash(address) public view returns (bool);
    function isForkingMarket() public view returns (bool);
    function getCurrentDisputeWindow(bool _initial) public view returns (IDisputeWindow);
    function getDisputeWindowStartTimeAndDuration(uint256 _timestamp, bool _initial) public view returns (uint256, uint256);
    function isParentOf(IUniverse _shadyChild) public view returns (bool);
    function updateTentativeWinningChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (bool);
    function isContainerForDisputeWindow(IDisputeWindow _shadyTarget) public view returns (bool);
    function isContainerForMarket(IMarket _shadyTarget) public view returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function migrateMarketOut(IUniverse _destinationUniverse) public returns (bool);
    function migrateMarketIn(IMarket _market, uint256 _cashBalance, uint256 _marketOI) public returns (bool);
    function decrementOpenInterest(uint256 _amount) public returns (bool);
    function decrementOpenInterestFromMarket(IMarket _market) public returns (bool);
    function incrementOpenInterest(uint256 _amount) public returns (bool);
    function getWinningChildUniverse() public view returns (IUniverse);
    function isForking() public view returns (bool);
    function deposit(address _sender, uint256 _amount, address _market) public returns (bool);
    function withdraw(address _recipient, uint256 _amount, address _market) public returns (bool);
    function createScalarMarket(uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, int256[] memory _prices, uint256 _numTicks, string memory _extraInfo) public returns (IMarket _newMarket);
}

contract IV2ReputationToken is IReputationToken {
    function parentUniverse() external returns (IUniverse);
    function burnForMarket(uint256 _amountToBurn) public returns (bool);
    function mintForWarpSync(uint256 _amountToMint, address _target) public returns (bool);
}

library Reporting {
    uint256 private constant DESIGNATED_REPORTING_DURATION_SECONDS = 1 days;
    uint256 private constant DISPUTE_ROUND_DURATION_SECONDS = 7 days;
    uint256 private constant INITIAL_DISPUTE_ROUND_DURATION_SECONDS = 1 days;
    uint256 private constant DISPUTE_WINDOW_BUFFER_SECONDS = 1 hours;
    uint256 private constant FORK_DURATION_SECONDS = 60 days;

    uint256 private constant BASE_MARKET_DURATION_MAXIMUM = 30 days; // A market of 30 day length can always be created
    uint256 private constant UPGRADE_CADENCE = 365 days;
    uint256 private constant INITIAL_UPGRADE_TIMESTAMP = 1627776000; // Aug 1st 2021

    uint256 private constant INITIAL_REP_SUPPLY = 11 * 10 ** 6 * 10 ** 18; // 11 Million REP

    uint256 private constant AFFILIATE_SOURCE_CUT_DIVISOR = 5; // The trader gets 20% of the affiliate fee when an affiliate fee is taken

    uint256 private constant DEFAULT_VALIDITY_BOND = 10 ether; // 10 Cash (Dai)
    uint256 private constant VALIDITY_BOND_FLOOR = 10 ether; // 10 Cash (Dai)
    uint256 private constant DEFAULT_REPORTING_FEE_DIVISOR = 10000; // .01% fees
    uint256 private constant MAXIMUM_REPORTING_FEE_DIVISOR = 10000; // Minimum .01% fees
    uint256 private constant MINIMUM_REPORTING_FEE_DIVISOR = 3; // Maximum 33.3~% fees. Note than anything less than a value of 2 here will likely result in bugs such as divide by 0 cases.

    uint256 private constant TARGET_INVALID_MARKETS_DIVISOR = 100; // 1% of markets are expected to be invalid
    uint256 private constant TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR = 100; // 1% of markets are expected to have an incorrect designate report
    uint256 private constant TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR = 20; // 5% of markets are expected to have a no show
    uint256 private constant TARGET_REP_MARKET_CAP_MULTIPLIER = 5; // We multiply and divide by constants since we may want to multiply by a fractional amount

    uint256 private constant FORK_THRESHOLD_DIVISOR = 40; // 2.5% of the total REP supply being filled in a single dispute bond will trigger a fork
    uint256 private constant MAXIMUM_DISPUTE_ROUNDS = 20; // We ensure that after 20 rounds of disputes a fork will occur
    uint256 private constant MINIMUM_SLOW_ROUNDS = 8; // We ensure that at least 8 dispute rounds take DISPUTE_ROUND_DURATION_SECONDS+ seconds to complete until the next round begins

    function getDesignatedReportingDurationSeconds() internal pure returns (uint256) { return DESIGNATED_REPORTING_DURATION_SECONDS; }
    function getInitialDisputeRoundDurationSeconds() internal pure returns (uint256) { return INITIAL_DISPUTE_ROUND_DURATION_SECONDS; }
    function getDisputeWindowBufferSeconds() internal pure returns (uint256) { return DISPUTE_WINDOW_BUFFER_SECONDS; }
    function getDisputeRoundDurationSeconds() internal pure returns (uint256) { return DISPUTE_ROUND_DURATION_SECONDS; }
    function getForkDurationSeconds() internal pure returns (uint256) { return FORK_DURATION_SECONDS; }
    function getBaseMarketDurationMaximum() internal pure returns (uint256) { return BASE_MARKET_DURATION_MAXIMUM; }
    function getUpgradeCadence() internal pure returns (uint256) { return UPGRADE_CADENCE; }
    function getInitialUpgradeTimestamp() internal pure returns (uint256) { return INITIAL_UPGRADE_TIMESTAMP; }
    function getDefaultValidityBond() internal pure returns (uint256) { return DEFAULT_VALIDITY_BOND; }
    function getValidityBondFloor() internal pure returns (uint256) { return VALIDITY_BOND_FLOOR; }
    function getTargetInvalidMarketsDivisor() internal pure returns (uint256) { return TARGET_INVALID_MARKETS_DIVISOR; }
    function getTargetIncorrectDesignatedReportMarketsDivisor() internal pure returns (uint256) { return TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR; }
    function getTargetDesignatedReportNoShowsDivisor() internal pure returns (uint256) { return TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR; }
    function getTargetRepMarketCapMultiplier() internal pure returns (uint256) { return TARGET_REP_MARKET_CAP_MULTIPLIER; }
    function getMaximumReportingFeeDivisor() internal pure returns (uint256) { return MAXIMUM_REPORTING_FEE_DIVISOR; }
    function getMinimumReportingFeeDivisor() internal pure returns (uint256) { return MINIMUM_REPORTING_FEE_DIVISOR; }
    function getDefaultReportingFeeDivisor() internal pure returns (uint256) { return DEFAULT_REPORTING_FEE_DIVISOR; }
    function getInitialREPSupply() internal pure returns (uint256) { return INITIAL_REP_SUPPLY; }
    function getAffiliateSourceCutDivisor() internal pure returns (uint256) { return AFFILIATE_SOURCE_CUT_DIVISOR; }
    function getForkThresholdDivisor() internal pure returns (uint256) { return FORK_THRESHOLD_DIVISOR; }
    function getMaximumDisputeRounds() internal pure returns (uint256) { return MAXIMUM_DISPUTE_ROUNDS; }
    function getMinimumSlowRounds() internal pure returns (uint256) { return MINIMUM_SLOW_ROUNDS; }
}

contract IAugurTrading {
    function lookup(bytes32 _key) public view returns (address);
    function logProfitLossChanged(IMarket _market, address _account, uint256 _outcome, int256 _netPosition, uint256 _avgPrice, int256 _realizedProfit, int256 _frozenFunds, int256 _realizedCost) public returns (bool);
    function logOrderCreated(IUniverse _universe, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool);
    function logOrderCanceled(IUniverse _universe, IMarket _market, address _creator, uint256 _tokenRefund, uint256 _sharesRefund, bytes32 _orderId) public returns (bool);
    function logOrderFilled(IUniverse _universe, address _creator, address _filler, uint256 _price, uint256 _fees, uint256 _amountFilled, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool);
    function logMarketVolumeChanged(IUniverse _universe, address _market, uint256 _volume, uint256[] memory _outcomeVolumes, uint256 _totalTrades) public returns (bool);
    function logZeroXOrderFilled(IUniverse _universe, IMarket _market, bytes32 _orderHash, bytes32 _tradeGroupId, uint8 _orderType, address[] memory _addressData, uint256[] memory _uint256Data) public returns (bool);
    function logZeroXOrderCanceled(address _universe, address _market, address _account, uint256 _outcome, uint256 _price, uint256 _amount, uint8 _type, bytes32 _orderHash) public;
}

contract IOrders {
    function saveOrder(uint256[] calldata _uints, bytes32[] calldata _bytes32s, Order.Types _type, IMarket _market, address _sender) external returns (bytes32 _orderId);
    function removeOrder(bytes32 _orderId) external returns (bool);
    function getMarket(bytes32 _orderId) public view returns (IMarket);
    function getOrderType(bytes32 _orderId) public view returns (Order.Types);
    function getOutcome(bytes32 _orderId) public view returns (uint256);
    function getAmount(bytes32 _orderId) public view returns (uint256);
    function getPrice(bytes32 _orderId) public view returns (uint256);
    function getOrderCreator(bytes32 _orderId) public view returns (address);
    function getOrderSharesEscrowed(bytes32 _orderId) public view returns (uint256);
    function getOrderMoneyEscrowed(bytes32 _orderId) public view returns (uint256);
    function getOrderDataForCancel(bytes32 _orderId) public view returns (uint256, uint256, Order.Types, IMarket, uint256, address);
    function getOrderDataForLogs(bytes32 _orderId) public view returns (Order.Types, address[] memory _addressData, uint256[] memory _uint256Data);
    function getBetterOrderId(bytes32 _orderId) public view returns (bytes32);
    function getWorseOrderId(bytes32 _orderId) public view returns (bytes32);
    function getBestOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getWorstOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getLastOutcomePrice(IMarket _market, uint256 _outcome) public view returns (uint256);
    function getOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) public pure returns (bytes32);
    function getTotalEscrowed(IMarket _market) public view returns (uint256);
    function isBetterPrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function isWorsePrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function assertIsNotBetterPrice(Order.Types _type, uint256 _price, bytes32 _betterOrderId) public view returns (bool);
    function assertIsNotWorsePrice(Order.Types _type, uint256 _price, bytes32 _worseOrderId) public returns (bool);
    function recordFillOrder(bytes32 _orderId, uint256 _sharesFilled, uint256 _tokensFilled, uint256 _fill) external returns (bool);
    function setPrice(IMarket _market, uint256 _outcome, uint256 _price) external returns (bool);
}

library Order {
    using SafeMathUint256 for uint256;

    enum Types {
        Bid, Ask
    }

    enum TradeDirections {
        Long, Short
    }

    struct Data {
        // Contracts
        IMarket market;
        IAugur augur;
        IAugurTrading augurTrading;
        IShareToken shareToken;
        ICash cash;

        // Order
        bytes32 id;
        address creator;
        uint256 outcome;
        Order.Types orderType;
        uint256 amount;
        uint256 price;
        uint256 sharesEscrowed;
        uint256 moneyEscrowed;
        bytes32 betterOrderId;
        bytes32 worseOrderId;
    }

    function create(IAugur _augur, IAugurTrading _augurTrading, address _creator, uint256 _outcome, Order.Types _type, uint256 _attoshares, uint256 _price, IMarket _market, bytes32 _betterOrderId, bytes32 _worseOrderId) internal view returns (Data memory) {
        require(_outcome < _market.getNumberOfOutcomes(), "Order.create: Outcome is not within market range");
        require(_price != 0, "Order.create: Price may not be 0");
        require(_price < _market.getNumTicks(), "Order.create: Price is outside of market range");
        require(_attoshares > 0, "Order.create: Cannot use amount of 0");
        require(_creator != address(0), "Order.create: Creator is 0x0");

        IShareToken _shareToken = IShareToken(_augur.lookup("ShareToken"));

        return Data({
            market: _market,
            augur: _augur,
            augurTrading: _augurTrading,
            shareToken: _shareToken,
            cash: ICash(_augur.lookup("Cash")),
            id: 0,
            creator: _creator,
            outcome: _outcome,
            orderType: _type,
            amount: _attoshares,
            price: _price,
            sharesEscrowed: 0,
            moneyEscrowed: 0,
            betterOrderId: _betterOrderId,
            worseOrderId: _worseOrderId
        });
    }

    //
    // "public" functions
    //

    function getOrderId(Order.Data memory _orderData, IOrders _orders) internal view returns (bytes32) {
        if (_orderData.id == bytes32(0)) {
            bytes32 _orderId = calculateOrderId(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, block.number, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed);
            require(_orders.getAmount(_orderId) == 0, "Order.getOrderId: New order had amount. This should not be possible");
            _orderData.id = _orderId;
        }
        return _orderData.id;
    }

    function calculateOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) internal pure returns (bytes32) {
        return sha256(abi.encodePacked(_type, _market, _amount, _price, _sender, _blockNumber, _outcome, _moneyEscrowed, _sharesEscrowed));
    }

    function getOrderTradingTypeFromMakerDirection(Order.TradeDirections _creatorDirection) internal pure returns (Order.Types) {
        return (_creatorDirection == Order.TradeDirections.Long) ? Order.Types.Bid : Order.Types.Ask;
    }

    function getOrderTradingTypeFromFillerDirection(Order.TradeDirections _fillerDirection) internal pure returns (Order.Types) {
        return (_fillerDirection == Order.TradeDirections.Long) ? Order.Types.Ask : Order.Types.Bid;
    }

    function saveOrder(Order.Data memory _orderData, bytes32 _tradeGroupId, IOrders _orders) internal returns (bytes32) {
        getOrderId(_orderData, _orders);
        uint256[] memory _uints = new uint256[](5);
        _uints[0] = _orderData.amount;
        _uints[1] = _orderData.price;
        _uints[2] = _orderData.outcome;
        _uints[3] = _orderData.moneyEscrowed;
        _uints[4] = _orderData.sharesEscrowed;
        bytes32[] memory _bytes32s = new bytes32[](4);
        _bytes32s[0] = _orderData.betterOrderId;
        _bytes32s[1] = _orderData.worseOrderId;
        _bytes32s[2] = _tradeGroupId;
        _bytes32s[3] = _orderData.id;
        return _orders.saveOrder(_uints, _bytes32s, _orderData.orderType, _orderData.market, _orderData.creator);
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

contract IFormulas {
    function calculateFloatingValue(uint256 _totalBad, uint256 _total, uint256 _targetDivisor, uint256 _previousValue, uint256 _floor) public pure returns (uint256 _newValue);
    function calculateValidityBond(IDisputeWindow  _previousDisputeWindow, uint256 _previousValidityBondInAttoCash) public view returns (uint256);
    function calculateDesignatedReportStake(IDisputeWindow  _previousDisputeWindow, uint256 _previousDesignatedReportStakeInAttoRep, uint256 _initialReportMinValue) public view returns (uint256);
    function calculateDesignatedReportNoShowBond(IDisputeWindow  _previousDisputeWindow, uint256 _previousDesignatedReportNoShowBondInAttoRep, uint256 _initialReportMinValue) public view returns (uint256);
}

contract Universe is IUniverse {
    using SafeMathUint256 for uint256;

    uint256 public creationTime;
    mapping(address => uint256) public marketBalance;

    IAugur public augur;
    IUniverse private parentUniverse;
    IFormulas public formulas;
    IShareToken public shareToken;
    bytes32 private parentPayoutDistributionHash;
    uint256[] public payoutNumerators;
    IV2ReputationToken private reputationToken;
    IOICash public openInterestCash;
    IMarket private forkingMarket;
    bytes32 private tentativeWinningChildUniversePayoutDistributionHash;
    uint256 private forkEndTime;
    uint256 private forkReputationGoal;
    uint256 private disputeThresholdForFork;
    uint256 private disputeThresholdForDisputePacing;
    uint256 private initialReportMinValue;
    mapping(uint256 => IDisputeWindow) public disputeWindows;
    mapping(address => bool) private markets;
    mapping(bytes32 => IUniverse) private childUniverses;
    uint256 private openInterestInAttoCash;
    IMarketFactory public marketFactory;
    IDisputeWindowFactory public disputeWindowFactory;

    mapping (address => uint256) public validityBondInAttoCash;
    mapping (address => uint256) public designatedReportStakeInAttoRep;
    mapping (address => uint256) public designatedReportNoShowBondInAttoRep;
    uint256 public previousValidityBondInAttoCash;
    uint256 public previousDesignatedReportStakeInAttoRep;
    uint256 public previousDesignatedReportNoShowBondInAttoRep;

    mapping (address => uint256) public shareSettlementFeeDivisor;
    uint256 public previousReportingFeeDivisor;

    uint256 constant public INITIAL_WINDOW_ID_BUFFER = 365 days * 10 ** 8;
    uint256 constant public DEFAULT_NUM_OUTCOMES = 2;
    uint256 constant public DEFAULT_NUM_TICKS = 1000;

    uint256 public totalBalance;
    ICash public cash;

    IRepOracle public repOracle;

    constructor(IAugur _augur, IUniverse _parentUniverse, bytes32 _parentPayoutDistributionHash, uint256[] memory _payoutNumerators) public {
        augur = _augur;
        creationTime = _augur.getTimestamp();
        parentUniverse = _parentUniverse;
        parentPayoutDistributionHash = _parentPayoutDistributionHash;
        payoutNumerators = _payoutNumerators;
        reputationToken = IReputationTokenFactory(augur.lookup("ReputationTokenFactory")).createReputationToken(augur, parentUniverse);
        marketFactory = IMarketFactory(augur.lookup("MarketFactory"));
        disputeWindowFactory = IDisputeWindowFactory(augur.lookup("DisputeWindowFactory"));
        openInterestCash = IOICashFactory(augur.lookup("OICashFactory")).createOICash(augur);
        shareToken = IShareToken(augur.lookup("ShareToken"));
        repOracle = IRepOracle(augur.lookup("RepOracle"));
        updateForkValues();
        formulas = IFormulas(augur.lookup("Formulas"));
        cash = ICash(augur.lookup("Cash"));
        assertContractsNotZero();
    }

    f...

// [truncated — 80284 bytes total]

Read Contract

DEFAULT_NUM_OUTCOMES 0xe4372c3c → uint256
DEFAULT_NUM_TICKS 0x705123dc → uint256
INITIAL_WINDOW_ID_BUFFER 0xf2cf48f6 → uint256
augur 0x7a0d8f8a → address
cash 0x961be391 → address
creationTime 0xd8270dce → uint256
designatedReportNoShowBondInAttoRep 0xb53b321e → uint256
designatedReportStakeInAttoRep 0x3ec6b034 → uint256
disputeWindowFactory 0xa9f4185d → address
disputeWindows 0x57d7a3c4 → address
formulas 0x7f7c390a → address
getChildUniverse 0xeceba876 → address
getCurrentDisputeWindow 0x8699d434 → address
getDisputeRoundDurationInSeconds 0x879eefa5 → uint256
getDisputeThresholdForDisputePacing 0x047825c7 → uint256
getDisputeThresholdForFork 0xfb03eaea → uint256
getDisputeWindow 0x6c23f723 → address
getDisputeWindowByTimestamp 0x622ae175 → address
getDisputeWindowId 0x2c7faa4d → uint256
getDisputeWindowStartTimeAndDuration 0x5449aed5 → uint256, uint256
getForkEndTime 0x77e71ee5 → uint256
getForkReputationGoal 0x7c377d74 → uint256
getForkingMarket 0xcb1d8418 → address
getInitialReportMinValue 0x5f723b50 → uint256
getOpenInterestInAttoCash 0xc675f222 → uint256
getParentPayoutDistributionHash 0xc38c0fa7 → bytes32
getParentUniverse 0xa63f1350 → address
getPayoutNumerator 0xda834ac4 → uint256
getPayoutNumerators 0x6f84676e → uint256[]
getReportingFeeDivisor 0x0dcde5f5 → uint256
getReputationToken 0xb80907f2 → address
getTargetRepMarketCapInAttoCash 0xdf9fde7e → uint256
getWinningChildPayoutNumerator 0x7262f993 → uint256
getWinningChildUniverse 0x6f70b9cb → address
isContainerForDisputeWindow 0x01ba1fa3 → bool
isContainerForMarket 0x9f7e1bf6 → bool
isContainerForReportingParticipant 0xf76514c7 → bool
isForking 0xbecb1f35 → bool
isForkingMarket 0xd372fbcd → bool
isOpenInterestCash 0x47d20e3b → bool
isParentOf 0x9517317c → bool
marketBalance 0x9672e3ba → uint256
marketFactory 0x06ae7095 → address
openInterestCash 0x3940b675 → address
payoutNumerators 0x60d9b489 → uint256
previousDesignatedReportNoShowBondInAttoRep 0x0bcde26d → uint256
previousDesignatedReportStakeInAttoRep 0xb4eeb2d7 → uint256
previousReportingFeeDivisor 0x6f33ebb7 → uint256
previousValidityBondInAttoCash 0xef7cd234 → uint256
repOracle 0x48bc4eba → address
shareSettlementFeeDivisor 0x0d5a9e4d → uint256
shareToken 0x6c9fa59e → address
totalBalance 0xad7a672f → uint256
validityBondInAttoCash 0xefb106ba → uint256

Write Contract 26 functions

These functions modify contract state and require a wallet transaction to execute.

createCategoricalMarket 0x45a62887
uint256 _endTime
uint256 _feePerCashInAttoCash
address _affiliateValidator
uint256 _affiliateFeeDivisor
address _designatedReporterAddress
bytes32[] _outcomes
string _extraInfo
returns: address
createChildUniverse 0x3a537176
uint256[] _parentPayoutNumerators
returns: address
createScalarMarket 0x11a80ffc
uint256 _endTime
uint256 _feePerCashInAttoCash
address _affiliateValidator
uint256 _affiliateFeeDivisor
address _designatedReporterAddress
int256[] _prices
uint256 _numTicks
string _extraInfo
returns: address
createYesNoMarket 0xa95b973c
uint256 _endTime
uint256 _feePerCashInAttoCash
address _affiliateValidator
uint256 _affiliateFeeDivisor
address _designatedReporterAddress
string _extraInfo
returns: address
decrementOpenInterest 0xb62418a1
uint256 _amount
returns: bool
decrementOpenInterestFromMarket 0x180ef158
address _market
returns: bool
deposit 0xf45346dc
address _sender
uint256 _amount
address _market
returns: bool
fork 0x4591c060
No parameters
returns: bool
getOrCacheDesignatedReportNoShowBond 0xfd1e5e7a
No parameters
returns: uint256
getOrCacheDesignatedReportStake 0xe79609e2
No parameters
returns: uint256
getOrCacheMarketRepBond 0xa7e8d762
No parameters
returns: uint256
getOrCacheReportingFeeDivisor 0x8f93bffe
No parameters
returns: uint256
getOrCacheValidityBond 0xaf4cd457
No parameters
returns: uint256
getOrCreateCurrentDisputeWindow 0xe3fa4b04
bool _initial
returns: address
getOrCreateDisputeWindowByTimestamp 0x8689526b
uint256 _timestamp
bool _initial
returns: address
getOrCreateNextDisputeWindow 0x92394f32
bool _initial
returns: address
getOrCreatePreviousDisputeWindow 0xe2d8edaf
bool _initial
returns: address
getOrCreatePreviousPreviousDisputeWindow 0xf28b0956
bool _initial
returns: address
incrementOpenInterest 0xce483e88
uint256 _amount
returns: bool
migrateMarketIn 0x8d2ecfba
address _market
uint256 _cashBalance
uint256 _marketOI
returns: bool
migrateMarketOut 0x11be56d7
address _destinationUniverse
returns: bool
pokeRepMarketCapInAttoCash 0x13bf24c1
No parameters
returns: uint256
runPeriodicals 0x98fedb09
No parameters
returns: bool
updateForkValues 0x9ab448d9
No parameters
returns: bool
updateTentativeWinningChildUniverse 0xf7095d9d
bytes32 _parentPayoutDistributionHash
returns: bool
withdraw 0x69328dec
address _recipient
uint256 _amount
address _market
returns: bool

Token Balances (1) $56,440.95

View Transfers →
TokenBalancePriceValue
DAI 56442.9305 $1.0000 $56,440.95

Recent Transactions

This address has 1 on-chain transactions, but only 1.6% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →