Skip to content

Commit 357bc89

Browse files
authored
[ETCM-980] encode empty "to" address in transaction RPC reply (#1057)
* [ETCM-980] encode empty "to" address in transaction RPC reply * [ETCM-980] reduce empty field "to" encoding to EthTransactionResponse
1 parent 69e7d4b commit 357bc89

File tree

5 files changed

+18
-42
lines changed

5 files changed

+18
-42
lines changed

src/main/scala/io/iohk/ethereum/jsonrpc/serialization/JsonSerializers.scala

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@ import akka.util.ByteString
55
import org.bouncycastle.util.encoders.Hex
66
import org.json4s.CustomSerializer
77
import org.json4s.DefaultFormats
8+
import org.json4s.Extraction
89
import org.json4s.Formats
9-
import org.json4s.JNull
1010
import org.json4s.JString
1111

1212
import io.iohk.ethereum.domain.Address
1313
import io.iohk.ethereum.jsonrpc.JsonRpcError
14+
import io.iohk.ethereum.testmode.EthTransactionResponse
1415

1516
object JsonSerializers {
1617
implicit val formats: Formats =
17-
DefaultFormats + UnformattedDataJsonSerializer + QuantitiesSerializer + OptionNoneToJNullSerializer + AddressJsonSerializer
18+
DefaultFormats + UnformattedDataJsonSerializer + QuantitiesSerializer + AddressJsonSerializer + EthTransactionResponseSerializer
1819

1920
object UnformattedDataJsonSerializer
2021
extends CustomSerializer[ByteString](_ =>
@@ -37,14 +38,6 @@ object JsonSerializers {
3738
)
3839
)
3940

40-
object OptionNoneToJNullSerializer
41-
extends CustomSerializer[Option[_]](formats =>
42-
(
43-
PartialFunction.empty,
44-
{ case None => JNull }
45-
)
46-
)
47-
4841
object AddressJsonSerializer
4942
extends CustomSerializer[Address](_ =>
5043
(
@@ -61,4 +54,19 @@ object JsonSerializers {
6154
)
6255
)
6356

57+
/** Specific EthTransactionResponse serializer.
58+
* It's purpose is to encode the optional "to" field, as requested by
59+
* retesteth
60+
*/
61+
object EthTransactionResponseSerializer
62+
extends CustomSerializer[EthTransactionResponse](_ =>
63+
(
64+
PartialFunction.empty,
65+
{ case tx: EthTransactionResponse =>
66+
implicit val formats =
67+
DefaultFormats.preservingEmptyValues + UnformattedDataJsonSerializer + QuantitiesSerializer + AddressJsonSerializer
68+
Extraction.decompose(tx)
69+
}
70+
)
71+
)
6472
}

src/test/scala/io/iohk/ethereum/jsonrpc/JsonRpcControllerEthLegacyTransactionSpec.scala

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import monix.eval.Task
88
import monix.execution.Scheduler.Implicits.global
99

1010
import org.bouncycastle.util.encoders.Hex
11-
import org.json4s.DefaultFormats
1211
import org.json4s.Extraction
13-
import org.json4s.Formats
1412
import org.json4s.JsonAST._
1513
import org.json4s.JsonDSL._
1614
import org.scalatest.concurrent.Eventually
@@ -29,9 +27,6 @@ import io.iohk.ethereum.jsonrpc.EthTxService._
2927
import io.iohk.ethereum.jsonrpc.EthUserService._
3028
import io.iohk.ethereum.jsonrpc.FilterManager.TxLog
3129
import io.iohk.ethereum.jsonrpc.PersonalService._
32-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.OptionNoneToJNullSerializer
33-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.QuantitiesSerializer
34-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.UnformattedDataJsonSerializer
3530
import io.iohk.ethereum.transactions.PendingTransactionsManager.PendingTransaction
3631

3732
// scalastyle:off magic.number
@@ -46,9 +41,6 @@ class JsonRpcControllerEthLegacyTransactionSpec
4641
with LongPatience
4742
with Eventually {
4843

49-
implicit val formats: Formats = DefaultFormats.preservingEmptyValues + OptionNoneToJNullSerializer +
50-
QuantitiesSerializer + UnformattedDataJsonSerializer
51-
5244
it should "handle eth_getTransactionByBlockHashAndIndex request" in new JsonRpcControllerFixture {
5345
val blockToRequest = Block(Fixtures.Blocks.Block3125369.header, Fixtures.Blocks.Block3125369.body)
5446
val txIndexToRequest = blockToRequest.body.transactionList.size / 2

src/test/scala/io/iohk/ethereum/jsonrpc/JsonRpcControllerEthSpec.scala

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import monix.eval.Task
88
import monix.execution.Scheduler.Implicits.global
99

1010
import org.bouncycastle.util.encoders.Hex
11-
import org.json4s.DefaultFormats
1211
import org.json4s.Extraction
13-
import org.json4s.Formats
1412
import org.json4s.JsonAST._
1513
import org.json4s.JsonDSL._
1614
import org.scalatest.concurrent.Eventually
@@ -40,9 +38,6 @@ import io.iohk.ethereum.jsonrpc.ProofService.GetProofResponse
4038
import io.iohk.ethereum.jsonrpc.ProofService.ProofAccount
4139
import io.iohk.ethereum.jsonrpc.ProofService.StorageProofKey
4240
import io.iohk.ethereum.jsonrpc.ProofService.StorageValueProof
43-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.OptionNoneToJNullSerializer
44-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.QuantitiesSerializer
45-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.UnformattedDataJsonSerializer
4641
import io.iohk.ethereum.ommers.OmmersPool
4742
import io.iohk.ethereum.ommers.OmmersPool.Ommers
4843
import io.iohk.ethereum.testing.ActorsTesting.simpleAutoPilot
@@ -59,9 +54,6 @@ class JsonRpcControllerEthSpec
5954
with LongPatience
6055
with Eventually {
6156

62-
implicit val formats: Formats = DefaultFormats.preservingEmptyValues + OptionNoneToJNullSerializer +
63-
QuantitiesSerializer + UnformattedDataJsonSerializer
64-
6557
it should "eth_protocolVersion" in new JsonRpcControllerFixture {
6658
val rpcRequest = newJsonRpcRequest("eth_protocolVersion")
6759
val response = jsonRpcController.handleRequest(rpcRequest).runSyncUnsafe()

src/test/scala/io/iohk/ethereum/jsonrpc/JsonRpcControllerPersonalSpec.scala

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import monix.eval.Task
1010
import monix.execution.Scheduler.Implicits.global
1111

1212
import org.bouncycastle.util.encoders.Hex
13-
import org.json4s.DefaultFormats
14-
import org.json4s.Formats
1513
import org.json4s.JsonAST._
1614
import org.json4s.JsonDSL._
1715
import org.scalatest.concurrent.Eventually
@@ -24,9 +22,6 @@ import io.iohk.ethereum.LongPatience
2422
import io.iohk.ethereum.WithActorSystemShutDown
2523
import io.iohk.ethereum.domain._
2624
import io.iohk.ethereum.jsonrpc.PersonalService._
27-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.OptionNoneToJNullSerializer
28-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.QuantitiesSerializer
29-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.UnformattedDataJsonSerializer
3025

3126
class JsonRpcControllerPersonalSpec
3227
extends TestKit(ActorSystem("JsonRpcControllerPersonalSpec_System"))
@@ -39,9 +34,6 @@ class JsonRpcControllerPersonalSpec
3934
with LongPatience
4035
with Eventually {
4136

42-
implicit val formats: Formats = DefaultFormats.preservingEmptyValues + OptionNoneToJNullSerializer +
43-
QuantitiesSerializer + UnformattedDataJsonSerializer
44-
4537
it should "personal_importRawKey" in new JsonRpcControllerFixture {
4638
val key = "7a44789ed3cd85861c0bbf9693c7e1de1862dd4396c390147ecf1275099c6e6f"
4739
val keyBytes = ByteString(Hex.decode(key))

src/test/scala/io/iohk/ethereum/jsonrpc/JsonRpcControllerSpec.scala

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import monix.execution.Scheduler.Implicits.global
88

99
import scala.concurrent.duration._
1010

11-
import org.json4s.DefaultFormats
12-
import org.json4s.Formats
1311
import org.json4s.JArray
1412
import org.json4s.JObject
1513
import org.json4s.JString
@@ -28,9 +26,6 @@ import io.iohk.ethereum.jsonrpc.DebugService.ListPeersInfoResponse
2826
import io.iohk.ethereum.jsonrpc.NetService.ListeningResponse
2927
import io.iohk.ethereum.jsonrpc.NetService.PeerCountResponse
3028
import io.iohk.ethereum.jsonrpc.NetService.VersionResponse
31-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.OptionNoneToJNullSerializer
32-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.QuantitiesSerializer
33-
import io.iohk.ethereum.jsonrpc.serialization.JsonSerializers.UnformattedDataJsonSerializer
3429
import io.iohk.ethereum.jsonrpc.server.controllers.JsonRpcBaseController.JsonRpcConfig
3530
import io.iohk.ethereum.jsonrpc.server.http.JsonRpcHttpServer
3631
import io.iohk.ethereum.jsonrpc.server.ipc.JsonRpcIpcServer
@@ -50,9 +45,6 @@ class JsonRpcControllerSpec
5045
with LongPatience
5146
with Eventually {
5247

53-
implicit val formats: Formats = DefaultFormats.preservingEmptyValues + OptionNoneToJNullSerializer +
54-
QuantitiesSerializer + UnformattedDataJsonSerializer
55-
5648
"JsonRpcController" should "handle valid sha3 request" in new JsonRpcControllerFixture {
5749
val rpcRequest = newJsonRpcRequest("web3_sha3", JString("0x1234") :: Nil)
5850

0 commit comments

Comments
 (0)