From b5439834b2bdb4bb0e78f180aa11d7334ce398d0 Mon Sep 17 00:00:00 2001 From: Justin Florentine Date: Mon, 9 May 2022 14:35:34 -0400 Subject: [PATCH] Proof of Stake banner (#3757) * i did it for the gram Signed-off-by: Justin Florentine --- .../controller/BesuControllerBuilder.java | 2 + .../besu/consensus/merge/PandaPrinter.java | 57 +++++ .../src/main/resources/ProofOfPanda3.txt | 196 ++++++++++++++++++ .../consensus/merge/PandaPrinterTest.java | 28 +++ 4 files changed, 283 insertions(+) create mode 100644 consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/PandaPrinter.java create mode 100644 consensus/merge/src/main/resources/ProofOfPanda3.txt create mode 100644 consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/PandaPrinterTest.java diff --git a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java index 774935f20d6..1b642c66789 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java @@ -20,6 +20,7 @@ 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; @@ -340,6 +341,7 @@ public BesuController build() { final boolean fastSyncEnabled = EnumSet.of(SyncMode.FAST, SyncMode.X_SNAP).contains(syncConfig.getSyncMode()); final SyncState syncState = new SyncState(blockchain, ethPeers, fastSyncEnabled); + syncState.subscribeTTDReached(new PandaPrinter()); final TransactionPool transactionPool = TransactionPoolFactory.createTransactionPool( diff --git a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/PandaPrinter.java b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/PandaPrinter.java new file mode 100644 index 00000000000..3b61637651a --- /dev/null +++ b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/PandaPrinter.java @@ -0,0 +1,57 @@ +/* + * Copyright Hyperledger Besu Contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.hyperledger.besu.consensus.merge; + +import org.hyperledger.besu.plugin.services.BesuEvents.TTDReachedListener; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PandaPrinter implements TTDReachedListener { + + private static final Logger LOG = LoggerFactory.getLogger(PandaPrinter.class); + private static final String pandaBanner = PandaPrinter.loadBanner(); + + private static String loadBanner() { + Class c = PandaPrinter.class; + InputStream is = c.getResourceAsStream("/ProofOfPanda3.txt"); + StringBuilder resultStringBuilder = new StringBuilder(); + try (BufferedReader br = + new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { + String line; + while ((line = br.readLine()) != null) { + resultStringBuilder.append(line).append("\n"); + } + } catch (IOException e) { + LOG.error("Couldn't load hilarious panda banner"); + } + return resultStringBuilder.toString(); + } + + @Override + public void onTTDReached(final boolean reached) { + if (reached) { + LOG.info("\n" + pandaBanner); + } + } +} diff --git a/consensus/merge/src/main/resources/ProofOfPanda3.txt b/consensus/merge/src/main/resources/ProofOfPanda3.txt new file mode 100644 index 00000000000..7855719bf68 --- /dev/null +++ b/consensus/merge/src/main/resources/ProofOfPanda3.txt @@ -0,0 +1,196 @@ + + + + + + + + :. :. + #%% %#%= + =%*%% +%++#. =. + %%#*@#++==*##*%+*##= .:+ + -#%%@%#%%@@%%*@%##%= .- + =@@%%#%#@#@*%%@*++ + -@@@@@#*@@@%#%@%@#*. + .%@@%*%@#%%@#@#%%%@*# :: -+. + -#@%+-**#%%*@%+=*%%*%. -%#--..-%#: + :%#%*=%-#*+##%=#==%@%%= -: =. + -%+%*:**@%*####==##%%%#= .. . : + .#@#%###%%#-+*%**%#@@%@## :.. = :*#* .: + -%%%%%+%%%+-+%@%*#%%@%%*%- ..-. .. -#@#. - + *%%@@%*@**-%***@%#%%%@#*@@: . - .. %. - + %%%@@%+@%**@*=%@@#%%%%+*### ...- .. * .- . . : + :. :. .#%#@#%+%%%*%*@%@%*#%@*=%##%. : :. ..:-=*#:...+ - -*.=:=. + %#%%-+%# =-*@%%%#=*%@%%%@@@#++@%+##*%%+ .::+. .:.:=*+#+::....-. .=*= + =+##%#%..: :##:#%##@%*#%#**+*%*##%+%*=-.-% . .-:::.= ** . :: . ++.+... + #%*###%*%%**=+**%##+#**%@*#*#**+**##*+#-+*-+-*- . .:+:. ==-+:.. .%+=:*: + -%%*++##%%#%#%%%#@%#*#%+**+##%%##%*-+#+--*%%#+* . .-===--. .:-=- . #===.. + -###=+%@%%%%%%@@#@%##*=--++-+#***=--=-=**#*@### .:- . .#++==. + -+%++@@@@@@%@@@+@@%=+#*%--::-*+=:-=**#%%#%#@%@. .= .. .#+-:. + -%+*#@@@@@@@@@@+@@%=+%%@%%#+#%#+*###%%%@%%%%%%. . .- . .. ....:. + -*@@@@@@@@%@+%@%#-:#@@@@#%@%#%%%%%%@@@%@%@#% . . .* .... .. + %@@@@@@%*@**@%%#-#@@@@@@@@#%#%@%@%@%%@%@#%: .... .....-: ...... + =%@@@@@#%##@@%%==@@@@@@@@@@@%@@@%@@@@@%#%. . ...... ....*= .... + +@@@@%**%%@%%#=-%%@@@@@@@@@@@@@@@@%%#@@- . -...... .:+++=. . + =#@@%*@%%@%%##--%@@@@@@@@@@@@@@%@*%@%* .::=...:.::-+++=. . + --@@#@%%%#*=.-@@@@@@@@@@@%%@*#%@@% .. ...*..*=. . + =@@@%@@@%#*++-=%@@%@@@@@#+**%@@@* . --.. .. + -@@@%@@%%##**##+==:+-+**=+#%@%%@+ ... + -@@@@%@@#%%%%@@%#+#%%%@#+#%@@@#%= . .. + -%@@@@@@@@@%%%@+%@%@%%##%%#@@@%@- .. . ... + :%@@@%@@@@@%@@#%@%%#=-*++**+@%#@= -+=-.:=: .. + .@@@@@@@@@@@@%@@%*++*%%#%@%#*%%#- .. .= := . .... + #@@@@@@@@@@*@%*+@%@@#@%@@@%*%@. . + . .... + :#@@@@@@@%%%#=*@@%%@@@#%@@##*@:: .. ... :=... ..... + -%@@@@@@@@@%=@@%@%@%@@@@@%#+@# .. .... =.......... + ++%@@@@@@%@*%@%%@@@@@@@@%#**@+ ..: ... .==...... . + #*%@@@@%*+=%##@@@@@%@%%%###+. . :.... ..=+:..:= + *#*#@@@%=*==*##=+*#%@%##+#@+ .. ...+. -=+:--.=-.. + .*#=*%@%*%##@@#%%+#*%@*+#@+ .... . ...+.:.+:::. + *%*+##+#%%%%%%%#%%%%##%- : ... .-=+.:-=*.... + -@@%%%*-%%%%@%%@%@%*%% ....=..:*:.=.... + #@@%***+%+++*++@%%+- ..::=:**+#... + %%%%%%%=%%*+*%@%. .::**=+=:... + :%@@%%%%=##%%*= .:+=-+.... + *@@@@@@%#++ :=+::. + :*%@@@%@@+ :..... + #%@@@@%%# ....... + .#@@@@@@@#= ... .... + #%@%%@%%@@@. ..:..:.. + -###%%%%@@%- . .. . + #*#%#%@@*: + :+- + + + + + + :.-- + .-*+#=---:-*:::-: .-.-== . + -%%@%%%%@%#%@*+*+#* . ...*==+# . + -%%#%%@@@@%@%@%%+=**@:: .-*.*++= + .#%%@@@@@@%@%%@@##***##+ ...=:++%.. + :%%%%@@@@%%*=-+%@###++*%= --*+*:+*... .+=. + :%%@@@@@@%%@*%#*%-@@%*##+*## ...-.*-. .. .-. .- + .:.#@@@@@@@@@@#+%*#@=@@%%%%##%= . .-: ... . .:-=++- + #=@@@@%@%#*#**%@##%-@@++#*.- ......: --: + #%#@@@@@%#*@%%%%@@@%-:: : ..:-. +... + :::@%%@@@@@@=%@*#@%*@@%%. :. ..=: + :%=#@@@@%@%%%%%##*+#%%%+%= :.. + -%%*%%@@@%@#%@%%%%*-=+##=%%- :. :*. + =#%@%@%%@@%%#@@@%@**-#.**%%%@. .#* ..- + -%@@%#@@@@#%%%%%@#=##*-:*%%@@@%. *=. .-:. + -#@@@@%%@%@#@@%@@#*%%%%%##*%###%@: .:- .-. ::.. + ##@@@%#%@@@%@%@@###@%%#%%##%+#*##@@@= .. . +- .:.. + +#@@@@@%%@@@%@#%%%%@@#=:-%%-##*%#%*##%= :- - +% :: -... + :%%@@@@%%@@%@%%%#%%@@@%:%#-#*+-+#%%#+*%= = -=. +@* = .. + %%@@@@@@%%%@@#%*%%#*#%#=*#:%@=%+:%%%+=%= . .*#. %**: = + . + =%@@@@@@@@@%@@%#@#%%#%*+#*:+%@%:--@@%#%# .#:. .#@. = .. + .%@@@@@@@@@@%%@##@@@@%@*=###*%@%*##@@%=. = .+#. : + +@@@@@@@@@%%%*@@+%@@@%%%#+@%%%@*@%@%@% .= +=- .. + %%@@@@@@@@@@%*@%##@@@@%%%=%%%%#@%%@%%= ...:. .. + *@@@@@@@@@@@@%%#%%=%#@@@@@%+%@##%@##%: =.=.. + %@@@@@@@@@@@@@%#@%#*%@@@@%%#*%#@%@*=%* := :-. + +%@@@@@@%@@@@@@@%#%@%%%@@@%*%%##%%#**%. . -:::.: + -##@@@@@@@@@@@@@@@#%%@@%%###%##%@@@#*%- . - + *+#@@@@@@@@@%@@@%@#@@@%#%#%%%%#@##*#@+ . . + -%#%@@@@@@@@@@@@@@%%@@@@@@@@@@@#*%@%@%-+@+.+ . ... . + %@+%@@@@@@@@@@@@@@%@@@@@@@@@@#@%@%##+*##%==@%+. ... . = + -%%=#@@@@@@@@@@@@@@@@@@@@@@@%#@%**%#=%%#=#*#%%%. .. .. : + @@@+#@@@@@@@@@@@@@@@@@@@@@%%@@#:#%=#@@%*++#%### ... . + -@%%#*@@@@@@@@@@@@@@@@@@@%@@%@%-#@#%@@@@===%@@@= .... . :.. + *%%%#*@%@@@@@@@@@@@@@@@@@@@@%@*+@@+%@%%@+++#*=%- . . .. + :@@#%%*%@@@@@@@@@%@@@@@%@@@@@@@**@@*@@%@##+*%%%% .. .-. . ::. + *@%#@%=@@@@@@@@@@@@@@@@@@@@@@%%:%@@#@@@@%=+*+%%* :. . ...- :.. + %@@%%@#%@@@@@@@@@@@@@@@@@@@@@%#-@@@@@%%%%%##*-- .... .....::. . ...-: + -@%#@%@*#@@@@@@@@@@@@@@@@@@@@@%*:%@@@@@@@@%#*: ............ ... . .=. + %@%@@@%%%%@%@@@@@@@@@@@@@@@@@%###*@@@@@@@@@# . .... .:.. . . . .= + .@%%%@@%@#*@#@@@@@@@@@@@@@@@@@@*@-=%@@@@@@@#. .:=:. .. .:. + .@%%%@@@@@%#%@@@@@@@@@@@@@@@@@#***@*==#@%#: ::. ....... + -@@@@@@@@@@#%%@@@@@@@@@@@@@%%#%%%%@%#+.. .... .. ........ + *@@@@@@@@@@@##@@@@@@@@@@%@%*%@@@%%%%%*#% ..................... + :*@@@@@@@@@@@@%%@@@@@@@@@*+%@@@@@@@@#%%%+ .............:....... + .#@@@@%@@@@@@@-=:*#*+== =@%@@@@@@%%%@%@% ...-....... ... ...... . + .%@@@@@@@@@@@. -#@@@@@@@@@@%@% .... .... ......... .. + #@@@@@@@@@@- *@%@@@@@@@@# . . . ... .......... + #%@@@@@@@*: +**%%@@@@@@+ .......... ....... . + :#*#%@@@@= .%@@%@@%@@%=. ......... ........ + :+#+*#+#@# %@@@@@@@%=%= ........ .... . + :@%@*#+@%- @@@@@%%-%** :....... .. + -:==+=. .--+%-: ... + + + + + + + + + + + + + + + + + .. . + %@@# . %#@# + -@@%%- ........ -*@@@= + +@@%+.. ..=#@@% + +@@-. .*@* + .=+. .-. + ..=#%+. *@%+. . + . +@@@@# .@@@@# .. + . @@@@@# @@@@@* .. + . +@#-%@# %%-%@% .. + . %@@%@@- =*@+@@@. . + . #@@@%=. . -@@@@@... + :...+#-.. +*+ .-@@@* . + :. :@@@= -:. .. + :: :%- .-. + .*.-. + .:.. + :*%*- : +*. .. :*- + =@@%+= .:=**-+. . .. -###. + .-%% #@@@%:. +++**#::.. -%#@@+ + +@@@%.#@@@@@%. =*+***-: :.@%@@@@. +%* + :@@@@@#@@@@@@%-. =++*++. :-%@%@@@@@%-#@@%- + *@@@@@#@@@@@@@%:. .#+-+# . :#@@@@@@@@@#%@@@% + +@@@@@*@@@@@@@@# :-:+ ...#@@@@@@@@@@*@@@@@. + .@@@@%@@@@@@@@@@#== . =:@@@@@@@@@@@@#@@@@@. + +@@@@@@@@@@@@@@@%*=. .*%@@@@@@@@@@@@@@#@@@@. + #@@@@@@@@@@@@@@@@@%+--+%@@@@@@%@@%@@@@@@@@@@% + *%@@@@%+%====#%@@@@@@@@@@%%#%%%%%@@@@@@@@@@. + .:. %=:: .-#@@@@@%- ..-#*%@@@@@@#. + =::.. ... ...:-#---:. + .... ..... + ... ... + .. ... + ... .. + ... .:. + ... .. + . .. .. + #+:. .:=* + .*%#:.. ..:*@= + -@@#.-.. ..:%@%. + #@@%:... ..:-@@@: + .%@@@=:..... ....*@@@= + =@@@@%...... ...=@@@@+ + *@@@@@=:... ....:+@@@@* + %@@@@@@+-. . ....::#@@@@# + %@@@@@@@+-... . ...:=%@@@@@% + @@@@@@@@@*:.... .....:=%@@@@@@% + @@@@@@@@@@*-...............:*@@@@@@@@* + .@@@@@@@@@@@*............. :@@@@@@@@@+ + *@@@@@@@@*- . ...... .%@@@@@@@: + +@@@@@@@= .%@@@@@@: + .#@@@@@@+ :@@@@@@@* + -%@@@@@@@* -@@@@@@@@#. + :%@@@@@@@@@ .@@@%@%@@#+ + #-@#@*@@@@: .%@@=@+@%. + ..-=#*@*: .: :. + + + + + diff --git a/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/PandaPrinterTest.java b/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/PandaPrinterTest.java new file mode 100644 index 00000000000..328f50de58b --- /dev/null +++ b/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/PandaPrinterTest.java @@ -0,0 +1,28 @@ +/* + * Copyright Hyperledger Besu Contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.hyperledger.besu.consensus.merge; + +import org.junit.Test; + +public class PandaPrinterTest { + + @Test + public void printsPanda() { + PandaPrinter panda = new PandaPrinter(); + panda.onTTDReached(true); + } +}