@@ -2,6 +2,7 @@ pragma solidity 0.4.18;
2
2
3
3
import 'Controlled.sol ' ;
4
4
import 'libraries/token/ERC20.sol ' ;
5
+ import 'factories/UniverseFactory.sol ' ;
5
6
import 'reporting/IUniverse.sol ' ;
6
7
import 'reporting/IMarket.sol ' ;
7
8
import 'reporting/IFeeWindow.sol ' ;
@@ -34,6 +35,33 @@ contract Augur is Controlled, Extractable {
34
35
event TokensBurned (address indexed universe , address indexed token , address indexed target , uint256 amount );
35
36
event FeeWindowCreated (address indexed universe , address feeWindow , uint256 startTime , uint256 endTime , uint256 id );
36
37
38
+ mapping (address => bool ) private universes;
39
+
40
+ //
41
+ // Universe
42
+ //
43
+
44
+ function createGenesisUniverse () public returns (IUniverse) {
45
+ return createUniverse (IUniverse (0 ), bytes32 (0 ));
46
+ }
47
+
48
+ function createChildUniverse (bytes32 _parentPayoutDistributionHash ) public returns (IUniverse) {
49
+ IUniverse _parentUniverse = IUniverse (msg .sender );
50
+ require (isKnownUniverse (_parentUniverse));
51
+ return createUniverse (_parentUniverse, _parentPayoutDistributionHash);
52
+ }
53
+
54
+ function createUniverse (IUniverse _parentUniverse , bytes32 _parentPayoutDistributionHash ) private returns (IUniverse) {
55
+ UniverseFactory _universeFactory = UniverseFactory (controller.lookup ("UniverseFactory " ));
56
+ IUniverse _newUniverse = _universeFactory.createUniverse (controller, _parentUniverse, _parentPayoutDistributionHash);
57
+ universes[_newUniverse] = true ;
58
+ return _newUniverse;
59
+ }
60
+
61
+ function isKnownUniverse (IUniverse _universe ) public view returns (bool ) {
62
+ return universes[_universe];
63
+ }
64
+
37
65
//
38
66
// Transfer
39
67
//
@@ -50,49 +78,57 @@ contract Augur is Controlled, Extractable {
50
78
51
79
// This signature is intended for the categorical market creation. We use two signatures for the same event because of stack depth issues which can be circumvented by maintaining order of paramaters
52
80
function logMarketCreated (bytes32 _topic , string _description , string _extraInfo , IUniverse _universe , address _market , address _marketCreator , bytes32 [] _outcomes , int256 _minPrice , int256 _maxPrice , IMarket.MarketType _marketType ) public returns (bool ) {
81
+ require (isKnownUniverse (_universe));
53
82
require (_universe == IUniverse (msg .sender ));
54
83
MarketCreated (_topic, _description, _extraInfo, _universe, _market, _marketCreator, _outcomes, _universe.getOrCacheMarketCreationCost (), _minPrice, _maxPrice, _marketType);
55
84
return true ;
56
85
}
57
86
58
87
// This signature is intended for binary and scalar market creation. See function comment above for explanation.
59
88
function logMarketCreated (bytes32 _topic , string _description , string _extraInfo , IUniverse _universe , address _market , address _marketCreator , int256 _minPrice , int256 _maxPrice , IMarket.MarketType _marketType ) public returns (bool ) {
89
+ require (isKnownUniverse (_universe));
60
90
require (_universe == IUniverse (msg .sender ));
61
91
MarketCreated (_topic, _description, _extraInfo, _universe, _market, _marketCreator, new bytes32 [](0 ), _universe.getOrCacheMarketCreationCost (), _minPrice, _maxPrice, _marketType);
62
92
return true ;
63
93
}
64
94
65
95
function logInitialReportSubmitted (IUniverse _universe , address _reporter , address _market , uint256 _amountStaked , bool _isDesignatedReporter , uint256 [] _payoutNumerators ) public returns (bool ) {
96
+ require (isKnownUniverse (_universe));
66
97
require (_universe.isContainerForMarket (IMarket (msg .sender )));
67
98
InitialReportSubmitted (_universe, _reporter, _market, _amountStaked, _isDesignatedReporter, _payoutNumerators);
68
99
return true ;
69
100
}
70
101
71
102
function logDisputeCrowdsourcerCreated (IUniverse _universe , address _market , address _disputeCrowdsourcer , uint256 [] _payoutNumerators , uint256 _size ) public returns (bool ) {
103
+ require (isKnownUniverse (_universe));
72
104
require (_universe.isContainerForMarket (IMarket (msg .sender )));
73
105
DisputeCrowdsourcerCreated (_universe, _market, _disputeCrowdsourcer, _payoutNumerators, _size);
74
106
return true ;
75
107
}
76
108
77
109
function logDisputeCrowdsourcerContribution (IUniverse _universe , address _reporter , address _market , address _disputeCrowdsourcer , uint256 _amountStaked ) public returns (bool ) {
110
+ require (isKnownUniverse (_universe));
78
111
require (_universe.isContainerForMarket (IMarket (msg .sender )));
79
112
DisputeCrowdsourcerContribution (_universe, _reporter, _market, _disputeCrowdsourcer, _amountStaked);
80
113
return true ;
81
114
}
82
115
83
116
function logDisputeCrowdsourcerCompleted (IUniverse _universe , address _market , address _disputeCrowdsourcer ) public returns (bool ) {
117
+ require (isKnownUniverse (_universe));
84
118
require (_universe.isContainerForMarket (IMarket (msg .sender )));
85
119
DisputeCrowdsourcerCompleted (_universe, _market, _disputeCrowdsourcer);
86
120
return true ;
87
121
}
88
122
89
123
function logWinningTokensRedeemed (IUniverse _universe , address _reporter , address _market , address _reportingParticipant , uint256 _amountRedeemed , uint256 _reportingFeesReceived , uint256 [] _payoutNumerators ) public returns (bool ) {
124
+ require (isKnownUniverse (_universe));
90
125
require (_universe.isContainerForReportingParticipant (IReportingParticipant (msg .sender )));
91
126
WinningsRedeemed (_universe, _reporter, _market, _reportingParticipant, _amountRedeemed, _reportingFeesReceived, _payoutNumerators);
92
127
return true ;
93
128
}
94
129
95
130
function logMarketFinalized (IUniverse _universe , address _market ) public returns (bool ) {
131
+ require (isKnownUniverse (_universe));
96
132
require (_universe.isContainerForMarket (IMarket (msg .sender )));
97
133
MarketFinalized (_universe, _market);
98
134
return true ;
@@ -119,107 +155,125 @@ contract Augur is Controlled, Extractable {
119
155
}
120
156
121
157
function logUniverseForked () public returns (bool ) {
158
+ require (universes[msg .sender ]);
122
159
UniverseForked (msg .sender );
123
160
return true ;
124
161
}
125
162
126
163
function logUniverseCreated (IUniverse _childUniverse ) public returns (bool ) {
164
+ require (universes[msg .sender ]);
127
165
IUniverse _parentUniverse = IUniverse (msg .sender );
128
166
require (_parentUniverse.isParentOf (_childUniverse));
129
167
UniverseCreated (_parentUniverse, _childUniverse);
130
168
return true ;
131
169
}
132
170
133
171
function logFeeWindowTransferred (IUniverse _universe , address _from , address _to , uint256 _value ) public returns (bool ) {
172
+ require (isKnownUniverse (_universe));
134
173
require (_universe.isContainerForFeeWindow (IFeeWindow (msg .sender )));
135
174
TokensTransferred (_universe, msg .sender , _from, _to, _value);
136
175
return true ;
137
176
}
138
177
139
178
function logReputationTokensTransferred (IUniverse _universe , address _from , address _to , uint256 _value ) public returns (bool ) {
179
+ require (isKnownUniverse (_universe));
140
180
require (_universe.getReputationToken () == IReputationToken (msg .sender ));
141
181
TokensTransferred (_universe, msg .sender , _from, _to, _value);
142
182
return true ;
143
183
}
144
184
145
185
function logDisputeCrowdsourcerTokensTransferred (IUniverse _universe , address _from , address _to , uint256 _value ) public returns (bool ) {
186
+ require (isKnownUniverse (_universe));
146
187
require (_universe.isContainerForReportingParticipant (IReportingParticipant (msg .sender )));
147
188
TokensTransferred (_universe, msg .sender , _from, _to, _value);
148
189
return true ;
149
190
}
150
191
151
192
function logShareTokensTransferred (IUniverse _universe , address _from , address _to , uint256 _value ) public returns (bool ) {
193
+ require (isKnownUniverse (_universe));
152
194
require (_universe.isContainerForShareToken (IShareToken (msg .sender )));
153
195
TokensTransferred (_universe, msg .sender , _from, _to, _value);
154
196
return true ;
155
197
}
156
198
157
199
function logReputationTokenBurned (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
200
+ require (isKnownUniverse (_universe));
158
201
require (_universe.getReputationToken () == IReputationToken (msg .sender ));
159
202
TokensBurned (_universe, msg .sender , _target, _amount);
160
203
return true ;
161
204
}
162
205
163
206
function logReputationTokenMinted (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
207
+ require (isKnownUniverse (_universe));
164
208
require (_universe.getReputationToken () == IReputationToken (msg .sender ));
165
209
TokensMinted (_universe, msg .sender , _target, _amount);
166
210
return true ;
167
211
}
168
212
169
213
function logShareTokenBurned (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
214
+ require (isKnownUniverse (_universe));
170
215
require (_universe.isContainerForShareToken (IShareToken (msg .sender )));
171
216
TokensBurned (_universe, msg .sender , _target, _amount);
172
217
return true ;
173
218
}
174
219
175
220
function logShareTokenMinted (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
221
+ require (isKnownUniverse (_universe));
176
222
require (_universe.isContainerForShareToken (IShareToken (msg .sender )));
177
223
TokensMinted (_universe, msg .sender , _target, _amount);
178
224
return true ;
179
225
}
180
226
181
227
function logFeeWindowBurned (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
228
+ require (isKnownUniverse (_universe));
182
229
require (_universe.isContainerForFeeWindow (IFeeWindow (msg .sender )));
183
230
TokensBurned (_universe, msg .sender , _target, _amount);
184
231
return true ;
185
232
}
186
233
187
234
function logFeeWindowMinted (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
235
+ require (isKnownUniverse (_universe));
188
236
require (_universe.isContainerForFeeWindow (IFeeWindow (msg .sender )));
189
237
TokensMinted (_universe, msg .sender , _target, _amount);
190
238
return true ;
191
239
}
192
240
193
241
function logDisputeCrowdsourcerTokensBurned (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
242
+ require (isKnownUniverse (_universe));
194
243
require (_universe.isContainerForReportingParticipant (IReportingParticipant (msg .sender )));
195
244
TokensBurned (_universe, msg .sender , _target, _amount);
196
245
return true ;
197
246
}
198
247
199
248
function logDisputeCrowdsourcerTokensMinted (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
249
+ require (isKnownUniverse (_universe));
200
250
require (_universe.isContainerForReportingParticipant (IReportingParticipant (msg .sender )));
201
251
TokensMinted (_universe, msg .sender , _target, _amount);
202
252
return true ;
203
253
}
204
254
205
255
function logFeeWindowCreated (IFeeWindow _feeWindow , uint256 _id ) public returns (bool ) {
256
+ require (universes[msg .sender ]);
206
257
FeeWindowCreated (msg .sender , _feeWindow, _feeWindow.getStartTime (), _feeWindow.getEndTime (), _id);
207
258
return true ;
208
259
}
209
260
210
261
function logFeeTokenTransferred (IUniverse _universe , address _from , address _to , uint256 _value ) public returns (bool ) {
262
+ require (isKnownUniverse (_universe));
211
263
require (_universe.isContainerForFeeToken (IFeeToken (msg .sender )));
212
264
TokensTransferred (_universe, msg .sender , _from, _to, _value);
213
265
return true ;
214
266
}
215
267
216
268
function logFeeTokenBurned (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
269
+ require (isKnownUniverse (_universe));
217
270
require (_universe.isContainerForFeeToken (IFeeToken (msg .sender )));
218
271
TokensBurned (_universe, msg .sender , _target, _amount);
219
272
return true ;
220
273
}
221
274
222
275
function logFeeTokenMinted (IUniverse _universe , address _target , uint256 _amount ) public returns (bool ) {
276
+ require (isKnownUniverse (_universe));
223
277
require (_universe.isContainerForFeeToken (IFeeToken (msg .sender )));
224
278
TokensMinted (_universe, msg .sender , _target, _amount);
225
279
return true ;
0 commit comments