@@ -55,6 +55,7 @@ int usage()
5555 std::cerr << " get_block <slot_number> [options]" << std::endl;
5656 std::cerr << " get_product <prod_key> [options]" << std::endl;
5757 std::cerr << " get_product_list [options]" << std::endl;
58+ std::cerr << " get_all_products [options]" << std::endl;
5859 std::cerr << " get_pub_key <key_pair_file>" << std::endl;
5960 std::cerr << " version" << std::endl;
6061 std::cerr << std::endl;
@@ -74,6 +75,8 @@ int usage()
7475 std::cerr << " -j\n "
7576 << " Output results in json format where applicable\n "
7677 << std::endl;
78+ std::cerr << " -d" << std::endl;
79+ std::cerr << " Turn on debug logging\n " << std::endl;
7780 return 1 ;
7881}
7982
@@ -311,12 +314,13 @@ int on_get_balance( int argc, char **argv )
311314 commitment cmt = commitment::e_confirmed;
312315 std::string rpc_host = get_rpc_host ();
313316 std::string key_dir = get_key_store ();
314- while ( (opt = ::getopt (argc,argv, " r:k:p:c:h " )) != -1 ) {
317+ while ( (opt = ::getopt (argc,argv, " r:k:p:c:dh " )) != -1 ) {
315318 switch (opt) {
316319 case ' r' : rpc_host = optarg; break ;
317320 case ' k' : key_dir = optarg; break ;
318321 case ' p' : knm = optarg; break ;
319322 case ' c' : cmt = str_to_commitment (optarg); break ;
323+ case ' d' : log::set_level ( PC_LOG_DBG_LVL ); break ;
320324 default : return usage ();
321325 }
322326 }
@@ -1011,6 +1015,11 @@ int on_get_product_list( int argc, char **argv )
10111015 std::cerr << " pyth: " << mgr.get_err_msg () << std::endl;
10121016 return 1 ;
10131017 }
1018+ if ( !mgr.has_status ( PC_PYTH_HAS_MAPPING ) ) {
1019+ std::cerr << " pyth: mapping not ready, check mapping key ["
1020+ << mgr.get_mapping_pub_key_file () << " ]" << std::endl;
1021+ return 1 ;
1022+ }
10141023 // list key/symbol pairs
10151024 if ( !do_json ) {
10161025 std::string astr;
@@ -1203,6 +1212,11 @@ int on_get_product( int argc, char **argv )
12031212 std::cerr << " pyth: " << mgr.get_err_msg () << std::endl;
12041213 return 1 ;
12051214 }
1215+ if ( !mgr.has_status ( PC_PYTH_HAS_MAPPING ) ) {
1216+ std::cerr << " pyth: mapping not ready, check mapping key ["
1217+ << mgr.get_mapping_pub_key_file () << " ]" << std::endl;
1218+ return 1 ;
1219+ }
12061220 // get product and serialize to stdout
12071221 product *prod = mgr.get_product ( pub );
12081222 if ( !prod ) {
@@ -1217,6 +1231,68 @@ int on_get_product( int argc, char **argv )
12171231 return 0 ;
12181232}
12191233
1234+ int on_get_all_products ( int argc, char **argv )
1235+ {
1236+ int opt = 0 ;
1237+ bool do_json = false ;
1238+ commitment cmt = commitment::e_confirmed;
1239+ std::string rpc_host = get_rpc_host ();
1240+ std::string key_dir = get_key_store ();
1241+ while ( (opt = ::getopt (argc,argv, " r:k:c:djh" )) != -1 ) {
1242+ switch (opt) {
1243+ case ' r' : rpc_host = optarg; break ;
1244+ case ' k' : key_dir = optarg; break ;
1245+ case ' d' : log::set_level ( PC_LOG_DBG_LVL ); break ;
1246+ case ' j' : do_json = true ; break ;
1247+ case ' c' : cmt = str_to_commitment (optarg); break ;
1248+ default : return usage ();
1249+ }
1250+ }
1251+ if ( cmt == commitment::e_unknown ) {
1252+ std::cerr << " pyth: unknown commitment level" << std::endl;
1253+ return usage ();
1254+ }
1255+
1256+ // initialize connection to block-chain
1257+ manager mgr;
1258+ mgr.set_rpc_host ( rpc_host );
1259+ mgr.set_dir ( key_dir );
1260+ mgr.set_do_tx ( false );
1261+ mgr.set_commitment ( cmt );
1262+ if ( !mgr.init () || !mgr.bootstrap () ) {
1263+ std::cerr << " pyth: " << mgr.get_err_msg () << std::endl;
1264+ return 1 ;
1265+ }
1266+ if ( !mgr.has_status ( PC_PYTH_HAS_MAPPING ) ) {
1267+ std::cerr << " pyth: mapping not ready, check mapping key ["
1268+ << mgr.get_mapping_pub_key_file () << " ]" << std::endl;
1269+ return 1 ;
1270+ }
1271+
1272+ // get all products and serialize to stdout
1273+ if ( !do_json ) {
1274+ for (unsigned i=0 ; i != mgr.get_num_product (); ++i ) {
1275+ product *prod = mgr.get_product (i);
1276+ print_product ( prod );
1277+ std::cout << std::endl;
1278+ }
1279+ } else {
1280+ std::cout << " [" ;
1281+ bool first = true ;
1282+ for (unsigned i=0 ; i != mgr.get_num_product (); ++i ) {
1283+ product *prod = mgr.get_product (i);
1284+ if ( !first ) {
1285+ std::cout << " ," ;
1286+ }
1287+ print_product_json ( prod );
1288+ first = false ;
1289+ }
1290+ std::cout << " ]" ;
1291+ }
1292+
1293+ return 0 ;
1294+ }
1295+
12201296class get_block_print : public get_block
12211297{
12221298public:
@@ -1434,6 +1510,8 @@ int main(int argc, char **argv)
14341510 rc = on_get_product ( argc, argv );
14351511 } else if ( cmd == " get_product_list" ) {
14361512 rc = on_get_product_list ( argc, argv );
1513+ } else if ( cmd == " get_all_products" ) {
1514+ rc = on_get_all_products ( argc, argv );
14371515 } else if ( cmd == " get_block" ) {
14381516 rc = on_get_block ( argc, argv );
14391517 } else if ( cmd == " version" ) {
0 commit comments