Panda prove ments (#4267)

* breaks pandas up, test coverage

Signed-off-by: Justin Florentine <justin+github@florentine.us>
pull/4278/head
Justin Florentine 2 years ago committed by GitHub
parent cdeecf36fd
commit 1d508bab42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java
  2. 1
      besu/src/main/java/org/hyperledger/besu/controller/TransitionBesuControllerBuilder.java
  3. 90
      consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/PandaPrinter.java
  4. 196
      consensus/merge/src/main/resources/ProofOfPanda3.txt
  5. 58
      consensus/merge/src/main/resources/finalizedPanda.txt
  6. 57
      consensus/merge/src/main/resources/readyPanda.txt
  7. 57
      consensus/merge/src/main/resources/ttdPanda.txt
  8. 52
      consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/PandaPrinterTest.java

@ -21,6 +21,7 @@ import org.hyperledger.besu.config.GenesisConfigFile;
import org.hyperledger.besu.config.GenesisConfigOptions;
import org.hyperledger.besu.consensus.merge.FinalizedBlockHashSupplier;
import org.hyperledger.besu.consensus.merge.MergeContext;
import org.hyperledger.besu.consensus.merge.PandaPrinter;
import org.hyperledger.besu.consensus.qbft.pki.PkiBlockCreationConfiguration;
import org.hyperledger.besu.crypto.NodeKey;
import org.hyperledger.besu.datatypes.Hash;
@ -421,6 +422,8 @@ public abstract class BesuControllerBuilder implements MiningParameterOverrides
ethProtocolManager,
pivotBlockSelector);
synchronizer.subscribeInSync(new PandaPrinter());
final MiningCoordinator miningCoordinator =
createMiningCoordinator(
protocolSchedule,

@ -219,6 +219,7 @@ public class TransitionBesuControllerBuilder extends BesuControllerBuilder {
@Override
public BesuController build() {
BesuController controller = super.build();
PandaPrinter.hasTTD();
PostMergeContext.get().setSyncState(controller.getSyncState());
return controller;
}

@ -16,25 +16,37 @@
package org.hyperledger.besu.consensus.merge;
import org.hyperledger.besu.datatypes.Hash;
import org.hyperledger.besu.ethereum.core.Difficulty;
import org.hyperledger.besu.ethereum.core.Synchronizer.InSyncListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PandaPrinter {
public class PandaPrinter implements InSyncListener, ForkchoiceMessageListener, MergeStateHandler {
private static final Logger LOG = LoggerFactory.getLogger(PandaPrinter.class);
private static final String pandaBanner = PandaPrinter.loadBanner();
private static final AtomicBoolean beenDisplayed = new AtomicBoolean();
private static final String readyBanner = PandaPrinter.loadBanner("/readyPanda.txt");
private static final String ttdBanner = PandaPrinter.loadBanner("/ttdPanda.txt");
private static final String finalizedBanner = PandaPrinter.loadBanner("/finalizedPanda.txt");
private static final AtomicBoolean hasTTD = new AtomicBoolean(false);
private static final AtomicBoolean inSync = new AtomicBoolean(false);
public static final AtomicBoolean readyBeenDisplayed = new AtomicBoolean();
public static final AtomicBoolean ttdBeenDisplayed = new AtomicBoolean();
public static final AtomicBoolean finalizedBeenDisplayed = new AtomicBoolean();
private static String loadBanner() {
private static String loadBanner(final String filename) {
Class<PandaPrinter> c = PandaPrinter.class;
InputStream is = c.getResourceAsStream("/ProofOfPanda3.txt");
InputStream is = c.getResourceAsStream(filename);
StringBuilder resultStringBuilder = new StringBuilder();
try (BufferedReader br =
new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
@ -48,19 +60,71 @@ public class PandaPrinter {
return resultStringBuilder.toString();
}
public static boolean printOnFirstCrossing() {
boolean shouldPrint = beenDisplayed.compareAndSet(false, true);
if (shouldPrint) {
LOG.info("\n" + pandaBanner);
public static void hasTTD() {
PandaPrinter.hasTTD.getAndSet(true);
if (hasTTD.get() && inSync.get()) {
printReadyToMerge();
}
}
public static void inSync() {
PandaPrinter.inSync.getAndSet(true);
if (inSync.get() && hasTTD.get()) {
printReadyToMerge();
}
return shouldPrint;
}
static boolean hasDisplayed() {
return beenDisplayed.get();
public static void printOnFirstCrossing() {
if (!ttdBeenDisplayed.get()) {
LOG.info("\n" + ttdBanner);
}
ttdBeenDisplayed.compareAndSet(false, true);
}
static void resetForTesting() {
beenDisplayed.set(false);
ttdBeenDisplayed.set(false);
readyBeenDisplayed.set(false);
finalizedBeenDisplayed.set(false);
}
public static void printReadyToMerge() {
if (!readyBeenDisplayed.get()) {
LOG.info("\n" + readyBanner);
}
readyBeenDisplayed.compareAndSet(false, true);
}
public static void printFinalized() {
if (!finalizedBeenDisplayed.get()) {
LOG.info("\n" + finalizedBanner);
}
finalizedBeenDisplayed.compareAndSet(false, true);
}
@Override
public void onInSyncStatusChange(final boolean newSyncStatus) {
if (newSyncStatus && hasTTD.get()) {
printReadyToMerge();
}
}
@Override
public void onNewForkchoiceMessage(
final Hash headBlockHash,
final Optional<Hash> maybeFinalizedBlockHash,
final Hash safeBlockHash) {
if (maybeFinalizedBlockHash.isPresent() && !maybeFinalizedBlockHash.get().equals(Hash.ZERO)) {
printFinalized();
}
}
@Override
public void mergeStateChanged(
final boolean isPoS,
final Optional<Boolean> priorState,
final Optional<Difficulty> difficultyStoppedAt) {
if (isPoS && priorState.isPresent() && !priorState.get()) { // just crossed from PoW to PoS
printOnFirstCrossing();
}
}
}

@ -1,196 +0,0 @@
:. :.
#%% %#%=
=%*%% +%++#. =.
%%#*@#++==*##*%+*##= .:+
-#%%@%#%%@@%%*@%##%= .-
=@@%%#%#@#@*%%@*++
-@@@@@#*@@@%#%@%@#*.
.%@@%*%@#%%@#@#%%%@*# :: -+.
-#@%+-**#%%*@%+=*%%*%. -%#--..-%#:
:%#%*=%-#*+##%=#==%@%%= -: =.
-%+%*:**@%*####==##%%%#= .. . :
.#@#%###%%#-+*%**%#@@%@## :.. = :*#* .:
-%%%%%+%%%+-+%@%*#%%@%%*%- ..-. .. -#@#. -
*%%@@%*@**-%***@%#%%%@#*@@: . - .. %. -
%%%@@%+@%**@*=%@@#%%%%+*### ...- .. * .- . . :
:. :. .#%#@#%+%%%*%*@%@%*#%@*=%##%. : :. ..:-=*#:...+ - -*.=:=.
%#%%-+%# =-*@%%%#=*%@%%%@@@#++@%+##*%%+ .::+. .:.:=*+#+::....-. .=*=
=+##%#%..: :##:#%##@%*#%#**+*%*##%+%*=-.-% . .-:::.= ** . :: . ++.+...
#%*###%*%%**=+**%##+#**%@*#*#**+**##*+#-+*-+-*- . .:+:. ==-+:.. .%+=:*:
-%%*++##%%#%#%%%#@%#*#%+**+##%%##%*-+#+--*%%#+* . .-===--. .:-=- . #===..
-###=+%@%%%%%%@@#@%##*=--++-+#***=--=-=**#*@### .:- . .#++==.
-+%++@@@@@@%@@@+@@%=+#*%--::-*+=:-=**#%%#%#@%@. .= .. .#+-:.
-%+*#@@@@@@@@@@+@@%=+%%@%%#+#%#+*###%%%@%%%%%%. . .- . .. ....:.
-*@@@@@@@@%@+%@%#-:#@@@@#%@%#%%%%%%@@@%@%@#% . . .* .... ..
%@@@@@@%*@**@%%#-#@@@@@@@@#%#%@%@%@%%@%@#%: .... .....-: ......
=%@@@@@#%##@@%%==@@@@@@@@@@@%@@@%@@@@@%#%. . ...... ....*= ....
+@@@@%**%%@%%#=-%%@@@@@@@@@@@@@@@@%%#@@- . -...... .:+++=. .
=#@@%*@%%@%%##--%@@@@@@@@@@@@@@%@*%@%* .::=...:.::-+++=. .
--@@#@%%%#*=.-@@@@@@@@@@@%%@*#%@@% .. ...*..*=. .
=@@@%@@@%#*++-=%@@%@@@@@#+**%@@@* . --.. ..
-@@@%@@%%##**##+==:+-+**=+#%@%%@+ ...
-@@@@%@@#%%%%@@%#+#%%%@#+#%@@@#%= . ..
-%@@@@@@@@@%%%@+%@%@%%##%%#@@@%@- .. . ...
:%@@@%@@@@@%@@#%@%%#=-*++**+@%#@= -+=-.:=: ..
.@@@@@@@@@@@@%@@%*++*%%#%@%#*%%#- .. .= := . ....
#@@@@@@@@@@*@%*+@%@@#@%@@@%*%@. . + . ....
:#@@@@@@@%%%#=*@@%%@@@#%@@##*@:: .. ... :=... .....
-%@@@@@@@@@%=@@%@%@%@@@@@%#+@# .. .... =..........
++%@@@@@@%@*%@%%@@@@@@@@%#**@+ ..: ... .==...... .
#*%@@@@%*+=%##@@@@@%@%%%###+. . :.... ..=+:..:=
*#*#@@@%=*==*##=+*#%@%##+#@+ .. ...+. -=+:--.=-..
.*#=*%@%*%##@@#%%+#*%@*+#@+ .... . ...+.:.+:::.
*%*+##+#%%%%%%%#%%%%##%- : ... .-=+.:-=*....
-@@%%%*-%%%%@%%@%@%*%% ....=..:*:.=....
#@@%***+%+++*++@%%+- ..::=:**+#...
%%%%%%%=%%*+*%@%. .::**=+=:...
:%@@%%%%=##%%*= .:+=-+....
*@@@@@@%#++ :=+::.
:*%@@@%@@+ :.....
#%@@@@%%# .......
.#@@@@@@@#= ... ....
#%@%%@%%@@@. ..:..:..
-###%%%%@@%- . .. .
#*#%#%@@*:
:+-
:.--
.-*+#=---:-*:::-: .-.-== .
-%%@%%%%@%#%@*+*+#* . ...*==+# .
-%%#%%@@@@%@%@%%+=**@:: .-*.*++=
.#%%@@@@@@%@%%@@##***##+ ...=:++%..
:%%%%@@@@%%*=-+%@###++*%= --*+*:+*... .+=.
:%%@@@@@@%%@*%#*%-@@%*##+*## ...-.*-. .. .-. .-
.:.#@@@@@@@@@@#+%*#@=@@%%%%##%= . .-: ... . .:-=++-
#=@@@@%@%#*#**%@##%-@@++#*.- ......: --:
#%#@@@@@%#*@%%%%@@@%-:: : ..:-. +...
:::@%%@@@@@@=%@*#@%*@@%%. :. ..=:
:%=#@@@@%@%%%%%##*+#%%%+%= :..
-%%*%%@@@%@#%@%%%%*-=+##=%%- :. :*.
=#%@%@%%@@%%#@@@%@**-#.**%%%@. .#* ..-
-%@@%#@@@@#%%%%%@#=##*-:*%%@@@%. *=. .-:.
-#@@@@%%@%@#@@%@@#*%%%%%##*%###%@: .:- .-. ::..
##@@@%#%@@@%@%@@###@%%#%%##%+#*##@@@= .. . +- .:..
+#@@@@@%%@@@%@#%%%%@@#=:-%%-##*%#%*##%= :- - +% :: -...
:%%@@@@%%@@%@%%%#%%@@@%:%#-#*+-+#%%#+*%= = -=. +@* = ..
%%@@@@@@%%%@@#%*%%#*#%#=*#:%@=%+:%%%+=%= . .*#. %**: = + .
=%@@@@@@@@@%@@%#@#%%#%*+#*:+%@%:--@@%#%# .#:. .#@. = ..
.%@@@@@@@@@@%%@##@@@@%@*=###*%@%*##@@%=. = .+#. :
+@@@@@@@@@%%%*@@+%@@@%%%#+@%%%@*@%@%@% .= +=- ..
%%@@@@@@@@@@%*@%##@@@@%%%=%%%%#@%%@%%= ...:. ..
*@@@@@@@@@@@@%%#%%=%#@@@@@%+%@##%@##%: =.=..
%@@@@@@@@@@@@@%#@%#*%@@@@%%#*%#@%@*=%* := :-.
+%@@@@@@%@@@@@@@%#%@%%%@@@%*%%##%%#**%. . -:::.:
-##@@@@@@@@@@@@@@@#%%@@%%###%##%@@@#*%- . -
*+#@@@@@@@@@%@@@%@#@@@%#%#%%%%#@##*#@+ . .
-%#%@@@@@@@@@@@@@@%%@@@@@@@@@@@#*%@%@%-+@+.+ . ... .
%@+%@@@@@@@@@@@@@@%@@@@@@@@@@#@%@%##+*##%==@%+. ... . =
-%%=#@@@@@@@@@@@@@@@@@@@@@@@%#@%**%#=%%#=#*#%%%. .. .. :
@@@+#@@@@@@@@@@@@@@@@@@@@@%%@@#:#%=#@@%*++#%### ... .
-@%%#*@@@@@@@@@@@@@@@@@@@%@@%@%-#@#%@@@@===%@@@= .... . :..
*%%%#*@%@@@@@@@@@@@@@@@@@@@@%@*+@@+%@%%@+++#*=%- . . ..
:@@#%%*%@@@@@@@@@%@@@@@%@@@@@@@**@@*@@%@##+*%%%% .. .-. . ::.
*@%#@%=@@@@@@@@@@@@@@@@@@@@@@%%:%@@#@@@@%=+*+%%* :. . ...- :..
%@@%%@#%@@@@@@@@@@@@@@@@@@@@@%#-@@@@@%%%%%##*-- .... .....::. . ...-:
-@%#@%@*#@@@@@@@@@@@@@@@@@@@@@%*:%@@@@@@@@%#*: ............ ... . .=.
%@%@@@%%%%@%@@@@@@@@@@@@@@@@@%###*@@@@@@@@@# . .... .:.. . . . .=
.@%%%@@%@#*@#@@@@@@@@@@@@@@@@@@*@-=%@@@@@@@#. .:=:. .. .:.
.@%%%@@@@@%#%@@@@@@@@@@@@@@@@@#***@*==#@%#: ::. .......
-@@@@@@@@@@#%%@@@@@@@@@@@@@%%#%%%%@%#+.. .... .. ........
*@@@@@@@@@@@##@@@@@@@@@@%@%*%@@@%%%%%*#% .....................
:*@@@@@@@@@@@@%%@@@@@@@@@*+%@@@@@@@@#%%%+ .............:.......
.#@@@@%@@@@@@@-=:*#*+== =@%@@@@@@%%%@%@% ...-....... ... ...... .
.%@@@@@@@@@@@. -#@@@@@@@@@@%@% .... .... ......... ..
#@@@@@@@@@@- *@%@@@@@@@@# . . . ... ..........
#%@@@@@@@*: +**%%@@@@@@+ .......... ....... .
:#*#%@@@@= .%@@%@@%@@%=. ......... ........
:+#+*#+#@# %@@@@@@@%=%= ........ .... .
:@%@*#+@%- @@@@@%%-%** :....... ..
-:==+=. .--+%-: ...
.. .
%@@# . %#@#
-@@%%- ........ -*@@@=
+@@%+.. ..=#@@%
+@@-. .*@*
.=+. .-.
..=#%+. *@%+. .
. +@@@@# .@@@@# ..
. @@@@@# @@@@@* ..
. +@#-%@# %%-%@% ..
. %@@%@@- =*@+@@@. .
. #@@@%=. . -@@@@@...
:...+#-.. +*+ .-@@@* .
:. :@@@= -:. ..
:: :%- .-.
.*.-. + .:..
:*%*- : +*. .. :*-
=@@%+= .:=**-+. . .. -###.
.-%% #@@@%:. +++**#::.. -%#@@+
+@@@%.#@@@@@%. =*+***-: :.@%@@@@. +%*
:@@@@@#@@@@@@%-. =++*++. :-%@%@@@@@%-#@@%-
*@@@@@#@@@@@@@%:. .#+-+# . :#@@@@@@@@@#%@@@%
+@@@@@*@@@@@@@@# :-:+ ...#@@@@@@@@@@*@@@@@.
.@@@@%@@@@@@@@@@#== . =:@@@@@@@@@@@@#@@@@@.
+@@@@@@@@@@@@@@@%*=. .*%@@@@@@@@@@@@@@#@@@@.
#@@@@@@@@@@@@@@@@@%+--+%@@@@@@%@@%@@@@@@@@@@%
*%@@@@%+%====#%@@@@@@@@@@%%#%%%%%@@@@@@@@@@.
.:. %=:: .-#@@@@@%- ..-#*%@@@@@@#.
=::.. ... ...:-#---:.
.... .....
... ...
.. ...
... ..
... .:.
... ..
. .. ..
#+:. .:=*
.*%#:.. ..:*@=
-@@#.-.. ..:%@%.
#@@%:... ..:-@@@:
.%@@@=:..... ....*@@@=
=@@@@%...... ...=@@@@+
*@@@@@=:... ....:+@@@@*
%@@@@@@+-. . ....::#@@@@#
%@@@@@@@+-... . ...:=%@@@@@%
@@@@@@@@@*:.... .....:=%@@@@@@%
@@@@@@@@@@*-...............:*@@@@@@@@*
.@@@@@@@@@@@*............. :@@@@@@@@@+
*@@@@@@@@*- . ...... .%@@@@@@@:
+@@@@@@@= .%@@@@@@:
.#@@@@@@+ :@@@@@@@*
-%@@@@@@@* -@@@@@@@@#.
:%@@@@@@@@@ .@@@%@%@@#+
#-@#@*@@@@: .%@@=@+@%.
..-=#*@*: .: :.

@ -0,0 +1,58 @@
.. .
%@@# . %#@#
-@@%%- ........ -*@@@=
+@@%+.. ..=#@@%
+@@-. .*@*
.=+. .-.
..=#%+. *@%+. .
. +@@@@# .@@@@# ..
. @@@@@# @@@@@* ..
. +@#-%@# %%-%@% ..
. %@@%@@- =*@+@@@. .
. #@@@%=. . -@@@@@...
:...+#-.. +*+ .-@@@* .
:. :@@@= -:. ..
:: :%- .-.
.*.-. + .:..
:*%*- : +*. .. :*-
=@@%+= .:=**-+. . .. -###.
.-%% #@@@%:. +++**#::.. -%#@@+
+@@@%.#@@@@@%. =*+***-: :.@%@@@@. +%*
:@@@@@#@@@@@@%-. =++*++. :-%@%@@@@@%-#@@%-
*@@@@@#@@@@@@@%:. .#+-+# . :#@@@@@@@@@#%@@@%
+@@@@@*@@@@@@@@# :-:+ ...#@@@@@@@@@@*@@@@@.
.@@@@%@@@@@@@@@@#== . =:@@@@@@@@@@@@#@@@@@.
+@@@@@@@@@@@@@@@%*=. .*%@@@@@@@@@@@@@@#@@@@.
#@@@@@@@@@@@@@@@@@%+--+%@@@@@@%@@%@@@@@@@@@@%
*%@@@@%+%====#%@@@@@@@@@@%%#%%%%%@@@@@@@@@@.
.:. %=:: .-#@@@@@%- ..-#*%@@@@@@#.
=::.. ... ...:-#---:.
.... .....
... ...
.. ...
... ..
... .:.
... ..
. .. ..
#+:. .:=*
.*%#:.. ..:*@=
-@@#.-.. ..:%@%.
#@@%:... ..:-@@@:
.%@@@=:..... ....*@@@=
=@@@@%...... ...=@@@@+
*@@@@@=:... ....:+@@@@*
%@@@@@@+-. . ....::#@@@@#
%@@@@@@@+-... . ...:=%@@@@@%
@@@@@@@@@*:.... .....:=%@@@@@@%
@@@@@@@@@@*-...............:*@@@@@@@@*
.@@@@@@@@@@@*............. :@@@@@@@@@+
*@@@@@@@@*- . ...... .%@@@@@@@:
+@@@@@@@= .%@@@@@@:
.#@@@@@@+ :@@@@@@@*
-%@@@@@@@* -@@@@@@@@#.
:%@@@@@@@@@ .@@@%@%@@#+
#-@#@*@@@@: .%@@=@+@%.
..-=#*@*: .: :.

@ -0,0 +1,57 @@
:. :.
#%% %#%=
=%*%% +%++#. =.
%%#*@#++==*##*%+*##= .:+
-#%%@%#%%@@%%*@%##%= .-
=@@%%#%#@#@*%%@*++
-@@@@@#*@@@%#%@%@#*.
.%@@%*%@#%%@#@#%%%@*# :: -+.
-#@%+-**#%%*@%+=*%%*%. -%#--..-%#:
:%#%*=%-#*+##%=#==%@%%= -: =.
-%+%*:**@%*####==##%%%#= .. . :
.#@#%###%%#-+*%**%#@@%@## :.. = :*#* .:
-%%%%%+%%%+-+%@%*#%%@%%*%- ..-. .. -#@#. -
*%%@@%*@**-%***@%#%%%@#*@@: . - .. %. -
%%%@@%+@%**@*=%@@#%%%%+*### ...- .. * .- . . :
:. :. .#%#@#%+%%%*%*@%@%*#%@*=%##%. : :. ..:-=*#:...+ - -*.=:=.
%#%%-+%# =-*@%%%#=*%@%%%@@@#++@%+##*%%+ .::+. .:.:=*+#+::....-. .=*=
=+##%#%..: :##:#%##@%*#%#**+*%*##%+%*=-.-% . .-:::.= ** . :: . ++.+...
#%*###%*%%**=+**%##+#**%@*#*#**+**##*+#-+*-+-*- . .:+:. ==-+:.. .%+=:*:
-%%*++##%%#%#%%%#@%#*#%+**+##%%##%*-+#+--*%%#+* . .-===--. .:-=- . #===..
-###=+%@%%%%%%@@#@%##*=--++-+#***=--=-=**#*@### .:- . .#++==.
-+%++@@@@@@%@@@+@@%=+#*%--::-*+=:-=**#%%#%#@%@. .= .. .#+-:.
-%+*#@@@@@@@@@@+@@%=+%%@%%#+#%#+*###%%%@%%%%%%. . .- . .. ....:.
-*@@@@@@@@%@+%@%#-:#@@@@#%@%#%%%%%%@@@%@%@#% . . .* .... ..
%@@@@@@%*@**@%%#-#@@@@@@@@#%#%@%@%@%%@%@#%: .... .....-: ......
=%@@@@@#%##@@%%==@@@@@@@@@@@%@@@%@@@@@%#%. . ...... ....*= ....
+@@@@%**%%@%%#=-%%@@@@@@@@@@@@@@@@%%#@@- . -...... .:+++=. .
=#@@%*@%%@%%##--%@@@@@@@@@@@@@@%@*%@%* .::=...:.::-+++=. .
--@@#@%%%#*=.-@@@@@@@@@@@%%@*#%@@% .. ...*..*=. .
=@@@%@@@%#*++-=%@@%@@@@@#+**%@@@* . --.. ..
-@@@%@@%%##**##+==:+-+**=+#%@%%@+ ...
-@@@@%@@#%%%%@@%#+#%%%@#+#%@@@#%= . ..
-%@@@@@@@@@%%%@+%@%@%%##%%#@@@%@- .. . ...
:%@@@%@@@@@%@@#%@%%#=-*++**+@%#@= -+=-.:=: ..
.@@@@@@@@@@@@%@@%*++*%%#%@%#*%%#- .. .= := . ....
#@@@@@@@@@@*@%*+@%@@#@%@@@%*%@. . + . ....
:#@@@@@@@%%%#=*@@%%@@@#%@@##*@:: .. ... :=... .....
-%@@@@@@@@@%=@@%@%@%@@@@@%#+@# .. .... =..........
++%@@@@@@%@*%@%%@@@@@@@@%#**@+ ..: ... .==...... .
#*%@@@@%*+=%##@@@@@%@%%%###+. . :.... ..=+:..:=
*#*#@@@%=*==*##=+*#%@%##+#@+ .. ...+. -=+:--.=-..
.*#=*%@%*%##@@#%%+#*%@*+#@+ .... . ...+.:.+:::.
*%*+##+#%%%%%%%#%%%%##%- : ... .-=+.:-=*....
-@@%%%*-%%%%@%%@%@%*%% ....=..:*:.=....
#@@%***+%+++*++@%%+- ..::=:**+#...
%%%%%%%=%%*+*%@%. .::**=+=:...
:%@@%%%%=##%%*= .:+=-+....
*@@@@@@%#++ :=+::.
:*%@@@%@@+ :.....
#%@@@@%%# .......
.#@@@@@@@#= ... ....
#%@%%@%%@@@. ..:..:..
-###%%%%@@%- . .. .
#*#%#%@@*:
:+-

@ -0,0 +1,57 @@
:.--
.-*+#=---:-*:::-: .-.-== .
-%%@%%%%@%#%@*+*+#* . ...*==+# .
-%%#%%@@@@%@%@%%+=**@:: .-*.*++=
.#%%@@@@@@%@%%@@##***##+ ...=:++%..
:%%%%@@@@%%*=-+%@###++*%= --*+*:+*... .+=.
:%%@@@@@@%%@*%#*%-@@%*##+*## ...-.*-. .. .-. .-
.:.#@@@@@@@@@@#+%*#@=@@%%%%##%= . .-: ... . .:-=++-
#=@@@@%@%#*#**%@##%-@@++#*.- ......: --:
#%#@@@@@%#*@%%%%@@@%-:: : ..:-. +...
:::@%%@@@@@@=%@*#@%*@@%%. :. ..=:
:%=#@@@@%@%%%%%##*+#%%%+%= :..
-%%*%%@@@%@#%@%%%%*-=+##=%%- :. :*.
=#%@%@%%@@%%#@@@%@**-#.**%%%@. .#* ..-
-%@@%#@@@@#%%%%%@#=##*-:*%%@@@%. *=. .-:.
-#@@@@%%@%@#@@%@@#*%%%%%##*%###%@: .:- .-. ::..
##@@@%#%@@@%@%@@###@%%#%%##%+#*##@@@= .. . +- .:..
+#@@@@@%%@@@%@#%%%%@@#=:-%%-##*%#%*##%= :- - +% :: -...
:%%@@@@%%@@%@%%%#%%@@@%:%#-#*+-+#%%#+*%= = -=. +@* = ..
%%@@@@@@%%%@@#%*%%#*#%#=*#:%@=%+:%%%+=%= . .*#. %**: = + .
=%@@@@@@@@@%@@%#@#%%#%*+#*:+%@%:--@@%#%# .#:. .#@. = ..
.%@@@@@@@@@@%%@##@@@@%@*=###*%@%*##@@%=. = .+#. :
+@@@@@@@@@%%%*@@+%@@@%%%#+@%%%@*@%@%@% .= +=- ..
%%@@@@@@@@@@%*@%##@@@@%%%=%%%%#@%%@%%= ...:. ..
*@@@@@@@@@@@@%%#%%=%#@@@@@%+%@##%@##%: =.=..
%@@@@@@@@@@@@@%#@%#*%@@@@%%#*%#@%@*=%* := :-.
+%@@@@@@%@@@@@@@%#%@%%%@@@%*%%##%%#**%. . -:::.:
-##@@@@@@@@@@@@@@@#%%@@%%###%##%@@@#*%- . -
*+#@@@@@@@@@%@@@%@#@@@%#%#%%%%#@##*#@+ . .
-%#%@@@@@@@@@@@@@@%%@@@@@@@@@@@#*%@%@%-+@+.+ . ... .
%@+%@@@@@@@@@@@@@@%@@@@@@@@@@#@%@%##+*##%==@%+. ... . =
-%%=#@@@@@@@@@@@@@@@@@@@@@@@%#@%**%#=%%#=#*#%%%. .. .. :
@@@+#@@@@@@@@@@@@@@@@@@@@@%%@@#:#%=#@@%*++#%### ... .
-@%%#*@@@@@@@@@@@@@@@@@@@%@@%@%-#@#%@@@@===%@@@= .... . :..
*%%%#*@%@@@@@@@@@@@@@@@@@@@@%@*+@@+%@%%@+++#*=%- . . ..
:@@#%%*%@@@@@@@@@%@@@@@%@@@@@@@**@@*@@%@##+*%%%% .. .-. . ::.
*@%#@%=@@@@@@@@@@@@@@@@@@@@@@%%:%@@#@@@@%=+*+%%* :. . ...- :..
%@@%%@#%@@@@@@@@@@@@@@@@@@@@@%#-@@@@@%%%%%##*-- .... .....::. . ...-:
-@%#@%@*#@@@@@@@@@@@@@@@@@@@@@%*:%@@@@@@@@%#*: ............ ... . .=.
%@%@@@%%%%@%@@@@@@@@@@@@@@@@@%###*@@@@@@@@@# . .... .:.. . . . .=
.@%%%@@%@#*@#@@@@@@@@@@@@@@@@@@*@-=%@@@@@@@#. .:=:. .. .:.
.@%%%@@@@@%#%@@@@@@@@@@@@@@@@@#***@*==#@%#: ::. .......
-@@@@@@@@@@#%%@@@@@@@@@@@@@%%#%%%%@%#+.. .... .. ........
*@@@@@@@@@@@##@@@@@@@@@@%@%*%@@@%%%%%*#% .....................
:*@@@@@@@@@@@@%%@@@@@@@@@*+%@@@@@@@@#%%%+ .............:.......
.#@@@@%@@@@@@@-=:*#*+== =@%@@@@@@%%%@%@% ...-....... ... ...... .
.%@@@@@@@@@@@. -#@@@@@@@@@@%@% .... .... ......... ..
#@@@@@@@@@@- *@%@@@@@@@@# . . . ... ..........
#%@@@@@@@*: +**%%@@@@@@+ .......... ....... .
:#*#%@@@@= .%@@%@@%@@%=. ......... ........
:+#+*#+#@# %@@@@@@@%=%= ........ .... .
:@%@*#+@%- @@@@@%%-%** :....... ..
-:==+=. .--+%-: ...

@ -18,8 +18,11 @@ package org.hyperledger.besu.consensus.merge;
import static org.assertj.core.api.Assertions.assertThat;
import org.hyperledger.besu.datatypes.Hash;
import org.hyperledger.besu.ethereum.core.Difficulty;
import java.util.Optional;
import org.junit.Test;
public class PandaPrinterTest {
@ -33,8 +36,11 @@ public class PandaPrinterTest {
@Test
public void printsPanda() {
PandaPrinter.resetForTesting();
assertThat(PandaPrinter.printOnFirstCrossing()).isTrue();
assertThat(PandaPrinter.printOnFirstCrossing()).isFalse();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
PandaPrinter.printOnFirstCrossing();
assertThat(PandaPrinter.ttdBeenDisplayed).isTrue();
assertThat(PandaPrinter.readyBeenDisplayed).isFalse();
assertThat(PandaPrinter.finalizedBeenDisplayed).isFalse();
}
@Test
@ -43,9 +49,11 @@ public class PandaPrinterTest {
var mergeContext = new PostMergeContext(Difficulty.ONE);
mergeContext.observeNewIsPostMergeState(fauxTransitionHandler);
assertThat(PandaPrinter.hasDisplayed()).isFalse();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
mergeContext.setIsPostMerge(Difficulty.ONE);
assertThat(PandaPrinter.hasDisplayed()).isFalse();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
assertThat(PandaPrinter.readyBeenDisplayed).isFalse();
assertThat(PandaPrinter.finalizedBeenDisplayed).isFalse();
}
@Test
@ -54,10 +62,40 @@ public class PandaPrinterTest {
var mergeContext = new PostMergeContext(Difficulty.ONE);
mergeContext.observeNewIsPostMergeState(fauxTransitionHandler);
assertThat(PandaPrinter.hasDisplayed()).isFalse();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
mergeContext.setIsPostMerge(Difficulty.ZERO);
assertThat(PandaPrinter.hasDisplayed()).isFalse();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
mergeContext.setIsPostMerge(Difficulty.ONE);
assertThat(PandaPrinter.hasDisplayed()).isTrue();
assertThat(PandaPrinter.ttdBeenDisplayed).isTrue();
assertThat(PandaPrinter.readyBeenDisplayed).isFalse();
assertThat(PandaPrinter.finalizedBeenDisplayed).isFalse();
}
@Test
public void printsReadyOnStartupInSyncWithTTD() {
PandaPrinter.resetForTesting();
PandaPrinter.inSync();
PandaPrinter.hasTTD();
assertThat(PandaPrinter.readyBeenDisplayed).isTrue();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
assertThat(PandaPrinter.finalizedBeenDisplayed).isFalse();
}
@Test
public void printsFinalized() {
PandaPrinter.resetForTesting();
PandaPrinter pandaPrinter = new PandaPrinter();
MergeContext mergeContext = new PostMergeContext(Difficulty.ZERO);
mergeContext.addNewForkchoiceMessageListener(pandaPrinter);
mergeContext.fireNewUnverifiedForkchoiceMessageEvent(
Hash.ZERO, Optional.of(Hash.ZERO), Hash.ZERO);
assertThat(PandaPrinter.readyBeenDisplayed).isFalse();
assertThat(PandaPrinter.finalizedBeenDisplayed).isFalse();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
mergeContext.fireNewUnverifiedForkchoiceMessageEvent(
Hash.ZERO, Optional.of(Hash.fromHexStringLenient("0x1337")), Hash.ZERO);
assertThat(PandaPrinter.readyBeenDisplayed).isFalse();
assertThat(PandaPrinter.ttdBeenDisplayed).isFalse();
assertThat(PandaPrinter.finalizedBeenDisplayed).isTrue();
}
}

Loading…
Cancel
Save