Skip to content

Commit 621a131

Browse files
author
Nicolás Tallar
authored
[FIX] Add mocked miner validations (#678)
1 parent 56e9336 commit 621a131

File tree

14 files changed

+102
-79
lines changed

14 files changed

+102
-79
lines changed

src/ets/scala/io/iohk/ethereum/ets/blockchain/BlockchainTestConfig.scala

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package io.iohk.ethereum.ets.blockchain
22

33
import akka.util.ByteString
4-
import io.iohk.ethereum.consensus.ethash.validators.EthashValidators
4+
import io.iohk.ethereum.consensus.Protocol
5+
import io.iohk.ethereum.consensus.ethash.validators.ValidatorsExecutor
56
import io.iohk.ethereum.domain.{Address, UInt256}
67
import io.iohk.ethereum.utils.{BlockchainConfig, DaoForkConfig, MonetaryPolicyConfig}
78
import org.bouncycastle.util.encoders.Hex
@@ -290,37 +291,37 @@ object BlockchainTestConfig {
290291
object Validators {
291292
import BlockchainTestConfig._
292293

293-
val frontierValidators = EthashValidators(FrontierConfig)
294-
val homesteadValidators = EthashValidators(HomesteadConfig)
295-
val eip150Validators = EthashValidators(Eip150Config)
296-
val frontierToHomesteadValidators = EthashValidators(FrontierToHomesteadAt5)
297-
val homesteadToEipValidators = EthashValidators(HomesteadToEIP150At5)
298-
val homesteadToDaoValidators= EthashValidators(HomesteadToDaoAt5)
299-
val eip158Validators = EthashValidators(Eip158Config)
300-
val byzantiumValidators = EthashValidators(ByzantiumConfig)
301-
val constantinopleValidators = EthashValidators(ConstantinopleConfig)
302-
val constantinopleFixValidators = EthashValidators(ConstantinopleFixConfig)
303-
val istanbulValidators = EthashValidators(IstanbulConfig)
304-
val eip158ToByzantiumValidators = EthashValidators(Eip158ToByzantiumAt5Config)
305-
val byzantiumToConstantinopleAt5 = EthashValidators(ByzantiumToConstantinopleAt5)
294+
val frontierValidators = ValidatorsExecutor(FrontierConfig, Protocol.Ethash)
295+
val homesteadValidators = ValidatorsExecutor(HomesteadConfig, Protocol.Ethash)
296+
val eip150Validators = ValidatorsExecutor(Eip150Config, Protocol.Ethash)
297+
val frontierToHomesteadValidators = ValidatorsExecutor(FrontierToHomesteadAt5, Protocol.Ethash)
298+
val homesteadToEipValidators = ValidatorsExecutor(HomesteadToEIP150At5, Protocol.Ethash)
299+
val homesteadToDaoValidators= ValidatorsExecutor(HomesteadToDaoAt5, Protocol.Ethash)
300+
val eip158Validators = ValidatorsExecutor(Eip158Config, Protocol.Ethash)
301+
val byzantiumValidators = ValidatorsExecutor(ByzantiumConfig, Protocol.Ethash)
302+
val constantinopleValidators = ValidatorsExecutor(ConstantinopleConfig, Protocol.Ethash)
303+
val constantinopleFixValidators = ValidatorsExecutor(ConstantinopleFixConfig, Protocol.Ethash)
304+
val istanbulValidators = ValidatorsExecutor(IstanbulConfig, Protocol.Ethash)
305+
val eip158ToByzantiumValidators = ValidatorsExecutor(Eip158ToByzantiumAt5Config, Protocol.Ethash)
306+
val byzantiumToConstantinopleAt5 = ValidatorsExecutor(ByzantiumToConstantinopleAt5, Protocol.Ethash)
306307
}
307308

308309
// Connected with: https://github.com/ethereum/tests/issues/480
309310
object ValidatorsWithSkippedPoW {
310311

311312
import BlockchainTestConfig._
312313

313-
val frontierValidators = EthashValidators(FrontierConfig, new EthashTestBlockHeaderValidator(FrontierConfig))
314-
val homesteadValidators = EthashValidators(HomesteadConfig, new EthashTestBlockHeaderValidator(HomesteadConfig))
315-
val eip150Validators = EthashValidators(Eip150Config, new EthashTestBlockHeaderValidator(Eip150Config))
316-
val frontierToHomesteadValidators = EthashValidators(FrontierToHomesteadAt5, new EthashTestBlockHeaderValidator(FrontierToHomesteadAt5))
317-
val homesteadToEipValidators = EthashValidators(HomesteadToEIP150At5, new EthashTestBlockHeaderValidator(HomesteadToEIP150At5))
318-
val homesteadToDaoValidators= EthashValidators(HomesteadToDaoAt5, new EthashTestBlockHeaderValidator(HomesteadToDaoAt5))
319-
val eip158Validators = EthashValidators(Eip158Config, new EthashTestBlockHeaderValidator(Eip158Config))
320-
val byzantiumValidators = EthashValidators(ByzantiumConfig, new EthashTestBlockHeaderValidator(ByzantiumConfig))
321-
val constantinopleValidators = EthashValidators(ConstantinopleConfig, new EthashTestBlockHeaderValidator(ConstantinopleConfig))
322-
val constantinopleFixValidators = EthashValidators(ConstantinopleFixConfig, new EthashTestBlockHeaderValidator(ConstantinopleFixConfig))
323-
val istanbulValidators = EthashValidators(IstanbulConfig, new EthashTestBlockHeaderValidator(IstanbulConfig))
324-
val eip158ToByzantiumValidators = EthashValidators(Eip158ToByzantiumAt5Config, new EthashTestBlockHeaderValidator(Eip158ToByzantiumAt5Config))
325-
val byzantiumToConstantinopleAt5 = EthashValidators(ByzantiumToConstantinopleAt5, new EthashTestBlockHeaderValidator(ByzantiumToConstantinopleAt5))
314+
val frontierValidators = ValidatorsExecutor(FrontierConfig, new EthashTestBlockHeaderValidator(FrontierConfig))
315+
val homesteadValidators = ValidatorsExecutor(HomesteadConfig, new EthashTestBlockHeaderValidator(HomesteadConfig))
316+
val eip150Validators = ValidatorsExecutor(Eip150Config, new EthashTestBlockHeaderValidator(Eip150Config))
317+
val frontierToHomesteadValidators = ValidatorsExecutor(FrontierToHomesteadAt5, new EthashTestBlockHeaderValidator(FrontierToHomesteadAt5))
318+
val homesteadToEipValidators = ValidatorsExecutor(HomesteadToEIP150At5, new EthashTestBlockHeaderValidator(HomesteadToEIP150At5))
319+
val homesteadToDaoValidators= ValidatorsExecutor(HomesteadToDaoAt5, new EthashTestBlockHeaderValidator(HomesteadToDaoAt5))
320+
val eip158Validators = ValidatorsExecutor(Eip158Config, new EthashTestBlockHeaderValidator(Eip158Config))
321+
val byzantiumValidators = ValidatorsExecutor(ByzantiumConfig, new EthashTestBlockHeaderValidator(ByzantiumConfig))
322+
val constantinopleValidators = ValidatorsExecutor(ConstantinopleConfig, new EthashTestBlockHeaderValidator(ConstantinopleConfig))
323+
val constantinopleFixValidators = ValidatorsExecutor(ConstantinopleFixConfig, new EthashTestBlockHeaderValidator(ConstantinopleFixConfig))
324+
val istanbulValidators = ValidatorsExecutor(IstanbulConfig, new EthashTestBlockHeaderValidator(IstanbulConfig))
325+
val eip158ToByzantiumValidators = ValidatorsExecutor(Eip158ToByzantiumAt5Config, new EthashTestBlockHeaderValidator(Eip158ToByzantiumAt5Config))
326+
val byzantiumToConstantinopleAt5 = ValidatorsExecutor(ByzantiumToConstantinopleAt5, new EthashTestBlockHeaderValidator(ByzantiumToConstantinopleAt5))
326327
}

src/ets/scala/io/iohk/ethereum/ets/blockchain/ScenarioSetup.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package io.iohk.ethereum.ets.blockchain
33
import java.util.concurrent.Executors
44

55
import io.iohk.ethereum.consensus.ethash.EthashConsensus
6-
import io.iohk.ethereum.consensus.ethash.validators.EthashValidators
6+
import io.iohk.ethereum.consensus.ethash.validators.ValidatorsExecutor
77
import io.iohk.ethereum.consensus.{ConsensusConfig, FullConsensusConfig, TestConsensus, ethash}
88
import io.iohk.ethereum.db.components.Storages.PruningModeComponent
99
import io.iohk.ethereum.db.components.{SharedEphemDataSources, Storages}
@@ -25,7 +25,7 @@ object ScenarioSetup {
2525
val specificConfig = ethash.EthashConfig(Config.config)
2626
val fullConfig = FullConsensusConfig(ConsensusConfig(Config.config)(null), specificConfig)
2727

28-
def loadEthashConsensus(vm: VMImpl, blockchain: BlockchainImpl, blockchainConfig: BlockchainConfig, validators: EthashValidators): ethash.EthashConsensus = {
28+
def loadEthashConsensus(vm: VMImpl, blockchain: BlockchainImpl, blockchainConfig: BlockchainConfig, validators: ValidatorsExecutor): ethash.EthashConsensus = {
2929
val consensus = EthashConsensus(vm, blockchain, blockchainConfig, fullConfig, validators)
3030
consensus
3131
}
@@ -99,11 +99,11 @@ abstract class ScenarioSetup(_vm: VMImpl, scenario: BlockchainScenario) {
9999
scenario.postState.map(_.map(addAcc => addAcc._1 -> blockchain.getAccount(addAcc._1, bestBlockNumber)).toList)
100100
}
101101

102-
private def buildBlockchainConfig(network: String, shouldSkipPoW: Boolean): (BlockchainConfig, EthashValidators) = {
102+
private def buildBlockchainConfig(network: String, shouldSkipPoW: Boolean): (BlockchainConfig, ValidatorsExecutor) = {
103103
if (shouldSkipPoW) withSkippedPoWValidationBlockchainConfig(network) else baseBlockchainConfig(network)
104104
}
105105

106-
private def baseBlockchainConfig(network: String): (BlockchainConfig, EthashValidators) = network match {
106+
private def baseBlockchainConfig(network: String): (BlockchainConfig, ValidatorsExecutor) = network match {
107107
case "EIP150" => (Eip150Config, Validators.eip150Validators)
108108
case "Frontier" => (FrontierConfig, Validators.frontierValidators)
109109
case "Homestead" => (HomesteadConfig, Validators.homesteadValidators)
@@ -121,7 +121,7 @@ abstract class ScenarioSetup(_vm: VMImpl, scenario: BlockchainScenario) {
121121
case _ => (FrontierConfig, Validators.frontierValidators)
122122
}
123123

124-
private def withSkippedPoWValidationBlockchainConfig(network: String): (BlockchainConfig, EthashValidators) = network match {
124+
private def withSkippedPoWValidationBlockchainConfig(network: String): (BlockchainConfig, ValidatorsExecutor) = network match {
125125
case "EIP150" => (Eip150Config, ValidatorsWithSkippedPoW.eip150Validators)
126126
case "Frontier" => (FrontierConfig, ValidatorsWithSkippedPoW.frontierValidators)
127127
case "Homestead" => (HomesteadConfig, ValidatorsWithSkippedPoW.homesteadValidators)

src/main/scala/io/iohk/ethereum/consensus/ConsensusBuilder.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.iohk.ethereum.consensus
22

33
import io.iohk.ethereum.consensus.ethash.EthashConsensus
4-
import io.iohk.ethereum.consensus.ethash.validators.EthashValidators
4+
import io.iohk.ethereum.consensus.ethash.validators.ValidatorsExecutor
55
import io.iohk.ethereum.nodebuilder._
66
import io.iohk.ethereum.utils.{Config, Logger}
77

@@ -27,7 +27,7 @@ trait StdConsensusBuilder extends ConsensusBuilder {
2727
protected def buildEthashConsensus(): ethash.EthashConsensus = {
2828
val specificConfig = ethash.EthashConfig(mantisConfig)
2929
val fullConfig = newConfig(specificConfig)
30-
val validators = EthashValidators(blockchainConfig)
30+
val validators = ValidatorsExecutor(blockchainConfig, consensusConfig.protocol)
3131
val consensus = EthashConsensus(vm, blockchain, blockchainConfig, fullConfig, validators)
3232
consensus
3333
}

src/main/scala/io/iohk/ethereum/consensus/ConsensusConfig.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ object ConsensusConfig extends Logger {
3636

3737

3838
final val AllowedProtocols = Set(
39-
Protocol.Names.Ethash
39+
Protocol.Names.Ethash,
40+
Protocol.Names.MockedPow
4041
)
4142

4243
final val AllowedProtocolsError = (s: String) Keys.Consensus +

src/main/scala/io/iohk/ethereum/consensus/ethash/EthashConsensus.scala

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import io.iohk.ethereum.consensus.Protocol.{Ethash, MockedPow}
88
import io.iohk.ethereum.consensus.blocks.TestBlockGenerator
99
import io.iohk.ethereum.consensus.ethash.MinerResponses.MinerNotExist
1010
import io.iohk.ethereum.consensus.ethash.blocks.{EthashBlockGenerator, EthashBlockGeneratorImpl}
11-
import io.iohk.ethereum.consensus.ethash.validators.EthashValidators
11+
import io.iohk.ethereum.consensus.ethash.validators.ValidatorsExecutor
1212
import io.iohk.ethereum.consensus.validators.Validators
1313
import io.iohk.ethereum.domain.BlockchainImpl
1414
import io.iohk.ethereum.ledger.BlockPreparator
@@ -23,12 +23,12 @@ import scala.concurrent.duration._
2323
* Implements standard Ethereum consensus (ethash PoW).
2424
*/
2525
class EthashConsensus private(
26-
val vm: VMImpl,
27-
blockchain: BlockchainImpl,
28-
blockchainConfig: BlockchainConfig,
29-
val config: FullConsensusConfig[EthashConfig],
30-
val validators: EthashValidators,
31-
val blockGenerator: EthashBlockGenerator
26+
val vm: VMImpl,
27+
blockchain: BlockchainImpl,
28+
blockchainConfig: BlockchainConfig,
29+
val config: FullConsensusConfig[EthashConfig],
30+
val validators: ValidatorsExecutor,
31+
val blockGenerator: EthashBlockGenerator
3232
) extends TestConsensus with Logger {
3333

3434
type Config = EthashConfig
@@ -95,7 +95,7 @@ class EthashConsensus private(
9595
/** Internal API, used for testing */
9696
protected def newBlockGenerator(validators: Validators): EthashBlockGenerator = {
9797
validators match {
98-
case _validators: EthashValidators
98+
case _validators: ValidatorsExecutor
9999
val blockPreparator = new BlockPreparator(
100100
vm = vm,
101101
signedTxValidator = validators.signedTransactionValidator,
@@ -113,15 +113,15 @@ class EthashConsensus private(
113113
)
114114

115115
case _
116-
wrongValidatorsArgument[EthashValidators](validators)
116+
wrongValidatorsArgument[ValidatorsExecutor](validators)
117117
}
118118
}
119119

120120

121121
/** Internal API, used for testing */
122122
def withValidators(validators: Validators): EthashConsensus = {
123123
validators match {
124-
case _validators: EthashValidators
124+
case _validators: ValidatorsExecutor
125125
val blockGenerator = newBlockGenerator(validators)
126126

127127
new EthashConsensus(
@@ -134,7 +134,7 @@ class EthashConsensus private(
134134
)
135135

136136
case _
137-
wrongValidatorsArgument[EthashValidators](validators)
137+
wrongValidatorsArgument[ValidatorsExecutor](validators)
138138
}
139139
}
140140

@@ -168,7 +168,7 @@ object EthashConsensus {
168168
blockchain: BlockchainImpl,
169169
blockchainConfig: BlockchainConfig,
170170
config: FullConsensusConfig[EthashConfig],
171-
validators: EthashValidators
171+
validators: ValidatorsExecutor
172172
): EthashConsensus = {
173173

174174
val blockPreparator = new BlockPreparator(

src/main/scala/io/iohk/ethereum/consensus/ethash/blocks/EthashBlockGenerator.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import akka.util.ByteString
66
import io.iohk.ethereum.consensus.ConsensusConfig
77
import io.iohk.ethereum.consensus.blocks._
88
import io.iohk.ethereum.consensus.ethash.difficulty.EthashDifficultyCalculator
9-
import io.iohk.ethereum.consensus.ethash.validators.EthashValidators
9+
import io.iohk.ethereum.consensus.ethash.validators.ValidatorsExecutor
1010
import io.iohk.ethereum.crypto.kec256
1111
import io.iohk.ethereum.domain._
1212
import io.iohk.ethereum.ledger.{BlockPreparationError, BlockPreparator}
@@ -24,12 +24,12 @@ trait EthashBlockGenerator extends TestBlockGenerator {
2424
}
2525

2626
class EthashBlockGeneratorImpl(
27-
validators: EthashValidators,
28-
blockchain: Blockchain,
29-
blockchainConfig: BlockchainConfig,
30-
consensusConfig: ConsensusConfig,
31-
val blockPreparator: BlockPreparator,
32-
blockTimestampProvider: BlockTimestampProvider = DefaultBlockTimestampProvider
27+
validators: ValidatorsExecutor,
28+
blockchain: Blockchain,
29+
blockchainConfig: BlockchainConfig,
30+
consensusConfig: ConsensusConfig,
31+
val blockPreparator: BlockPreparator,
32+
blockTimestampProvider: BlockTimestampProvider = DefaultBlockTimestampProvider
3333
) extends BlockGeneratorSkeleton(
3434
blockchain,
3535
blockchainConfig,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.iohk.ethereum.consensus.ethash
2+
package validators
3+
4+
import io.iohk.ethereum.consensus.difficulty.DifficultyCalculator
5+
import io.iohk.ethereum.consensus.ethash.difficulty.EthashDifficultyCalculator
6+
import io.iohk.ethereum.consensus.validators.{ BlockHeaderError, BlockHeaderValid, BlockHeaderValidatorSkeleton }
7+
import io.iohk.ethereum.domain.BlockHeader
8+
import io.iohk.ethereum.utils.BlockchainConfig
9+
10+
class MockedPowBlockHeaderValidator(blockchainConfig: BlockchainConfig) extends BlockHeaderValidatorSkeleton(blockchainConfig) {
11+
12+
protected def difficulty: DifficultyCalculator = new EthashDifficultyCalculator(blockchainConfig)
13+
14+
def validateEvenMore(blockHeader: BlockHeader, parentHeader: BlockHeader): Either[BlockHeaderError, BlockHeaderValid] =
15+
Right(BlockHeaderValid)
16+
17+
}
18+

src/main/scala/io/iohk/ethereum/consensus/ethash/validators/StdEthashValidators.scala renamed to src/main/scala/io/iohk/ethereum/consensus/ethash/validators/StdValidatorsExecutor.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import io.iohk.ethereum.consensus.validators.{ BlockHeaderValidator, BlockValida
44

55
/**
66
* Implements validators that adhere to the PoW-specific
7-
* [[io.iohk.ethereum.consensus.ethash.validators.EthashValidators EthashValidators]]
7+
* [[io.iohk.ethereum.consensus.ethash.validators.ValidatorsExecutor]]
88
* interface.
99
*/
10-
final class StdEthashValidators private[validators](
10+
final class StdValidatorsExecutor private[validators](
1111
val blockValidator: BlockValidator,
1212
val blockHeaderValidator: BlockHeaderValidator,
1313
val signedTransactionValidator: SignedTransactionValidator,
1414
val ommersValidator: OmmersValidator
15-
) extends EthashValidators
15+
) extends ValidatorsExecutor

src/main/scala/io/iohk/ethereum/consensus/ethash/validators/EthashValidators.scala renamed to src/main/scala/io/iohk/ethereum/consensus/ethash/validators/ValidatorsExecutor.scala

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import io.iohk.ethereum.ledger.BlockExecutionError.ValidationBeforeExecError
99
import io.iohk.ethereum.ledger.{ BlockExecutionError, BlockExecutionSuccess }
1010
import io.iohk.ethereum.utils.BlockchainConfig
1111

12-
trait EthashValidators extends Validators {
12+
trait ValidatorsExecutor extends Validators {
1313
def ommersValidator: OmmersValidator
1414

1515
def validateBlockBeforeExecution(
@@ -18,7 +18,7 @@ trait EthashValidators extends Validators {
1818
getNBlocksBack: GetNBlocksBack
1919
): Either[BlockExecutionError.ValidationBeforeExecError, BlockExecutionSuccess] = {
2020

21-
EthashValidators.validateBlockBeforeExecution(
21+
ValidatorsExecutor.validateBlockBeforeExecution(
2222
self = this,
2323
block = block,
2424
getBlockHeaderByHash = getBlockHeaderByHash,
@@ -33,7 +33,7 @@ trait EthashValidators extends Validators {
3333
gasUsed: BigInt
3434
): Either[BlockExecutionError, BlockExecutionSuccess] = {
3535

36-
EthashValidators.validateBlockAfterExecution(
36+
ValidatorsExecutor.validateBlockAfterExecution(
3737
self = this,
3838
block = block,
3939
stateRootHash = stateRootHash,
@@ -43,11 +43,14 @@ trait EthashValidators extends Validators {
4343
}
4444
}
4545

46-
object EthashValidators {
47-
def apply(blockchainConfig: BlockchainConfig): EthashValidators = {
48-
val blockHeaderValidator: EthashBlockHeaderValidator = new EthashBlockHeaderValidator(blockchainConfig)
46+
object ValidatorsExecutor {
47+
def apply(blockchainConfig: BlockchainConfig, protocol: Protocol): ValidatorsExecutor = {
48+
val blockHeaderValidator: BlockHeaderValidator = protocol match {
49+
case Protocol.MockedPow => new MockedPowBlockHeaderValidator(blockchainConfig)
50+
case Protocol.Ethash => new EthashBlockHeaderValidator(blockchainConfig)
51+
}
4952

50-
new StdEthashValidators(
53+
new StdValidatorsExecutor(
5154
StdBlockValidator,
5255
blockHeaderValidator,
5356
new StdSignedTransactionValidator(blockchainConfig),
@@ -57,8 +60,8 @@ object EthashValidators {
5760

5861
// Created only for testing purposes, shouldn't be used in production code.
5962
// Connected with: https://github.com/ethereum/tests/issues/480
60-
def apply(blockchainConfig: BlockchainConfig, blockHeaderValidator: BlockHeaderValidator): EthashValidators = {
61-
new StdEthashValidators(
63+
def apply(blockchainConfig: BlockchainConfig, blockHeaderValidator: BlockHeaderValidator): ValidatorsExecutor = {
64+
new StdValidatorsExecutor(
6265
StdBlockValidator,
6366
blockHeaderValidator,
6467
new StdSignedTransactionValidator(blockchainConfig),
@@ -67,7 +70,7 @@ object EthashValidators {
6770
}
6871

6972
def validateBlockBeforeExecution(
70-
self: EthashValidators,
73+
self: ValidatorsExecutor,
7174
block: Block,
7275
getBlockHeaderByHash: GetBlockHeaderByHash,
7376
getNBlocksBack: GetNBlocksBack
@@ -87,7 +90,7 @@ object EthashValidators {
8790
}
8891

8992
def validateBlockAfterExecution(
90-
self: EthashValidators,
93+
self: ValidatorsExecutor,
9194
block: Block,
9295
stateRootHash: ByteString,
9396
receipts: Seq[Receipt],

src/main/scala/io/iohk/ethereum/consensus/validators/std/StdValidators.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import org.bouncycastle.util.encoders.Hex
1212
* Implements validators that adhere to the original [[io.iohk.ethereum.consensus.validators.Validators Validators]]
1313
* interface.
1414
*
15-
* @see [[io.iohk.ethereum.consensus.ethash.validators.StdEthashValidators StdEthashValidators]]
15+
* @see [[io.iohk.ethereum.consensus.ethash.validators.StdValidatorsExecutor StdEthashValidators]]
1616
* for the PoW-specific counterpart.
1717
*/
1818
final class StdValidators(

0 commit comments

Comments
 (0)