diff --git a/flake.lock b/flake.lock index c5f4253..234f1ba 100644 --- a/flake.lock +++ b/flake.lock @@ -670,11 +670,11 @@ ] }, "locked": { - "lastModified": 1780703083, - "narHash": "sha256-Z0nOivZhmNWprngIAxx1ZwpZPKH3EvZRTPzr3nTrMgs=", + "lastModified": 1780948044, + "narHash": "sha256-LJF2BvGhDCX10tKjwp7FRCFtZgeC/N9egRqIszOqoX0=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "eb71a1aa90e05a98814138779680de2ea60a9ff2", + "rev": "40e7631402d2082664a146a9fb9de33cf35cd299", "type": "github" }, "original": { @@ -921,11 +921,11 @@ "process-stats": "process-stats_2" }, "locked": { - "lastModified": 1780324383, - "narHash": "sha256-cArQVYE2U50Dyj3Nm78qTYJNemBiAH8WxRzysceAYIc=", + "lastModified": 1780945875, + "narHash": "sha256-uHnxNUd7ZMcZ+tyyV4HrqVJ41EvcNTAgck7jxvq+kfc=", "owner": "logos-co", "repo": "logos-liblogos", - "rev": "51313eb58f2566efaa6ece82071a34e3bc4f7f61", + "rev": "eb0d30095dbbc5c46ce538989658f84415a33bee", "type": "github" }, "original": { @@ -1140,11 +1140,11 @@ ] }, "locked": { - "lastModified": 1780705793, - "narHash": "sha256-sOegBiJGTLXCkaASQ02WdPMApkSsOMIaD1zdBuO8I/Y=", + "lastModified": 1780948815, + "narHash": "sha256-NiBHv3Fb6kGcbz4zSHSGMBMqReXtsPEt1DaqxGfQotA=", "owner": "logos-co", "repo": "logos-module-builder", - "rev": "2afd64405439d3fdda1ffb53852a9bb0049f0f0e", + "rev": "b841fdc1d9a60f470e924a0da78ec5978c1b0a1b", "type": "github" }, "original": { @@ -5925,11 +5925,11 @@ ] }, "locked": { - "lastModified": 1780703355, - "narHash": "sha256-QwLWoeYn0yMrldG63dWaH2lqyYFn7qgTi5XFlrgCJSc=", + "lastModified": 1780929868, + "narHash": "sha256-yDxv9Cv5VEJDVqHz9qYCU3UXv+kCIjRoD90A7uGYuGU=", "owner": "logos-co", "repo": "logos-plugin-qt", - "rev": "f58fbaa25acbc547ae2671e2cddcc1517d6643f0", + "rev": "68090d0a976224ca1c3c606c486a9ac3dd7a4559", "type": "github" }, "original": { @@ -6035,11 +6035,11 @@ ] }, "locked": { - "lastModified": 1780703355, - "narHash": "sha256-QwLWoeYn0yMrldG63dWaH2lqyYFn7qgTi5XFlrgCJSc=", + "lastModified": 1780929868, + "narHash": "sha256-yDxv9Cv5VEJDVqHz9qYCU3UXv+kCIjRoD90A7uGYuGU=", "owner": "logos-co", "repo": "logos-plugin-qt", - "rev": "f58fbaa25acbc547ae2671e2cddcc1517d6643f0", + "rev": "68090d0a976224ca1c3c606c486a9ac3dd7a4559", "type": "github" }, "original": { diff --git a/src/i_logos_execution_zone_wallet_module.h b/src/i_logos_execution_zone_wallet_module.h index 94dcc11..ee528a9 100644 --- a/src/i_logos_execution_zone_wallet_module.h +++ b/src/i_logos_execution_zone_wallet_module.h @@ -88,28 +88,28 @@ public: virtual QString register_public_account(const QString& account_id_hex) = 0; virtual QString register_private_account(const QString& account_id_hex) = 0; - virtual QList serialization_helper(const QList& input_data) = 0; + virtual QJsonArray serialization_helper(const QJsonArray& input_data) = 0; - virtual QByteArray authenticated_transfer_elf() = 0; - virtual QList token_elf() = 0; - virtual QList amm_elf() = 0; - virtual QList ata_elf() = 0; + virtual QJsonArray authenticated_transfer_elf() = 0; + virtual QJsonArray token_elf() = 0; + virtual QJsonArray amm_elf() = 0; + virtual QJsonArray ata_elf() = 0; virtual QString send_generic_public_transaction( const QList& account_ids, - const QList& signing_requirements, - const QList& instruction, - const QList& program_elf, - const QList>& program_dependencies + const QJsonArray& signing_requirements, + const QJsonArray& instruction, + const QJsonArray& program_elf, + const QJsonArray& program_dependencies ) = 0; virtual QString send_generic_private_transaction( const QList& account_ids, - const QList& instruction, - const QList& program_elf, - const QList>& program_dependencies + const QJsonArray& instruction, + const QJsonArray& program_elf, + const QJsonArray& program_dependencies ) = 0; virtual QString send_program_deployment_transaction( - const QList& program_elf + const QJsonArray& program_elf ) = 0; // Wallet Lifecycle diff --git a/src/logos_execution_zone_wallet_module.cpp b/src/logos_execution_zone_wallet_module.cpp index 5cb70a4..0a2b2bc 100644 --- a/src/logos_execution_zone_wallet_module.cpp +++ b/src/logos_execution_zone_wallet_module.cpp @@ -753,78 +753,106 @@ QString LogosExecutionZoneWalletModule::register_private_account(const QString& return resultJson; } -QList LogosExecutionZoneWalletModule::serialization_helper(const QList& input_data) { - const uint8_t *input_instruction_data = input_data.constData(); - uintptr_t input_instruction_data_size = static_cast(input_data.size()); - FfiInstructionWords raw_words = wallet_ffi_serialization_helper(input_instruction_data, input_instruction_data_size); - if (raw_words.error != SUCCESS) { - qWarning() << "serialization_helper: wallet FFI error" << raw_words.error; - return QList {}; - } - QList result(raw_words.instruction_words, raw_words.instruction_words + raw_words.instruction_words_size); - wallet_ffi_free_instruction_words(&raw_words); - return result; -} - -QList LogosExecutionZoneWalletModule::token_elf() { +QJsonArray LogosExecutionZoneWalletModule::token_elf() { FfiProgram ffi_program {}; WalletFfiError error = wallet_ffi_token_elf(&ffi_program); if (error != SUCCESS) { - qWarning() << "authenticated_transfer_elf: wallet FFI error " << error; - return QList {}; + qWarning() << "token_elf: wallet FFI error " << error; + return QJsonArray(); } - QList result(ffi_program.elf_data, ffi_program.elf_data + ffi_program.elf_size); + QJsonArray result; + for (size_t i = 0; i < ffi_program.elf_size; ++i) { + result.append(static_cast(ffi_program.elf_data[i])); + } wallet_ffi_free_ffi_program(&ffi_program); return result; } -QList LogosExecutionZoneWalletModule::amm_elf() { +QJsonArray LogosExecutionZoneWalletModule::amm_elf() { FfiProgram ffi_program {}; WalletFfiError error = wallet_ffi_amm_elf(&ffi_program); if (error != SUCCESS) { - qWarning() << "authenticated_transfer_elf: wallet FFI error " << error; - return QList {}; + qWarning() << "amm_elf: wallet FFI error " << error; + return QJsonArray(); } - QList result(ffi_program.elf_data, ffi_program.elf_data + ffi_program.elf_size); + QJsonArray result; + for (size_t i = 0; i < ffi_program.elf_size; ++i) { + result.append(static_cast(ffi_program.elf_data[i])); + } wallet_ffi_free_ffi_program(&ffi_program); return result; } -QList LogosExecutionZoneWalletModule::ata_elf() { +QJsonArray LogosExecutionZoneWalletModule::ata_elf() { FfiProgram ffi_program {}; WalletFfiError error = wallet_ffi_ata_elf(&ffi_program); if (error != SUCCESS) { - qWarning() << "authenticated_transfer_elf: wallet FFI error " << error; - return QList {}; + qWarning() << "ata_elf: wallet FFI error " << error; + return QJsonArray(); } - QList result(ffi_program.elf_data, ffi_program.elf_data + ffi_program.elf_size); + QJsonArray result; + for (size_t i = 0; i < ffi_program.elf_size; ++i) { + result.append(static_cast(ffi_program.elf_data[i])); + } wallet_ffi_free_ffi_program(&ffi_program); return result; } -QByteArray LogosExecutionZoneWalletModule::authenticated_transfer_elf() { +QJsonArray LogosExecutionZoneWalletModule::authenticated_transfer_elf() { FfiProgram ffi_program {}; WalletFfiError error = wallet_ffi_transfer_elf(&ffi_program); if (error != SUCCESS) { qWarning() << "authenticated_transfer_elf: wallet FFI error " << error; - return QByteArray(); + return QJsonArray(); } - QByteArray result(reinterpret_cast(ffi_program.elf_data), ffi_program.elf_size); + QJsonArray result; + for (size_t i = 0; i < ffi_program.elf_size; ++i) { + result.append(static_cast(ffi_program.elf_data[i])); + } wallet_ffi_free_ffi_program(&ffi_program); return result; } +QJsonArray LogosExecutionZoneWalletModule::serialization_helper(const QJsonArray& input_data) { + QList input_list; + input_list.reserve(input_data.size()); + for (const QJsonValue& val : input_data) { + input_list.append(static_cast(val.toInt())); + } + + const uint8_t* input_instruction_data = input_list.constData(); + uintptr_t input_instruction_data_size = static_cast(input_list.size()); + FfiInstructionWords raw_words = wallet_ffi_serialization_helper(input_instruction_data, input_instruction_data_size); + if (raw_words.error != SUCCESS) { + qWarning() << "serialization_helper: wallet FFI error" << raw_words.error; + return QJsonArray{}; + } + + QJsonArray result; + for (size_t i = 0; i < raw_words.instruction_words_size; ++i) { + result.append(static_cast(raw_words.instruction_words[i])); + } + wallet_ffi_free_instruction_words(&raw_words); + return result; +} + QString LogosExecutionZoneWalletModule::send_generic_public_transaction( const QList& account_ids, - const QList& signing_requirements, - const QList& instruction, - const QList& program_elf, - const QList>& program_dependencies + const QJsonArray& signing_requirements, + const QJsonArray& instruction, + const QJsonArray& program_elf, + const QJsonArray& program_dependencies ) { + QList signing_requirements_list; + signing_requirements_list.reserve(signing_requirements.size()); + for (const QJsonValue& val : signing_requirements) { + signing_requirements_list.append(val.toBool()); + } + QList identities_resolved; identities_resolved.reserve(account_ids.size()); @@ -837,7 +865,7 @@ QString LogosExecutionZoneWalletModule::send_generic_public_transaction( return transferResultToJson(nullptr, QStringLiteral("wallet_ffi_resolve_public_account: invalid account_id_hex")); } - WalletFfiError error = wallet_ffi_resolve_public_account(id, signing_requirements[i], &acc_identity); + WalletFfiError error = wallet_ffi_resolve_public_account(id, signing_requirements_list[i], &acc_identity); if (error != SUCCESS) { qWarning() << "wallet_ffi_resolve_public_account failed for index" << i << " : wallet FFI error" << error; return transferResultToJson(nullptr, QStringLiteral("wallet_ffi_resolve_public_account: wallet FFI error ") + QString::number(error)); @@ -848,29 +876,48 @@ QString LogosExecutionZoneWalletModule::send_generic_public_transaction( const FfiAccountIdentity *account_identities = identities_resolved.constData(); uintptr_t account_identities_size = static_cast(identities_resolved.size()); - const uint8_t *input_instruction_data = instruction.constData(); - uintptr_t input_instruction_data_size = static_cast(instruction.size()); - FfiInstructionWords raw_words = wallet_ffi_serialization_helper(input_instruction_data, input_instruction_data_size); - if (raw_words.error != SUCCESS) { - qWarning() << "wallet_ffi_resolve_public_account failed at instruction serialization: wallet FFI error" << raw_words.error; - return transferResultToJson(nullptr, QStringLiteral("wallet_ffi_resolve_public_account: wallet FFI error ") + QString::number(raw_words.error)); + QList instruction_list; + instruction_list.reserve(instruction.size()); + for (const QJsonValue& val : instruction) { + instruction_list.append(static_cast(val.toInt())); } + const uint32_t* input_instruction_data = instruction_list.constData(); + uintptr_t input_instruction_data_size = static_cast(instruction_list.size()); + FfiProgram main_program {}; - const uint8_t *program_elf_data = program_elf.constData(); - uintptr_t program_elf_size = static_cast(program_elf.size()); + QList program_elf_list; + program_elf_list.reserve(program_elf.size()); + for (const QJsonValue& val : program_elf) { + program_elf_list.append(static_cast(val.toInt())); + } + + const uint8_t *program_elf_data = program_elf_list.constData(); + uintptr_t program_elf_size = static_cast(program_elf_list.size()); main_program.elf_data = program_elf_data; main_program.elf_size = program_elf_size; + QList> program_dependencies_list; + program_dependencies_list.reserve(program_dependencies.size()); + for (const QJsonValue& outer : program_dependencies) { + QList inner; + const QJsonArray inner_arr = outer.toArray(); + inner.reserve(inner_arr.size()); + for (const QJsonValue& val : inner_arr) { + inner.append(static_cast(val.toInt())); + } + program_dependencies_list.append(inner); + } + QList ffi_program_dependencies; - for (int i = 0; i < program_dependencies.size(); ++i) { + for (int i = 0; i < program_dependencies_list.size(); ++i) { FfiProgram program{}; - const uint8_t *program_elf_data = program_dependencies[i].constData(); - uintptr_t program_elf_size = static_cast(program_dependencies[i].size()); + const uint8_t *program_elf_data = program_dependencies_list[i].constData(); + uintptr_t program_elf_size = static_cast(program_dependencies_list[i].size()); program.elf_data = program_elf_data; program.elf_size = program_elf_size; @@ -893,8 +940,8 @@ QString LogosExecutionZoneWalletModule::send_generic_public_transaction( walletHandle, account_identities, account_identities_size, - raw_words.instruction_words, - raw_words.instruction_words_size, + input_instruction_data, + input_instruction_data_size, &program_with_dependencies, &result ); @@ -914,9 +961,9 @@ QString LogosExecutionZoneWalletModule::send_generic_public_transaction( QString LogosExecutionZoneWalletModule::send_generic_private_transaction( const QList& account_ids, - const QList& instruction, - const QList& program_elf, - const QList>& program_dependencies + const QJsonArray& instruction, + const QJsonArray& program_elf, + const QJsonArray& program_dependencies ) { QList identities_resolved; identities_resolved.reserve(account_ids.size()); @@ -941,29 +988,48 @@ QString LogosExecutionZoneWalletModule::send_generic_private_transaction( const FfiAccountIdentity *account_identities = identities_resolved.constData(); uintptr_t account_identities_size = static_cast(identities_resolved.size()); - const uint8_t *input_instruction_data = instruction.constData(); - uintptr_t input_instruction_data_size = static_cast(instruction.size()); - FfiInstructionWords raw_words = wallet_ffi_serialization_helper(input_instruction_data, input_instruction_data_size); - if (raw_words.error != SUCCESS) { - qWarning() << "wallet_ffi_resolve_private_account failed at instruction serialization: wallet FFI error" << raw_words.error; - return transferResultToJson(nullptr, QStringLiteral("wallet_ffi_resolve_private_account: wallet FFI error ") + QString::number(raw_words.error)); + QList instruction_list; + instruction_list.reserve(instruction.size()); + for (const QJsonValue& val : instruction) { + instruction_list.append(static_cast(val.toInt())); } + const uint32_t* input_instruction_data = instruction_list.constData(); + uintptr_t input_instruction_data_size = static_cast(instruction_list.size()); + FfiProgram main_program {}; - const uint8_t *program_elf_data = program_elf.constData(); - uintptr_t program_elf_size = static_cast(program_elf.size()); + QList program_elf_list; + program_elf_list.reserve(program_elf.size()); + for (const QJsonValue& val : program_elf) { + program_elf_list.append(static_cast(val.toInt())); + } + + const uint8_t *program_elf_data = program_elf_list.constData(); + uintptr_t program_elf_size = static_cast(program_elf_list.size()); main_program.elf_data = program_elf_data; main_program.elf_size = program_elf_size; + QList> program_dependencies_list; + program_dependencies_list.reserve(program_dependencies.size()); + for (const QJsonValue& outer : program_dependencies) { + QList inner; + const QJsonArray inner_arr = outer.toArray(); + inner.reserve(inner_arr.size()); + for (const QJsonValue& val : inner_arr) { + inner.append(static_cast(val.toInt())); + } + program_dependencies_list.append(inner); + } + QList ffi_program_dependencies; - for (int i = 0; i < program_dependencies.size(); ++i) { + for (int i = 0; i < program_dependencies_list.size(); ++i) { FfiProgram program{}; - const uint8_t *program_elf_data = program_dependencies[i].constData(); - uintptr_t program_elf_size = static_cast(program_dependencies[i].size()); + const uint8_t *program_elf_data = program_dependencies_list[i].constData(); + uintptr_t program_elf_size = static_cast(program_dependencies_list[i].size()); program.elf_data = program_elf_data; program.elf_size = program_elf_size; @@ -986,8 +1052,8 @@ QString LogosExecutionZoneWalletModule::send_generic_private_transaction( walletHandle, account_identities, account_identities_size, - raw_words.instruction_words, - raw_words.instruction_words_size, + input_instruction_data, + input_instruction_data_size, &program_with_dependencies, &result ); @@ -1006,12 +1072,18 @@ QString LogosExecutionZoneWalletModule::send_generic_private_transaction( } QString LogosExecutionZoneWalletModule::send_program_deployment_transaction( - const QList& program_elf + const QJsonArray& program_elf ) { FfiTransactionResult result {}; - const uint8_t *program_elf_data = program_elf.constData(); - uintptr_t program_elf_size = static_cast(program_elf.size()); + QList program_elf_list; + program_elf_list.reserve(program_elf.size()); + for (const QJsonValue& val : program_elf) { + program_elf_list.append(static_cast(val.toInt())); + } + + const uint8_t *program_elf_data = program_elf_list.constData(); + uintptr_t program_elf_size = static_cast(program_elf_list.size()); const WalletFfiError error = wallet_ffi_program_deployment( walletHandle, diff --git a/src/logos_execution_zone_wallet_module.h b/src/logos_execution_zone_wallet_module.h index d036ed4..74fd0f9 100644 --- a/src/logos_execution_zone_wallet_module.h +++ b/src/logos_execution_zone_wallet_module.h @@ -116,28 +116,28 @@ public: Q_INVOKABLE QString register_public_account(const QString& account_id_hex) override; Q_INVOKABLE QString register_private_account(const QString& account_id_hex) override; - Q_INVOKABLE QList serialization_helper(const QList& input_data) override; + Q_INVOKABLE QJsonArray serialization_helper(const QJsonArray& input_data) override; - Q_INVOKABLE QByteArray authenticated_transfer_elf() override; - Q_INVOKABLE QList token_elf() override; - Q_INVOKABLE QList amm_elf() override; - Q_INVOKABLE QList ata_elf() override; + Q_INVOKABLE QJsonArray authenticated_transfer_elf() override; + Q_INVOKABLE QJsonArray token_elf() override; + Q_INVOKABLE QJsonArray amm_elf() override; + Q_INVOKABLE QJsonArray ata_elf() override; Q_INVOKABLE QString send_generic_public_transaction( const QList& account_ids, - const QList& signing_requirements, - const QList& instruction, - const QList& program_elf, - const QList>& program_dependencies + const QJsonArray& signing_requirements, + const QJsonArray& instruction, + const QJsonArray& program_elf, + const QJsonArray& program_dependencies ) override; Q_INVOKABLE QString send_generic_private_transaction( const QList& account_ids, - const QList& instruction, - const QList& program_elf, - const QList>& program_dependencies + const QJsonArray& instruction, + const QJsonArray& program_elf, + const QJsonArray& program_dependencies ) override; Q_INVOKABLE QString send_program_deployment_transaction( - const QList& program_elf + const QJsonArray& program_elf ) override; // Wallet Lifecycle