From 8c68e98344492c61f1fdeb208f65940ad638dcfc Mon Sep 17 00:00:00 2001 From: Dmitriy Gerasimov <naeper@demlabs.net> Date: Mon, 27 May 2019 16:59:45 +0700 Subject: [PATCH] [*] Moved static to ledger --- dap_chain_ledger.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/dap_chain_ledger.c b/dap_chain_ledger.c index 2e41152..48884ec 100755 --- a/dap_chain_ledger.c +++ b/dap_chain_ledger.c @@ -86,11 +86,22 @@ typedef struct dap_chain_ledger_tx_bound { dap_chain_ledger_tx_item_t *item_out; } dap_chain_ledger_tx_bound_t; + +// in-memory wallet balance +typedef struct dap_ledger_wallet_balance { + dap_chain_addr_t addr; + uint64_t balance; + UT_hash_handle hh; +} dap_ledger_wallet_balance_t; + +// dap_ledget_t private section typedef struct dap_ledger_private { // List of ledger - unspent transactions cache dap_chain_ledger_tx_item_t *ledger; dap_chain_ledger_token_item_t *tokens; + dap_ledger_wallet_balance_t *balance_accounts; + // for separate access to ledger pthread_rwlock_t ledger_rwlock; // for separate access to tokens @@ -103,14 +114,6 @@ typedef struct dap_ledger_private { } dap_ledger_private_t; #define PVT(a) ( (dap_ledger_private_t* ) a->_internal ) -// in-memory wallet balance -typedef struct dap_ledger_wallet_balance { - dap_chain_addr_t addr; - uint64_t balance; - UT_hash_handle hh; -} dap_ledger_wallet_balance_t; - -static dap_ledger_wallet_balance_t *balance_accounts = NULL; static const dap_chain_ledger_tx_item_t* tx_item_find_by_addr(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, dap_chain_hash_fast_t *a_tx_first_hash); @@ -719,17 +722,17 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx) if(l_out_item && &l_out_item->addr) { if(!dap_chain_ledger_tx_hash_is_used_out_item(a_ledger, &l_item_tmp->tx_hash_fast, l_index_tmp)) { dap_ledger_wallet_balance_t *wallet_balance = NULL; - HASH_FIND(hh, balance_accounts, &l_out_item->addr, sizeof(wallet_balance->addr), wallet_balance); + HASH_FIND(hh, PVT(a_ledger)->balance_accounts, &l_out_item->addr, sizeof(wallet_balance->addr), wallet_balance); if (wallet_balance) { wallet_balance->balance += l_out_item->header.value; dap_ledger_wallet_balance_t *dummy = NULL; - HASH_REPLACE(hh, balance_accounts, addr, sizeof(&l_out_item->addr), wallet_balance, dummy); + HASH_REPLACE(hh, PVT(a_ledger)->balance_accounts, addr, sizeof(&l_out_item->addr), wallet_balance, dummy); } else { wallet_balance = DAP_NEW_Z(dap_ledger_wallet_balance_t); memcpy(&wallet_balance->addr, &l_out_item->addr, sizeof(l_out_item->addr)); //wallet_balance->addr = l_out_item->addr; wallet_balance->balance = l_out_item->header.value; - HASH_ADD(hh, balance_accounts, addr, sizeof(&l_out_item->addr), wallet_balance); + HASH_ADD(hh, PVT(a_ledger)->balance_accounts, addr, sizeof(&l_out_item->addr), wallet_balance); } // TODO : put to local db for fast extraction } @@ -747,11 +750,11 @@ int dap_chain_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx) if (l_tx_prev_out) { //charge_off += dap_ledger_wallet_balance_t *wallet_balance = NULL; - HASH_FIND(hh, balance_accounts, &l_tx_prev_out->addr, sizeof(l_tx_prev_out->addr), wallet_balance); + HASH_FIND(hh, PVT(a_ledger)->balance_accounts, &l_tx_prev_out->addr, sizeof(l_tx_prev_out->addr), wallet_balance); if (wallet_balance) { wallet_balance->balance -= l_tx_prev_out->header.value; dap_ledger_wallet_balance_t *dummy = NULL; - HASH_REPLACE(hh, balance_accounts, addr, sizeof(&l_tx_prev_out->addr), wallet_balance, dummy); + HASH_REPLACE(hh, PVT(a_ledger)->balance_accounts, addr, sizeof(&l_tx_prev_out->addr), wallet_balance, dummy); } else { // impossible } -- GitLab