Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pragma solidity ^0.4.21;
- contract SeasonFactory {
- address public owner;
- address[] public seasons;
- event SeasonCreated(uint64 indexed beginTicks, uint64 indexed endTicks, address season);
- function SeasonFactory() public {
- owner = msg.sender;
- }
- function newSeason(uint64 beginTicks, uint64 endTicks) public restricted {
- require(beginTicks < endTicks);
- require(seasons.length == 0 || Season(seasons[seasons.length - 1]).period().endTicks() < beginTicks);
- Season season = new Season(owner, beginTicks, endTicks);
- seasons.push(season);
- emit SeasonCreated(beginTicks, endTicks, season);
- }
- function getSeasonsCount() public view returns(uint) {
- return seasons.length;
- }
- function getSeasonForDate(uint64 ticks) public view returns(address) {
- for (uint i = seasons.length - 1; i >= 0; i--) {
- Season season = Season(seasons[i]);
- if (ticks >= season.period.beginTicks() && ticks <= season.period.endTicks())
- return season;
- }
- return 0;
- }
- modifier restricted {
- require(owner == msg.sender);
- _;
- }
- }
- contract Season {
- address public owner;
- SharedTypes.DateRange public period;
- function Season(address owner_, uint64 beginTicks, uint64 endTicks) public {
- owner = owner_;
- period = SharedTypes.DateRange(beginTicks, endTicks);
- }
- }
- library SharedTypes {
- struct DateRange {
- uint64 beginTicks;
- uint64 endTicks;
- }
- }
Add Comment
Please, Sign In to add comment