Skip to content

Commit cc3a255

Browse files
author
Michał Mrożek
authored
Merge branch 'develop' into generic-launcher-readme
2 parents c00e93f + 992196d commit cc3a255

File tree

5 files changed

+65
-45
lines changed

5 files changed

+65
-45
lines changed

src/main/scala/io/iohk/ethereum/blockchain/sync/PeersClient.scala

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class PeersClient(
4343
val requester = sender()
4444
selectPeer(peerSelector) match {
4545
case Some(peer) =>
46+
log.debug("Selected peer {} with address {}", peer.id, peer.remoteAddress.getHostString)
4647
val handler =
4748
makeRequest(peer, message, responseMsgCode(message), toSerializable)(scheduler, responseClassTag(message))
4849
val newRequesters = requesters + (handler -> requester)
@@ -61,9 +62,8 @@ class PeersClient(
6162
peer: Peer,
6263
requestMsg: RequestMsg,
6364
responseMsgCode: Int,
64-
toSerializable: RequestMsg => MessageSerializable)(
65-
implicit scheduler: Scheduler,
66-
classTag: ClassTag[ResponseMsg]): ActorRef =
65+
toSerializable: RequestMsg => MessageSerializable
66+
)(implicit scheduler: Scheduler, classTag: ClassTag[ResponseMsg]): ActorRef =
6767
context.actorOf(
6868
PeerRequestHandler.props[RequestMsg, ResponseMsg](
6969
peer = peer,
@@ -72,7 +72,8 @@ class PeersClient(
7272
peerEventBus = peerEventBus,
7373
requestMsg = requestMsg,
7474
responseMsgCode = responseMsgCode
75-
)(classTag, scheduler, toSerializable))
75+
)(classTag, scheduler, toSerializable)
76+
)
7677

