@@ -18,16 +18,17 @@ import io.iohk.ethereum.network.p2p.messages.WireProtocol.Hello._
18
18
import io .iohk .ethereum .network .p2p .messages .WireProtocol .Ping ._
19
19
import io .iohk .ethereum .network .p2p .messages .WireProtocol .Pong ._
20
20
import io .iohk .ethereum .network .p2p .messages .WireProtocol ._
21
+ import scala .util .Try
21
22
22
23
object NetworkMessageDecoder extends MessageDecoder {
23
24
24
- override def fromBytes (msgCode : Int , payload : Array [Byte ]): Message =
25
+ override def fromBytes (msgCode : Int , payload : Array [Byte ]): Either [ DecodingError , Message ] =
25
26
msgCode match {
26
- case Disconnect .code => payload.toDisconnect
27
- case Ping .code => payload.toPing
28
- case Pong .code => payload.toPong
29
- case Hello .code => payload.toHello
30
- case _ => throw new RuntimeException (s " Unknown network message type: $msgCode" )
27
+ case Disconnect .code => Try ( payload.toDisconnect).toEither
28
+ case Ping .code => Try ( payload.toPing).toEither
29
+ case Pong .code => Try ( payload.toPong).toEither
30
+ case Hello .code => Try ( payload.toHello).toEither
31
+ case _ => Left ( new RuntimeException (s " Unknown network message type: $msgCode" ) )
31
32
}
32
33
33
34
}
@@ -36,68 +37,68 @@ object ETC64MessageDecoder extends MessageDecoder {
36
37
import io .iohk .ethereum .network .p2p .messages .ETC64 .Status ._
37
38
import io .iohk .ethereum .network .p2p .messages .ETC64 .NewBlock ._
38
39
39
- def fromBytes (msgCode : Int , payload : Array [Byte ]): Message =
40
+ def fromBytes (msgCode : Int , payload : Array [Byte ]): Either [ DecodingError , Message ] =
40
41
msgCode match {
41
- case Codes .StatusCode => payload.toStatus
42
- case Codes .NewBlockCode => payload.toNewBlock
43
- case Codes .GetNodeDataCode => payload.toGetNodeData
44
- case Codes .NodeDataCode => payload.toNodeData
45
- case Codes .GetReceiptsCode => payload.toGetReceipts
46
- case Codes .ReceiptsCode => payload.toReceipts
47
- case Codes .NewBlockHashesCode => payload.toNewBlockHashes
48
- case Codes .GetBlockHeadersCode => payload.toGetBlockHeaders
49
- case Codes .BlockHeadersCode => payload.toBlockHeaders
50
- case Codes .GetBlockBodiesCode => payload.toGetBlockBodies
51
- case Codes .BlockBodiesCode => payload.toBlockBodies
52
- case Codes .BlockHashesFromNumberCode => payload.toBlockHashesFromNumber
53
- case Codes .SignedTransactionsCode => payload.toSignedTransactions
54
- case _ => throw new RuntimeException (s " Unknown etc/64 message type: $msgCode" )
42
+ case Codes .StatusCode => Try ( payload.toStatus).toEither
43
+ case Codes .NewBlockCode => Try ( payload.toNewBlock).toEither
44
+ case Codes .GetNodeDataCode => Try ( payload.toGetNodeData).toEither
45
+ case Codes .NodeDataCode => Try ( payload.toNodeData).toEither
46
+ case Codes .GetReceiptsCode => Try ( payload.toGetReceipts).toEither
47
+ case Codes .ReceiptsCode => Try ( payload.toReceipts).toEither
48
+ case Codes .NewBlockHashesCode => Try ( payload.toNewBlockHashes).toEither
49
+ case Codes .GetBlockHeadersCode => Try ( payload.toGetBlockHeaders).toEither
50
+ case Codes .BlockHeadersCode => Try ( payload.toBlockHeaders).toEither
51
+ case Codes .GetBlockBodiesCode => Try ( payload.toGetBlockBodies).toEither
52
+ case Codes .BlockBodiesCode => Try ( payload.toBlockBodies).toEither
53
+ case Codes .BlockHashesFromNumberCode => Try ( payload.toBlockHashesFromNumber).toEither
54
+ case Codes .SignedTransactionsCode => Try ( payload.toSignedTransactions).toEither
55
+ case _ => Left ( new RuntimeException (s " Unknown etc/64 message type: $msgCode" ) )
55
56
}
56
57
}
57
58
58
59
object ETH64MessageDecoder extends MessageDecoder {
59
60
import io .iohk .ethereum .network .p2p .messages .ETH64 .Status ._
60
61
import io .iohk .ethereum .network .p2p .messages .BaseETH6XMessages .NewBlock ._
61
62
62
- def fromBytes (msgCode : Int , payload : Array [Byte ]): Message =
63
+ def fromBytes (msgCode : Int , payload : Array [Byte ]): Either [ DecodingError , Message ] =
63
64
msgCode match {
64
- case Codes .GetNodeDataCode => payload.toGetNodeData
65
- case Codes .NodeDataCode => payload.toNodeData
66
- case Codes .GetReceiptsCode => payload.toGetReceipts
67
- case Codes .ReceiptsCode => payload.toReceipts
68
- case Codes .NewBlockHashesCode => payload.toNewBlockHashes
69
- case Codes .GetBlockHeadersCode => payload.toGetBlockHeaders
70
- case Codes .BlockHeadersCode => payload.toBlockHeaders
71
- case Codes .GetBlockBodiesCode => payload.toGetBlockBodies
72
- case Codes .BlockBodiesCode => payload.toBlockBodies
73
- case Codes .BlockHashesFromNumberCode => payload.toBlockHashesFromNumber
74
- case Codes .StatusCode => payload.toStatus
75
- case Codes .NewBlockCode => payload.toNewBlock
76
- case Codes .SignedTransactionsCode => payload.toSignedTransactions
77
- case _ => throw new RuntimeException (s " Unknown eth/64 message type: $msgCode" )
65
+ case Codes .GetNodeDataCode => Try ( payload.toGetNodeData).toEither
66
+ case Codes .NodeDataCode => Try ( payload.toNodeData).toEither
67
+ case Codes .GetReceiptsCode => Try ( payload.toGetReceipts).toEither
68
+ case Codes .ReceiptsCode => Try ( payload.toReceipts).toEither
69
+ case Codes .NewBlockHashesCode => Try ( payload.toNewBlockHashes).toEither
70
+ case Codes .GetBlockHeadersCode => Try ( payload.toGetBlockHeaders).toEither
71
+ case Codes .BlockHeadersCode => Try ( payload.toBlockHeaders).toEither
72
+ case Codes .GetBlockBodiesCode => Try ( payload.toGetBlockBodies).toEither
73
+ case Codes .BlockBodiesCode => Try ( payload.toBlockBodies).toEither
74
+ case Codes .BlockHashesFromNumberCode => Try ( payload.toBlockHashesFromNumber).toEither
75
+ case Codes .StatusCode => Try ( payload.toStatus).toEither
76
+ case Codes .NewBlockCode => Try ( payload.toNewBlock).toEither
77
+ case Codes .SignedTransactionsCode => Try ( payload.toSignedTransactions).toEither
78
+ case _ => Left ( new RuntimeException (s " Unknown eth/64 message type: $msgCode" ) )
78
79
}
79
80
}
80
81
81
82
object ETH63MessageDecoder extends MessageDecoder {
82
83
import io .iohk .ethereum .network .p2p .messages .BaseETH6XMessages .Status ._
83
84
import io .iohk .ethereum .network .p2p .messages .BaseETH6XMessages .NewBlock ._
84
85
85
- def fromBytes (msgCode : Int , payload : Array [Byte ]): Message =
86
+ def fromBytes (msgCode : Int , payload : Array [Byte ]): Either [ DecodingError , Message ] =
86
87
msgCode match {
87
- case Codes .GetNodeDataCode => payload.toGetNodeData
88
- case Codes .NodeDataCode => payload.toNodeData
89
- case Codes .GetReceiptsCode => payload.toGetReceipts
90
- case Codes .ReceiptsCode => payload.toReceipts
91
- case Codes .NewBlockHashesCode => payload.toNewBlockHashes
92
- case Codes .GetBlockHeadersCode => payload.toGetBlockHeaders
93
- case Codes .BlockHeadersCode => payload.toBlockHeaders
94
- case Codes .GetBlockBodiesCode => payload.toGetBlockBodies
95
- case Codes .BlockBodiesCode => payload.toBlockBodies
96
- case Codes .BlockHashesFromNumberCode => payload.toBlockHashesFromNumber
97
- case Codes .StatusCode => payload.toStatus
98
- case Codes .NewBlockCode => payload.toNewBlock
99
- case Codes .SignedTransactionsCode => payload.toSignedTransactions
100
- case _ => throw new RuntimeException (s " Unknown eth/63 message type: $msgCode" )
88
+ case Codes .GetNodeDataCode => Try ( payload.toGetNodeData).toEither
89
+ case Codes .NodeDataCode => Try ( payload.toNodeData).toEither
90
+ case Codes .GetReceiptsCode => Try ( payload.toGetReceipts).toEither
91
+ case Codes .ReceiptsCode => Try ( payload.toReceipts).toEither
92
+ case Codes .NewBlockHashesCode => Try ( payload.toNewBlockHashes).toEither
93
+ case Codes .GetBlockHeadersCode => Try ( payload.toGetBlockHeaders).toEither
94
+ case Codes .BlockHeadersCode => Try ( payload.toBlockHeaders).toEither
95
+ case Codes .GetBlockBodiesCode => Try ( payload.toGetBlockBodies).toEither
96
+ case Codes .BlockBodiesCode => Try ( payload.toBlockBodies).toEither
97
+ case Codes .BlockHashesFromNumberCode => Try ( payload.toBlockHashesFromNumber).toEither
98
+ case Codes .StatusCode => Try ( payload.toStatus).toEither
99
+ case Codes .NewBlockCode => Try ( payload.toNewBlock).toEither
100
+ case Codes .SignedTransactionsCode => Try ( payload.toSignedTransactions).toEither
101
+ case _ => Left ( new RuntimeException (s " Unknown eth/63 message type: $msgCode" ) )
101
102
}
102
103
}
103
104
0 commit comments