@@ -520,7 +520,7 @@ static uint64_t upd_price( SolParameters *prm, SolAccountInfo *ka )
520
520
// reject if this price corresponds to the same or earlier time
521
521
pc_price_info_t * fptr = & pptr -> comp_ [i ].latest_ ;
522
522
sysvar_clock_t * sptr = (sysvar_clock_t * )ka [clock_idx ].data ;
523
- if ( cptr -> cmd_ == e_cmd_upd_price &&
523
+ if ( ( cptr -> cmd_ == e_cmd_upd_price || cptr -> cmd_ == e_cmd_upd_price_no_fail_on_error ) &&
524
524
cptr -> pub_slot_ <= fptr -> pub_slot_ ) {
525
525
return ERROR_INVALID_ARGUMENT ;
526
526
}
@@ -531,7 +531,7 @@ static uint64_t upd_price( SolParameters *prm, SolAccountInfo *ka )
531
531
}
532
532
533
533
// update component price if required
534
- if ( cptr -> cmd_ == e_cmd_upd_price ) {
534
+ if ( cptr -> cmd_ == e_cmd_upd_price || cptr -> cmd_ == e_cmd_upd_price_no_fail_on_error ) {
535
535
fptr -> price_ = cptr -> price_ ;
536
536
fptr -> conf_ = cptr -> conf_ ;
537
537
fptr -> status_ = cptr -> status_ ;
@@ -540,6 +540,12 @@ static uint64_t upd_price( SolParameters *prm, SolAccountInfo *ka )
540
540
return SUCCESS ;
541
541
}
542
542
543
+ static uint64_t upd_price_no_fail_on_error ( SolParameters * prm , SolAccountInfo * ka )
544
+ {
545
+ upd_price ( prm , ka );
546
+ return SUCCESS ;
547
+ }
548
+
543
549
static uint64_t dispatch ( SolParameters * prm , SolAccountInfo * ka )
544
550
{
545
551
if (prm -> data_len < sizeof (cmd_hdr_t ) ) {
@@ -551,19 +557,20 @@ static uint64_t dispatch( SolParameters *prm, SolAccountInfo *ka )
551
557
}
552
558
switch (hdr -> cmd_ ) {
553
559
case e_cmd_upd_price :
554
- case e_cmd_agg_price : return upd_price ( prm , ka );
555
- case e_cmd_init_mapping : return init_mapping ( prm , ka );
556
- case e_cmd_add_mapping : return add_mapping ( prm , ka );
557
- case e_cmd_add_product : return add_product ( prm , ka );
558
- case e_cmd_upd_product : return upd_product ( prm , ka );
559
- case e_cmd_add_price : return add_price ( prm , ka );
560
- case e_cmd_add_publisher : return add_publisher ( prm , ka );
561
- case e_cmd_del_publisher : return del_publisher ( prm , ka );
562
- case e_cmd_init_price : return init_price ( prm , ka );
563
- case e_cmd_init_test : return init_test ( prm , ka );
564
- case e_cmd_upd_test : return upd_test ( prm , ka );
565
- case e_cmd_set_min_pub : return set_min_pub ( prm , ka );
566
- default : return ERROR_INVALID_ARGUMENT ;
560
+ case e_cmd_agg_price : return upd_price ( prm , ka );
561
+ case e_cmd_upd_price_no_fail_on_error : return upd_price_no_fail_on_error ( prm , ka );
562
+ case e_cmd_init_mapping : return init_mapping ( prm , ka );
563
+ case e_cmd_add_mapping : return add_mapping ( prm , ka );
564
+ case e_cmd_add_product : return add_product ( prm , ka );
565
+ case e_cmd_upd_product : return upd_product ( prm , ka );
566
+ case e_cmd_add_price : return add_price ( prm , ka );
567
+ case e_cmd_add_publisher : return add_publisher ( prm , ka );
568
+ case e_cmd_del_publisher : return del_publisher ( prm , ka );
569
+ case e_cmd_init_price : return init_price ( prm , ka );
570
+ case e_cmd_init_test : return init_test ( prm , ka );
571
+ case e_cmd_upd_test : return upd_test ( prm , ka );
572
+ case e_cmd_set_min_pub : return set_min_pub ( prm , ka );
573
+ default : return ERROR_INVALID_ARGUMENT ;
567
574
}
568
575
}
569
576
0 commit comments