Coverage Summary for Class: MinerClock (co.rsk.mine)

Class Class, % Method, % Line, %
MinerClock 0% (0/1) 0% (0/4) 0% (0/13)


1 /* 2  * This file is part of RskJ 3  * Copyright (C) 2018 RSK Labs Ltd. 4  * 5  * This program is free software: you can redistribute it and/or modify 6  * it under the terms of the GNU Lesser General Public License as published by 7  * the Free Software Foundation, either version 3 of the License, or 8  * (at your option) any later version. 9  * 10  * This program is distributed in the hope that it will be useful, 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13  * GNU Lesser General Public License for more details. 14  * 15  * You should have received a copy of the GNU Lesser General Public License 16  * along with this program. If not, see <http://www.gnu.org/licenses/>. 17  */ 18 package co.rsk.mine; 19  20 import org.ethereum.core.BlockHeader; 21  22 import java.time.Clock; 23  24 public class MinerClock { 25  private final boolean isFixedClock; 26  private final Clock clock; 27  28  private long timeAdjustment; 29  30  public MinerClock(boolean isFixedClock, Clock clock) { 31  this.isFixedClock = isFixedClock; 32  this.clock = clock; 33  } 34  35  public long calculateTimestampForChild(BlockHeader parentHeader) { 36  long previousTimestamp = parentHeader.getTimestamp(); 37  if (isFixedClock) { 38  return previousTimestamp + timeAdjustment; 39  } 40  41  long ret = clock.instant().plusSeconds(timeAdjustment).getEpochSecond(); 42  return Long.max(ret, previousTimestamp + 1); 43  } 44  45  public long increaseTime(long seconds) { 46  if (seconds <= 0) { 47  return timeAdjustment; 48  } 49  50  timeAdjustment += seconds; 51  return timeAdjustment; 52  } 53  54  public void clearIncreaseTime() { 55  timeAdjustment = 0; 56  } 57 }