@@ -330,14 +330,73 @@ struct command_result *route_sendpay_request(struct command *cmd,
330
330
struct route * route TAKES ,
331
331
struct payment * payment )
332
332
{
333
- struct out_req * req =
334
- jsonrpc_request_start (cmd , "sendpay" ,
335
- sendpay_done , sendpay_failed , route );
336
-
337
- json_add_route (req -> js , route , payment );
333
+ const struct payment_info * pinfo = & payment -> payment_info ;
334
+ struct out_req * req = jsonrpc_request_start (
335
+ cmd , "renesendpay" , sendpay_done , sendpay_failed , route );
336
+
337
+ const size_t pathlen = tal_count (route -> hops );
338
+ json_add_sha256 (req -> js , "payment_hash" , & pinfo -> payment_hash );
339
+ json_add_u64 (req -> js , "partid" , route -> key .partid );
340
+ json_add_u64 (req -> js , "groupid" , route -> key .groupid );
341
+ json_add_string (req -> js , "invoice" , pinfo -> invstr );
342
+ json_add_node_id (req -> js , "destination" , & pinfo -> destination );
343
+ json_add_amount_msat (req -> js , "amount_msat" , route -> amount_deliver );
344
+ json_add_amount_msat (req -> js , "total_amount_msat" , pinfo -> amount );
345
+ json_add_u32 (req -> js , "final_cltv" , pinfo -> final_cltv );
346
+
347
+ if (pinfo -> label )
348
+ json_add_string (req -> js , "label" , pinfo -> label );
349
+ if (pinfo -> description )
350
+ json_add_string (req -> js , "description" , pinfo -> description );
351
+
352
+ json_array_start (req -> js , "route" );
353
+ /* An empty route means a payment to oneself, pathlen=0 */
354
+ for (size_t j = 0 ; j < pathlen ; j ++ ) {
355
+ const struct route_hop * hop = & route -> hops [j ];
356
+ json_object_start (req -> js , NULL );
357
+ json_add_node_id (req -> js , "id" , & hop -> node_id );
358
+ json_add_short_channel_id (req -> js , "channel" , hop -> scid );
359
+ json_add_amount_msat (req -> js , "amount_msat" , hop -> amount );
360
+ json_add_num (req -> js , "direction" , hop -> direction );
361
+ json_add_u32 (req -> js , "delay" , hop -> delay );
362
+ json_add_string (req -> js , "style" , "tlv" );
363
+ json_object_end (req -> js );
364
+ }
365
+ json_array_end (req -> js );
366
+
367
+ /* Either we have a payment_secret for BOLT11 or blinded_paths for
368
+ * BOLT12 */
369
+ if (pinfo -> payment_secret )
370
+ json_add_secret (req -> js , "payment_secret" , pinfo -> payment_secret );
371
+ else {
372
+ assert (pinfo -> blinded_paths );
373
+ const struct blinded_path * bpath =
374
+ pinfo -> blinded_paths [route -> path_num ];
375
+
376
+ // FIXME: how can we support the case when the entry point is a
377
+ // scid?
378
+ assert (bpath -> first_node_id .is_pubkey );
379
+ json_object_start (req -> js , "blinded_path" );
380
+ json_add_pubkey (req -> js , "first_node_id" ,
381
+ & bpath -> first_node_id .pubkey );
382
+ json_add_pubkey (req -> js , "first_path_key" ,
383
+ & bpath -> first_path_key );
384
+ json_array_start (req -> js , "path" );
385
+ for (size_t i = 0 ; i < tal_count (bpath -> path ); i ++ ) {
386
+ const struct blinded_path_hop * hop = bpath -> path [i ];
387
+ json_object_start (req -> js , NULL );
388
+ json_add_pubkey (req -> js , "blinded_node_id" ,
389
+ & hop -> blinded_node_id );
390
+ json_add_hex_talarr (req -> js , "encrypted_recipient_data" ,
391
+ hop -> encrypted_recipient_data );
392
+ json_object_end (req -> js );
393
+ }
394
+ json_array_end (req -> js );
395
+ json_object_end (req -> js );
396
+ }
338
397
339
398
route_map_add (payment -> routetracker -> sent_routes , route );
340
- if (taken (route ))
399
+ if (taken (route ))
341
400
tal_steal (payment -> routetracker -> sent_routes , route );
342
401
return send_outreq (req );
343
402
}
0 commit comments