@@ -49,6 +49,8 @@ int usage()
49
49
std::cerr << " upd_product <product.json> [options]" << std::endl;
50
50
std::cerr << " upd_price <price_key> [options]"
51
51
<< std::endl;
52
+ std::cerr << " upd_price_val <price_key> <value> <confidence> <status> [options]"
53
+ << std::endl;
52
54
std::cerr << " upd_test <test_key> <test.json> [options]"
53
55
<< std::endl;
54
56
std::cerr << " get_balance [<pub_key>] [options]" << std::endl;
@@ -804,9 +806,12 @@ int on_upd_price( int argc, char **argv )
804
806
if ( argc < 2 ) {
805
807
return usage ();
806
808
}
809
+
810
+ // Price Key
807
811
std::string pkey ( argv[1 ] );
808
812
pub_key pub;
809
813
pub.init_from_text ( pkey );
814
+
810
815
argc -= 1 ;
811
816
argv += 1 ;
812
817
@@ -866,6 +871,91 @@ int on_upd_price( int argc, char **argv )
866
871
return 0 ;
867
872
}
868
873
874
+ int on_upd_price_val ( int argc, char **argv )
875
+ {
876
+ if ( argc < 5 ) {
877
+ return usage ();
878
+ }
879
+
880
+ // Price Key
881
+ std::string pkey ( argv[1 ] );
882
+ pub_key pub;
883
+ pub.init_from_text ( pkey );
884
+
885
+ // Price Value
886
+ uint64_t price_value = atoll ( argv[2 ] );
887
+
888
+ // Confidence
889
+ uint64_t confidence = atoll ( argv[3 ] );
890
+
891
+ // Status
892
+ symbol_status price_status = str_to_symbol_status ( argv[4 ] );
893
+
894
+ // Make sure an unknown status was requested explicitly
895
+ if ( price_status == symbol_status::e_unknown && argv[4 ] != std::string (" unknown" ) ) {
896
+ std::cerr << " pyth: unrecognized symbol status " << ' "' << argv[4 ] << ' "' << std::endl;
897
+ return 1 ;
898
+ }
899
+
900
+ argc -= 4 ;
901
+ argv += 4 ;
902
+
903
+ int opt = 0 ;
904
+ commitment cmt = commitment::e_confirmed;
905
+ std::string rpc_host = get_rpc_host ();
906
+ std::string tx_host = get_rpc_host ();
907
+ std::string key_dir = get_key_store ();
908
+ while ( (opt = ::getopt (argc,argv, " r:t:k:c:dh" )) != -1 ) {
909
+ switch (opt) {
910
+ case ' r' : rpc_host = optarg ; break ;
911
+ case ' t' : tx_host = optarg ; break ;
912
+ case ' k' : key_dir = optarg ; break ;
913
+ case ' d' : log ::set_level ( PC_LOG_DBG_LVL ); break ;
914
+ case ' c' : cmt = str_to_commitment (optarg ); break ;
915
+ default : return usage ();
916
+ }
917
+ }
918
+ if ( cmt == commitment::e_unknown ) {
919
+ std::cerr << " pyth: unknown commitment level" << std::endl;
920
+ return usage ();
921
+ }
922
+
923
+ // initialize connection to block-chain
924
+ manager mgr;
925
+ mgr.set_rpc_host ( rpc_host );
926
+ mgr.set_tx_host ( tx_host );
927
+ mgr.set_dir ( key_dir );
928
+ mgr.set_do_tx ( true );
929
+ mgr.set_commitment ( cmt );
930
+ if ( !mgr.init () || !mgr.bootstrap () ) {
931
+ std::cerr << " pyth: " << mgr.get_err_msg () << std::endl;
932
+ return 1 ;
933
+ }
934
+ // get price and crank
935
+ price *ptr = mgr.get_price ( pub );
936
+ if ( !ptr ) {
937
+ std::cerr << " pyth: failed to find price key=" << pkey << std::endl;
938
+ return 1 ;
939
+ }
940
+ if ( !ptr->has_publisher () ) {
941
+ std::cerr << " pyth: missing publisher permission" << std::endl;
942
+ return 1 ;
943
+ }
944
+ ptr->update (price_value, confidence, price_status);
945
+ while ( mgr.get_is_tx_send () && !mgr.get_is_err () ) {
946
+ mgr.poll ();
947
+ }
948
+ if ( ptr->get_is_err () ) {
949
+ std::cerr << " pyth: " << ptr->get_err_msg () << std::endl;
950
+ return 1 ;
951
+ }
952
+ if ( mgr.get_is_err () ) {
953
+ std::cerr << " pyth: " << mgr.get_err_msg () << std::endl;
954
+ return 1 ;
955
+ }
956
+ return 0 ;
957
+ }
958
+
869
959
int on_upd_publisher ( int argc, char **argv, bool is_add )
870
960
{
871
961
// get input parameters
@@ -1502,6 +1592,8 @@ int main(int argc, char **argv)
1502
1592
rc = on_upd_product ( argc, argv );
1503
1593
} else if ( cmd == " upd_price" ) {
1504
1594
rc = on_upd_price ( argc, argv );
1595
+ } else if ( cmd == " upd_price_val" ) {
1596
+ rc = on_upd_price_val ( argc, argv );
1505
1597
} else if ( cmd == " upd_test" ) {
1506
1598
rc = on_upd_test ( argc, argv );
1507
1599
} else if ( cmd == " get_pub_key" ) {
0 commit comments