From 854c0e7fa76a6ba111dd352dc943938da7c1bec5 Mon Sep 17 00:00:00 2001 From: Justin Florentine Date: Wed, 9 Mar 2022 12:31:04 -0500 Subject: [PATCH] check types before providing a PowMiningCoordinator Signed-off-by: Justin Florentine --- ethereum/stratum/build.gradle | 1 + .../stratum/Stratum1EthProxyProtocol.java | 15 +++++++++++---- .../besu/ethereum/stratum/Stratum1Protocol.java | 14 ++++++++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/ethereum/stratum/build.gradle b/ethereum/stratum/build.gradle index f9e3e7141eb..6a7927293d8 100644 --- a/ethereum/stratum/build.gradle +++ b/ethereum/stratum/build.gradle @@ -36,6 +36,7 @@ dependencies { implementation project(':ethereum:core') implementation project(':ethereum:blockcreation') implementation project(':metrics:core') + implementation project(':consensus:merge') implementation 'com.google.guava:guava' implementation 'io.vertx:vertx-core' diff --git a/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1EthProxyProtocol.java b/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1EthProxyProtocol.java index 834fe680977..39a456f6714 100644 --- a/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1EthProxyProtocol.java +++ b/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1EthProxyProtocol.java @@ -14,6 +14,7 @@ */ package org.hyperledger.besu.ethereum.stratum; +import org.hyperledger.besu.consensus.merge.blockcreation.TransitionCoordinator; import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.ethereum.api.jsonrpc.RpcMethod; import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequest; @@ -52,13 +53,19 @@ public class Stratum1EthProxyProtocol implements StratumProtocol { private final EpochCalculator epochCalculator; public Stratum1EthProxyProtocol(final MiningCoordinator miningCoordinator) { - if (!(miningCoordinator instanceof PoWMiningCoordinator)) { + + MiningCoordinator maybePowMiner = miningCoordinator; + if (maybePowMiner instanceof TransitionCoordinator) { + maybePowMiner = ((TransitionCoordinator) maybePowMiner).getPreMergeObject(); + } + + if (!(maybePowMiner instanceof PoWMiningCoordinator)) { throw new IllegalArgumentException( "Stratum1 Proxies require an PoWMiningCoordinator not " - + ((miningCoordinator == null) ? "null" : miningCoordinator.getClass().getName())); + + ((maybePowMiner == null) ? "null" : maybePowMiner.getClass().getName())); } - this.miningCoordinator = miningCoordinator; - this.epochCalculator = ((PoWMiningCoordinator) miningCoordinator).getEpochCalculator(); + this.miningCoordinator = maybePowMiner; + this.epochCalculator = ((PoWMiningCoordinator) maybePowMiner).getEpochCalculator(); } @Override diff --git a/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1Protocol.java b/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1Protocol.java index 6df9d7dcf7a..014c60a0c4b 100644 --- a/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1Protocol.java +++ b/ethereum/stratum/src/main/java/org/hyperledger/besu/ethereum/stratum/Stratum1Protocol.java @@ -14,6 +14,7 @@ */ package org.hyperledger.besu.ethereum.stratum; +import org.hyperledger.besu.consensus.merge.blockcreation.TransitionCoordinator; import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.ethereum.api.jsonrpc.RpcMethod; import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequest; @@ -82,16 +83,21 @@ public Stratum1Protocol(final String extranonce, final MiningCoordinator miningC final MiningCoordinator miningCoordinator, final Supplier jobIdSupplier, final Supplier subscriptionIdCreator) { - if (!(miningCoordinator instanceof PoWMiningCoordinator)) { + MiningCoordinator maybePowMiner = miningCoordinator; + if (maybePowMiner instanceof TransitionCoordinator) { + maybePowMiner = ((TransitionCoordinator) maybePowMiner).getPreMergeObject(); + } + + if (!(maybePowMiner instanceof PoWMiningCoordinator)) { throw new IllegalArgumentException( "Stratum1 requires an PoWMiningCoordinator not " - + ((miningCoordinator == null) ? "null" : miningCoordinator.getClass().getName())); + + ((maybePowMiner == null) ? "null" : maybePowMiner.getClass().getName())); } this.extranonce = extranonce; - this.miningCoordinator = miningCoordinator; + this.miningCoordinator = maybePowMiner; this.jobIdSupplier = jobIdSupplier; this.subscriptionIdCreator = subscriptionIdCreator; - this.epochCalculator = ((PoWMiningCoordinator) miningCoordinator).getEpochCalculator(); + this.epochCalculator = ((PoWMiningCoordinator) maybePowMiner).getEpochCalculator(); } @Override