From 2c5cb7e34e5c7092c6a0b972be58e4607b52d704 Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Mon, 18 Nov 2019 15:09:27 +0700
Subject: [PATCH] [-] Wallet address is removed from file, field in structure
 replaced with padding to keep compatibility [*] New wallet is created
 without, wallet address is getting with network id

---
 dap_chain_wallet.c          | 14 +++++---------
 dap_chain_wallet.h          |  5 ++---
 dap_chain_wallet_internal.h |  2 +-
 3 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/dap_chain_wallet.c b/dap_chain_wallet.c
index 0c5fca8..c2e6a80 100755
--- a/dap_chain_wallet.c
+++ b/dap_chain_wallet.c
@@ -131,8 +131,7 @@ RET:
  * @details Creates new wallet
  * @return Wallet, new wallet or NULL if errors
  */
-dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_chain_net_id_t a_net_id,
-                                             dap_chain_sign_type_t a_sig_type)
+dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_chain_sign_type_t a_sig_type)
 {
     dap_chain_wallet_t * l_wallet = DAP_NEW_Z(dap_chain_wallet_t);
     DAP_CHAIN_WALLET_INTERNAL_LOCAL_NEW(l_wallet);
@@ -147,7 +146,7 @@ dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const c
 
     l_wallet_internal->certs[0] = dap_chain_cert_generate_mem(a_wallet_name,
                                                          dap_chain_sign_type_to_key_type(a_sig_type));
-    l_wallet_internal->addr = dap_chain_cert_to_addr (l_wallet_internal->certs[0],a_net_id);
+
 
     if ( dap_chain_wallet_save(l_wallet) == 0 )
         return l_wallet;
@@ -177,14 +176,15 @@ void dap_chain_wallet_close( dap_chain_wallet_t * a_wallet)
 /**
  * @brief dap_chain_wallet_get_addr
  * @param a_wallet
+ * @param a_net_id
  * @return
  */
-dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet)
+dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet, dap_chain_net_id_t a_net_id)
 {
     if(!a_wallet)
         return NULL;
     DAP_CHAIN_WALLET_INTERNAL_LOCAL(a_wallet);
-    return l_wallet_internal->addr;
+    return a_net_id.uint64? dap_chain_cert_to_addr (l_wallet_internal->certs[0], a_net_id) : NULL;
 }
 
 /**
@@ -252,7 +252,6 @@ int dap_chain_wallet_save(dap_chain_wallet_t * a_wallet)
             l_file_hdr.signature = DAP_CHAIN_WALLETS_FILE_SIGNATURE;
             l_file_hdr.type = 0;
             l_file_hdr.version = 1;
-            l_file_hdr.net_id = l_wallet_internal->addr->net_id;
             size_t i;
             // write header
             fwrite(&l_file_hdr,1,sizeof(l_file_hdr),l_file);
@@ -349,9 +348,6 @@ dap_chain_wallet_t * dap_chain_wallet_open_file(const char * a_file_name)
                     DAP_DELETE (l_data);
                 }
                 fclose(l_file);
-                // make addr
-                if(l_wallet_internal->certs_count>0)
-                    l_wallet_internal->addr = dap_chain_cert_to_addr (l_wallet_internal->certs[0], l_file_hdr.net_id);
                 return l_wallet;
             } else {
                 log_it(L_ERROR,"Wrong wallet file signature: corrupted file or wrong format");
diff --git a/dap_chain_wallet.h b/dap_chain_wallet.h
index 19ebad9..e838b3c 100755
--- a/dap_chain_wallet.h
+++ b/dap_chain_wallet.h
@@ -41,15 +41,14 @@ void dap_chain_wallet_deinit();
 
 const char* dap_chain_wallet_get_path(dap_config_t * a_config);
 
-dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_chain_net_id_t a_net_id,
-                                             dap_chain_sign_type_t a_sig_type); // Creates new one if not found
+dap_chain_wallet_t * dap_chain_wallet_create(const char * a_wallet_name, const char * a_wallets_path, dap_chain_sign_type_t a_sig_type); // Creates new one if not found
 dap_chain_wallet_t * dap_chain_wallet_open_file(const char * a_file_name);
 dap_chain_wallet_t * dap_chain_wallet_open(const char * a_wallet_name, const char * a_wallets_path);
 int dap_chain_wallet_save(dap_chain_wallet_t * a_wallet);
 
 void dap_chain_wallet_close( dap_chain_wallet_t * a_wallet);
 
-dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet);
+dap_chain_addr_t* dap_chain_wallet_get_addr(dap_chain_wallet_t * a_wallet, dap_chain_net_id_t a_net_id);
 size_t dap_chain_wallet_get_certs_number( dap_chain_wallet_t * a_wallet);
 dap_chain_pkey_t * dap_chain_wallet_get_pkey( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx);
 dap_enc_key_t * dap_chain_wallet_get_key( dap_chain_wallet_t * a_wallet,uint32_t a_key_idx);
diff --git a/dap_chain_wallet_internal.h b/dap_chain_wallet_internal.h
index deb4aeb..3657b78 100755
--- a/dap_chain_wallet_internal.h
+++ b/dap_chain_wallet_internal.h
@@ -46,7 +46,7 @@ typedef struct dap_chain_wallet_file_hdr{
     uint64_t signature;
     uint32_t version;
     uint8_t type; /// Wallets storage type 0x00 - uncompressed and unencrypted
-    dap_chain_net_id_t net_id; // Network where the wallet certificate is used
+    uint64_t padding;
     uint8_t certs[];
 } DAP_ALIGN_PACKED dap_chain_wallet_file_hdr_t;
 
-- 
GitLab