Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
191 commits
Select commit Hold shift + click to select a range
cbe81b6
add new actors
Bromel777 Feb 28, 2020
36f4f7d
add some messages
Bromel777 Mar 2, 2020
2395da3
nvh group frame added
GusevTimofey Mar 2, 2020
45f7662
validator frame added
GusevTimofey Mar 2, 2020
17a0122
validator frame extended
GusevTimofey Mar 2, 2020
12a0f5c
added inner impl of nvh
GusevTimofey Mar 3, 2020
35dc809
added full-filled receive function
GusevTimofey Mar 3, 2020
6abbb60
add some additions to new peers keeper
Bromel777 Mar 3, 2020
aa18607
nvh some cleanups
GusevTimofey Mar 3, 2020
25622bb
nvh improved
GusevTimofey Mar 3, 2020
f52462d
added apply to nvh
GusevTimofey Mar 3, 2020
ddb10b4
more additions
GusevTimofey Mar 3, 2020
5e446d4
add new pipelines to message builder
Bromel777 Mar 3, 2020
5deac15
nvh more improvements
GusevTimofey Mar 3, 2020
953ca6c
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 3, 2020
a220f71
nvh more improvements
GusevTimofey Mar 3, 2020
b394be4
add new pipelines to message builder
Bromel777 Mar 3, 2020
4647145
change ModifierFromNetwork
Bromel777 Mar 3, 2020
867402b
more nvh improvements
GusevTimofey Mar 3, 2020
d9d6001
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 3, 2020
d7d88c8
more nvh improvements
GusevTimofey Mar 3, 2020
35e695b
changed incoming ModifierFromNetwork message
GusevTimofey Mar 3, 2020
f50ae42
add dm
Bromel777 Mar 3, 2020
06503d4
added processing of sync info and inv messages
GusevTimofey Mar 3, 2020
f37daf8
code cleaned up + added SSM/SFM to the network
GusevTimofey Mar 3, 2020
79e1bd4
add handler for modifierNetMsg
Bromel777 Mar 3, 2020
fef4561
network messages improved
GusevTimofey Mar 5, 2020
b52a161
added RequestModifiersNetworkMessage processing
GusevTimofey Mar 5, 2020
9e68e7b
added check payloads to download functionality
GusevTimofey Mar 5, 2020
47d1511
modifiers cache moved to the nvg package
GusevTimofey Mar 5, 2020
55bdbcf
added registration for ModifierFromNetwork msg
GusevTimofey Mar 5, 2020
d3df356
minor fix
GusevTimofey Mar 5, 2020
2f28e79
comment old actors
Bromel777 Mar 5, 2020
dca7c6f
Merge branch 'EC-859' of /Users/timofey/idea/encry/core with conflicts.
GusevTimofey Mar 5, 2020
3ad6215
added messages
GusevTimofey Mar 5, 2020
88e3573
made source in reqFromLocal optional
Bromel777 Mar 5, 2020
db4d2ff
history reader implemented
GusevTimofey Mar 5, 2020
eeaf345
remove redundant dependencies
GusevTimofey Mar 5, 2020
65682c2
add predicates to peers getting
Bromel777 Mar 5, 2020
a77f896
Merge remote-tracking branch 'origin/EC-859' into EC-859
Bromel777 Mar 5, 2020
7c49193
improved rolled back txs processing
GusevTimofey Mar 5, 2020
8876435
comment some tests
Bromel777 Mar 5, 2020
88ef4dd
messages position changed
GusevTimofey Mar 5, 2020
a5dfdef
fix
Bromel777 Mar 5, 2020
5c1e871
fix message builder starting
Bromel777 Mar 5, 2020
d87bd12
mempool changed
liorl00 Mar 5, 2020
d8b344d
code cleanup
liorl00 Mar 5, 2020
8148c2d
actor snapshot holder moved to the nvg
GusevTimofey Mar 5, 2020
548191b
add processing getPeers message on pk
Bromel777 Mar 5, 2020
87c0d19
SyncInfo error was fixed
GusevTimofey Mar 6, 2020
b2f4f8c
local commit
GusevTimofey Mar 6, 2020
abb6008
add processing getPeers message on pk
Bromel777 Mar 6, 2020
9ec8d6e
simple pipeline of mods downloading
Bromel777 Mar 6, 2020
2cba166
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 6, 2020
72220c3
snapshot processor frame
GusevTimofey Mar 6, 2020
fcb9d81
add removing app.mod from expected modifier
Bromel777 Mar 6, 2020
309a96b
fixed scala match error
GusevTimofey Mar 6, 2020
e1caeca
add logging
Bromel777 Mar 6, 2020
5b68110
logging improved
GusevTimofey Mar 6, 2020
956127b
send info about request to delivery manager
Bromel777 Mar 6, 2020
c2c7e68
provide stopping msgBuilder after msg sending
Bromel777 Mar 6, 2020
5572e40
code style updated
GusevTimofey Mar 6, 2020
d40d1af
change GetPeerWith(Older/Equal/Younger)History
Bromel777 Mar 6, 2020
9ce0eb9
fix payload downloading
Bromel777 Mar 6, 2020
e3d03f0
start pipeline of transactions downloading
Bromel777 Mar 6, 2020
b493b17
code style updated
GusevTimofey Mar 6, 2020
d92a85c
logs improved
GusevTimofey Mar 6, 2020
da1b143
code style updated
GusevTimofey Mar 6, 2020
adbdff4
add some pipelines to mempool
Bromel777 Mar 6, 2020
ad844c6
miner pipeline
Bromel777 Mar 7, 2020
901439c
add logging + fix re requesting
Bromel777 Mar 10, 2020
b61733f
remove mod from expected after failed re-requesting
Bromel777 Mar 10, 2020
55a5414
state/history separation frame
GusevTimofey Mar 10, 2020
86c4db1
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 10, 2020
aafceb3
state/history separation frame
GusevTimofey Mar 10, 2020
da7a7c7
removed history\state separation
GusevTimofey Mar 10, 2020
140c4bf
added messages to mempool from nvh
GusevTimofey Mar 10, 2020
801e27b
added forwarding instead of ref in message
GusevTimofey Mar 10, 2020
a457f66
code cleanup
liorl00 Mar 10, 2020
5033ed1
code cleanup
liorl00 Mar 10, 2020
17b85ec
added mempool reader
GusevTimofey Mar 10, 2020
c2e8582
some fixes
GusevTimofey Mar 10, 2020
b1020ce
mempool moved
GusevTimofey Mar 10, 2020
fa9a626
add dataholder
Bromel777 Mar 10, 2020
e3b3326
use history reader instead of history
Bromel777 Mar 10, 2020
159b5a8
send info about peers from network router to data holder
Bromel777 Mar 10, 2020
caca490
stop mining during rollback, send txs for miner by ask
Bromel777 Mar 12, 2020
e0bc8cd
ec-fix
Bromel777 Mar 12, 2020
77c9107
remove mempool buffer at miner
Bromel777 Mar 12, 2020
2b1c425
mempool keeps txs till ssm
GusevTimofey Mar 13, 2020
96e90f9
request for headers fixed
GusevTimofey Mar 13, 2020
96b6c17
change messageBuilder naming
Bromel777 Mar 16, 2020
b3eae66
ec fix
Bromel777 Mar 16, 2020
3a97b20
todo added
GusevTimofey Mar 16, 2020
fb00a55
test removed
liorl00 Mar 16, 2020
27e6240
fixed modifiers propagation
GusevTimofey Mar 16, 2020
9c3a567
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 16, 2020
944ec15
fixed modifiers propagation
GusevTimofey Mar 16, 2020
fc96df1
add tests
Bromel777 Mar 16, 2020
49bdff2
Merge remote-tracking branch 'origin/EC-859' into EC-859
Bromel777 Mar 16, 2020
35e32b5
more dm tests
Bromel777 Mar 16, 2020
e08d76b
fix some bugs in dm and pk
Bromel777 Mar 17, 2020
8f216f0
test added
liorl00 Mar 17, 2020
cb3a283
sync info message tests added
GusevTimofey Mar 17, 2020
051fd09
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 17, 2020
204db4e
fixed modifiers propagation
GusevTimofey Mar 17, 2020
2d084cf
added test for fork in sync info
GusevTimofey Mar 17, 2020
61ab55b
added tests for processing inv message on nvh messages processor
GusevTimofey Mar 17, 2020
9e19dd4
added tests for request modifier, for local cache, for semantically s…
GusevTimofey Mar 17, 2020
532c23c
added tests for check payloads to download
GusevTimofey Mar 17, 2020
dc80538
NodeViewNMProcessor tests finished
GusevTimofey Mar 17, 2020
0fa0a3d
fixed proto parsing error
GusevTimofey Mar 17, 2020
f793d13
add test for pk pipeline
Bromel777 Mar 18, 2020
117dc27
stats added
GusevTimofey Mar 18, 2020
a0baefc
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 18, 2020
73f3357
fixed modifiers propagation
GusevTimofey Mar 18, 2020
c427b72
add NotifyNodeAboutModifier
Bromel777 Mar 18, 2020
6befa5a
Merge remote-tracking branch 'origin/EC-859' into EC-859
Bromel777 Mar 18, 2020
913230e
ec-fix
Bromel777 Mar 18, 2020
9cea1f8
add InvNetworkMessage on message builder
Bromel777 Mar 18, 2020
d5618cb
added inv sending
GusevTimofey Mar 18, 2020
477c481
one more test on pk
Bromel777 Mar 18, 2020
e2b3511
more tests
Bromel777 Mar 18, 2020
0e04d0a
Applying modifiers pipeline test added
GusevTimofey Mar 18, 2020
9a84fbc
Merge remote-tracking branch 'origin/EC-859' into EC-859
GusevTimofey Mar 18, 2020
9330383
fixed modifiers propagation
GusevTimofey Mar 18, 2020
5adef19
added test for nvg forks
GusevTimofey Mar 18, 2020
64c9e1b
miner pipeline
Bromel777 Mar 19, 2020
155d83b
recover some tests, fix dm logic with txs
Bromel777 Mar 19, 2020
b40968d
fix some tests
Bromel777 Mar 19, 2020
becdbcd
add NVH(History/State)
Bromel777 Mar 19, 2020
3f3bd36
add simple messages for nvhState
Bromel777 Mar 19, 2020
16c15e9
simple props
Bromel777 Mar 19, 2020
341eb46
add some pipelines to nvhState
Bromel777 Mar 20, 2020
a61651b
add IntermediaryNVHView actor
Bromel777 Mar 20, 2020
83f83f0
add awaitingViewActors: Receive to IntermediaryNVHView
Bromel777 Mar 20, 2020
3c1d7fa
change some props in nvhstate
Bromel777 Mar 20, 2020
cdbf7d1
add simple test for init genesis state by nvhstate and restoring stat…
Bromel777 Mar 20, 2020
cf4daaf
code cleanup
Bromel777 Mar 23, 2020
27fd73b
add msg about state failed mod application on interNvh
Bromel777 Mar 23, 2020
198b27b
miner pipeline
Bromel777 Mar 23, 2020
86ae6ed
nvh history actor frame added
GusevTimofey Mar 23, 2020
4ca159b
improved history holder
GusevTimofey Mar 23, 2020
3f3d64d
add reader to ProgressInfoForState
Bromel777 Mar 23, 2020
688618f
improved history holder one more time
GusevTimofey Mar 23, 2020
1f3aaa5
added work with lgm
GusevTimofey Mar 23, 2020
f8f0fd7
history holder actor creation added
GusevTimofey Mar 23, 2020
0cbd924
separate progress info
Bromel777 Mar 23, 2020
bb52948
added messages forwarding through nvh middle actor
GusevTimofey Mar 23, 2020
0a7434e
Merge remote-tracking branch 'origin/EC-860' into EC-860
GusevTimofey Mar 23, 2020
e6189c7
added messages forwarding through nvh middle actor
GusevTimofey Mar 23, 2020
7eed136
add utxo state reader
Bromel777 Mar 23, 2020
a9b60af
Merge remote-tracking branch 'origin/EC-860' into EC-860
Bromel777 Mar 23, 2020
76376d0
add rollback logic to interNvhView
Bromel777 Mar 23, 2020
699fa80
add autocloseable to storages, comment tests
Bromel777 Mar 24, 2020
36cb65e
history fixed
GusevTimofey Mar 24, 2020
7f526dd
more logging
Bromel777 Mar 24, 2020
727ce4c
fix state starting
Bromel777 Mar 24, 2020
5899b6f
improve stateReader
Bromel777 Mar 24, 2020
7fc476e
fix handling state reader at inter nvh view
Bromel777 Mar 24, 2020
e68da83
fix context switching on inter nvh
Bromel777 Mar 24, 2020
d525f1b
fix modifier applying
Bromel777 Mar 24, 2020
6b6816c
fix history reader propagation
Bromel777 Mar 24, 2020
d667e60
miner works incorrect
GusevTimofey Mar 24, 2020
b06dcb1
more additions
GusevTimofey Mar 24, 2020
db590cd
fix calculating correct root node hash at miner
Bromel777 Mar 25, 2020
f90d443
code cleanup
Bromel777 Mar 25, 2020
463fe3b
fix mining start after sync proc
Bromel777 Mar 25, 2020
ddd8e66
rolled back full chain
GusevTimofey Mar 26, 2020
9700ab5
ec-fix
Bromel777 Mar 30, 2020
692b168
Merge remote-tracking branch 'origin/EC-860' into EC-860
GusevTimofey Mar 30, 2020
9d09188
history http api fixed, data holder fixed
GusevTimofey Mar 30, 2020
0982166
ec-fix
Bromel777 Mar 30, 2020
1a2f69a
more logging
Bromel777 Mar 31, 2020
e61f6b7
change logic of asking modifier from unknown node
Bromel777 Mar 31, 2020
d1614d0
change pipeline of update utxo state at inter nvh view
Bromel777 Mar 31, 2020
6cafc82
more logging
Bromel777 Mar 31, 2020
698584a
once more logging
Bromel777 Mar 31, 2020
3e4bea8
fixed pipeline for non best block processing by history
GusevTimofey Mar 31, 2020
f898e03
more logging
Bromel777 Apr 1, 2020
f57b9a7
fixed semantically failed mod case
GusevTimofey Apr 1, 2020
1acfe9f
added statistics
GusevTimofey Apr 1, 2020
f77935d
more logging
GusevTimofey Apr 1, 2020
be6f7be
added ModifiersCache.setChainSynced() to history
GusevTimofey Apr 1, 2020
3510d95
more logging
GusevTimofey Apr 1, 2020
3a2525c
more logging
GusevTimofey Apr 1, 2020
dbbd964
logging removed
GusevTimofey Apr 1, 2020
50b56fe
more additions
GusevTimofey Apr 1, 2020
6daf37d
logging
GusevTimofey Apr 1, 2020
5da589a
more logging
GusevTimofey Apr 1, 2020
a645d5c
add rollback pipeline
Bromel777 Apr 2, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import benches.SnapshotAssemblerBench.SnapshotAssemblerBenchState
import encry.view.state.avlTree.utils.implicits.Instances._
import benches.StateBenches.{StateBenchState, benchSettings}
import benches.Utils.{getRandomTempDir, utxoFromBoxHolder}
import encry.nvg.fast.sync.SnapshotProcessor
import encry.settings.Settings
import encry.storage.{RootNodesStorage, VersionalStorage}
import encry.storage.VersionalStorage.{StorageKey, StorageValue, StorageVersion}
import encry.storage.levelDb.versionalLevelDB.{LevelDbFactory, VLDBWrapper, VersionalLevelDBCompanion}
import encry.utils.FileHelper
import encry.view.fast.sync.SnapshotHolder
import encry.view.state.UtxoState
import encry.view.state.avlTree.AvlTree
import org.encryfoundation.common.utils.TaggedTypes.Height
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/TestNetSettings.conf
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ delivery-manager-dispatcher {
throughput = 1
}
mempool-dispatcher {
mailbox-type = "encry.view.mempool.MemoryPool$MemoryPoolPriorityQueue"
mailbox-type = "encry.mpg.MemoryPool$MemoryPoolPriorityQueue"
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor.fixed-pool-size = 2
Expand Down
13 changes: 11 additions & 2 deletions src/main/resources/application.conf
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ encry {
miningDelay = 5s
# Is CLI available
useCli = true
#Debug regime
isTestMod = false
}
mempool {
# The time during which the transaction is considered valid
Expand Down Expand Up @@ -151,7 +153,14 @@ akka.http {
akka.http.routing {
verbose-error-messages = on
}

modifiers-validator-router-dispatcher {
executor = "thread-pool-executor"
# allocate exactly 5 threads for this pool
thread-pool-executor {
core-pool-size-min = 5
core-pool-size-max = 5
}
}
mining-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
Expand Down Expand Up @@ -211,7 +220,7 @@ delivery-manager-dispatcher {
throughput = 1
}
mempool-dispatcher {
mailbox-type = "encry.view.mempool.MemoryPool$MemoryPoolPriorityQueue"
mailbox-type = "encry.mpg.MemoryPool$MemoryPoolPriorityQueue"
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor.fixed-pool-size = 2
Expand Down
6 changes: 3 additions & 3 deletions src/main/scala/encry/EncryApp.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import java.io.File
import java.net.InetAddress
import java.nio.file.Files
import akka.actor.SupervisorStrategy.Restart
import akka.actor.{ActorRef, ActorSystem, OneForOneStrategy, Props}
import akka.actor.{ ActorRef, ActorSystem, OneForOneStrategy, Props }
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.HttpResponse
import akka.http.scaladsl.server.ExceptionHandler
import akka.stream.ActorMaterializer
import com.typesafe.scalalogging.StrictLogging
import encry.api.http.routes._
import encry.api.http.{ApiRoute, CompositeHttpService}
import encry.api.http.{ ApiRoute, CompositeHttpService }
import encry.settings.EncryAppSettings
import encry.stats.Zombie
import encry.utils.NetworkTimeProvider
Expand All @@ -20,7 +20,7 @@ import kamon.influxdb.InfluxDBReporter
import kamon.system.SystemMetrics
import org.encryfoundation.common.utils.Algos
import scala.concurrent.duration._
import scala.concurrent.{Await, ExecutionContextExecutor, Future}
import scala.concurrent.{ Await, ExecutionContextExecutor, Future }
import scala.io.Source
import scala.language.postfixOps

Expand Down
75 changes: 37 additions & 38 deletions src/main/scala/encry/Starter.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package encry

import java.net.InetSocketAddress
import akka.actor.{ Actor, ActorRef }

import akka.actor.{Actor, ActorRef}
import akka.http.scaladsl.Http
import cats.Functor
import cats.data.{ NonEmptyChain, Validated }
import cats.data.{NonEmptyChain, Validated}
import cats.instances.future._
import cats.instances.option._
import cats.syntax.apply._
Expand All @@ -15,19 +16,20 @@ import encry.Starter.InitNodeResult
import encry.api.http.DataHolderForApi
import encry.api.http.DataHolderForApi.PassForStorage
import encry.cli.ConsoleListener
import encry.cli.ConsoleListener.{ prompt, StartListening }
import encry.cli.ConsoleListener.{StartListening, prompt}
import encry.local.miner.Miner
import encry.local.miner.Miner.StartMining
import encry.network.NodeViewSynchronizer
import encry.mpg.IntermediaryMempool
import encry.network.NetworkRouter
import encry.nvg.IntermediaryNVH
import encry.settings._
import encry.stats.StatsSender
import encry.utils.{ Mnemonic, NetworkTimeProvider }
import encry.view.NodeViewHolder
import encry.view.mempool.MemoryPool
import encry.utils.{Mnemonic, NetworkTimeProvider}
import encry.view.wallet.AccountManager

import scala.concurrent.Future
import scala.io.StdIn
import scala.util.{ Failure, Success, Try }
import scala.util.{Failure, Success, Try}

class Starter(settings: EncryAppSettings,
timeProvider: NetworkTimeProvider,
Expand All @@ -40,7 +42,7 @@ class Starter(settings: EncryAppSettings,

var initHttpApiServer: Option[Future[Http.ServerBinding]] = none

val preview =
val preview: String =
"""
|XXXXXX XX XX XXXXX XXXXXX XX XX
|XX XXXX XX XX XX XX XXXXXX
Expand Down Expand Up @@ -404,31 +406,26 @@ class Starter(settings: EncryAppSettings,
context.system
.actorOf(StatsSender.props(influxSettings, newSettings.network, newSettings.constants), "statsSender")
}
lazy val dataHolderForApi =
val dataHolderForApi =
context.system.actorOf(DataHolderForApi.props(newSettings, timeProvider), "dataHolder")
lazy val miner: ActorRef =
context.system.actorOf(Miner.props(dataHolderForApi, influxRef, newSettings), "miner")
lazy val memoryPool: ActorRef = context.system.actorOf(
MemoryPool
.props(newSettings, timeProvider, miner, influxRef)
.withDispatcher("mempool-dispatcher")
)
val nodeViewHolder: ActorRef = context.system.actorOf(
NodeViewHolder
.props(memoryPool, influxRef, dataHolderForApi, newSettings)
.withDispatcher("nvh-dispatcher"),
"nodeViewHolder"
)

if (nodePass.nonEmpty) dataHolderForApi ! PassForStorage(nodePass)

context.system.actorOf(
NodeViewSynchronizer
.props(influxRef, nodeViewHolder, newSettings, memoryPool, dataHolderForApi)
val networkRouter = context.system.actorOf(
NetworkRouter
.props(networkSettings, settings.blackList, dataHolderForApi)
.withDispatcher("nvsh-dispatcher"),
"nodeViewSynchronizer"
"networkRouter"
)

val memoryPool: ActorRef = context.system.actorOf(
IntermediaryMempool.props(newSettings, timeProvider, influxRef, networkRouter)
)
val nvhRouter: ActorRef = context.system.actorOf(
IntermediaryNVH.props(newSettings, networkRouter, timeProvider, influxRef, memoryPool, dataHolderForApi)
)
val miner: ActorRef =
context.system.actorOf(Miner.props(dataHolderForApi, memoryPool, nvhRouter, influxRef, newSettings, timeProvider), "miner")
if (newSettings.node.mining) miner ! StartMining
if (newSettings.node.useCli) {
context.system
Expand All @@ -441,15 +438,17 @@ class Starter(settings: EncryAppSettings,
}

object Starter {
final case class InitNodeResult(mnemonic: String,
walletPassword: String,
offlineGeneration: Boolean,
fastSync: Boolean,
snapshotCreation: Boolean,
peers: List[InetSocketAddress],
connectWithOnlyKnownPeers: Boolean,
nodePass: String = "",
nodeName: String,
declaredAddr: Option[InetSocketAddress],
bindAddr: InetSocketAddress)
final case class InitNodeResult(
mnemonic: String,
walletPassword: String,
offlineGeneration: Boolean,
fastSync: Boolean,
snapshotCreation: Boolean,
peers: List[InetSocketAddress],
connectWithOnlyKnownPeers: Boolean,
nodePass: String = "",
nodeName: String,
declaredAddr: Option[InetSocketAddress],
bindAddr: InetSocketAddress
)
}
53 changes: 26 additions & 27 deletions src/main/scala/encry/api/http/DataHolderForApi.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package encry.api.http

import java.net.{InetAddress, InetSocketAddress}

import akka.actor.{Actor, ActorRef, Props, Stash}
import akka.pattern._
import akka.util.Timeout
Expand All @@ -18,19 +19,21 @@ import encry.network.BlackList.BanReason.InvalidNetworkMessage
import encry.network.BlackList.{BanReason, BanTime, BanType}
import encry.network.ConnectedPeersCollection
import encry.network.NodeViewSynchronizer.ReceivableMessages._
import encry.network.PeerConnectionHandler.ConnectedPeer
import encry.network.PeerConnectionHandler.{ConnectedPeer, ConnectionType}
import encry.network.PeersKeeper.BanPeerFromAPI
import encry.nvg.NodeViewHolder.{NodeViewChange, UpdateHistoryReader}
import encry.settings.EncryAppSettings
import encry.utils.{NetworkTime, NetworkTimeProvider}
import encry.view.NodeViewHolder.ReceivableMessages.{CreateAccountManagerFromSeed, GetDataFromCurrentView}
import encry.view.history.History
import encry.view.NodeViewHolder.ReceivableMessages.GetDataFromCurrentView
import encry.view.history.{History, HistoryReader}
import encry.view.state.{UtxoState, UtxoStateReader}
import encry.view.wallet.EncryWallet
import encry.view.wallet.{EncryWallet, WalletReader}
import org.encryfoundation.common.crypto.PrivateKey25519
import org.encryfoundation.common.modifiers.history.{Block, Header}
import org.encryfoundation.common.modifiers.state.box.Box.Amount
import org.encryfoundation.common.utils.Algos
import org.encryfoundation.common.utils.TaggedTypes.ModifierId

import scala.concurrent.Future

class DataHolderForApi(settings: EncryAppSettings, ntp: NetworkTimeProvider)
Expand All @@ -52,23 +55,24 @@ class DataHolderForApi(settings: EncryAppSettings, ntp: NetworkTimeProvider)
val launchTimeFuture: Future[NetworkTime.Time] = ntp.time()

def awaitNVHRef: Receive = {
case UpdatedHistory(history) =>
case history: HistoryReader =>
unstashAll()
logger.info("Got updated history at nvh")
context.become(workingCycle(nvhRef = sender(), history = Some(history)))
case PassForStorage(_) =>
stash()
case GetNodePassHashAndSalt => sender() ! storage.verifyPassword
}

def workingCycle(nvhRef: ActorRef,
blackList: Seq[(InetAddress, (BanReason, BanTime, BanType))] = Seq.empty,
connectedPeers: Seq[ConnectedPeer] = Seq.empty,
history: Option[History] = None,
blackList: List[(InetAddress, (BanReason, BanTime, BanType))] = List.empty,
connectedPeers: List[(InetSocketAddress, String, ConnectionType)] = List.empty,
history: Option[HistoryReader] = None,
state: Option[UtxoStateReader] = None,
transactionsOnMinerActor: Int = 0,
minerStatus: MinerStatus = MinerStatus(isMining = false, None),
blockInfo: BlockAndHeaderInfo = BlockAndHeaderInfo(None, None),
allPeers: Seq[InetSocketAddress] = Seq.empty,
allPeers: List[InetSocketAddress] = List.empty,
connectedPeersCollection: ConnectedPeersCollection = ConnectedPeersCollection()): Receive = {

case UpdatingTransactionsNumberForApi(qty) =>
Expand Down Expand Up @@ -119,7 +123,7 @@ class DataHolderForApi(settings: EncryAppSettings, ntp: NetworkTimeProvider)
connectedPeersCollection)
)

case ChangedHistory(reader: History) =>
case reader: HistoryReader =>
context.become(
workingCycle(nvhRef,
blackList,
Expand All @@ -133,7 +137,7 @@ class DataHolderForApi(settings: EncryAppSettings, ntp: NetworkTimeProvider)
connectedPeersCollection)
)

case ChangedState(reader: UtxoStateReader) =>
case reader: UtxoStateReader =>
context.become(
workingCycle(nvhRef,
blackList,
Expand Down Expand Up @@ -180,32 +184,32 @@ class DataHolderForApi(settings: EncryAppSettings, ntp: NetworkTimeProvider)
case RemovePeerFromBanList(peer) => context.system.eventStream.publish(RemovePeerFromBlackList(peer))

case GetViewPrintAddress =>
(nvhRef ? GetDataFromCurrentView[History, UtxoState, EncryWallet, String] { view =>
(nvhRef ? GetDataFromCurrentView[HistoryReader, UtxoStateReader, WalletReader, String] { view =>
view.vault.publicKeys.foldLeft("") { (str, k) =>
str + s"Pay2PubKeyAddress : ${k.address.address} , Pay2ContractHashAddress : ${k.address.p2ch.address}" + "\n"
}
}).pipeTo(sender)

case GetViewCreateKey =>
(nvhRef ? GetDataFromCurrentView[History, UtxoState, EncryWallet, PrivateKey25519] { view =>
(nvhRef ? GetDataFromCurrentView[HistoryReader, UtxoStateReader, WalletReader, PrivateKey25519] { view =>
view.vault.accountManagers.head.createAccount(None)
}).pipeTo(sender)

case GetViewPrintPubKeys =>
(nvhRef ? GetDataFromCurrentView[History, UtxoState, EncryWallet, List[String]] { view =>
(nvhRef ? GetDataFromCurrentView[HistoryReader, UtxoStateReader, WalletReader, List[String]] { view =>
view.vault.publicKeys.foldLeft(List.empty[String])((str, k) => str :+ Algos.encode(k.pubKeyBytes))
}).pipeTo(sender)

case GetViewGetBalance =>
(nvhRef ? GetDataFromCurrentView[History, UtxoState, EncryWallet, Map[String, List[(String, Amount)]]] { view =>
(nvhRef ? GetDataFromCurrentView[HistoryReader, UtxoStateReader, WalletReader, Map[String, List[(String, Amount)]]] { view =>
val balance: Map[String, List[(String, Amount)]] = view.vault.getBalances.map {
case ((key, token), amount) => Map(key -> List((token, amount)))
}.foldLeft(Map.empty[String, List[(String, Amount)]]) { case (el1, el2) => el1 |+| el2 }
if (balance.isEmpty) Map.empty[String, List[(String, Amount)]] else balance
}).pipeTo(sender)

case GetViewPrintPrivKeys =>
(nvhRef ? GetDataFromCurrentView[History, UtxoState, EncryWallet, String] { view =>
(nvhRef ? GetDataFromCurrentView[HistoryReader, UtxoStateReader, WalletReader, String] { view =>
view.vault.accountManagers.head.accounts.foldLeft("")((str, k) => str + Algos.encode(k.privKeyBytes) + "\n")
}).pipeTo(sender)

Expand All @@ -227,18 +231,13 @@ class DataHolderForApi(settings: EncryAppSettings, ntp: NetworkTimeProvider)
case GetBannedPeersHelper => sender() ! blackList

case GetConnectedPeersHelper => sender() ! connectedPeers
.map(
peer =>
PeerInfoResponse(peer.socketAddress.toString,
Some(peer.handshake.nodeName),
Some(peer.direction.toString)))

.map(peer => PeerInfoResponse(peer._1.toString, peer._2, peer._3.toString))

case GetLastHeaderIdAtHeightHelper(i) =>
sender() ! history.toList.flatMap(_.headerIdsAtHeight(i).map(Algos.encode))

case CreateAccountManagerFromSeedHelper(seed) =>
(nvhRef ? CreateAccountManagerFromSeed(seed)).mapTo[Either[String, EncryWallet]].pipeTo(sender())
//(nvhRef ? CreateAccountManagerFromSeed(seed)).mapTo[Either[String, EncryWallet]].pipeTo(sender())

case GetAllInfoHelper =>

Expand Down Expand Up @@ -314,9 +313,9 @@ object DataHolderForApi { //scalastyle:ignore

final case class UpdatingMinerStatus(minerStatus: MinerStatus) extends AnyVal

final case class UpdatingPeersInfo(allPeers: Seq[InetSocketAddress],
connectedPeers: Seq[ConnectedPeer],
blackList: Seq[(InetAddress, (BanReason, BanTime, BanType))])
final case class UpdatingPeersInfo(allPeers: List[InetSocketAddress],
connectedPeers: List[(InetSocketAddress, String, ConnectionType)],
blackList: List[(InetAddress, (BanReason, BanTime, BanType))])

final case class BlockAndHeaderInfo(header: Option[Header], block: Option[Block])

Expand All @@ -330,7 +329,7 @@ object DataHolderForApi { //scalastyle:ignore

final case class GetLastHeaderIdAtHeightHelper(i: Int)

final case class Readers(h: Option[History], s: Option[UtxoStateReader])
final case class Readers(h: Option[HistoryReader], s: Option[UtxoStateReader])

final case class PassForStorage(password: String)

Expand Down
Loading