diff --git a/modules/chain/CMakeLists.txt b/modules/chain/CMakeLists.txt index 5fe8b539dcc847c86d712ba7af59274b526515df..67eb0f1512fc8620ea060a5cf34ab3ab45b81dc6 100644 --- a/modules/chain/CMakeLists.txt +++ b/modules/chain/CMakeLists.txt @@ -9,6 +9,7 @@ add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_SRCS} ${DAP_CHAIN_HEADERS}) if(BUILD_CELLFRAME_SDK_TESTS) add_subdirectory(tests) + add_definitions("-DLEDGER_TEST_ENABLED") endif() #find_package(PkgConfig REQUIRED) diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 49c18c9e0e984a90aa76b4d9b9887f027109e009..a6c54a72a7c5e50b4fbaa41b01623ce0d2ecbdd5 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -2907,7 +2907,7 @@ static int s_ledger_permissions_check(dap_chain_ledger_token_item_t * a_token_i break; } if ( l_addrs && l_addrs_count){ - if (a_data_size != sizeof (*l_addrs)){ + if (a_data_size != sizeof (dap_chain_addr_t)){ log_it(L_ERROR,"Wrong data size %zd for ledger permission check", a_data_size); return -2; } @@ -3382,7 +3382,8 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t if ( (l_token_item->flags & DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_BLOCKED ) || // If all is blocked - check if we're (l_token_item->flags & DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_FROZEN) ){ // in white list - if(s_ledger_permissions_check(l_token_item, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD,&l_tx_in_from, + if(!dap_chain_addr_is_blank(&l_tx_in_from) && s_ledger_permissions_check(l_token_item, + DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD,&l_tx_in_from, sizeof (l_tx_in_from)) != 0 ){ char * l_tmp_tx_in_from = dap_chain_addr_to_str(&l_tx_in_from); if(s_debug_more) @@ -3448,8 +3449,13 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t if(l_token) strcpy(l_value_cur->token_ticker, l_token); HASH_ADD_STR(l_values_from_cur_tx, token_ticker, l_value_cur); +#ifndef LEDGER_TEST_ENABLED + if (strcmp(l_token, PVT(a_ledger)->net_native_ticker) != 0) + return -78; +#endif } + // find 'out' items dap_list_t *l_list_out = dap_chain_datum_tx_items_get((dap_chain_datum_tx_t*) a_tx, TX_ITEM_TYPE_OUT_ALL, NULL); uint256_t l_value = {}, l_fee_sum = {}; @@ -3543,7 +3549,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t if ( (l_token_item->flags & DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_BLOCKED )|| // If all is blocked or frozen (l_token_item->flags & DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_FROZEN) ){ // check if we're in white list - if(s_ledger_permissions_check(l_token_item, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD,&l_tx_out_to , + if(!dap_chain_addr_is_blank(&l_tx_out_to) && s_ledger_permissions_check(l_token_item, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD,&l_tx_out_to , sizeof (l_tx_out_to)) != 0 ){ char * l_tmp_tx_out_to = dap_chain_addr_to_str(&l_tx_out_to); if(s_debug_more) diff --git a/modules/chain/tests/dap_chain_ledger_tests.c b/modules/chain/tests/dap_chain_ledger_tests.c index 2d3dedfa442a39beab45ceea7ab4aa59a40d289a..b361edd464fe7f287ac5e8ec6485c2532e1e4968 100644 --- a/modules/chain/tests/dap_chain_ledger_tests.c +++ b/modules/chain/tests/dap_chain_ledger_tests.c @@ -234,8 +234,11 @@ void dap_chain_ledger_test_write_back_list(dap_ledger_t *a_ledger, dap_cert_t *a *l_addr_1->addr, a_cert); dap_hash_fast_t l_btx_addr1_hash = {0}; dap_hash_fast(l_btx_addr1, dap_chain_datum_tx_get_size(l_btx_addr1), &l_btx_addr1_hash); - dap_assert_PIF(dap_chain_ledger_tx_add(a_ledger, l_btx_addr1, &l_btx_addr1_hash, false) == 1, - "Can't added base tx in white address"); + int l_ledger_add_code = dap_chain_ledger_tx_add(a_ledger, l_btx_addr1, &l_btx_addr1_hash, false); + char *l_ledger_tx_add_str = dap_strdup_printf("Can't added base tx in white address. Code: %d", l_ledger_add_code); + dap_assert_PIF(l_ledger_add_code == 1, + l_ledger_tx_add_str); + DAP_DELETE(l_ledger_tx_add_str); dap_hash_fast_t l_tx_addr4_hash = {0}; dap_chain_datum_tx_t *l_tx_to_addr4 = dap_chain_ledger_test_create_tx(l_addr_1->enc_key, &l_btx_addr1_hash, l_addr_4->addr, dap_chain_uint256_from(s_total_supply-s_fee)); @@ -421,6 +424,6 @@ void dap_chain_ledger_test_run(void){ } dap_chain_ledger_test_double_spending(l_ledger, &l_hash_btx, l_cert->enc_key, l_iddn); dap_chain_ledger_test_excess_supply(l_ledger, l_cert, &l_addr); - //dap_chain_ledger_test_write_back_list(l_ledger, l_cert, l_iddn); + dap_chain_ledger_test_write_back_list(l_ledger, l_cert, l_iddn); }