diff --git a/dap_chain_net_srv_vpn.c b/dap_chain_net_srv_vpn.c
index 1ce31d88af8727e27530b5b93f9dea3227e4f09f..f6daed8e1afc1d80f58f34ffcdef819ef3de3510 100755
--- a/dap_chain_net_srv_vpn.c
+++ b/dap_chain_net_srv_vpn.c
@@ -158,7 +158,104 @@ int dap_chain_net_srv_vpn_init(dap_config_t * g_config)
                 srv_ch_sf_packet_out);
 
         dap_chain_net_srv_uid_t l_uid = { .uint64 = DAP_CHAIN_NET_SRV_VPN_ID };
-        dap_chain_net_srv_add( l_uid, s_callback_request_after);
+        dap_chain_net_srv_t* l_srv = dap_chain_net_srv_add( l_uid, s_callback_request_after);
+
+        uint16_t l_pricelist_count = 0;
+        char ** l_pricelist = dap_config_get_array_str(g_config,"srv_vpn","pricelist", &l_pricelist_count );
+        for ( uint16_t i = 0; i < l_pricelist_count; i++ ){
+            char * l_price_str = l_pricelist[i];
+            size_t l_price_length = strlen(l_price_str);
+            size_t l_iter = 0;
+            char * l_pos_old = l_price_str;
+            dap_chain_net_srv_price_t *l_price = DAP_NEW_Z(dap_chain_net_srv_price_t);
+            for (char * l_pos = index(l_price_str,':');  ;  l_pos = index(l_pos+1,':') ){
+                if( l_iter == 0)
+                    break;
+
+                size_t l_parse_token_size =  l_pos?(size_t) (l_pos - l_pos_old)-1: l_price_length- (size_t)(l_pos_old - l_pricelist[i]) ;
+                char * l_parse_token = strndup(l_pos_old, l_parse_token_size);
+                if( l_parse_token_size ==0 ){
+                    log_it(L_ERROR, "Wrong price element size nil");
+                    DAP_DELETE(l_parse_token);
+                    break;
+                }
+                if ( l_iter == 0){
+                    l_price->net_name = strdup(l_parse_token);
+
+                    l_price->net = dap_chain_net_by_name( l_price->net_name);
+                    if( ! l_price->net ){
+                        log_it(L_ERROR, "Error parse pricelist: can't find network \"%s\"", l_price->net_name);
+                        DAP_DELETE( l_price->net);
+                        DAP_DELETE(l_price);
+                        DAP_DELETE(l_parse_token);
+                        break;
+                    }
+                }else if (l_iter == 1){
+                    l_price->value_coins = atof( l_parse_token);
+                    l_price->value_datoshi =(uint64_t) dap_chain_coins_to_balance((long double)l_price->value_coins);
+                    if ( ! l_price->value_datoshi ){
+                        log_it(L_ERROR, "Error parse pricelist: text on 2nd position \"%s\" is not floating number", l_parse_token);
+                        DAP_DELETE( l_price->net);
+                        DAP_DELETE(l_price);
+                        DAP_DELETE(l_parse_token);
+                        break;
+                    }
+                }else if (l_iter == 2){
+                    strncpy( l_price->token, l_parse_token, sizeof (l_price->token)-1);
+
+                }else if (l_iter == 3){
+                    l_price->units = strtoul( l_parse_token,NULL,10);
+                    if ( !l_price->units ){
+                        log_it(L_ERROR, "Error parse pricelist: text on 4th position \"%s\" is not unsigned integer", l_parse_token);
+                        DAP_DELETE( l_price->net);
+                        DAP_DELETE(l_price);
+                        DAP_DELETE(l_parse_token);
+                        break;
+                    }
+                }else if (l_iter == 4){
+                    if ( strcmp(l_parse_token,"SEC") == 0 ){
+                        l_price->units_uid.enm = SERV_UNIT_SEC;
+                    }else if ( strcmp(l_parse_token,"DAY") == 0 ){
+                        l_price->units_uid.enm = SERV_UNIT_DAY;
+                    }else if ( strcmp(l_parse_token,"MB") == 0 ){
+                        l_price->units_uid.enm = SERV_UNIT_MB;
+                    }else {
+                        log_it(L_ERROR, "Error parse pricelist: wrong unit type \"%s\"", l_parse_token);
+                        DAP_DELETE( l_price->net);
+                        DAP_DELETE(l_price);
+                        DAP_DELETE(l_parse_token);
+                        break;
+                    }
+                }else if (l_iter == 5){
+                    l_price->wallet = dap_chain_wallet_open( l_parse_token, dap_config_get_item_str_default(g_config,"resources","wallets_path",NULL) );
+                    if (! l_price->wallet ){
+                        log_it(L_ERROR, "Error parse pricelist: can't open wallet \"%s\"", l_parse_token);
+                        DAP_DELETE( l_price->net);
+                        DAP_DELETE(l_price);
+                        DAP_DELETE(l_parse_token);
+                        break;
+                    }
+                }else{
+                    DAP_DELETE(l_parse_token);
+                    break;
+                }
+                l_iter++;
+                l_pos_old = l_pos;
+                if (! l_pos ){
+                    DAP_DELETE(l_parse_token);
+                    break;
+                }
+            }
+            if( l_iter == 6){
+                log_it(L_NOTICE, "All price parsed well, added to service %s", l_price_str);
+                if (l_srv->pricelist)
+                    l_srv->pricelist->prev = l_price;
+                l_price->next =  l_srv->pricelist;
+                l_srv->pricelist = l_price;
+            }
+
+        }
+
         return 0;
     }
     return -1;
@@ -188,7 +285,7 @@ void dap_chain_net_srv_vpn_deinit(void)
 static int s_callback_request_after(dap_chain_net_srv_t * a_srv, dap_chain_net_srv_client_t * a_srv_client
                                     , const void * a_custom_data, size_t a_custom_data_size )
 {
-
+    return 0;
 }