forked from Qortal/qortal
Qortal Core - Main Code Repository
Decentralized Data Network - Blockchain - TRUE Cross-Chain Trading - Application and Website Hosting - Much More - Qortal is the future internet infrastructure for the global digital world.
13eff43b87
Peers without a recent block are removed at the start of the sync process, however, due to the time lag involved in fetching block summaries and comparing the list of peers, some of these could subsequently drop back to a non-recent block and still be chosen as the next peer to sync with. The end result being that nodes could unnecessarily orphan as many as 20 blocks due to syncing with a peer that doesn't have a recent block (but has a couple of high weight blocks after the common block). This commit adds some additional filtering to avoid this situation. 1) Peers without a recent block are removed as candidates in comparePeers(), allowing for alternate peers to be chosen. 2) After comparePeers() completes, the list is filtered a second time to make sure that all are still recent. 3) Finally, the peer's state is checked one last time in syncToPeerChain(), just before any orphaning takes place. Whilst just one of the above would probably have been sufficient, the consequences of this bug are so severe that it makes sense to be very thorough. The only exception to the above is when the node is in "recovery mode", in which case peers without recent blocks are allowed to be included. Items 1 and 3 above do not apply in recovery mode. Item 2 does apply, since the entire comparePeers() functionality is already skipped in a recovery situation due to our chain being out of date. |
||
---|---|---|
.github/workflows | ||
lib | ||
src | ||
tools | ||
WindowsInstaller | ||
.gitignore | ||
AutoUpdates.md | ||
DATABASE.md | ||
Dockerfile | ||
log4j2.properties | ||
pom.xml | ||
README.md | ||
run.sh | ||
start.sh | ||
stop.sh | ||
TestNets.md |
Qortal Project - Official Repo
Build / run
- Requires Java 11. OpenJDK 11 recommended over Java SE.
- Install Maven
- Use Maven to fetch dependencies and build:
mvn clean package
- Built JAR should be something like
target/qortal-1.0.jar
- Create basic settings.json file:
echo '{}' > settings.json
- Run JAR in same working directory as settings.json:
java -jar target/qortal-1.0.jar
- Wrap in shell script, add JVM flags, redirection, backgrounding, etc. as necessary.
- Or use supplied example shell script: start.sh