diff --git a/src/logos_blockchain_module.cpp b/src/logos_blockchain_module.cpp index 6f93f43..080df86 100644 --- a/src/logos_blockchain_module.cpp +++ b/src/logos_blockchain_module.cpp @@ -939,23 +939,15 @@ StdLogosResult LogosBlockchainModule::wallet_get_claimable_vouchers() const { // Blend StdLogosResult LogosBlockchainModule::blend_join_as_core_node( - const std::string& provider_id_hex, - const std::string& zk_id_hex, - const std::string& locked_note_id_hex, - const std::vector& locators + const std::string& locator, + const std::string& locked_note_id_hex ) const { if (!node) { return result::err("The node is not running."); } - const std::vector provider_id_bytes = parse_address_hex(provider_id_hex); - if (provider_id_bytes.empty() || static_cast(provider_id_bytes.size()) != ADDRESS_BYTES) { - return result::err("Invalid provider_id_hex (64 hex characters required)."); - } - - const std::vector zk_id_bytes = parse_address_hex(zk_id_hex); - if (zk_id_bytes.empty() || static_cast(zk_id_bytes.size()) != ADDRESS_BYTES) { - return result::err("Invalid zk_id_hex (64 hex characters required)."); + if (locator.empty()) { + return result::err("Invalid locator (must not be empty)."); } const std::vector locked_note_id_bytes = parse_address_hex(locked_note_id_hex); @@ -963,20 +955,10 @@ StdLogosResult LogosBlockchainModule::blend_join_as_core_node( return result::err("Invalid locked_note_id_hex (64 hex characters required)."); } - // locators_ptrs holds raw pointers into the std::strings (valid as long as `locators` lives). - std::vector locators_ptrs; - locators_ptrs.reserve(locators.size()); - for (const std::string& locator : locators) { - locators_ptrs.push_back(locator.c_str()); - } - auto [value, error] = ::blend_join_as_core_node( node, - provider_id_bytes.data(), - zk_id_bytes.data(), - locked_note_id_bytes.data(), - locators_ptrs.data(), - locators_ptrs.size() + locator.c_str(), + locked_note_id_bytes.data() ); if (!is_ok(&error)) { return result::err(operation_status::take_message(error)); diff --git a/src/logos_blockchain_module.h b/src/logos_blockchain_module.h index 22cf848..b3e9d6d 100644 --- a/src/logos_blockchain_module.h +++ b/src/logos_blockchain_module.h @@ -130,10 +130,8 @@ public: // Blend [[nodiscard]] StdLogosResult blend_join_as_core_node( - const std::string& provider_id_hex, - const std::string& zk_id_hex, - const std::string& locked_note_id_hex, - const std::vector& locators + const std::string& locator, + const std::string& locked_note_id_hex ) const; // Explorer diff --git a/tests/mocks/mock_logos_blockchain.cpp b/tests/mocks/mock_logos_blockchain.cpp index c0d61e7..15829d7 100644 --- a/tests/mocks/mock_logos_blockchain.cpp +++ b/tests/mocks/mock_logos_blockchain.cpp @@ -272,11 +272,8 @@ FfiChannelDepositResult channel_deposit_with_notes( BlendHashResult blend_join_as_core_node( LogosBlockchainNode* node, - const uint8_t* provider_id, - const uint8_t* zk_id, - const uint8_t* locked_note_id, - const char** locators, - size_t locators_count) + const char* locator, + const uint8_t* locked_note_id) { LOGOS_CMOCK_RECORD("blend_join_as_core_node"); BlendHashResult result; diff --git a/tests/stubs/logos_blockchain.h b/tests/stubs/logos_blockchain.h index 13477ca..b2cd8fa 100644 --- a/tests/stubs/logos_blockchain.h +++ b/tests/stubs/logos_blockchain.h @@ -221,11 +221,8 @@ OperationStatus free_claimable_vouchers(ClaimableVouchers vouchers); // Blend BlendHashResult blend_join_as_core_node( LogosBlockchainNode* node, - const uint8_t* provider_id, - const uint8_t* zk_id, - const uint8_t* locked_note_id, - const char** locators, - size_t locators_count); + const char* locator, + const uint8_t* locked_note_id); // Explorer StringResult get_block(LogosBlockchainNode* node, const HeaderId* header_id); diff --git a/tests/test_blockchain.cpp b/tests/test_blockchain.cpp index ad2512f..3493ceb 100644 --- a/tests/test_blockchain.cpp +++ b/tests/test_blockchain.cpp @@ -292,7 +292,7 @@ LOGOS_TEST(wallet_get_known_addresses_without_node_returns_error) { LOGOS_TEST(blend_join_as_core_node_without_node_returns_error) { auto t = LogosTestContext("blockchain_module"); LogosBlockchainModule module; - StdLogosResult result = module.blend_join_as_core_node(VALID_HEX, VALID_HEX, VALID_HEX, {"locator1"}); + StdLogosResult result = module.blend_join_as_core_node("locator1", VALID_HEX); LOGOS_ASSERT_FALSE(result.success); LOGOS_ASSERT_TRUE(contains(result.error, "not running")); } @@ -475,27 +475,15 @@ LOGOS_TEST(wallet_transfer_funds_rejects_invalid_optional_tip) { // blend_join_as_core_node validation -LOGOS_TEST(blend_join_rejects_invalid_provider_id) { +LOGOS_TEST(blend_join_rejects_empty_locator) { auto t = LogosTestContext("blockchain_module"); TempDir tmpDir; auto* module = createStartedModule(t, tmpDir); LOGOS_ASSERT_TRUE(module != nullptr); - StdLogosResult result = module->blend_join_as_core_node("short", VALID_HEX, VALID_HEX, {}); + StdLogosResult result = module->blend_join_as_core_node("", VALID_HEX); LOGOS_ASSERT_FALSE(result.success); - LOGOS_ASSERT_TRUE(contains(result.error, "provider_id")); - delete module; -} - -LOGOS_TEST(blend_join_rejects_invalid_zk_id) { - auto t = LogosTestContext("blockchain_module"); - TempDir tmpDir; - auto* module = createStartedModule(t, tmpDir); - LOGOS_ASSERT_TRUE(module != nullptr); - - StdLogosResult result = module->blend_join_as_core_node(VALID_HEX, "short", VALID_HEX, {}); - LOGOS_ASSERT_FALSE(result.success); - LOGOS_ASSERT_TRUE(contains(result.error, "zk_id")); + LOGOS_ASSERT_TRUE(contains(result.error, "locator")); delete module; } @@ -505,7 +493,7 @@ LOGOS_TEST(blend_join_rejects_invalid_locked_note_id) { auto* module = createStartedModule(t, tmpDir); LOGOS_ASSERT_TRUE(module != nullptr); - StdLogosResult result = module->blend_join_as_core_node(VALID_HEX, VALID_HEX, "short", {}); + StdLogosResult result = module->blend_join_as_core_node("locator1", "short"); LOGOS_ASSERT_FALSE(result.success); LOGOS_ASSERT_TRUE(contains(result.error, "locked_note_id")); delete module; @@ -1035,8 +1023,7 @@ LOGOS_TEST(blend_join_as_core_node_returns_declaration_id) { t.mockCFunction("blend_join_as_core_node_error").returns(0); - std::vector locators = {"locator1", "locator2"}; - StdLogosResult result = module->blend_join_as_core_node(VALID_HEX, VALID_HEX, VALID_HEX, locators); + StdLogosResult result = module->blend_join_as_core_node("locator1", VALID_HEX); LOGOS_ASSERT_TRUE(result.success); // Mock fills hash with 0xCD -> hex "cdcd...cd" (64 chars) std::string declarationId = result.value.get(); @@ -1054,7 +1041,7 @@ LOGOS_TEST(blend_join_as_core_node_returns_error_on_ffi_failure) { t.mockCFunction("blend_join_as_core_node_error").returns(1); - StdLogosResult result = module->blend_join_as_core_node(VALID_HEX, VALID_HEX, VALID_HEX, {}); + StdLogosResult result = module->blend_join_as_core_node("locator1", VALID_HEX); LOGOS_ASSERT_FALSE(result.success); delete module; }