7778
private def handleResponse[ResponseMsg <: ResponseMessage](requesters: Requesters, responseMsg: ResponseMsg): Unit = {
7879
val requestHandler = sender()
@@ -112,13 +113,14 @@ object PeersClient {
112113
case class Request[RequestMsg <: Message](
113114
message: RequestMsg,
114115
peerSelector: PeerSelector,
115-
toSerializable: RequestMsg => MessageSerializable)
116-
extends PeersClientMessage
116+
toSerializable: RequestMsg => MessageSerializable
117+
) extends PeersClientMessage
117118

118119
object Request {
119120

120-
def create[RequestMsg <: Message](message: RequestMsg, peerSelector: PeerSelector)(
121-
implicit toSerializable: RequestMsg => MessageSerializable): Request[RequestMsg] =
121+
def create[RequestMsg <: Message](message: RequestMsg, peerSelector: PeerSelector)(implicit
122+
toSerializable: RequestMsg => MessageSerializable
123+
): Request[RequestMsg] =
122124
Request(message, peerSelector, toSerializable)
123125
}
124126
case object PrintStatus extends PeersClientMessage
@@ -133,9 +135,8 @@ object PeersClient {
133135

134136
def bestPeer(peersToDownloadFrom: Map[Peer, PeerInfo]): Option[Peer] = {
135137
val peersToUse = peersToDownloadFrom
136-
.collect {
137-
case (ref, PeerInfo(_, totalDifficulty, true, _, _)) =>
138-
(ref, totalDifficulty)
138+
.collect { case (ref, PeerInfo(_, totalDifficulty, true, _, _)) =>
139+
(ref, totalDifficulty)
139140
}
140141

141142
if (peersToUse.nonEmpty) {

src/main/scala/io/iohk/ethereum/blockchain/sync/regular/BlockFetcher.scala

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,14 @@ class BlockFetcher(
4747
peerEventBus ! Unsubscribe()
4848
}
4949

50-
private def idle(): Receive = handleCommonMessages(None) orElse {
51-
case Start(importer, blockNr) =>
52-
BlockFetcherState.initial(importer, blockNr) |> fetchBlocks
53-
peerEventBus ! Subscribe(MessageClassifier(Set(NewBlock.code, NewBlockHashes.code), PeerSelector.AllPeers))
50+
private def idle(): Receive = handleCommonMessages(None) orElse { case Start(importer, blockNr) =>
51+
BlockFetcherState.initial(importer, blockNr) |> fetchBlocks
52+
peerEventBus ! Subscribe(MessageClassifier(Set(NewBlock.code, NewBlockHashes.code), PeerSelector.AllPeers))
5453
}
5554

56-
def handleCommonMessages(state: Option[BlockFetcherState]): Receive = {
57-
case PrintStatus =>
58-
log.info("{}", state.map(_.status))
59-
log.debug("{}", state.map(_.statusDetailed))
55+
def handleCommonMessages(state: Option[BlockFetcherState]): Receive = { case PrintStatus =>
56+
log.info("{}", state.map(_.status))
57+
log.debug("{}", state.map(_.statusDetailed))
6058
}
6159

6260
private def started(state: BlockFetcherState): Receive =
@@ -83,9 +81,8 @@ class BlockFetcher(
8381
fetchBlocks(newState)
8482
case InvalidateBlocksFrom(blockNr, reason, withBlacklist) =>
8583
val (blockProvider, newState) = state.invalidateBlocksFrom(blockNr, withBlacklist)
86-
84+
log.debug("Invalidate blocks from {}", blockNr)
8785
blockProvider.foreach(peersClient ! BlacklistPeer(_, reason))
88-
8986
fetchBlocks(newState)
9087
}
9188

@@ -125,7 +122,8 @@ class BlockFetcher(
125122
.asRight[String]
126123
.ensure(s"Empty response from peer $peer, blacklisting")(_.nonEmpty)
127124
.ensure("Fetched node state hash doesn't match requested one, blacklisting peer")(nodes =>
128-
fetcher.hash == kec256(nodes.head))
125+
fetcher.hash == kec256(nodes.head)
126+
)
129127

130128
validatedNode match {
131129
case Left(err) =>
@@ -141,6 +139,7 @@ class BlockFetcher(
141139

142140
private def handleNewBlockMessages(state: BlockFetcherState): Receive = {
143141
case MessageFromPeer(NewBlockHashes(hashes), _) =>
142+
log.debug("Received NewBlockHashes numbers {}", hashes.map(_.number).mkString(", "))
144143
val newState = state.validatedHashes(hashes) match {
145144
case Left(_) => state
146145
case Right(validHashes) => state.withPossibleNewTopAt(validHashes.lastOption.map(_.number))
@@ -155,19 +154,23 @@ class BlockFetcher(
155154

156155
// we're on top, so we can pass block directly to importer
157156
if (newBlockNr == nextExpectedBlock && state.isOnTop) {
157+
log.debug("Pass block directly to importer")
158158
val newState = state.withPeerForBlocks(peerId, Seq(newBlockNr)).withKnownTopAt(newBlockNr)
159159
state.importer ! OnTop
160160
state.importer ! ImportNewBlock(block, peerId)
161161
context become started(newState)
162162
// there are some blocks waiting for import but it seems that we reached top on fetch side so we can enqueue new block for import
163163
} else if (newBlockNr == nextExpectedBlock && !state.isFetching && state.waitingHeaders.isEmpty) {
164+
log.debug("Enqueue new block for import")
164165
val newState = state.appendNewBlock(block, peerId)
165166
context become started(newState)
166167
// waiting for some bodies but we don't have this header yet - at least we can use new block header
167168
} else if (newBlockNr == state.nextToLastBlock && !state.isFetchingHeaders) {
169+
log.debug("Waiting for bodies. Add only headers")
168170
state.appendHeaders(List(block.header)) |> fetchBlocks
169171
// we're far from top
170172
} else if (newBlockNr > nextExpectedBlock) {
173+
log.debug("Far from top")
171174
val newState = state.withKnownTopAt(newBlockNr)
172175
fetchBlocks(newState)
173176
}
@@ -177,13 +180,13 @@ class BlockFetcher(
177180
fetchBlocks(newState)
178181
}
179182

180-
private def handlePickedBlocks(state: BlockFetcherState)(
181-
pickResult: Option[(NonEmptyList[Block], BlockFetcherState)]): BlockFetcherState =
183+
private def handlePickedBlocks(
184+
state: BlockFetcherState
185+
)(pickResult: Option[(NonEmptyList[Block], BlockFetcherState)]): BlockFetcherState =
182186
pickResult
183-
.tap {
184-
case (blocks, newState) =>
185-
sender() ! PickedBlocks(blocks)
186-
newState.importer ! (if (newState.isOnTop) OnTop else NotOnTop)
187+
.tap { case (blocks, newState) =>
188+
sender() ! PickedBlocks(blocks)
189+
newState.importer ! (if (newState.isOnTop) OnTop else NotOnTop)
187190
}
188191
.fold(state)(_._2)
189192

@@ -243,6 +246,7 @@ class BlockFetcher(
243246
makeRequest(Request.create(msg, BestPeer), RetryHeadersRequest)
244247
.flatMap {
245248
case Response(_, BlockHeaders(headers)) if headers.isEmpty =>
249+
log.debug("Empty BlockHeaders response. Retry in {}", syncConfig.syncRetryInterval)
246250
Future.successful(RetryHeadersRequest).delayedBy(syncConfig.syncRetryInterval)
247251
case res => Future.successful(res)
248252
}

src/main/scala/io/iohk/ethereum/blockchain/sync/regular/RegularSync.scala

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,37 @@ class RegularSync(
2424
context.actorOf(BlockFetcher.props(peersClient, peerEventBus, syncConfig, scheduler), "block-fetcher")
2525
val broadcaster: ActorRef = context.actorOf(
2626
BlockBroadcasterActor
27-
.props(new BlockBroadcast(etcPeerManager, syncConfig), peerEventBus, etcPeerManager, syncConfig, scheduler), "block-broadcaster")
27+
.props(new BlockBroadcast(etcPeerManager, syncConfig), peerEventBus, etcPeerManager, syncConfig, scheduler),
28+
"block-broadcaster"
29+
)
2830
val importer: ActorRef =
2931
context.actorOf(
3032
BlockImporter.props(fetcher, ledger, blockchain, syncConfig, ommersPool, broadcaster, pendingTransactionsManager),
31-
"block-importer")
33+
"block-importer"
34+
)
3235

3336
val printFetcherSchedule: Cancellable =
34-
scheduler.scheduleWithFixedDelay(syncConfig.printStatusInterval, syncConfig.printStatusInterval, fetcher, BlockFetcher.PrintStatus)(context.dispatcher)
37+
scheduler.scheduleWithFixedDelay(
38+
syncConfig.printStatusInterval,
39+
syncConfig.printStatusInterval,
40+
fetcher,
41+
BlockFetcher.PrintStatus
42+
)(context.dispatcher)
3543
val printImporterSchedule: Cancellable =
36-
scheduler.scheduleWithFixedDelay(syncConfig.printStatusInterval, syncConfig.printStatusInterval, importer, BlockImporter.PrintStatus)(context.dispatcher)
44+
scheduler.scheduleWithFixedDelay(
45+
syncConfig.printStatusInterval,
46+
syncConfig.printStatusInterval,
47+
importer,
48+
BlockImporter.PrintStatus
49+
)(context.dispatcher)
3750

3851
override def receive: Receive = {
3952
case Start =>
4053
log.info("Starting regular sync")
4154
importer ! BlockImporter.Start
42-
case MinedBlock(block) => importer ! BlockImporter.MinedBlock(block)
55+
case MinedBlock(block) =>
56+
log.info(s"Block mined [number = {}, hash = {}]", block.number, block.header.hashAsHexString)
57+
importer ! BlockImporter.MinedBlock(block)
4358
}
4459

4560
override def supervisorStrategy: SupervisorStrategy = AllForOneStrategy()(SupervisorStrategy.defaultDecider)
@@ -73,7 +88,9 @@ object RegularSync {
7388
syncConfig,
7489
ommersPool,
7590
pendingTransactionsManager,
76-
scheduler))
91+
scheduler
92+
)
93+
)
7794

7895
sealed trait NewRegularSyncMsg
7996
case object Start extends NewRegularSyncMsg

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import io.iohk.ethereum.jsonrpc.EthService
1313
import io.iohk.ethereum.jsonrpc.EthService.SubmitHashRateRequest
1414
import io.iohk.ethereum.nodebuilder.Node
1515
import io.iohk.ethereum.utils.BigIntExtensionMethods._
16-
import io.iohk.ethereum.utils.ByteUtils
16+
import io.iohk.ethereum.utils.{ByteStringUtils, ByteUtils}
1717
import java.io.{File, FileInputStream, FileOutputStream}
1818
import org.bouncycastle.util.encoders.Hex
1919
import scala.concurrent.ExecutionContext.Implicits.global
@@ -71,7 +71,6 @@ class EthashMiner(
7171
}
7272
res.getOrElse(generateDagAndSaveToFile(epoch, dagNumHashes, seed))
7373
}
74-
7574
currentEpoch = Some(epoch)
7675
currentEpochDag = Some(dag)
7776
currentEpochDagSize = Some(dagSize)
@@ -90,13 +89,15 @@ class EthashMiner(
9089
ethService.submitHashRate(SubmitHashRateRequest(hashRate, ByteString("mantis-miner")))
9190
mineResult match {
9291
case MiningSuccessful(_, pow, nonce) =>
92+
log.info(
93+
s"Mining successful with ${ByteStringUtils.hash2string(pow.mixHash)} and nonce ${ByteStringUtils.hash2string(nonce)}"
94+
)
9395
syncController ! RegularSync.MinedBlock(
9496
block.copy(header = block.header.copy(nonce = nonce, mixHash = pow.mixHash))
9597
)
96-
case _ => // nothing
98+
case _ => log.info("Mining unsuccessful")
9799
}
98100
self ! ProcessMining
99-
100101
case Failure(ex) =>
101102
log.error(ex, "Unable to get block for mining")
102103
context.system.scheduler.scheduleOnce(10.seconds, self, ProcessMining)
@@ -111,7 +112,6 @@ class EthashMiner(
111112

112113
private def generateDagAndSaveToFile(epoch: Long, dagNumHashes: Int, seed: ByteString): Array[Array[Int]] = {
113114
// scalastyle:off magic.number
114-
115115
val file = dagFile(seed)
116116
if (file.exists()) file.delete()
117117
file.getParentFile.mkdirs()

src/main/scala/io/iohk/ethereum/faucet/FaucetApi.scala

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

33
import java.time.Clock
4-
54
import akka.http.scaladsl.model.{RemoteAddress, StatusCodes}
65
import akka.http.scaladsl.server.Route
76
import akka.http.scaladsl.server.Directives._
@@ -12,10 +11,9 @@ import com.twitter.util.LruMap
1211
import io.iohk.ethereum.domain.{Address, Transaction}
1312
import io.iohk.ethereum.keystore.KeyStore
1413
import io.iohk.ethereum.mallet.service.RpcClient
15-
import io.iohk.ethereum.utils.Logger
14+
import io.iohk.ethereum.utils.{ByteStringUtils, Logger}
1615
import io.iohk.ethereum.rlp
1716
import io.iohk.ethereum.network.p2p.messages.CommonMessages.SignedTransactions.SignedTransactionEnc
18-
import org.bouncycastle.util.encoders.Hex
1917

2018
class FaucetApi(rpcClient: RpcClient, keyStore: KeyStore, config: FaucetConfig, clock: Clock = Clock.systemUTC())
2119
extends Logger {
@@ -25,7 +23,6 @@ class FaucetApi(rpcClient: RpcClient, keyStore: KeyStore, config: FaucetConfig,
2523
private val wallet = keyStore.unlockAccount(config.walletAddress, config.walletPassword) match {
2624
case Right(w) => w
2725
case Left(err) =>
28-
log.info("accounts " + keyStore.listAccounts().right.get.mkString(", "))
2926
throw new RuntimeException(s"Cannot unlock wallet for use in faucet (${config.walletAddress}), because of $err")
3027
}
3128

@@ -54,8 +51,9 @@ class FaucetApi(rpcClient: RpcClient, keyStore: KeyStore, config: FaucetConfig,
5451

5552
res match {
5653
case Right(txId) =>
57-
log.info(s"Sending ${config.txValue} ETH to $targetAddress in tx: $txId. Requested by $clientAddr")
58-
complete(StatusCodes.OK, s"0x${Hex.toHexString(txId.toArray[Byte])}")
54+
val txIdHex = s"0x${ByteStringUtils.hash2string(txId)}"
55+
log.info(s"Sending ${config.txValue} ETH to $targetAddress in tx: $txIdHex. Requested by $clientAddr")
56+
complete(StatusCodes.OK, txIdHex)
5957

6058
case Left(err) =>
6159
log.error(s"An error occurred while using faucet: $err")

0 commit comments

Comments
 (0)