mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-23 06:55:08 +01:00
Add onDaoStateBlockCreated method
Use onDaoStateBlockCreated instead of onDaoStateHashesChanged to avoid multiple calls when we receive hashes from other nodes. Add daoStateMonitoringService listener after blockchain parsing is completed Signed-off-by: HenrikJannsen <boilingfrog@gmx.com>
This commit is contained in:
parent
1d67af6f40
commit
491c6a0861
2 changed files with 22 additions and 24 deletions
|
@ -89,9 +89,14 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
DaoStateNetworkService.Listener<NewDaoStateHashMessage, GetDaoStateHashesRequest, DaoStateHash> {
|
||||
|
||||
public interface Listener {
|
||||
void onDaoStateHashesChanged();
|
||||
default void onDaoStateHashesChanged() {
|
||||
}
|
||||
|
||||
void onCheckpointFail();
|
||||
default void onCheckpointFail() {
|
||||
}
|
||||
|
||||
default void onDaoStateBlockCreated() {
|
||||
}
|
||||
}
|
||||
|
||||
private final DaoStateService daoStateService;
|
||||
|
@ -347,7 +352,7 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
// We only broadcast after parsing of blockchain is complete
|
||||
if (parseBlockChainComplete) {
|
||||
// We delay broadcast to give peers enough time to have received the block.
|
||||
// Otherwise they would ignore our data if received block is in future to their local blockchain.
|
||||
// Otherwise, they would ignore our data if received block is in future to their local blockchain.
|
||||
int delayInSec = 5 + new Random().nextInt(10);
|
||||
if (Config.baseCurrencyNetwork().isRegtest()) {
|
||||
delayInSec = 1;
|
||||
|
@ -361,6 +366,7 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
duration);
|
||||
accumulatedDuration += duration;
|
||||
numCalls++;
|
||||
listeners.forEach(Listener::onDaoStateBlockCreated);
|
||||
return Optional.of(daoStateBlock);
|
||||
}
|
||||
|
||||
|
@ -371,15 +377,14 @@ public class DaoStateMonitoringService implements DaoSetupService, DaoStateListe
|
|||
// If we do not add own hashes during initial parsing we fill the missing hashes from the peer and create
|
||||
// at the last block our own hash.
|
||||
int height = peersHash.getHeight();
|
||||
if (!useDaoMonitor &&
|
||||
!findDaoStateBlock(height).isPresent()) {
|
||||
if (!useDaoMonitor && findDaoStateBlock(height).isEmpty()) {
|
||||
if (daoStateService.getChainHeight() == height) {
|
||||
// At the most recent block we create our own hash
|
||||
optionalDaoStateBlock = daoStateService.getLastBlock()
|
||||
.map(this::createDaoStateBlock)
|
||||
.orElse(findDaoStateBlock(height));
|
||||
} else {
|
||||
// Otherwise we create a block from the peers daoStateHash
|
||||
// Otherwise, we create a block from the peers daoStateHash
|
||||
DaoStateHash daoStateHash = new DaoStateHash(height, peersHash.getHash(), false);
|
||||
DaoStateBlock daoStateBlock = new DaoStateBlock(daoStateHash);
|
||||
daoStateBlockChain.add(daoStateBlock);
|
||||
|
|
|
@ -95,10 +95,9 @@ public class SeedNodeReportingService {
|
|||
private final String seedNodeReportingServerUrl;
|
||||
private final DaoStateListener daoStateListener;
|
||||
private final HttpClient httpClient;
|
||||
|
||||
private Timer dataReportTimer;
|
||||
private final Timer heartBeatTimer;
|
||||
private final ExecutorService executor;
|
||||
private final Timer heartBeatTimer;
|
||||
private Timer dataReportTimer;
|
||||
|
||||
@Inject
|
||||
public SeedNodeReportingService(P2PService p2PService,
|
||||
|
@ -128,28 +127,22 @@ public class SeedNodeReportingService {
|
|||
|
||||
heartBeatTimer = UserThread.runPeriodically(this::sendHeartBeat, HEART_BEAT_DELAY_SEC);
|
||||
|
||||
// We send each time when a new block is received and the DAO hash has been provided (which
|
||||
// takes a bit after the block arrives).
|
||||
daoStateMonitoringService.addListener(new DaoStateMonitoringService.Listener() {
|
||||
@Override
|
||||
public void onDaoStateHashesChanged() {
|
||||
sendBlockRelatedData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckpointFail() {
|
||||
}
|
||||
});
|
||||
|
||||
// Independent of the block
|
||||
daoStateListener = new DaoStateListener() {
|
||||
@Override
|
||||
public void onParseBlockChainComplete() {
|
||||
daoFacade.removeBsqStateListener(daoStateListener);
|
||||
dataReportTimer = UserThread.runPeriodically(() -> sendDataReport(), REPORT_DELAY_SEC);
|
||||
sendDataReport();
|
||||
|
||||
sendBlockRelatedData();
|
||||
|
||||
// We send each time when a new block is received and the DAO hash has been provided (which
|
||||
// takes a bit after the block arrives).
|
||||
daoStateMonitoringService.addListener(new DaoStateMonitoringService.Listener() {
|
||||
@Override
|
||||
public void onDaoStateBlockCreated() {
|
||||
sendBlockRelatedData();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
daoFacade.addBsqStateListener(daoStateListener);
|
||||
|
|
Loading…
Add table
Reference in a new issue