Hi! I'm working on a write-up to walk people through the instructions for how they can run a node on Kintsugi to test the merge using a minority client. My goal is to promote the Besu-Teku client combination, since I believe it is underrated and has lots of benefits (can compile both with the same programming language, synergy between dev teams, less supply chain attack vectors, etc...)
However, after following the official instructions from the Kintsugi testnet website, I am running into issues I have not been able to solve myself.
Branch used:
- "merge"
- There is also a "merge-kintsugi-v3" branch with an older set of commits, which I assume is stale
- The official Kintsugi testnet connection doc has contradicting information and suggest both?
Commit used: c6eddef39fabdf2cf5ea98cf0b8d98402c5b9147
More info
luis@kintsugi-vm:~/merge-testnets/kintsugi/besu$ /usr/local/bin/besu/bin/besu --version
besu/v22.1.0-RC2-dev-c6eddef3/linux-x86_64/openjdk-java-11
luis@kintsugi-vm:~/merge-testnets/kintsugi/besu$ java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
luis@kintsugi-vm:~/merge-testnets/kintsugi/besu$ cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
luis@kintsugi-vm:~/merge-testnets/kintsugi/besu$ uname -a
Linux kintsugi-vm 5.11.0-1025-azure #27~20.04.1-Ubuntu SMP Fri Jan 7 15:02:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Azure B2ms VM
Build process used:
git clone -b merge https://github.com/hyperledger/besu --recursive
cd besu
./gradlew installDist distTar
sudo cp -a build/install/besu/. /usr/local/bin/besu
cd ..
Command used to run Besu
/usr/local/bin/besu/bin/besu \
--data-path="/datadrive/besu" \
--genesis-file="/home/luis/merge-testnets/kintsugi/besu_genesis.json" \
--rpc-http-enabled \
--rpc-http-api=ADMIN,MINER,ETH,NET,DEBUG,TXPOOL,EXECUTION \
--network-id=1337702 \
--p2p-enabled=true \
--Xmerge-support=true \
--bootnodes=enode://6f377dd1ef5a3272d7e02fac9064c4f95d74f7edfd866e59ded774ee5b4649ff61c3f24c95f5c3d07d692b447f0569716b8921b6861810b96a705c92e1d27ff9@161.35.67.219:30303 \
--logging=all
Notes
- The JSON file passed to --genesis-file is "besu_genesis.json" from the eth-clients/merge-testnets repo
- According to Github, that JSON file hasn't been updated since Dec 15
- Flags set according to the instructions at the Kintsugi testnet website
- Added the --rpc-http-enabled flag since Besu was complaining without it
Output, with error
Setting logging level to ALL
2022-01-15 15:15:57.078+00:00 | main | DEBUG | Native | Looking in classpath from jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27 for /com/sun/jna/linux-x86-64/libjnidispatch.so
2022-01-15 15:15:57.081+00:00 | main | DEBUG | Native | Found library resource at jar:file:/usr/local/bin/besu/lib/jna-5.10.0.jar!/com/sun/jna/linux-x86-64/libjnidispatch.so
2022-01-15 15:15:57.082+00:00 | main | DEBUG | Native | Extracting library to /home/luis/.cache/JNA/temp/jna13227483794889495688.tmp
2022-01-15 15:15:57.084+00:00 | main | DEBUG | Native | Trying /home/luis/.cache/JNA/temp/jna13227483794889495688.tmp
2022-01-15 15:15:57.085+00:00 | main | DEBUG | Native | Found jnidispatch at /home/luis/.cache/JNA/temp/jna13227483794889495688.tmp
2022-01-15 15:15:57.108+00:00 | main | DEBUG | NativeLibrary | Looking for library 'secp256k1'
2022-01-15 15:15:57.108+00:00 | main | DEBUG | NativeLibrary | Adding paths from jna.library.path: null
2022-01-15 15:15:57.109+00:00 | main | DEBUG | NativeLibrary | Trying libsecp256k1.so
2022-01-15 15:15:57.109+00:00 | main | DEBUG | NativeLibrary | Loading failed with message: libsecp256k1.so: cannot open shared object file: No such file or directory
2022-01-15 15:15:57.109+00:00 | main | DEBUG | NativeLibrary | Adding system paths: [/usr/lib/x86_64-linux-gnu, /lib/x86_64-linux-gnu, /usr/lib64, /lib64, /usr/lib, /lib]
2022-01-15 15:15:57.109+00:00 | main | DEBUG | NativeLibrary | Trying libsecp256k1.so
2022-01-15 15:15:57.110+00:00 | main | DEBUG | NativeLibrary | Loading failed with message: libsecp256k1.so: cannot open shared object file: No such file or directory
2022-01-15 15:15:57.110+00:00 | main | DEBUG | NativeLibrary | Looking for version variants
2022-01-15 15:15:57.118+00:00 | main | DEBUG | Native | Looking in classpath from jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27 for secp256k1
2022-01-15 15:15:57.118+00:00 | main | DEBUG | Native | Found library resource at jar:file:/usr/local/bin/besu/lib/secp256k1-0.4.2.jar!/linux-x86-64/libsecp256k1.so
2022-01-15 15:15:57.119+00:00 | main | DEBUG | Native | Extracting library to /home/luis/.cache/JNA/temp/jna2484633433964481345.tmp
2022-01-15 15:15:57.124+00:00 | main | DEBUG | NativeLibrary | Found library 'secp256k1' at /home/luis/.cache/JNA/temp/jna2484633433964481345.tmp
2022-01-15 15:15:57.146+00:00 | main | DEBUG | NativeLibrary | Looking for library 'eth_pairings'
2022-01-15 15:15:57.147+00:00 | main | DEBUG | NativeLibrary | Adding paths from jna.library.path: null
2022-01-15 15:15:57.147+00:00 | main | DEBUG | NativeLibrary | Trying libeth_pairings.so
2022-01-15 15:15:57.147+00:00 | main | DEBUG | NativeLibrary | Loading failed with message: libeth_pairings.so: cannot open shared object file: No such file or directory
2022-01-15 15:15:57.148+00:00 | main | DEBUG | NativeLibrary | Adding system paths: [/usr/lib/x86_64-linux-gnu, /lib/x86_64-linux-gnu, /usr/lib64, /lib64, /usr/lib, /lib]
2022-01-15 15:15:57.148+00:00 | main | DEBUG | NativeLibrary | Trying libeth_pairings.so
2022-01-15 15:15:57.148+00:00 | main | DEBUG | NativeLibrary | Loading failed with message: libeth_pairings.so: cannot open shared object file: No such file or directory
2022-01-15 15:15:57.149+00:00 | main | DEBUG | NativeLibrary | Looking for version variants
2022-01-15 15:15:57.151+00:00 | main | DEBUG | Native | Looking in classpath from jdk.internal.loader.ClassLoaders$AppClassLoader@5ffd2b27 for eth_pairings
2022-01-15 15:15:57.151+00:00 | main | DEBUG | Native | Found library resource at jar:file:/usr/local/bin/besu/lib/bls12-381-0.4.2.jar!/linux-x86-64/libeth_pairings.so
2022-01-15 15:15:57.152+00:00 | main | DEBUG | Native | Extracting library to /home/luis/.cache/JNA/temp/jna1170191019723383865.tmp
2022-01-15 15:15:57.182+00:00 | main | DEBUG | NativeLibrary | Found library 'eth_pairings' at /home/luis/.cache/JNA/temp/jna1170191019723383865.tmp
2022-01-15 15:15:57.183+00:00 | main | INFO | Besu | Using LibEthPairings native alt bn128
2022-01-15 15:15:57.183+00:00 | main | INFO | Besu | Using the native implementation of the signature algorithm
2022-01-15 15:15:57.188+00:00 | main | INFO | Besu | Starting Besu version: besu/v22.1.0-RC2-dev-c6eddef3/linux-x86_64/openjdk-java-11
2022-01-15 15:15:57.204+00:00 | main | TRACE | MetricsSystemFactory | Creating a metric system with PROMETHEUS
2022-01-15 15:15:57.217+00:00 | main | DEBUG | LoggerFactory | Using io.vertx.core.logging.Log4j2LogDelegateFactory
2022-01-15 15:15:57.239+00:00 | main | DEBUG | ResourceLeakDetector | -Dio.netty.leakDetection.level: simple
2022-01-15 15:15:57.239+00:00 | main | DEBUG | ResourceLeakDetector | -Dio.netty.leakDetection.targetRecords: 4
2022-01-15 15:15:57.255+00:00 | main | DEBUG | PlatformDependent0 | -Dio.netty.noUnsafe: false
2022-01-15 15:15:57.255+00:00 | main | DEBUG | PlatformDependent0 | Java version: 11
2022-01-15 15:15:57.257+00:00 | main | DEBUG | PlatformDependent0 | sun.misc.Unsafe.theUnsafe: available
2022-01-15 15:15:57.258+00:00 | main | DEBUG | PlatformDependent0 | sun.misc.Unsafe.copyMemory: available
2022-01-15 15:15:57.258+00:00 | main | DEBUG | PlatformDependent0 | java.nio.Buffer.address: available
2022-01-15 15:15:57.259+00:00 | main | DEBUG | PlatformDependent0 | direct buffer constructor: available
2022-01-15 15:15:57.260+00:00 | main | DEBUG | PlatformDependent0 | java.nio.Bits.unaligned: available, true
2022-01-15 15:15:57.261+00:00 | main | DEBUG | PlatformDependent0 | jdk.internal.misc.Unsafe.allocateUninitializedArray(int): available
2022-01-15 15:15:57.261+00:00 | main | DEBUG | PlatformDependent0 | java.nio.DirectByteBuffer.<init>(long, int): available
2022-01-15 15:15:57.262+00:00 | main | DEBUG | PlatformDependent | sun.misc.Unsafe: available
2022-01-15 15:15:57.262+00:00 | main | DEBUG | PlatformDependent | maxDirectMemory: 2086666240 bytes (maybe)
2022-01-15 15:15:57.263+00:00 | main | DEBUG | PlatformDependent | -Dio.netty.tmpdir: /tmp (java.io.tmpdir)
2022-01-15 15:15:57.263+00:00 | main | DEBUG | PlatformDependent | -Dio.netty.bitMode: 64 (sun.arch.data.model)
2022-01-15 15:15:57.264+00:00 | main | DEBUG | PlatformDependent | -Dio.netty.maxDirectMemory: 2086666240 bytes
2022-01-15 15:15:57.264+00:00 | main | DEBUG | PlatformDependent | -Dio.netty.uninitializedArrayAllocationThreshold: 1024
2022-01-15 15:15:57.265+00:00 | main | DEBUG | CleanerJava9 | java.nio.ByteBuffer.cleaner(): available
2022-01-15 15:15:57.265+00:00 | main | DEBUG | PlatformDependent | -Dio.netty.noPreferDirect: false
2022-01-15 15:15:57.279+00:00 | main | DEBUG | MultithreadEventLoopGroup | -Dio.netty.eventLoopThreads: 4
2022-01-15 15:15:57.293+00:00 | main | DEBUG | InternalThreadLocalMap | -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
2022-01-15 15:15:57.293+00:00 | main | DEBUG | InternalThreadLocalMap | -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
2022-01-15 15:15:57.299+00:00 | main | DEBUG | NioEventLoop | -Dio.netty.noKeySetOptimization: false
2022-01-15 15:15:57.299+00:00 | main | DEBUG | NioEventLoop | -Dio.netty.selectorAutoRebuildThreshold: 512
2022-01-15 15:15:57.306+00:00 | main | DEBUG | PlatformDependent | org.jctools-core.MpscChunkedArrayQueue: available
2022-01-15 15:15:57.310+00:00 | main | TRACE | NioEventLoop | instrumented a special java.util.Set into: sun.nio.ch.EPollSelectorImpl@4beaf6bd
2022-01-15 15:15:57.310+00:00 | main | TRACE | NioEventLoop | instrumented a special java.util.Set into: sun.nio.ch.EPollSelectorImpl@2af69643
2022-01-15 15:15:57.310+00:00 | main | TRACE | NioEventLoop | instrumented a special java.util.Set into: sun.nio.ch.EPollSelectorImpl@587a1cfb
2022-01-15 15:15:57.323+00:00 | main | TRACE | NioEventLoop | instrumented a special java.util.Set into: sun.nio.ch.EPollSelectorImpl@48528634
2022-01-15 15:15:57.324+00:00 | main | TRACE | NioEventLoop | instrumented a special java.util.Set into: sun.nio.ch.EPollSelectorImpl@4760f169
2022-01-15 15:15:57.359+00:00 | main | DEBUG | DefaultDnsServerAddressStreamProvider | Default DNS servers: [/127.0.0.53:53] (sun.net.dns.ResolverConfiguration)
2022-01-15 15:15:57.365+00:00 | main | DEBUG | NetUtil | -Djava.net.preferIPv4Stack: false
2022-01-15 15:15:57.365+00:00 | main | DEBUG | NetUtil | -Djava.net.preferIPv6Addresses: false
2022-01-15 15:15:57.367+00:00 | main | DEBUG | NetUtilInitializations | Loopback interface: lo (lo, 0:0:0:0:0:0:0:1%lo)
2022-01-15 15:15:57.368+00:00 | main | DEBUG | NetUtil | /proc/sys/net/core/somaxconn: 4096
2022-01-15 15:15:57.527+00:00 | main | INFO | Besu | Static Nodes file = /datadrive/besu/static-nodes.json
2022-01-15 15:15:57.530+00:00 | main | INFO | StaticNodesParser | StaticNodes file /datadrive/besu/static-nodes.json does not exist, no static connections will be created.
2022-01-15 15:15:57.531+00:00 | main | INFO | Besu | Connecting to 0 static nodes.
2022-01-15 15:15:57.531+00:00 | main | TRACE | Besu | Static Nodes = []
2022-01-15 15:15:57.533+00:00 | main | INFO | Besu | Security Module: localfile
2022-01-15 15:15:57.556+00:00 | main | INFO | DatabaseMetadata | Lookup database metadata file in data directory: /datadrive/besu
2022-01-15 15:15:57.608+00:00 | main | INFO | RocksDBKeyValueStorageFactory | Existing database detected at /datadrive/besu. Version 1
2022-01-15 15:15:57.902+00:00 | main | INFO | KeyPairUtil | Loaded public key 0xebf8b78af6e9dd45562dcc5b0639ace8e39159a7d6033ea3681b0b3cf757bb8783ccc35504dd8dd338f34fc89d6fe7429f3a717c1de44ee2fda0132f4cfa341f from /datadrive/besu/key
2022-01-15 15:15:58.012+00:00 | main | INFO | ProtocolScheduleBuilder | Protocol schedule created with milestones: [London: 0, PreMergeFork: 100]
2022-01-15 15:15:58.027+00:00 | main | INFO | ProtocolScheduleBuilder | Protocol schedule created with milestones: [London: 0, PreMergeFork: 100]
picocli.CommandLine$ParameterException: Unable to start mining without a coinbase.
at org.hyperledger.besu.cli.BesuCommand.run(BesuCommand.java:1285)
at picocli.CommandLine.executeUserObject(CommandLine.java:1939)
at picocli.CommandLine.access$1300(CommandLine.java:145)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2352)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2314)
at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:2172)
at picocli.CommandLine.parseWithHandlers(CommandLine.java:2559)
at org.hyperledger.besu.cli.util.ConfigOptionSearchAndRunHandler.handle(ConfigOptionSearchAndRunHandler.java:54)
at org.hyperledger.besu.cli.util.ConfigOptionSearchAndRunHandler.handle(ConfigOptionSearchAndRunHandler.java:31)
at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:2172)
at picocli.CommandLine.parseWithHandlers(CommandLine.java:2559)
at org.hyperledger.besu.cli.BesuCommand.parse(BesuCommand.java:1435)
at org.hyperledger.besu.cli.BesuCommand.parse(BesuCommand.java:1245)
at org.hyperledger.besu.Besu.main(Besu.java:50)
Caused by: picocli.CommandLine$ExecutionException: Unable to start mining without a coinbase.
at org.hyperledger.besu.cli.BesuCommand.buildController(BesuCommand.java:1820)
at org.hyperledger.besu.cli.BesuCommand.initController(BesuCommand.java:1813)
at org.hyperledger.besu.cli.BesuCommand.run(BesuCommand.java:1270)
... 14 more
Caused by: org.hyperledger.besu.ethereum.blockcreation.CoinbaseNotSetException: Unable to start mining without a coinbase.
at org.hyperledger.besu.ethereum.blockcreation.PoWMinerExecutor.startAsyncMining(PoWMinerExecutor.java:66)
at org.hyperledger.besu.ethereum.blockcreation.AbstractMiningCoordinator.startAsyncMiningOperation(AbstractMiningCoordinator.java:157)
at org.hyperledger.besu.ethereum.blockcreation.AbstractMiningCoordinator.startMiningIfPossible(AbstractMiningCoordinator.java:150)
at org.hyperledger.besu.ethereum.blockcreation.AbstractMiningCoordinator.start(AbstractMiningCoordinator.java:91)
at org.hyperledger.besu.controller.TransitionBesuControllerBuilder.lambda$initTransitionWatcher$0(TransitionBesuControllerBuilder.java:142)
at org.hyperledger.besu.consensus.merge.PostMergeContext.lambda$setIsPostMerge$1(PostMergeContext.java:93)
at org.hyperledger.besu.util.Subscribers.lambda$forEach$0(Subscribers.java:112)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.hyperledger.besu.util.Subscribers.forEach(Subscribers.java:109)
at org.hyperledger.besu.consensus.merge.PostMergeContext.setIsPostMerge(PostMergeContext.java:92)
at java.base/java.util.Optional.ifPresent(Optional.java:183)
at org.hyperledger.besu.controller.TransitionBesuControllerBuilder.initTransitionWatcher(TransitionBesuControllerBuilder.java:150)
at org.hyperledger.besu.controller.TransitionBesuControllerBuilder.createMiningCoordinator(TransitionBesuControllerBuilder.java:100)
at org.hyperledger.besu.controller.BesuControllerBuilder.build(BesuControllerBuilder.java:370)
at org.hyperledger.besu.controller.TransitionBesuControllerBuilder.build(TransitionBesuControllerBuilder.java:161)
at org.hyperledger.besu.cli.BesuCommand.buildController(BesuCommand.java:1818)
... 16 more
To display full help:
besu [COMMAND] --help