11package io .iohk .ethereum .jsonrpc
22
3- import java .time .Duration
4- import java .util .Date
5- import java .util .concurrent .atomic .AtomicReference
63import akka .actor .ActorRef
74import akka .util .{ByteString , Timeout }
85import cats .syntax .either ._
@@ -15,8 +12,10 @@ import io.iohk.ethereum.consensus.ethash.EthashUtils
1512import io .iohk .ethereum .crypto ._
1613import io .iohk .ethereum .db .storage .TransactionMappingStorage .TransactionLocation
1714import io .iohk .ethereum .domain .{BlockHeader , SignedTransaction , UInt256 , _ }
15+ import io .iohk .ethereum .jsonrpc .AkkaTaskOps ._
1816import io .iohk .ethereum .jsonrpc .FilterManager .{FilterChanges , FilterLogs , LogFilterLogs , TxLog }
1917import io .iohk .ethereum .jsonrpc .server .controllers .JsonRpcBaseController .JsonRpcConfig
18+ import io .iohk .ethereum .jsonrpc .{FilterManager => FM }
2019import io .iohk .ethereum .keystore .KeyStore
2120import io .iohk .ethereum .ledger .{InMemoryWorldStateProxy , Ledger , StxLedger }
2221import io .iohk .ethereum .mpt .MerklePatriciaTrie .MissingNodeException
@@ -29,10 +28,12 @@ import io.iohk.ethereum.rlp.UInt256RLPImplicits._
2928import io .iohk .ethereum .transactions .PendingTransactionsManager
3029import io .iohk .ethereum .transactions .PendingTransactionsManager .{PendingTransaction , PendingTransactionsResponse }
3130import io .iohk .ethereum .utils ._
32- import io .iohk .ethereum .jsonrpc .AkkaTaskOps ._
33- import io .iohk .ethereum .jsonrpc .{FilterManager => FM }
3431import monix .eval .Task
3532import org .bouncycastle .util .encoders .Hex
33+
34+ import java .time .Duration
35+ import java .util .Date
36+ import java .util .concurrent .atomic .AtomicReference
3637import scala .collection .concurrent .{TrieMap , Map => ConcurrentMap }
3738import scala .concurrent .duration .FiniteDuration
3839import scala .language .existentials
@@ -78,9 +79,6 @@ object EthService {
7879 case class GetTransactionByHashRequest (txHash : ByteString )
7980 case class GetTransactionByHashResponse (txResponse : Option [TransactionResponse ])
8081
81- case class GetAccountTransactionsRequest (address : Address , fromBlock : BigInt , toBlock : BigInt )
82- case class GetAccountTransactionsResponse (transactions : Seq [TransactionResponse ])
83-
8482 case class GetTransactionReceiptRequest (txHash : ByteString )
8583 case class GetTransactionReceiptResponse (txResponse : Option [TransactionReceiptResponse ])
8684
@@ -325,7 +323,7 @@ class EthService(
325323 }
326324
327325 def getTransactionDataByHash (txHash : ByteString ): Task [Option [TransactionData ]] = {
328- val maybeTxPendingResponse : Task [Option [TransactionData ]] = getTransactionsFromPool() .map {
326+ val maybeTxPendingResponse : Task [Option [TransactionData ]] = getTransactionsFromPool.map {
329327 _.pendingTransactions.map(_.stx.tx).find(_.hash == txHash).map(TransactionData (_))
330328 }
331329
@@ -541,7 +539,7 @@ class EthService(
541539 reportActive()
542540 val bestBlock = blockchain.getBestBlock()
543541 val response : ServiceResponse [GetWorkResponse ] =
544- Task .parZip2(getOmmersFromPool(bestBlock.hash), getTransactionsFromPool() ).map { case (ommers, pendingTxs) =>
542+ Task .parZip2(getOmmersFromPool(bestBlock.hash), getTransactionsFromPool).map { case (ommers, pendingTxs) =>
545543 val blockGenerator = ethash.blockGenerator
546544 val PendingBlockAndState (pb, _) = blockGenerator.generateBlock(
547545 bestBlock,
@@ -575,13 +573,13 @@ class EthService(
575573 })(Task .now(OmmersPool .Ommers (Nil ))) // NOTE If not Ethash consensus, ommers do not make sense, so => Nil
576574
577575 // TODO This seems to be re-implemented in TransactionPicker, probably move to a better place? Also generalize the error message.
578- private [jsonrpc] def getTransactionsFromPool () : Task [PendingTransactionsResponse ] = {
576+ private [jsonrpc] val getTransactionsFromPool : Task [PendingTransactionsResponse ] = {
579577 implicit val timeout : Timeout = Timeout (getTransactionFromPoolTimeout)
580578
581579 pendingTransactionsManager
582580 .askFor[PendingTransactionsResponse ](PendingTransactionsManager .GetPendingTransactions )
583581 .onErrorRecoverWith { case ex : Throwable =>
584- log.error(" failed to get transactions, mining block with empty transactions list" , ex)
582+ log.error(" Failed to get pending transactions, passing empty transactions list" , ex)
585583 Task .now(PendingTransactionsResponse (Nil ))
586584 }
587585 }
@@ -623,8 +621,8 @@ class EthService(
623621 startingBlock = startingBlockNumber,
624622 currentBlock = blocksProgress.current,
625623 highestBlock = blocksProgress.target,
626- knownStates = stateNodesProgress.current ,
627- pulledStates = stateNodesProgress.target
624+ knownStates = stateNodesProgress.target ,
625+ pulledStates = stateNodesProgress.current
628626 )
629627 )
630628 )
@@ -927,47 +925,6 @@ class EthService(
927925 }
928926 }
929927
930- def getAccountTransactions (
931- request : GetAccountTransactionsRequest
932- ): ServiceResponse [GetAccountTransactionsResponse ] = {
933- val numBlocksToSearch = request.toBlock - request.fromBlock
934- if (numBlocksToSearch > jsonRpcConfig.accountTransactionsMaxBlocks) {
935- Task .now(
936- Left (
937- JsonRpcError .InvalidParams (
938- s """ Maximum number of blocks to search is ${jsonRpcConfig.accountTransactionsMaxBlocks}, requested: $numBlocksToSearch.
939- |See: 'network.rpc.account-transactions-max-blocks' config. """ .stripMargin
940- )
941- )
942- )
943- } else {
944-
945- def collectTxs (
946- blockHeader : Option [BlockHeader ],
947- pending : Boolean
948- ): PartialFunction [SignedTransaction , TransactionResponse ] = {
949- case stx if stx.safeSenderIsEqualTo(request.address) =>
950- TransactionResponse (stx, blockHeader, pending = Some (pending), isOutgoing = Some (true ))
951- case stx if stx.tx.receivingAddress.contains(request.address) =>
952- TransactionResponse (stx, blockHeader, pending = Some (pending), isOutgoing = Some (false ))
953- }
954-
955- getTransactionsFromPool map { case PendingTransactionsResponse (pendingTransactions) =>
956- val pendingTxs = pendingTransactions
957- .map(_.stx.tx)
958- .collect(collectTxs(None , pending = true ))
959-
960- val txsFromBlocks = (request.toBlock to request.fromBlock by - 1 ).toStream
961- .flatMap { n => blockchain.getBlockByNumber(n) }
962- .flatMap { block =>
963- block.body.transactionList.collect(collectTxs(Some (block.header), pending = false )).reverse
964- }
965-
966- Right (GetAccountTransactionsResponse (pendingTxs ++ txsFromBlocks))
967- }
968- }
969- }
970-
971928 def getStorageRoot (req : GetStorageRootRequest ): ServiceResponse [GetStorageRootResponse ] =
972929 withAccount(req.address, req.block) { account =>
973930 GetStorageRootResponse (account.storageRoot)
@@ -980,7 +937,7 @@ class EthService(
980937 * @return pending transactions
981938 */
982939 def ethPendingTransactions (req : EthPendingTransactionsRequest ): ServiceResponse [EthPendingTransactionsResponse ] =
983- getTransactionsFromPool() .map { resp =>
940+ getTransactionsFromPool.map { resp =>
984941 Right (EthPendingTransactionsResponse (resp.pendingTransactions))
985942 }
986943}
0 commit comments