@@ -86,6 +86,41 @@ pub fn on_subscription_msg(msg: Message, _out: Sender, result: ThreadOut<String>
86
86
} ;
87
87
Ok ( ( ) )
88
88
}
89
+ pub fn on_extrinsic_msg_until_in_block (
90
+ msg : Message ,
91
+ out : Sender ,
92
+ result : ThreadOut < String > ,
93
+ ) -> Result < ( ) > {
94
+ let retstr = msg. as_text ( ) . unwrap ( ) ;
95
+ debug ! ( "got msg {}" , retstr) ;
96
+ match parse_status ( retstr) {
97
+ ( XtStatus :: Finalized , val) => end_process ( out, result, val) ,
98
+ ( XtStatus :: InBlock , val) => end_process ( out, result, val) ,
99
+ ( XtStatus :: Future , _) => end_process ( out, result, None ) ,
100
+ ( XtStatus :: Error , _) => end_process ( out, result, None ) ,
101
+ _ => ( ) ,
102
+ } ;
103
+ Ok ( ( ) )
104
+ }
105
+
106
+
107
+ pub fn on_extrinsic_msg_until_broadcast (
108
+ msg : Message ,
109
+ out : Sender ,
110
+ result : ThreadOut < String > ,
111
+ ) -> Result < ( ) > {
112
+ let retstr = msg. as_text ( ) . unwrap ( ) ;
113
+ debug ! ( "got msg {}" , retstr) ;
114
+ match parse_status ( retstr) {
115
+ ( XtStatus :: Finalized , val) => end_process ( out, result, val) ,
116
+ ( XtStatus :: Broadcast , _) => end_process ( out, result, None ) ,
117
+ ( XtStatus :: Future , _) => end_process ( out, result, None ) ,
118
+ ( XtStatus :: Error , _) => end_process ( out, result, None ) ,
119
+ _ => ( ) ,
120
+ } ;
121
+ Ok ( ( ) )
122
+ }
123
+
89
124
90
125
pub fn on_extrinsic_msg_until_finalized (
91
126
msg : Message ,
@@ -96,7 +131,7 @@ pub fn on_extrinsic_msg_until_finalized(
96
131
debug ! ( "got msg {}" , retstr) ;
97
132
match parse_status ( retstr) {
98
133
( XtStatus :: Finalized , val) => end_process ( out, result, val) ,
99
- ( XtStatus :: Error , e ) => end_process ( out, result, e ) ,
134
+ ( XtStatus :: Error , _ ) => end_process ( out, result, None ) ,
100
135
( XtStatus :: Future , _) => {
101
136
warn ! ( "extrinsic has 'future' status. aborting" ) ;
102
137
end_process ( out, result, None ) ;
@@ -116,23 +151,16 @@ pub fn on_extrinsic_msg_until_ready(
116
151
match parse_status ( retstr) {
117
152
( XtStatus :: Finalized , val) => end_process ( out, result, val) ,
118
153
( XtStatus :: Ready , _) => end_process ( out, result, None ) ,
119
- ( XtStatus :: InBlock , _) => end_process ( out, result, None ) ,
120
- ( XtStatus :: Broadcast , _) => end_process ( out, result, None ) ,
121
154
( XtStatus :: Future , _) => end_process ( out, result, None ) ,
122
- ( XtStatus :: Error , e ) => end_process ( out, result, e ) ,
155
+ ( XtStatus :: Error , _ ) => end_process ( out, result, None ) ,
123
156
_ => ( ) ,
124
157
} ;
125
158
Ok ( ( ) )
126
159
}
127
160
128
161
fn end_process ( out : Sender , result : ThreadOut < String > , value : Option < String > ) {
129
162
// return result to calling thread
130
- debug ! (
131
- "Thread end result :{:?} value:{:?}" ,
132
- result. clone( ) ,
133
- value. clone( )
134
- ) ;
135
- let val = value. unwrap ( ) ;
163
+ let val = value. unwrap_or_else ( || "nix" . to_string ( ) ) ;
136
164
result. send ( val) . unwrap ( ) ;
137
165
out. close ( CloseCode :: Normal ) . unwrap ( ) ;
138
166
}
@@ -141,13 +169,12 @@ fn parse_status(msg: &str) -> (XtStatus, Option<String>) {
141
169
let value: serde_json:: Value = serde_json:: from_str ( msg) . unwrap ( ) ;
142
170
match value[ "error" ] . as_object ( ) {
143
171
Some ( obj) => {
144
- let error_message = obj. get ( "message" ) . unwrap ( ) . as_str ( ) . unwrap ( ) . to_owned ( ) ;
145
172
error ! (
146
173
"extrinsic error code {}: {}" ,
147
174
obj. get( "code" ) . unwrap( ) . as_u64( ) . unwrap( ) ,
148
- error_message . clone ( )
175
+ obj . get ( "message" ) . unwrap ( ) . as_str ( ) . unwrap ( )
149
176
) ;
150
- ( XtStatus :: Error , Some ( error_message ) )
177
+ ( XtStatus :: Error , None )
151
178
}
152
179
None => match value[ "params" ] [ "result" ] . as_object ( ) {
153
180
Some ( obj) => {
@@ -156,7 +183,11 @@ fn parse_status(msg: &str) -> (XtStatus, Option<String>) {
156
183
( XtStatus :: Finalized , Some ( hash. to_string ( ) ) )
157
184
}
158
185
else if let Some ( hash) = obj. get ( "inBlock" ) {
159
- info ! ( "inBlock: {:?}" , hash) ;
186
+ info ! ( "InBlock: {:?}" , hash) ;
187
+ ( XtStatus :: InBlock , Some ( hash. to_string ( ) ) )
188
+ }
189
+ else if let Some ( hash) = obj. get ( "broadcast" ) {
190
+ info ! ( "Broadcast: {:?}" , hash) ;
160
191
( XtStatus :: InBlock , Some ( hash. to_string ( ) ) )
161
192
}
162
193
else {
@@ -201,7 +232,15 @@ mod tests {
201
232
assert_eq ! ( parse_status( msg) , ( XtStatus :: Future , None ) ) ;
202
233
203
234
let msg = "{\" jsonrpc\" :\" 2.0\" ,\" method\" :\" author_extrinsicUpdate\" ,\" params\" :{\" result\" :{\" broadcast\" :[\" QmfSF4VYWNqNf5KYHpDEdY8Rt1nPUgSkMweDkYzhSWirGY\" ,\" Qmchhx9SRFeNvqjUK4ZVQ9jH4zhARFkutf9KhbbAmZWBLx\" ,\" QmQJAqr98EF1X3YfjVKNwQUG9RryqX4Hv33RqGChbz3Ncg\" ]},\" subscription\" :232}}" ;
204
- assert_eq ! ( parse_status( msg) , ( XtStatus :: Broadcast , None ) ) ;
235
+ assert_eq ! (
236
+ parse_status( msg) , (
237
+ XtStatus :: Broadcast ,
238
+ Some (
239
+ "[\" QmfSF4VYWNqNf5KYHpDEdY8Rt1nPUgSkMweDkYzhSWirGY\" ,\" Qmchhx9SRFeNvqjUK4ZVQ9jH4zhARFkutf9KhbbAmZWBLx\" ,\" QmQJAqr98EF1X3YfjVKNwQUG9RryqX4Hv33RqGChbz3Ncg\" ]"
240
+ . to_string( )
241
+ )
242
+ )
243
+ ) ;
205
244
206
245
let msg = "{\" jsonrpc\" :\" 2.0\" ,\" method\" :\" author_extrinsicUpdate\" ,\" params\" :{\" result\" :{\" inBlock\" :\" 0x3104d362365ff5ddb61845e1de441b56c6722e94c1aee362f8aa8ba75bd7a3aa\" },\" subscription\" :232}}" ;
207
246
assert_eq ! (
@@ -215,15 +254,12 @@ mod tests {
215
254
) ;
216
255
217
256
let msg = "{\" jsonrpc\" :\" 2.0\" ,\" error\" :{\" code\" :-32700,\" message\" :\" Parse error\" },\" id\" :null}" ;
218
- assert_eq ! ( parse_status( msg) , ( XtStatus :: Error , Some ( "Parse error" . into ( ) ) ) ) ;
257
+ assert_eq ! ( parse_status( msg) , ( XtStatus :: Error , None ) ) ;
219
258
220
259
let msg = "{\" jsonrpc\" :\" 2.0\" ,\" error\" :{\" code\" :1010,\" message\" :\" Invalid Transaction\" ,\" data\" :0},\" id\" :\" 4\" }" ;
221
- assert_eq ! ( parse_status( msg) , ( XtStatus :: Error , Some ( "Invalid Transaction" . into ( ) ) ) ) ;
260
+ assert_eq ! ( parse_status( msg) , ( XtStatus :: Error , None ) ) ;
222
261
223
262
let msg = "{\" jsonrpc\" :\" 2.0\" ,\" error\" :{\" code\" :1001,\" message\" :\" Extrinsic has invalid format.\" },\" id\" :\" 0\" }" ;
224
- assert_eq ! ( parse_status( msg) , ( XtStatus :: Error , Some ( "Extrinsic has invalid format." . into( ) ) ) ) ;
225
-
226
- let msg = r#"{"jsonrpc":"2.0","error":{"code":1002,"message":"Verification Error: Execution(Wasmi(Trap(Trap { kind: Unreachable })))","data":"RuntimeApi(\"Execution(Wasmi(Trap(Trap { kind: Unreachable })))\")"},"id":"3"}"# ;
227
- assert_eq ! ( parse_status( msg) , ( XtStatus :: Error , Some ( "Verification Error: Execution(Wasmi(Trap(Trap { kind: Unreachable })))" . into( ) ) ) ) ;
263
+ assert_eq ! ( parse_status( msg) , ( XtStatus :: Error , None ) ) ;
228
264
}
229
265
}
0 commit comments