From 05ecebbd0fddb1b39b7b19ca2b9cba8c959f82a7 Mon Sep 17 00:00:00 2001 From: Mikhail Kalinin Date: Wed, 26 Sep 2018 11:28:17 +0600 Subject: [PATCH] Add BeaconProposer.getCurrentSlotNumber() --- .../org/ethereum/sharding/proposer/BeaconProposer.java | 7 ++++++- .../org/ethereum/sharding/proposer/BeaconProposerImpl.java | 5 +++++ .../ethereum/sharding/proposer/ProposerServiceImpl.java | 7 +++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposer.java b/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposer.java index 5cfef4c9a4..4eae2bba5c 100644 --- a/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposer.java +++ b/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposer.java @@ -60,11 +60,16 @@ public interface BeaconProposer { long getTimestamp(long slotNumber); /** - * Calculates a number of slot that given moment of time does fit to. + * Calculates a number of slot that given moment of time does fit into. * Uses {@link BeaconGenesis#timestamp} and {@link #SLOT_DURATION} * * @param timestamp timestamp in milliseconds * @return slot number */ long getSlotNumber(long timestamp); + + /** + * Calculates a number of the slot that current moment it time does fit into. + */ + long getCurrentSlotNumber(); } diff --git a/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposerImpl.java b/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposerImpl.java index 410b85efde..c13168f93c 100644 --- a/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposerImpl.java +++ b/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/BeaconProposerImpl.java @@ -112,4 +112,9 @@ public long getTimestamp(long slotNumber) { public long getSlotNumber(long timestamp) { return (timestamp - BeaconGenesis.instance().getTimestamp()) / SLOT_DURATION; } + + @Override + public long getCurrentSlotNumber() { + return getSlotNumber(System.currentTimeMillis()); + } } diff --git a/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/ProposerServiceImpl.java b/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/ProposerServiceImpl.java index 7e045599ee..e4e7e80cf7 100644 --- a/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/ProposerServiceImpl.java +++ b/ethereumj-core/src/main/java/org/ethereum/sharding/proposer/ProposerServiceImpl.java @@ -108,8 +108,7 @@ private void submitIfAssigned(Committee[][] committees) { return; // get number of the next slot that validator is eligible to propose - long slotNumber = calcNextProposingSlot(proposer.getSlotNumber(System.currentTimeMillis()), - index.getSlotOffset()); + long slotNumber = calcNextProposingSlot(proposer.getCurrentSlotNumber(), index.getSlotOffset()); // not an obvious way of calculating proposer index, // proposer = committee[X % len(committee)], X = slotNumber @@ -123,8 +122,8 @@ private void submitIfAssigned(Committee[][] committees) { public void submit(long slotNumber) { if (proposerThread == null) return; - // skip slots that are in the past - if (slotNumber < proposer.getSlotNumber(System.currentTimeMillis())) + // skip slots that start in the past + if (slotNumber <= proposer.getCurrentSlotNumber()) return; // always cancel current task and create a new one