@@ -11,16 +11,17 @@ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
11
11
import {LibArray} from "../libraries/LibArray.sol " ;
12
12
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol " ;
13
13
14
+ error invalidConfiguration (string paramter );
14
15
library LibTBG {
15
16
// using EnumerableMap for EnumerableMap.AddressToUintMap;
16
17
// using EnumerableMap for EnumerableMap.UintToAddressMap;
17
18
using EnumerableSet for EnumerableSet.AddressSet;
18
19
19
20
struct GameSettings {
20
- uint256 blocksPerTurn ;
21
+ uint256 timePerTurn ;
21
22
uint256 maxPlayersSize;
22
23
uint256 minPlayersSize;
23
- uint256 blocksToJoin ;
24
+ uint256 timeToJoin ;
24
25
uint256 maxTurns;
25
26
uint256 numWinners;
26
27
uint256 voteCredits;
@@ -68,15 +69,16 @@ library LibTBG {
68
69
69
70
function init (GameSettings memory settings ) internal {
70
71
TBGStorageStruct storage tbg = TBGStorage ();
71
- require (settings.blocksPerTurn != 0 , "init->blocksPerTurn " );
72
- require (settings.maxPlayersSize != 0 , "init->maxPartySize " );
73
- require (settings.minPlayersSize > 2 , "init->minPartySize " );
74
- require (settings.maxTurns != 0 , "init->maxTurns " );
75
- require ((settings.numWinners != 0 ) && (settings.numWinners < settings.minPlayersSize), "init->numWinners " );
76
- require (settings.blocksToJoin != 0 , "init->blocksToJoin " );
77
- require (settings.maxPlayersSize >= settings.minPlayersSize, "init->maxPlayersSize " );
78
- require (settings.voteCredits > 0 , "init->voteCredits " );
79
- require (bytes (settings.subject).length != 0 , "init->subject " );
72
+ if (settings.timePerTurn == 0 ) revert invalidConfiguration ('timePerTurn ' );
73
+ if (settings.maxPlayersSize == 0 ) revert invalidConfiguration ('maxPlayersSize ' );
74
+ if (settings.minPlayersSize < 2 ) revert invalidConfiguration ('minPlayersSize ' );
75
+ if (settings.maxTurns == 0 ) revert invalidConfiguration ('maxTurns ' );
76
+ if (settings.numWinners == 0 || settings.numWinners >= settings.minPlayersSize) revert invalidConfiguration ('numWinners ' );
77
+ if (settings.timeToJoin == 0 ) revert invalidConfiguration ('timeToJoin ' );
78
+ if (settings.maxPlayersSize < settings.minPlayersSize) revert invalidConfiguration ('maxPlayersSize ' );
79
+ if (settings.voteCredits < 1 ) revert invalidConfiguration ('voteCredits ' );
80
+ if (bytes (settings.subject).length == 0 ) revert invalidConfiguration ('subject length ' );
81
+
80
82
81
83
tbg.settings = settings;
82
84
tbg.maxQuadraticVote = Math.sqrt (settings.voteCredits);
@@ -159,7 +161,7 @@ library LibTBG {
159
161
GameInstance storage _game = _getGame (gameId);
160
162
assert (gameId != 0 );
161
163
assert (_game.hasStarted == true );
162
- if (block .number <= tbg.settings.blocksPerTurn + _game.turnStartedAt) return false ;
164
+ if (block .timestamp <= tbg.settings.timePerTurn + _game.turnStartedAt) return false ;
163
165
return true ;
164
166
}
165
167
@@ -232,7 +234,7 @@ library LibTBG {
232
234
function openRegistration (uint256 gameId ) internal {
233
235
require (gameExists (gameId), "game not found " );
234
236
GameInstance storage _game = _getGame (gameId);
235
- _game.registrationOpenAt = block .number ;
237
+ _game.registrationOpenAt = block .timestamp ;
236
238
}
237
239
238
240
function isRegistrationOpen (uint256 gameId ) internal view returns (bool ) {
@@ -241,7 +243,7 @@ library LibTBG {
241
243
if (_game.registrationOpenAt == 0 ) {
242
244
return false ;
243
245
} else {
244
- return _game.registrationOpenAt < block .number + tbg.settings.blocksToJoin ? true : false ;
246
+ return _game.registrationOpenAt < block .timestamp + tbg.settings.timeToJoin ? true : false ;
245
247
}
246
248
}
247
249
@@ -251,7 +253,7 @@ library LibTBG {
251
253
bool retval = true ;
252
254
if (_game.hasStarted != false ) retval = false ;
253
255
if (_game.registrationOpenAt == 0 ) retval = false ;
254
- if (block .number <= _game.registrationOpenAt + tbg.settings.blocksToJoin ) retval = false ;
256
+ if (block .timestamp <= _game.registrationOpenAt + tbg.settings.timeToJoin ) retval = false ;
255
257
if (gameId == 0 ) retval = false ;
256
258
if (_game.players.length () < tbg.settings.minPlayersSize) retval = false ;
257
259
return retval;
@@ -262,13 +264,13 @@ library LibTBG {
262
264
TBGStorageStruct storage tbg = TBGStorage ();
263
265
require (_game.hasStarted == false , "startGame->already started " );
264
266
require (_game.registrationOpenAt != 0 , "startGame->Game registration was not yet open " );
265
- require (block .number > _game.registrationOpenAt + tbg.settings.blocksToJoin , "startGame->Still Can Join " );
267
+ require (block .timestamp > _game.registrationOpenAt + tbg.settings.timeToJoin , "startGame->Still Can Join " );
266
268
require (gameId != 0 , "startGame->Game not found " );
267
269
require (_game.players.length () >= tbg.settings.minPlayersSize, "startGame->Not enough players " );
268
270
_game.hasStarted = true ;
269
271
_game.hasEnded = false ;
270
272
_game.currentTurn = 1 ;
271
- _game.turnStartedAt = block .number ;
273
+ _game.turnStartedAt = block .timestamp ;
272
274
_resetPlayerStates (_game);
273
275
}
274
276
@@ -327,7 +329,7 @@ library LibTBG {
327
329
enforceIsNotOver (gameId);
328
330
_clearCurrentMoves (_game);
329
331
_game.currentTurn += 1 ;
330
- _game.turnStartedAt = block .number ;
332
+ _game.turnStartedAt = block .timestamp ;
331
333
bool _isLastTurn = isLastTurn (gameId);
332
334
bool _isOvertime = _game.isOvertime;
333
335
address [] memory sortedLeaders = new address [](getPlayers (gameId).length );
0 commit comments