From 763d70bec2a05e9f482ceba3ccca8d4cf3f6ab13 Mon Sep 17 00:00:00 2001 From: Snider Date: Tue, 30 Sep 2025 16:48:13 +0100 Subject: [PATCH] Testnet 1 (#15) --- .dockerignore | 8 + .github/actions/upload-artifacts/action.yml | 16 + .github/workflows/_on-pr-fast.yml | 2 +- .github/workflows/_on-pr.yml | 63 +- .github/workflows/_on-push.yml | 35 +- .github/workflows/_on-release.yml | 51 +- .github/workflows/build-docker.yml | 52 + .github/workflows/build-docs.yml | 1 + .github/workflows/build-linux-arm64.yml | 48 + ...{build-linux.yml => build-linux-intel.yml} | 22 +- .github/workflows/build-macos-arm64.yml | 25 +- .github/workflows/build-macos-intel.yml | 21 +- ...ld-windows.yml => build-windows-intel.yml} | 22 +- CMakeLists.txt | 16 +- LICENSE | 9 - LICENSE.txt | 288 ++ Makefile | 106 +- cmake/CPackConfig.cmake | 79 + cmake/DocBuilder.cmake | 3 +- cmake/check-config-vars.cmake | 57 - cmake/conan_provider.cmake | 682 +++++ cmake/config-vars.cmake | 20 - cmake/currency_configs/example.cmake | 20 - ...-clang-arm64-release => apple-clang-armv8} | 1 - ...clang-amd64-release => apple-clang-x86_64} | 4 +- cmake/profiles/gcc-linux-armv8 | 9 + ...c-linux-amd64-release => gcc-linux-x86_64} | 1 - cmake/profiles/msvc-193-x86_64 | 10 + ...msvc-194-amd64-release => msvc-194-x86_64} | 1 - .../db/libmdbx/packages/rpm/CMakeLists.txt | 6 +- contrib/db/libmdbx/src/CMakeLists.txt | 12 +- contrib/db/libmdbx/src/tools/CMakeLists.txt | 4 +- crowdin.yml | 3 - docs | 2 +- src/CMakeLists.txt | 111 +- src/common/atomics_boost_serialization.h | 17 +- src/common/base58.cpp | 17 +- src/common/base58.h | 17 +- src/common/boost_serialization_helper.h | 17 +- src/common/boost_serialization_maps.h | 19 +- src/common/boost_version_check.h | 19 +- src/common/callstack_helper.cpp | 19 +- src/common/callstack_helper.h | 19 +- src/common/command_line.cpp | 21 +- src/common/command_line.h | 17 +- src/common/config_encrypt_helper.h | 19 +- src/common/crypto_serialization.h | 19 +- src/common/crypto_stream_operators.cpp | 19 +- src/common/crypto_stream_operators.h | 19 +- src/common/db_abstract_accessor.h | 17 +- src/common/db_backend_base.h | 18 +- src/common/db_backend_leveldb.cpp | 120 +- src/common/db_backend_leveldb.h | 16 +- src/common/db_backend_lmdb.cpp | 20 +- src/common/db_backend_lmdb.h | 20 +- src/common/db_backend_mdbx.cpp | 20 +- src/common/db_backend_mdbx.h | 20 +- src/common/db_backend_selector.cpp | 21 +- src/common/db_backend_selector.h | 19 +- src/common/difficulty_boost_serialization.h | 15 +- src/common/encryption_filter.cpp | 19 +- src/common/encryption_filter.h | 17 +- src/common/error_codes.h | 17 +- src/common/general_purpose_commands_defs.h | 17 +- src/common/int-util.h | 17 +- src/common/make_hashable.h | 18 +- src/common/median_db_cache.h | 16 +- src/common/miniupnp_helper.h | 19 +- src/common/mnemonic-encoding.cpp | 47 +- src/common/mnemonic-encoding.h | 43 +- src/common/ntp.cpp | 25 +- src/common/ntp.h | 17 +- src/common/pod-class.h | 19 +- src/common/pod_array_file_container.h | 19 +- src/common/pre_download.h | 28 +- src/common/threads_pool.h | 19 +- src/common/tor_helper.h | 17 +- ...unordered_containers_boost_serialization.h | 17 +- src/common/utf8.h | 42 +- src/common/utf8/checked.h | 42 +- src/common/utf8/core.h | 42 +- src/common/utf8/cpp11.h | 42 +- src/common/utf8/cpp17.h | 42 +- src/common/utf8/cpp20.h | 42 +- src/common/utf8/unchecked.h | 42 +- src/common/util.cpp | 21 +- src/common/util.h | 17 +- src/common/variant_helper.h | 17 +- src/common/varint.h | 17 +- src/config/CMakeLists.txt | 29 + src/config/check-config.cmake | 33 + .../currency_config.h.in | 39 +- src/config/default.cmake | 50 + src/connectivity_tool/conn_tool.cpp | 19 +- src/crypto/RIPEMD160.c | 50 +- src/crypto/RIPEMD160.h | 50 +- src/crypto/RIPEMD160_helper.cpp | 19 +- src/crypto/RIPEMD160_helper.h | 19 +- src/crypto/bitcoin/byteswap.h | 19 +- src/crypto/bitcoin/common.h | 19 +- src/crypto/bitcoin/cpuid.h | 19 +- src/crypto/bitcoin/endian.h | 19 +- src/crypto/bitcoin/sha256.cpp | 19 +- src/crypto/bitcoin/sha256.h | 19 +- src/crypto/bitcoin/sha256_helper.h | 19 +- src/crypto/blake2-impl.h | 30 +- src/crypto/blake2.h | 30 +- src/crypto/blake2b-ref.c | 30 +- src/crypto/chacha8.c | 17 + src/crypto/chacha8.h | 19 +- src/crypto/chacha8_stream.c | 17 + src/crypto/chacha8_stream.h | 17 + src/crypto/clsag.cpp | 20 +- src/crypto/clsag.h | 20 +- src/crypto/crypto-ops-data.c | 19 +- src/crypto/crypto-ops.c | 40 +- src/crypto/crypto-ops.h | 20 +- src/crypto/crypto-sugar.cpp | 20 +- src/crypto/crypto-sugar.h | 20 +- src/crypto/crypto.cpp | 19 +- src/crypto/crypto.h | 19 +- src/crypto/ecrypt-config.h | 17 + src/crypto/ecrypt-machine.h | 17 + src/crypto/ecrypt-portable.h | 17 + src/crypto/ecrypt-sync.h | 17 + src/crypto/eth_signature.cpp | 19 +- src/crypto/eth_signature.h | 19 +- src/crypto/generic-ops.h | 17 +- src/crypto/hash-ops.h | 19 +- src/crypto/hash.c | 20 +- src/crypto/hash.h | 19 +- src/crypto/initializer.h | 19 +- src/crypto/keccak.c | 17 + src/crypto/keccak.h | 17 + src/crypto/msm.cpp | 19 +- src/crypto/msm.h | 20 +- src/crypto/one_out_of_many_proofs.cpp | 23 +- src/crypto/one_out_of_many_proofs.h | 19 +- src/crypto/random.c | 20 +- src/crypto/random.h | 21 +- src/crypto/range_proof_bpp.h | 20 +- src/crypto/range_proof_bppe.h | 20 +- src/crypto/range_proofs.cpp | 20 +- src/crypto/range_proofs.h | 24 +- src/crypto/tree-hash.c | 19 +- src/crypto/zarcanum.cpp | 20 +- src/crypto/zarcanum.h | 20 +- src/currency_core/account.cpp | 17 +- src/currency_core/account.h | 17 +- .../account_boost_serialization.h | 17 +- src/currency_core/alias_helper.h | 15 +- src/currency_core/basic_api_response_codes.h | 17 +- src/currency_core/basic_kv_structs.h | 17 +- src/currency_core/basic_pow_helpers.cpp | 22 +- src/currency_core/basic_pow_helpers.h | 17 +- src/currency_core/bc_attachments_helpers.h | 16 +- .../bc_attachments_helpers_basic.h | 18 +- .../bc_attachments_service_manager.cpp | 16 +- .../bc_attachments_service_manager.h | 16 +- src/currency_core/bc_block_datetime_service.h | 19 +- src/currency_core/bc_escrow_service.h | 16 +- src/currency_core/bc_offers_serialization.h | 16 +- src/currency_core/bc_offers_service.cpp | 16 +- src/currency_core/bc_offers_service.h | 16 +- src/currency_core/bc_offers_service_basic.h | 16 +- src/currency_core/bc_payments_id_service.h | 16 +- src/currency_core/block_chain_shortener.cpp | 19 +- src/currency_core/block_chain_shortener.h | 17 +- src/currency_core/block_flags.h | 15 +- src/currency_core/blockchain_storage.cpp | 20 +- src/currency_core/blockchain_storage.h | 18 +- src/currency_core/blockchain_storage_basic.h | 18 +- .../blockchain_storage_boost_serialization.h | 17 +- src/currency_core/checkpoints.cpp | 17 +- src/currency_core/checkpoints.h | 17 +- src/currency_core/checkpoints_create.h | 17 +- src/currency_core/connection_context.h | 17 +- src/currency_core/core_runtime_config.h | 17 +- src/currency_core/core_tools.h | 18 +- src/currency_core/crypto_config.h | 18 +- src/currency_core/currency_basic.h | 24 +- .../currency_basic_backward_comp.inl | 19 +- .../currency_boost_serialization.h | 17 +- src/currency_core/currency_core.cpp | 20 +- src/currency_core/currency_core.h | 18 +- src/currency_core/currency_format_utils.cpp | 20 +- src/currency_core/currency_format_utils.h | 18 +- .../currency_format_utils_abstract.h | 19 +- .../currency_format_utils_blocks.cpp | 19 +- .../currency_format_utils_blocks.h | 19 +- .../currency_format_utils_transactions.cpp | 19 +- .../currency_format_utils_transactions.h | 19 +- src/currency_core/currency_stat_info.h | 17 +- src/currency_core/difficulty.cpp | 19 +- src/currency_core/difficulty.h | 17 +- src/currency_core/dispatch_core_events.h | 17 +- .../etc_custom_serialization.cpp | 17 +- src/currency_core/etc_custom_serialization.h | 17 +- .../generated/_genesis_tn.cpp.gen | 3 - src/currency_core/genesis.cpp | 22 +- src/currency_core/genesis.h | 22 +- src/currency_core/genesis_acc.cpp | 21 +- src/currency_core/genesis_acc.h | 16 +- src/currency_core/miner.cpp | 16 +- src/currency_core/miner.h | 18 +- src/currency_core/offers_service_basics.h | 20 +- src/currency_core/offers_services_helpers.cpp | 15 +- src/currency_core/offers_services_helpers.h | 15 +- src/currency_core/pos_mining.cpp | 18 +- src/currency_core/pos_mining.h | 18 +- src/currency_core/tx_pool.cpp | 19 +- src/currency_core/tx_pool.h | 17 +- src/currency_core/tx_semantic_validation.cpp | 19 +- src/currency_core/tx_semantic_validation.h | 19 +- src/currency_core/verification_context.h | 17 +- src/currency_protocol/blobdatatype.h | 19 +- .../currency_protocol_defs.h | 19 +- .../currency_protocol_defs_print.h | 17 +- .../currency_protocol_handler.h | 17 +- .../currency_protocol_handler.inl | 19 +- .../currency_protocol_handler_common.h | 17 +- src/daemon/daemon.cpp | 19 +- src/daemon/daemon_commands_handler.h | 19 +- src/genesis/.genesis.txt | 1 + src/genesis/CMakeLists.txt | 37 + src/genesis/README.md | 44 + .../generated => genesis}/_genesis.cpp.gen | 0 .../generated => genesis}/_genesis.h.gen | 0 .../_genesis_acc.cpp.gen | 0 .../_genesis_acc_tn.cpp.gen | 4 +- src/genesis/_genesis_tn.cpp.gen | 3 + .../generated => genesis}/_genesis_tn.h.gen | 2 +- .../generate_test_genesis.cpp | 15 +- src/gui/qt-daemon/.gitignore | 1 - src/gui/qt-daemon/Info.plist.in | 63 - src/gui/qt-daemon/app.icns | Bin 89211 -> 0 bytes src/gui/qt-daemon/app.ico | Bin 111606 -> 0 bytes src/gui/qt-daemon/app.qrc | 5 - src/gui/qt-daemon/app.rc | 2 - src/gui/qt-daemon/application/gui_utils.cpp | 320 --- src/gui/qt-daemon/application/gui_utils.h | 14 - src/gui/qt-daemon/application/mainwindow.cpp | 2509 ----------------- src/gui/qt-daemon/application/mainwindow.h | 363 --- .../application/notification_helper.h | 21 - .../application/notification_helper.mm | 14 - .../qt-daemon/application/urleventfilter.cpp | 21 - .../qt-daemon/application/urleventfilter.h | 17 - src/gui/qt-daemon/main.cpp | 77 - src/gui/qt-daemon/qtlogger.h | 133 - src/miner/simpleminer.cpp | 20 +- src/miner/simpleminer.h | 20 +- src/miner/target_helper.h | 20 +- .../maintainers_info_boost_serialization.h | 17 +- src/p2p/net_node.h | 21 +- src/p2p/net_node.inl | 53 +- src/p2p/net_node_common.h | 17 +- src/p2p/net_peerlist.h | 21 +- src/p2p/net_peerlist_boost_serialization.h | 17 +- src/p2p/p2p_networks.h | 17 +- src/p2p/p2p_protocol_defs.h | 21 +- src/pch/stdafx.cpp | 17 + src/pch/stdafx.h | 20 +- src/platform/mingw/alloca.h | 19 +- src/platform/msc/alloca.h | 19 +- src/platform/msc/inline_c.h | 19 +- src/platform/msc/stdbool.h | 19 +- src/platform/msc/sys/param.h | 19 +- src/rpc/core_rpc_server.cpp | 23 +- src/rpc/core_rpc_server.h | 19 +- src/rpc/core_rpc_server_commands_defs.h | 25 +- src/rpc/core_rpc_server_error_codes.h | 17 +- src/serialization/binary_archive.h | 20 +- src/serialization/binary_utils.h | 20 +- src/serialization/boost_types.h | 21 +- src/serialization/debug_archive.h | 20 +- src/serialization/json_archive.h | 21 +- src/serialization/json_utils.h | 20 +- src/serialization/multiprecision.h | 19 +- src/serialization/serialization.h | 20 +- src/serialization/serialize_basic_types.h | 19 +- src/serialization/stl_containers.h | 20 +- src/serialization/string.h | 20 +- src/serialization/variant.h | 20 +- src/simplewallet/password_container.cpp | 19 +- src/simplewallet/password_container.h | 19 +- src/simplewallet/simplewallet.cpp | 50 +- src/simplewallet/simplewallet.h | 19 +- src/stratum/stratum_helpers.h | 18 +- src/stratum/stratum_server.cpp | 20 +- src/stratum/stratum_server.h | 18 +- src/version.h.in | 8 +- src/wallet/core_default_rpc_proxy.cpp | 17 +- src/wallet/core_default_rpc_proxy.h | 17 +- src/wallet/core_fast_rpc_proxy.h | 15 +- src/wallet/core_rpc_proxy.h | 17 +- src/wallet/decoy_selection.cpp | 19 +- src/wallet/decoy_selection.h | 19 +- .../decoy_selection_default_distribution.hpp | 19 +- src/wallet/plain_wallet_api.cpp | 25 +- src/wallet/plain_wallet_api.h | 19 +- src/wallet/plain_wallet_api_defs.h | 19 +- src/wallet/view_iface.h | 15 +- src/wallet/wallet2.cpp | 21 +- src/wallet/wallet2.h | 19 +- src/wallet/wallet2_base.h | 19 +- src/wallet/wallet2_escrow.cpp | 17 +- src/wallet/wallet_debug_events_definitions.h | 19 +- src/wallet/wallet_errors.h | 19 +- src/wallet/wallet_helpers.h | 19 +- src/wallet/wallet_id_adapter.h | 17 +- src/wallet/wallet_public_structs_defs.h | 27 +- src/wallet/wallet_rpc_server.cpp | 19 +- src/wallet/wallet_rpc_server.h | 19 +- src/wallet/wallet_rpc_server_error_codes.h | 17 +- src/wallet/wallets_manager.cpp | 15 +- src/wallet/wallets_manager.h | 15 +- src/wallet/wrap_service.h | 17 +- tests/CMakeLists.txt | 8 +- tests/db_tests/CMakeLists.txt | 2 +- utils/boost_1.70_gcc_8.patch | 15 - utils/build_mail.py | 36 - utils/build_script_linux.sh | 147 - utils/build_script_linux_appimage.sh | 159 -- utils/build_script_mac_osx.sh | 197 -- utils/build_script_windows.bat | 236 -- utils/configure_local_paths.cmd.example | 13 - utils/configure_local_paths_msvs2019.cmd | 9 - utils/configure_macos_xcodeproj.sh | 19 - utils/configure_win32_msvs2015_gui.cmd | 7 - utils/configure_win64_msvs2013_gui.cmd | 7 - utils/configure_win64_msvs2015_gui.cmd | 7 - utils/configure_win64_msvs2017_gui.cmd | 7 - .../configure_win64_msvs2017_gui_testnet.cmd | 7 - .../configure_win64_msvs2019_gui_testnet.cmd | 7 - utils/configure_win64_msvs2022_gui.cmd | 7 - .../configure_win64_msvs2022_gui_testnet.cmd | 7 - utils/docker/containers/README.md | 5 + utils/docker/images/lthn-chain/Dockerfile | 85 + utils/gpg/zoidberg.asc | 52 - utils/macosx_build_config.command | 12 - utils/macosx_build_uploader.sh | 51 - utils/macosx_fix_boost_libs_path.sh | 63 - utils/macosx_fixup.sh | 28 - 343 files changed, 5675 insertions(+), 6304 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/build-docker.yml create mode 100644 .github/workflows/build-linux-arm64.yml rename .github/workflows/{build-linux.yml => build-linux-intel.yml} (64%) rename .github/workflows/{build-windows.yml => build-windows-intel.yml} (61%) delete mode 100644 LICENSE create mode 100644 LICENSE.txt create mode 100644 cmake/CPackConfig.cmake delete mode 100644 cmake/check-config-vars.cmake create mode 100644 cmake/conan_provider.cmake delete mode 100644 cmake/config-vars.cmake delete mode 100644 cmake/currency_configs/example.cmake rename cmake/profiles/{apple-clang-arm64-release => apple-clang-armv8} (84%) rename cmake/profiles/{apple-clang-amd64-release => apple-clang-x86_64} (78%) create mode 100644 cmake/profiles/gcc-linux-armv8 rename cmake/profiles/{gcc-linux-amd64-release => gcc-linux-x86_64} (88%) create mode 100644 cmake/profiles/msvc-193-x86_64 rename cmake/profiles/{msvc-194-amd64-release => msvc-194-x86_64} (89%) delete mode 100644 crowdin.yml create mode 100644 src/config/CMakeLists.txt create mode 100644 src/config/check-config.cmake rename src/{currency_core => config}/currency_config.h.in (91%) create mode 100644 src/config/default.cmake delete mode 100644 src/currency_core/generated/_genesis_tn.cpp.gen create mode 100644 src/genesis/.genesis.txt create mode 100644 src/genesis/CMakeLists.txt create mode 100644 src/genesis/README.md rename src/{currency_core/generated => genesis}/_genesis.cpp.gen (100%) rename src/{currency_core/generated => genesis}/_genesis.h.gen (100%) rename src/{currency_core/generated => genesis}/_genesis_acc.cpp.gen (100%) rename src/{currency_core/generated => genesis}/_genesis_acc_tn.cpp.gen (64%) create mode 100644 src/genesis/_genesis_tn.cpp.gen rename src/{currency_core/generated => genesis}/_genesis_tn.h.gen (69%) rename src/{genesis_generator => genesis}/generate_test_genesis.cpp (92%) delete mode 100644 src/gui/qt-daemon/.gitignore delete mode 100644 src/gui/qt-daemon/Info.plist.in delete mode 100644 src/gui/qt-daemon/app.icns delete mode 100644 src/gui/qt-daemon/app.ico delete mode 100644 src/gui/qt-daemon/app.qrc delete mode 100644 src/gui/qt-daemon/app.rc delete mode 100644 src/gui/qt-daemon/application/gui_utils.cpp delete mode 100644 src/gui/qt-daemon/application/gui_utils.h delete mode 100644 src/gui/qt-daemon/application/mainwindow.cpp delete mode 100644 src/gui/qt-daemon/application/mainwindow.h delete mode 100644 src/gui/qt-daemon/application/notification_helper.h delete mode 100644 src/gui/qt-daemon/application/notification_helper.mm delete mode 100644 src/gui/qt-daemon/application/urleventfilter.cpp delete mode 100644 src/gui/qt-daemon/application/urleventfilter.h delete mode 100644 src/gui/qt-daemon/main.cpp delete mode 100644 src/gui/qt-daemon/qtlogger.h delete mode 100644 utils/boost_1.70_gcc_8.patch delete mode 100644 utils/build_mail.py delete mode 100755 utils/build_script_linux.sh delete mode 100755 utils/build_script_linux_appimage.sh delete mode 100755 utils/build_script_mac_osx.sh delete mode 100644 utils/build_script_windows.bat delete mode 100644 utils/configure_local_paths.cmd.example delete mode 100644 utils/configure_local_paths_msvs2019.cmd delete mode 100755 utils/configure_macos_xcodeproj.sh delete mode 100644 utils/configure_win32_msvs2015_gui.cmd delete mode 100644 utils/configure_win64_msvs2013_gui.cmd delete mode 100644 utils/configure_win64_msvs2015_gui.cmd delete mode 100644 utils/configure_win64_msvs2017_gui.cmd delete mode 100644 utils/configure_win64_msvs2017_gui_testnet.cmd delete mode 100644 utils/configure_win64_msvs2019_gui_testnet.cmd delete mode 100644 utils/configure_win64_msvs2022_gui.cmd delete mode 100644 utils/configure_win64_msvs2022_gui_testnet.cmd create mode 100644 utils/docker/containers/README.md create mode 100644 utils/docker/images/lthn-chain/Dockerfile delete mode 100644 utils/gpg/zoidberg.asc delete mode 100644 utils/macosx_build_config.command delete mode 100644 utils/macosx_build_uploader.sh delete mode 100644 utils/macosx_fix_boost_libs_path.sh delete mode 100644 utils/macosx_fixup.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..a67bd21f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +build +.github +.idea +docs +resources +snap +tests +CMakeUserPresets.json \ No newline at end of file diff --git a/.github/actions/upload-artifacts/action.yml b/.github/actions/upload-artifacts/action.yml index 927df0b1..2cefbdd3 100644 --- a/.github/actions/upload-artifacts/action.yml +++ b/.github/actions/upload-artifacts/action.yml @@ -29,6 +29,14 @@ runs: FILENAME="${{ inputs.chain-network }}-${{ inputs.asset-type }}-${TARGET_OS}-${LOWERCASE_ARCH}" echo "key=$FILENAME" >> $GITHUB_OUTPUT + VERSION=$(grep '^BUILD_VERSION:=' Makefile | cut -d'=' -f2) + # Check if a version was found + if [ -z "$VERSION" ]; then + echo "Error: BUILD_VERSION could not be found in the Makefile." >&2 + exit 1 + fi + echo "version=${VERSION}" >> "$GITHUB_OUTPUT" + # Format the output to be a multi-line string. # This is the correct way to pass a multi-line string in GITHUB_OUTPUT. echo "paths<> "$GITHUB_OUTPUT" @@ -58,3 +66,11 @@ runs: with: name: ${{ steps.asset.outputs.key }} path: ${{ steps.asset.outputs.paths }} + + - name: Make Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.asset.outputs.version }}${{ inputs.chain-network == 'mainnet' && '' || '-pre' }}+${{ github.run_number }} + prerelease: ${{ contains(inputs.chain-network, 'testnet') }} + files: ${{ inputs.asset-directory }}/lethean-* + target_commitish: ${{ github.sha }} \ No newline at end of file diff --git a/.github/workflows/_on-pr-fast.yml b/.github/workflows/_on-pr-fast.yml index a0cb7ec3..87d0734b 100644 --- a/.github/workflows/_on-pr-fast.yml +++ b/.github/workflows/_on-pr-fast.yml @@ -1,6 +1,6 @@ name: PR Fast permissions: - contents: read + contents: write on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/.github/workflows/_on-pr.yml b/.github/workflows/_on-pr.yml index c465d570..4a23b8d1 100644 --- a/.github/workflows/_on-pr.yml +++ b/.github/workflows/_on-pr.yml @@ -1,6 +1,6 @@ name: PR permissions: - contents: read + contents: write on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -14,30 +14,69 @@ concurrency: cancel-in-progress: true jobs: - build-linux: - name: Compile - if: github.event.review.state == 'approved' && !github.event.pull_request.draft - uses: ./.github/workflows/build-linux.yml + build-linux-intel: + name: Chain + if: | + (github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') || + (github.event.review.state == 'approved' && !github.event.pull_request.draft) + uses: ./.github/workflows/build-linux-intel.yml + secrets: inherit with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} - build-windows: - name: Compile - if: github.event.review.state == 'approved' && !github.event.pull_request.draft - uses: ./.github/workflows/build-windows.yml + build-linux-arm: + name: Chain + if: | + (github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') || + (github.event.review.state == 'approved' && !github.event.pull_request.draft) + uses: ./.github/workflows/build-linux-arm64.yml + secrets: inherit + with: + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + + build-windows-intel: + name: Chain + if: | + (github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') || + (github.event.review.state == 'approved' && !github.event.pull_request.draft) + uses: ./.github/workflows/build-windows-intel.yml + secrets: inherit with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} build-macos-arm64: - name: Compile + name: Chain + if: | + (github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') || + (github.event.review.state == 'approved' && !github.event.pull_request.draft) uses: ./.github/workflows/build-macos-arm64.yml + secrets: inherit with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} build-macos-intel: - name: Compile - if: github.event.review.state == 'approved' && !github.event.pull_request.draft + name: Chain + if: | + (github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') || + (github.event.review.state == 'approved' && !github.event.pull_request.draft) uses: ./.github/workflows/build-macos-intel.yml + secrets: inherit with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + build-docker: + name: Docker + if: | + (github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') || + (github.event.review.state == 'approved' && !github.event.pull_request.draft) + uses: ./.github/workflows/build-docker.yml + secrets: inherit + with: + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + + build-docs: + name: Docs + if: | + (github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') || + (github.event.review.state == 'approved' && !github.event.pull_request.draft) + uses: ./.github/workflows/build-docs.yml diff --git a/.github/workflows/_on-push.yml b/.github/workflows/_on-push.yml index f2684ffa..38d9fb4c 100644 --- a/.github/workflows/_on-push.yml +++ b/.github/workflows/_on-push.yml @@ -1,13 +1,13 @@ -name: Push Full Build +name: Push Compile permissions: - contents: read + contents: write + packages: write on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: push: branches: - 'dev' - - 'dev-*' - 'main' concurrency: @@ -15,30 +15,43 @@ concurrency: cancel-in-progress: true jobs: - build-linux: - name: Compile - uses: ./.github/workflows/build-linux.yml + build-linux-intel: + name: Chain + uses: ./.github/workflows/build-linux-intel.yml with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} - build-windows: - name: Compile - uses: ./.github/workflows/build-windows.yml + build-linux-arm: + name: Chain + uses: ./.github/workflows/build-linux-arm64.yml + with: + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + + build-windows-intel: + name: Chain + uses: ./.github/workflows/build-windows-intel.yml with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} build-macos-arm64: - name: Compile + name: Chain uses: ./.github/workflows/build-macos-arm64.yml with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} build-macos-intel: - name: Compile + name: Chain uses: ./.github/workflows/build-macos-intel.yml with: chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + build-docker: + name: Docker + uses: ./.github/workflows/build-docker.yml + with: + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + secrets: inherit + build-docs: name: Docs uses: ./.github/workflows/build-docs.yml diff --git a/.github/workflows/_on-release.yml b/.github/workflows/_on-release.yml index c89cace9..7c83d56a 100644 --- a/.github/workflows/_on-release.yml +++ b/.github/workflows/_on-release.yml @@ -1,6 +1,6 @@ name: Push Full Build permissions: - contents: read + contents: write on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -37,30 +37,47 @@ jobs: echo "Source Branch: $SOURCE_BRANCH" echo "Chain Network: ${{ steps.get_branch.outputs.chain_network }}" - build-linux: - name: Compile - needs: determine-network - uses: ./.github/workflows/build-linux.yml + build-linux-intel: + name: Chain + uses: ./.github/workflows/build-linux-intel.yml + secrets: inherit with: - chain-network: ${{ needs.determine-network.outputs.chain-network }} + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} - build-windows: - name: Compile - needs: determine-network - uses: ./.github/workflows/build-windows.yml + build-linux-arm: + name: Chain + uses: ./.github/workflows/build-linux-arm64.yml + secrets: inherit with: - chain-network: ${{ needs.determine-network.outputs.chain-network }} + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + + build-windows-intel: + name: Chain + uses: ./.github/workflows/build-windows-intel.yml + with: + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} build-macos-arm64: - name: Compile - needs: determine-network + name: Chain uses: ./.github/workflows/build-macos-arm64.yml + secrets: inherit with: - chain-network: ${{ needs.determine-network.outputs.chain-network }} + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} build-macos-intel: - name: Compile - needs: determine-network + name: Chain uses: ./.github/workflows/build-macos-intel.yml + secrets: inherit with: - chain-network: ${{ needs.determine-network.outputs.chain-network }} + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + + build-docker: + name: Docker + uses: ./.github/workflows/build-docker.yml + secrets: inherit + with: + chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} + + build-docs: + name: Docs + uses: ./.github/workflows/build-docs.yml diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml new file mode 100644 index 00000000..0a88fab3 --- /dev/null +++ b/.github/workflows/build-docker.yml @@ -0,0 +1,52 @@ +name: Docker +permissions: + contents: read +on: + workflow_call: + secrets: + DOCKERHUB_USERNAME: + required: true + DOCKERHUB_TOKEN: + required: true + inputs: + chain-network: + description: "The network to use, can either be testnet, stagenet or mainnet" + default: testnet + required: false + type: string + +jobs: + build: + name: "lthn/chain:${{ inputs.chain-network == 'testnet' && 'testnet' || 'latest' }}" + runs-on: ubuntu-22.04 + steps: + - name: Checkout Project + uses: actions/checkout@v4.2.2 + with: + fetch-depth: 0 + submodules: recursive + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v6 + with: + file: utils/docker/images/lthn-chain/Dockerfile + context: ${{ github.workspace }} + push: true + build-args: | + BUILD_TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} + THREADS=2 + BUILD_TARGET=gcc-linux-x86_64 + BUILD_LOCAL=1 + tags: lthn/chain:${{ inputs.chain-network == 'testnet' && 'testnet' || 'latest' }} + diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index f5662733..bd742fdf 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -6,6 +6,7 @@ on: jobs: deploy: + name: Offline Local Version runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/build-linux-arm64.yml b/.github/workflows/build-linux-arm64.yml new file mode 100644 index 00000000..4269e3db --- /dev/null +++ b/.github/workflows/build-linux-arm64.yml @@ -0,0 +1,48 @@ +name: Linux +permissions: + contents: write +on: + workflow_call: + inputs: + chain-network: + description: "The network to use, can either be testnet, stagenet or mainnet" + default: testnet + required: false + type: string + +jobs: + build: + name: gcc-linux-arm64 + runs-on: ubuntu-22.04-arm + steps: + - name: Checkout Project + uses: actions/checkout@v4.2.2 + with: + fetch-depth: 0 + submodules: recursive + + - name: install dependencies + run: sudo apt-get install -y autotools-dev git build-essential + + - name: Cache SDK Folder + uses: actions/cache@v4 + with: + path: ${{ github.workspace }}/build/sdk + key: ${{ runner.os }}-${{ runner.arch }}-sdk + + - name: Install Conan + uses: conan-io/setup-conan@v1 + with: + home: ${{ github.workspace }}/build/sdk + cache_packages: false + + - name: Compile Release + run: make release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} + + - name: CLI Artifacts + uses: ./.github/actions/upload-artifacts + with: + chain-network: ${{ inputs.chain-network }} + assets: lethean-* + asset-type: 'cli' + asset-directory: ${{ github.workspace }}/build/release/packages diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux-intel.yml similarity index 64% rename from .github/workflows/build-linux.yml rename to .github/workflows/build-linux-intel.yml index cbf8df4f..e5125b98 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux-intel.yml @@ -1,6 +1,6 @@ -name: build-linux +name: Linux permissions: - contents: read + contents: write on: workflow_call: inputs: @@ -12,7 +12,7 @@ on: jobs: build: - name: gcc-linux-amd64-release + name: gcc-linux-x86_64 runs-on: ubuntu-22.04 steps: - name: Checkout Project @@ -24,21 +24,25 @@ jobs: - name: install dependencies run: sudo apt-get install -y autotools-dev git build-essential + - name: Cache SDK Folder + uses: actions/cache@v4 + with: + path: ${{ github.workspace }}/build/sdk + key: ${{ runner.os }}-${{ runner.arch }}-sdk + - name: Install Conan uses: conan-io/setup-conan@v1 with: home: ${{ github.workspace }}/build/sdk - cache_packages: true + cache_packages: false - name: Compile Release - run: make gcc-linux-amd64-release + run: make release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} - name: CLI Artifacts uses: ./.github/actions/upload-artifacts with: chain-network: ${{ inputs.chain-network }} - assets: | - zanod - simplewallet + assets: lethean-* asset-type: 'cli' - asset-directory: ${{ github.workspace }}/build/gcc-linux-amd64-release/src + asset-directory: ${{ github.workspace }}/build/release/packages diff --git a/.github/workflows/build-macos-arm64.yml b/.github/workflows/build-macos-arm64.yml index a5f3cde0..dd53cb1e 100644 --- a/.github/workflows/build-macos-arm64.yml +++ b/.github/workflows/build-macos-arm64.yml @@ -1,6 +1,6 @@ name: build-macos-arm64 permissions: - contents: read + contents: write on: workflow_call: inputs: @@ -13,7 +13,7 @@ on: jobs: build-cli: - name: apple-clang-arm64-release + name: apple-clang-armv8 runs-on: macos-15 steps: - name: Checkout Project @@ -22,21 +22,30 @@ jobs: fetch-depth: 0 submodules: recursive + + - name: Cache SDK Folder + uses: actions/cache@v4 + with: + path: ${{ github.workspace }}/build/sdk + key: ${{ runner.os }}-${{ runner.arch }}-sdk + - name: Install Conan uses: conan-io/setup-conan@v1 with: home: ${{ github.workspace }}/build/sdk - cache_packages: true + cache_packages: false + +# - name: Compile Release +# run: make apple-clang-armv8 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} - name: Compile Release - run: make apple-clang-arm64-release + run: make release CPU_CORES=3 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} + - name: CLI Artifacts uses: ./.github/actions/upload-artifacts with: chain-network: ${{ inputs.chain-network }} - assets: | - zanod - simplewallet + assets: lethean-* asset-type: 'cli' - asset-directory: ${{ github.workspace }}/build/apple-clang-arm64-release/src \ No newline at end of file + asset-directory: ${{ github.workspace }}/build/release/packages diff --git a/.github/workflows/build-macos-intel.yml b/.github/workflows/build-macos-intel.yml index c81ee9a6..802e3834 100644 --- a/.github/workflows/build-macos-intel.yml +++ b/.github/workflows/build-macos-intel.yml @@ -1,6 +1,6 @@ name: build-macos-intel permissions: - contents: read + contents: write on: workflow_call: inputs: @@ -12,7 +12,7 @@ on: jobs: build: - name: apple-clang-arm64-release + name: apple-clang-x86_64 runs-on: macos-13 steps: - name: Checkout Project @@ -21,21 +21,26 @@ jobs: fetch-depth: 0 submodules: recursive + + - name: Cache SDK Folder + uses: actions/cache@v4 + with: + path: ${{ github.workspace }}/build/sdk + key: ${{ runner.os }}-${{ runner.arch }}-sdk + - name: Install Conan uses: conan-io/setup-conan@v1 with: home: ${{ github.workspace }}/build/sdk - cache_packages: true + cache_packages: false - name: Compile Release - run: make apple-clang-arm64-release + run: make release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} - name: CLI Artifacts uses: ./.github/actions/upload-artifacts with: chain-network: ${{ inputs.chain-network }} - assets: | - zanod - simplewallet + assets: lethean-* asset-type: 'cli' - asset-directory: ${{ github.workspace }}/build/apple-clang-arm64-release/src + asset-directory: ${{ github.workspace }}/build/release/packages diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows-intel.yml similarity index 61% rename from .github/workflows/build-windows.yml rename to .github/workflows/build-windows-intel.yml index a1182673..2f00e6c6 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows-intel.yml @@ -1,6 +1,6 @@ name: build-windows permissions: - contents: read + contents: write on: workflow_call: inputs: @@ -11,8 +11,8 @@ on: type: string jobs: - build: - name: msvc-194-amd64-release + msvc-194: + name: msvc-194-x86_64 runs-on: windows-2022 steps: - name: Checkout Project @@ -21,21 +21,25 @@ jobs: fetch-depth: 0 submodules: recursive + - name: Cache SDK Folder + uses: actions/cache@v4 + with: + path: ${{ github.workspace }}/build/sdk + key: ${{ runner.os }}-${{ runner.arch }}-sdk + - name: Install Conan uses: conan-io/setup-conan@v1 with: home: ${{ github.workspace }}/build/sdk - cache_packages: true + cache_packages: false - name: Compile Release - run: make msvc-194-amd64-release + run: make release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} - name: CLI Artifacts uses: ./.github/actions/upload-artifacts with: chain-network: ${{ inputs.chain-network }} - assets: | - zanod.exe - simplewallet.exe + assets: lethean-* asset-type: 'cli' - asset-directory: ${{ github.workspace }}/build/msvc-194-amd64-release/src/Release + asset-directory: ${{ github.workspace }}/build/release/packages diff --git a/CMakeLists.txt b/CMakeLists.txt index e72515a9..4e301d0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,10 @@ cmake_minimum_required(VERSION 3.16) set(DISABLE_TOR TRUE CACHE BOOL "Disable TOR library(and related tor-connect submodule)") -PROJECT(Zano) -set(VERSION "1.0") +PROJECT(Lethean) + +set(VERSION "1.0" CACHE STRING "Build version") + message("OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}") message("OPENSSL_CRYPTO_LIBRARY: ${OPENSSL_CRYPTO_LIBRARY}") @@ -210,7 +212,7 @@ else() else() set(DEBUG_FLAGS "-g3 -O0") endif() - set(RELEASE_FLAGS "-O3 -ffast-math -DNDEBUG -Wno-unused-variable") + set(RELEASE_FLAGS "-O3 -ffast-math -DNDEBUG -w") if(NOT APPLE AND NOT (CMAKE_SYSTEM_NAME STREQUAL "Android")) set(RELEASE_FLAGS "${RELEASE_FLAGS} -flto=auto -g3") @@ -266,10 +268,6 @@ elseif(NOT MSVC AND NOT APPLE AND NOT CAKEWALLET AND STATIC) list(APPEND Boost_LIBRARIES icui18n.a icuuc.a icudata.a dl) endif() -if(BUILD_GUI) - find_package(Qt6 REQUIRED COMPONENTS Core5Compat Widgets WebEngineWidgets WebChannel PrintSupport) - message(STATUS "Found QT Packages") -endif() set(COMMIT_ID_IN_VERSION ON CACHE BOOL "Include commit ID in version") file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/version") @@ -297,7 +295,7 @@ else() endif() endif() -set(BUILD_TESTS FALSE CACHE BOOL "Build Zano tests") +set(BUILD_TESTS FALSE CACHE BOOL "Build Lethean tests") set(DISABLE_MDBX FALSE CACHE BOOL "Exclude mdbx from build(need for a first time)") if(NOT DISABLE_MDBX) add_definitions(-DENABLED_ENGINE_MDBX) @@ -310,3 +308,5 @@ add_subdirectory(src) if (BUILD_TESTS) add_subdirectory(tests) endif() + +include(CPackConfig) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 171d1de5..00000000 --- a/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (C) 2024 Zano project - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ZANO PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Zano project shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Zano project. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..de0a6513 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,288 @@ + EUROPEAN UNION PUBLIC LICENCE v. 1.2 + EUPL © the European Union 2007, 2016 + +This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined +below) which is provided under the terms of this Licence. Any use of the Work, +other than as authorised under this Licence is prohibited (to the extent such +use is covered by a right of the copyright holder of the Work). + +The Work is provided under the terms of this Licence when the Licensor (as +defined below) has placed the following notice immediately following the +copyright notice for the Work: + + Licensed under the EUPL + +or has expressed by any other means his willingness to license under the EUPL. + +1. Definitions + +In this Licence, the following terms have the following meaning: + +- ‘The Licence’: this Licence. + +- ‘The Original Work’: the work or software distributed or communicated by the + Licensor under this Licence, available as Source Code and also as Executable + Code as the case may be. + +- ‘Derivative Works’: the works or software that could be created by the + Licensee, based upon the Original Work or modifications thereof. This Licence + does not define the extent of modification or dependence on the Original Work + required in order to classify a work as a Derivative Work; this extent is + determined by copyright law applicable in the country mentioned in Article 15. + +- ‘The Work’: the Original Work or its Derivative Works. + +- ‘The Source Code’: the human-readable form of the Work which is the most + convenient for people to study and modify. + +- ‘The Executable Code’: any code which has generally been compiled and which is + meant to be interpreted by a computer as a program. + +- ‘The Licensor’: the natural or legal person that distributes or communicates + the Work under the Licence. + +- ‘Contributor(s)’: any natural or legal person who modifies the Work under the + Licence, or otherwise contributes to the creation of a Derivative Work. + +- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of + the Work under the terms of the Licence. + +- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, + renting, distributing, communicating, transmitting, or otherwise making + available, online or offline, copies of the Work or providing access to its + essential functionalities at the disposal of any other natural or legal + person. + +2. Scope of the rights granted by the Licence + +The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +sublicensable licence to do the following, for the duration of copyright vested +in the Original Work: + +- use the Work in any circumstance and for all usage, +- reproduce the Work, +- modify the Work, and make Derivative Works based upon the Work, +- communicate to the public, including the right to make available or display + the Work or copies thereof to the public and perform publicly, as the case may + be, the Work, +- distribute the Work or copies thereof, +- lend and rent the Work or copies thereof, +- sublicense rights in the Work or copies thereof. + +Those rights can be exercised on any media, supports and formats, whether now +known or later invented, as far as the applicable law permits so. + +In the countries where moral rights apply, the Licensor waives his right to +exercise his moral right to the extent allowed by law in order to make effective +the licence of the economic rights here above listed. + +The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to +any patents held by the Licensor, to the extent necessary to make use of the +rights granted on the Work under this Licence. + +3. Communication of the Source Code + +The Licensor may provide the Work either in its Source Code form, or as +Executable Code. If the Work is provided as Executable Code, the Licensor +provides in addition a machine-readable copy of the Source Code of the Work +along with each copy of the Work that the Licensor distributes or indicates, in +a notice following the copyright notice attached to the Work, a repository where +the Source Code is easily and freely accessible for as long as the Licensor +continues to distribute or communicate the Work. + +4. Limitations on copyright + +Nothing in this Licence is intended to deprive the Licensee of the benefits from +any exception or limitation to the exclusive rights of the rights owners in the +Work, of the exhaustion of those rights or of other applicable limitations +thereto. + +5. Obligations of the Licensee + +The grant of the rights mentioned above is subject to some restrictions and +obligations imposed on the Licensee. Those obligations are the following: + +Attribution right: The Licensee shall keep intact all copyright, patent or +trademarks notices and all notices that refer to the Licence and to the +disclaimer of warranties. The Licensee must include a copy of such notices and a +copy of the Licence with every copy of the Work he/she distributes or +communicates. The Licensee must cause any Derivative Work to carry prominent +notices stating that the Work has been modified and the date of modification. + +Copyleft clause: If the Licensee distributes or communicates copies of the +Original Works or Derivative Works, this Distribution or Communication will be +done under the terms of this Licence or of a later version of this Licence +unless the Original Work is expressly distributed only under this version of the +Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee +(becoming Licensor) cannot offer or impose any additional terms or conditions on +the Work or Derivative Work that alter or restrict the terms of the Licence. + +Compatibility clause: If the Licensee Distributes or Communicates Derivative +Works or copies thereof based upon both the Work and another work licensed under +a Compatible Licence, this Distribution or Communication can be done under the +terms of this Compatible Licence. For the sake of this clause, ‘Compatible +Licence’ refers to the licences listed in the appendix attached to this Licence. +Should the Licensee's obligations under the Compatible Licence conflict with +his/her obligations under this Licence, the obligations of the Compatible +Licence shall prevail. + +Provision of Source Code: When distributing or communicating copies of the Work, +the Licensee will provide a machine-readable copy of the Source Code or indicate +a repository where this Source will be easily and freely available for as long +as the Licensee continues to distribute or communicate the Work. + +Legal Protection: This Licence does not grant permission to use the trade names, +trademarks, service marks, or names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the copyright notice. + +6. Chain of Authorship + +The original Licensor warrants that the copyright in the Original Work granted +hereunder is owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each Contributor warrants that the copyright in the modifications he/she brings +to the Work are owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each time You accept the Licence, the original Licensor and subsequent +Contributors grant You a licence to their contributions to the Work, under the +terms of this Licence. + +7. Disclaimer of Warranty + +The Work is a work in progress, which is continuously improved by numerous +Contributors. It is not a finished work and may therefore contain defects or +‘bugs’ inherent to this type of development. + +For the above reason, the Work is provided under the Licence on an ‘as is’ basis +and without warranties of any kind concerning the Work, including without +limitation merchantability, fitness for a particular purpose, absence of defects +or errors, accuracy, non-infringement of intellectual property rights other than +copyright as stated in Article 6 of this Licence. + +This disclaimer of warranty is an essential part of the Licence and a condition +for the grant of any rights to the Work. + +8. Disclaimer of Liability + +Except in the cases of wilful misconduct or damages directly caused to natural +persons, the Licensor will in no event be liable for any direct or indirect, +material or moral, damages of any kind, arising out of the Licence or of the use +of the Work, including without limitation, damages for loss of goodwill, work +stoppage, computer failure or malfunction, loss of data or any commercial +damage, even if the Licensor has been advised of the possibility of such damage. +However, the Licensor will be liable under statutory product liability laws as +far such laws apply to the Work. + +9. Additional agreements + +While distributing the Work, You may choose to conclude an additional agreement, +defining obligations or services consistent with this Licence. However, if +accepting obligations, You may act only on your own behalf and on your sole +responsibility, not on behalf of the original Licensor or any other Contributor, +and only if You agree to indemnify, defend, and hold each Contributor harmless +for any liability incurred by, or claims asserted against such Contributor by +the fact You have accepted any warranty or additional liability. + +10. Acceptance of the Licence + +The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ +placed under the bottom of a window displaying the text of this Licence or by +affirming consent in any other similar way, in accordance with the rules of +applicable law. Clicking on that icon indicates your clear and irrevocable +acceptance of this Licence and all of its terms and conditions. + +Similarly, you irrevocably accept this Licence and all of its terms and +conditions by exercising any rights granted to You by Article 2 of this Licence, +such as the use of the Work, the creation by You of a Derivative Work or the +Distribution or Communication by You of the Work or copies thereof. + +11. Information to the public + +In case of any Distribution or Communication of the Work by means of electronic +communication by You (for example, by offering to download the Work from a +remote location) the distribution channel or media (for example, a website) must +at least provide to the public the information requested by the applicable law +regarding the Licensor, the Licence and the way it may be accessible, concluded, +stored and reproduced by the Licensee. + +12. Termination of the Licence + +The Licence and the rights granted hereunder will terminate automatically upon +any breach by the Licensee of the terms of the Licence. + +Such a termination will not terminate the licences of any person who has +received the Work from the Licensee under the Licence, provided such persons +remain in full compliance with the Licence. + +13. Miscellaneous + +Without prejudice of Article 9 above, the Licence represents the complete +agreement between the Parties as to the Work. + +If any provision of the Licence is invalid or unenforceable under applicable +law, this will not affect the validity or enforceability of the Licence as a +whole. Such provision will be construed or reformed so as necessary to make it +valid and enforceable. + +The European Commission may publish other linguistic versions or new versions of +this Licence or updated versions of the Appendix, so far this is required and +reasonable, without reducing the scope of the rights granted by the Licence. New +versions of the Licence will be published with a unique version number. + +All linguistic versions of this Licence, approved by the European Commission, +have identical value. Parties can take advantage of the linguistic version of +their choice. + +14. Jurisdiction + +Without prejudice to specific agreement between parties, + +- any litigation resulting from the interpretation of this License, arising + between the European Union institutions, bodies, offices or agencies, as a + Licensor, and any Licensee, will be subject to the jurisdiction of the Court + of Justice of the European Union, as laid down in article 272 of the Treaty on + the Functioning of the European Union, + +- any litigation arising between other parties and resulting from the + interpretation of this License, will be subject to the exclusive jurisdiction + of the competent court where the Licensor resides or conducts its primary + business. + +15. Applicable Law + +Without prejudice to specific agreement between parties, + +- this Licence shall be governed by the law of the European Union Member State + where the Licensor has his seat, resides or has his registered office, + +- this licence shall be governed by Belgian law if the Licensor has no seat, + residence or registered office inside a European Union Member State. + +Appendix + +‘Compatible Licences’ according to Article 5 EUPL are: + +- GNU General Public License (GPL) v. 2, v. 3 +- GNU Affero General Public License (AGPL) v. 3 +- Open Software License (OSL) v. 2.1, v. 3.0 +- Eclipse Public License (EPL) v. 1.0 +- CeCILL v. 2.0, v. 2.1 +- Mozilla Public Licence (MPL) v. 2 +- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 +- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for + works other than software +- European Union Public Licence (EUPL) v. 1.1, v. 1.2 +- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong + Reciprocity (LiLiQ-R+). + +The European Commission may update this Appendix to later versions of the above +licences without producing a new version of the EUPL, as long as they provide +the rights granted in Article 2 of this Licence and protect the covered Source +Code from exclusive appropriation. + +All other changes or additions to this Appendix require the production of a new +EUPL version. + diff --git a/Makefile b/Makefile index 589a5afb..88b0a5c1 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,9 @@ # Default to “unknown” – will be overwritten below. CPU_CORES := 1 +TESTNET:= 0 +BUILD_TYPE ?=Release +BUILD_VERSION:=6.0.1 # ----------------------------------------------------------------- # Unix‑like systems (Linux, macOS, *BSD, etc.) @@ -47,19 +50,19 @@ ifeq ($(OS),Windows_NT) endif endif -testnet-genesis-new: - $(eval command += $(cmake_release) $(testnet)) - $(call CMAKE,$(dir_release),$(command) -DGENERATE_PREMINE_WALLET=1 -DPREMINE_WALLET_PASSWORD=12345678) && cmake --build ./src --target premine_wallet || true - $(eval command += $(cmake_release) $(testnet)) - $(call CMAKE,$(dir_release),$(command) -DGENERATE_FRESH_GENESIS=1) && cmake --build ./src --target genesis_generator - $(eval command += $(cmake_release) $(testnet)) - $(call CMAKE,$(dir_release),$(command)) && $(MAKE) - -genesis-new: - $(eval command += $(cmake_release)) - $(call CMAKE,$(dir_release),$(command) -DGENERATE_FRESH_GENESIS=1) && cmake --build ./src --target genesis_generator - $(eval command += $(cmake_release)) - $(call CMAKE,$(dir_release),$(command)) && $(MAKE) +#testnet-genesis-new: +# $(eval command += $(cmake_release) $(testnet)) +# $(call CMAKE,$(dir_release),$(command) -DGENERATE_PREMINE_WALLET=1 -DPREMINE_WALLET_PASSWORD=12345678) && cmake --build ./src --target premine_wallet || true +# $(eval command += $(cmake_release) $(testnet)) +# $(call CMAKE,$(dir_release),$(command) -DGENERATE_FRESH_GENESIS=1) && cmake --build ./src --target genesis_generator +# $(eval command += $(cmake_release) $(testnet)) +# $(call CMAKE,$(dir_release),$(command)) && $(MAKE) +# +#genesis-new: +# $(eval command += $(cmake_release)) +# $(call CMAKE,$(dir_release),$(command) -DGENERATE_FRESH_GENESIS=1) && cmake --build ./src --target genesis_generator +# $(eval command += $(cmake_release)) +# $(call CMAKE,$(dir_release),$(command)) && $(MAKE) # ----------------------------------------------------------------- # Safety net – ensure we always have a positive integer. @@ -72,28 +75,30 @@ CONAN_CPU_COUNT=$(CPU_CORES) PROFILES := $(patsubst cmake/profiles/%,%,$(wildcard cmake/profiles/*)) SORTED_PROFILES := $(sort $(PROFILES)) CONAN_CACHE := $(CURDIR)/build/sdk -DEFAULT_CONAN_PROFILE := $(CONAN_CACHE)/cmake/profiles/default +DEFAULT_CONAN_PROFILE := $(CONAN_CACHE)/profiles/default +CC_DOCKER_FILE?=utils/docker/images/lthn-chain/Dockerfile all: help release: conan-profile-detect - @echo "Building profile: release" - CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/release --build=missing -s build_type=Release - cmake -S . -B build/release -DCMAKE_TOOLCHAIN_FILE=build/release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build build/release --config=Release --parallel=$(CPU_CORES) + @echo "Building profile: release $(TESTNET)" + CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/release --build=missing -s build_type=$(BUILD_TYPE) + cmake -S . -B build/release -DCMAKE_TOOLCHAIN_FILE=build/release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DTESTNET=$(TESTNET) -DBUILD_VERSION=$(BUILD_VERSION) + cmake --build build/release --config=$(BUILD_TYPE) --parallel=$(CPU_CORES) + (cd build/release && cpack) debug: conan-profile-detect @echo "Building profile: debug" CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/debug --build=missing -s build_type=Debug - cmake -S . -B build/debug -DCMAKE_TOOLCHAIN_FILE=build/debug/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug + cmake -S . -B build/debug -DCMAKE_TOOLCHAIN_FILE=build/debug/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -DTESTNET=$(TESTNET) cmake --build build/debug --config=Debug --parallel=$(CPU_CORES) static: static-release static-release: conan-profile-detect @echo "Building profile: release-static" - CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/release-static --build=missing - cmake -S . -B build/release-static -DCMAKE_TOOLCHAIN_FILE=build/release-static/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -D STATIC=ON - cmake --build build/release-static --config=Release --parallel=$(CPU_CORES) + CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/release-static --build=missing -s build_type=$(BUILD_TYPE) + cmake -S . -B build/release-static -DCMAKE_TOOLCHAIN_FILE=build/release-static/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -D STATIC=ON -DTESTNET=$(TESTNET) + cmake --build build/release-static --config=$(BUILD_TYPE) --parallel=$(CPU_CORES) conan-profile-detect: @if [ ! -f "$(DEFAULT_CONAN_PROFILE)" ]; then \ @@ -105,19 +110,23 @@ conan-profile-detect: # Rule for each profile $(PROFILES): conan-profile-detect @echo "Building profile: $@" - CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/$@ --profile=cmake/profiles/$@ --build=missing - cmake -S . -B build/$@ -DCMAKE_TOOLCHAIN_FILE=build/$@/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build build/$@ --config=Release --parallel=$(CPU_CORES) + CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/$@ -pr:b=$(DEFAULT_CONAN_PROFILE) -pr:h=cmake/profiles/$@ --build=missing -s build_type=$(BUILD_TYPE) + cmake -S . -B build/$@ -DCMAKE_TOOLCHAIN_FILE=build/$@/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DTESTNET=$(TESTNET) + cmake --build build/$@ --config=$(BUILD_TYPE) --parallel=$(CPU_CORES) help: @echo "Available targets:" - @printf " %-22s %s\n" "all:" "Build all profiles" - @printf " %-22s %s\n" "clean:" "Clean all build directories" - @printf " %-22s %s\n" "release:" "Build release" - @printf " %-22s %s\n" "static:" "Build static release" - @printf " %-22s %s\n" "debug:" "Build debug" - @$(foreach profile,$(SORTED_PROFILES),printf " %-22s %s\n" "make $(profile):" "Build the $(profile) profile";) - @printf " %-22s %s\n" "help:" "Show this help message" + @printf " %-42s %s\n" "make clean" "Clean all build directories" + @printf " %-42s %s\n" "make release" "Build release" + @printf " %-42s %s\n" "make static" "Build static release" + @printf " %-42s %s\n" "make debug" "Build debug" + @printf " %-42s %s\n" "make test" "Build & run tests" + @printf " %-42s %s\n" "make docs" "Builds offline documentation website" + @printf " %-42s %s\n" "make docs-dev" "Runs local doc server, for editing/adding docs" + @printf " %-42s %s\n" "make conan-profile-detect" "Creates host config" + @printf " %-42s %s\n" "make configure" "Runs a cmake configure within conan build flow" + @$(foreach profile,$(SORTED_PROFILES),printf " %-42s %s\n" "make $(profile)" "Build the $(profile) profile";) + @printf " %-42s %s\n" "make help" "Show this help message" # # Tests @@ -126,22 +135,22 @@ help: test: test-release test-release: @echo "Building profile: test-release" - CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/test-release --build=missing + CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/test-release --build=missing -s build_type=$(BUILD_TYPE) cmake -S . -B build/test-release -DCMAKE_TOOLCHAIN_FILE=build/test-release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -D BUILD_TESTS=ON cmake --build build/test-release --config=Release --parallel=$(CPU_CORES) $(MAKE) test test-debug: @echo "Building profile: test-debug" - CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/test-debug --build=missing + CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/test-debug --build=missing -s build_type=$(BUILD_TYPE) cmake -S . -B build/test-debug -DCMAKE_TOOLCHAIN_FILE=build/test-debug/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -D BUILD_TESTS=ON cmake --build build/test-debug --config=Debug --parallel=$(CPU_CORES) $(MAKE) test configure: @echo "Running Config: release" - CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/release --build=missing -s build_type=Release - cmake -S . -B build/release -DCMAKE_TOOLCHAIN_FILE=build/release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release + CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/release --build=missing -s build_type=$(BUILD_TYPE) + cmake -S . -B build/release -DCMAKE_TOOLCHAIN_FILE=build/release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) docs: configure @echo "Building Documentation" @@ -151,6 +160,29 @@ docs-dev: configure @echo "Building Documentation" cmake --build build/release --target=serve_docs --config=Release +docker-chain-node: + @echo "Building docker image: lthn/chain" + docker buildx build -f $(CC_DOCKER_FILE) -t lthn/chain $(CURDIR) + +docker-cc-linux-amd64: + docker buildx build -f $(CC_DOCKER_FILE) --target build-artifacts --output type=local,dest=build/cc-linux-amd64 --platform linux/amd64 $(CURDIR) + +docker-cc-linux-armv7: + docker buildx build -f $(CC_DOCKER_FILE) --target build-artifacts --output type=local,dest=build/cc-linux-armv7 --platform linux/arm/v7 $(CURDIR) + +docker-cc-linux-arm64v8: + docker buildx build -f $(CC_DOCKER_FILE) --target build-artifacts --output type=local,dest=build/cc-linux-arm64v8 --platform linux/arm64/v8 $(CURDIR) + +docker-cc-linux-ppc64le: + docker buildx build -f $(CC_DOCKER_FILE) --target build-artifacts --output type=local,dest=build/cc-linux-ppc64le --platform linux/ppc64le $(CURDIR) + +docker-cc-linux-riscv64: + docker buildx build -f $(CC_DOCKER_FILE) --target build-artifacts --output type=local,dest=build/cc-linux-riscv64 --platform linux/riscv64 $(CURDIR) + +docker-cc-linux-s390x: + docker buildx build -f $(CC_DOCKER_FILE) --target build-artifacts --output type=local,dest=build/cc-linux-s390x --platform linux/s390x $(CURDIR) + + clean: rm -rf build @@ -158,4 +190,4 @@ clean: tags: ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ src contrib tests/gtest -.PHONY: all release debug docs docs-dev configure static static-release test test-release test-debug clean tags conan-profile-detect $(PROFILES) +.PHONY: all release docker-chain-node debug docs docs-dev configure static static-release test test-release test-debug clean tags conan-profile-detect $(PROFILES) diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake new file mode 100644 index 00000000..4140328c --- /dev/null +++ b/cmake/CPackConfig.cmake @@ -0,0 +1,79 @@ + + +if(CMAKE_BUILD_TYPE STREQUAL "Release") + set(CPACK_PACKAGE_NAME "${package_name}") + set(CPACK_PACKAGE_VENDOR "${package_vendor}") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${package_description}") + set(CPACK_PACKAGE_VERSION "${BUILD_VERSION}") + set(CPACK_PACKAGE_CONTACT "${package_contact}") + set(CPACK_PACKAGE_HOMEPAGE_URL "${package_website}") + +# set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/local") # Linux/macOS default +# if(WIN32) +# set(CPACK_PACKAGING_INSTALL_PREFIX "C:/Program Files/${PROJECT_NAME}") +# endif() + + if(APPLE) + if("${package_macos_installer}" STREQUAL "DMG") + set(CPACK_GENERATOR "DragNDrop") +# set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/resources/dmg_background.png") + set(CPACK_DMG_VOLUME_NAME "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}") + message(STATUS "Registered CPACK_GENERATOR: DragNDrop") + else () + set(CPACK_GENERATOR "productbuild") + set(CPACK_PRODUCTBUILD_IDENTIFIER "${package_macos_pkg_productbuild_identifier}") +# set(CPACK_PRODUCTBUILD_SIGNING_IDENTITY "Developer ID Installer: Your Company (TEAMID)") + message(STATUS "Registered CPACK_GENERATOR: productbuild") + endif () + elseif(WIN32) + set(CPACK_GENERATOR "WIX") + message(STATUS "Registered CPACK_GENERATOR: WIX") +# set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/resources/windows_icon.ico") +# set(CPACK_WIX_LICENSE_RTF "${CMAKE_SOURCE_DIR}/LICENSE.rtf") +# set(CPACK_WIX_UPGRADE_GUID "D3F5A9C1-4B2E-4F5A-9C71-123456789ABC") # change once per major version + else() + set(CPACK_GENERATOR "DEB") + message(STATUS "Registered CPACK_GENERATOR: deb") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${package_contact}") + set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.28)") + set(CPACK_DEBIAN_PACKAGE_SECTION "utils") + set(CPACK_DEBIAN_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") + # post‑install script (e.g., to register a systemd service) +# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA +# "${CMAKE_SOURCE_DIR}/scripts/postinstall.sh") + endif() + + list(APPEND CPACK_GENERATOR "TXZ" "ZIP") + message(STATUS "Registered CPACK_GENERATOR: tgz") + message(STATUS "Registered CPACK_GENERATOR: zip") + set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF) + set(CPACK_ARCHIVE_COMPONENT_INSTALL OFF) + set(CPACK_COMPONENTS_ALL) + set(CPACK_GENERATE_SHASUM ON) + set(CPACK_SHASUM_ALGORITHM SHA256) + message(STATUS "Using SHA256 Checksums") + + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt") +# set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") + + set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/packages") + + install(FILES README.md LICENSE.txt + DESTINATION "share/doc/${CPACK_PACKAGE_NAME}" + ) + + set(_arch "${CMAKE_SYSTEM_PROCESSOR}") + + if(_arch MATCHES "AMD64|x86_64") + set(_arch "x86_64") + elseif(_arch MATCHES "arm64|aarch64") + set(_arch "arm64") + endif() + + string(TOLOWER "${CMAKE_SYSTEM_NAME}" _sys_name_lc) + + set(CPACK_PACKAGE_FILE_NAME + "${package_name}-${CPACK_PACKAGE_VERSION}-${_sys_name_lc}-${_arch}") + + include(CPack) +endif() \ No newline at end of file diff --git a/cmake/DocBuilder.cmake b/cmake/DocBuilder.cmake index c5b13c31..c02ad658 100644 --- a/cmake/DocBuilder.cmake +++ b/cmake/DocBuilder.cmake @@ -18,8 +18,7 @@ add_custom_target(docs # Optional install step install(DIRECTORY "${MKDOCS_OUT}/" - DESTINATION "share/doc/${PROJECT_NAME}" - COMPONENT docs) + DESTINATION "share/doc/${PROJECT_NAME}") add_custom_target(install-docs DEPENDS docs diff --git a/cmake/check-config-vars.cmake b/cmake/check-config-vars.cmake deleted file mode 100644 index b912cc39..00000000 --- a/cmake/check-config-vars.cmake +++ /dev/null @@ -1,57 +0,0 @@ -if (NOT DEFINED currency_display_decimal_point) - message(FATAL_ERROR "currency_display_decimal_point not set") -endif() -if (NOT DEFINED coin) - message(FATAL_ERROR "coin not set") -endif() -if (NOT DEFINED base_reward_dust_threshold) - message(FATAL_ERROR "base_reward_dust_threshold not set") -endif() -if (NOT DEFINED default_dust_threshold) - message(FATAL_ERROR "default_dust_threshold not set") -endif() -if (NOT DEFINED tx_default_fee) - message(FATAL_ERROR "tx_default_fee not set") -endif() -if (NOT DEFINED tx_minimum_fee) - message(FATAL_ERROR "tx_minimum_fee not set") -endif() -if (NOT DEFINED difficulty_pow_starter) - message(FATAL_ERROR "difficulty_pow_starter not set") -endif() -if (NOT DEFINED difficulty_pos_target) - message(FATAL_ERROR "difficulty_pos_target not set") -endif() -if (NOT DEFINED difficulty_pow_target) - message(FATAL_ERROR "difficulty_pow_target not set") -endif() -if (NOT DEFINED difficulty_window) - message(FATAL_ERROR "difficulty_window not set") -endif() -if (NOT DEFINED difficulty_lag) - message(FATAL_ERROR "difficulty_lag not set") -endif() -if (NOT DEFINED difficulty_cut) - message(FATAL_ERROR "difficulty_cut not set") -endif() -if (NOT DEFINED p2p_default_port) - message(FATAL_ERROR "p2p_default_port not set") -endif() -if (NOT DEFINED rpc_default_port) - message(FATAL_ERROR "rpc_default_port not set") -endif() -if (NOT DEFINED stratum_default_port) - message(FATAL_ERROR "stratum_default_port not set") -endif() -if (NOT DEFINED p2p_maintainers_pub_key) - message(FATAL_ERROR "p2p_maintainers_pub_key not set") -endif() -if (NOT DEFINED currency_name_abr) - message(FATAL_ERROR "currency_name_abr not set") -endif() -if (NOT DEFINED currency_name_base) - message(FATAL_ERROR "currency_name_base not set") -endif() -if (NOT DEFINED currency_name_short_base) - message(FATAL_ERROR "currency_name_short_base not set") -endif() diff --git a/cmake/conan_provider.cmake b/cmake/conan_provider.cmake new file mode 100644 index 00000000..d39187c6 --- /dev/null +++ b/cmake/conan_provider.cmake @@ -0,0 +1,682 @@ +# The MIT License (MIT) +# +# Copyright (c) 2024 JFrog +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +set(CONAN_MINIMUM_VERSION 2.0.5) + +# Create a new policy scope and set the minimum required cmake version so the +# features behind a policy setting like if(... IN_LIST ...) behaves as expected +# even if the parent project does not specify a minimum cmake version or a minimum +# version less than this module requires (e.g. 3.0) before the first project() call. +# (see: https://cmake.org/cmake/help/latest/variable/CMAKE_PROJECT_TOP_LEVEL_INCLUDES.html) +# +# The policy-affecting calls like cmake_policy(SET...) or `cmake_minimum_required` only +# affects the current policy scope, i.e. between the PUSH and POP in this case. +# +# https://cmake.org/cmake/help/book/mastering-cmake/chapter/Policies.html#the-policy-stack +cmake_policy(PUSH) +cmake_minimum_required(VERSION 3.24) + + +function(detect_os os os_api_level os_sdk os_subsystem os_version) + # it could be cross compilation + message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(${os} Macos PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") + set(${os} Neutrino PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") + set(${os} Windows PARENT_SCOPE) + set(${os_subsystem} cygwin PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") + set(${os} Windows PARENT_SCOPE) + set(${os_subsystem} msys2 PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + # https://github.com/emscripten-core/emscripten/blob/4.0.6/cmake/Modules/Platform/Emscripten.cmake#L17C1-L17C34 + set(${os} Emscripten PARENT_SCOPE) + else() + set(${os} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + if(DEFINED ANDROID_PLATFORM) + string(REGEX MATCH "[0-9]+" _os_api_level ${ANDROID_PLATFORM}) + elseif(DEFINED CMAKE_SYSTEM_VERSION) + set(_os_api_level ${CMAKE_SYSTEM_VERSION}) + endif() + message(STATUS "CMake-Conan: android api level=${_os_api_level}") + set(${os_api_level} ${_os_api_level} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") + # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja + # generators, but just has the original input string for Xcode. + if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) + set(_os_sdk ${CMAKE_OSX_SYSROOT}) + else() + if(CMAKE_OSX_SYSROOT MATCHES Simulator) + set(apple_platform_suffix simulator) + else() + set(apple_platform_suffix os) + endif() + if(CMAKE_OSX_SYSROOT MATCHES AppleTV) + set(_os_sdk "appletv${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) + set(_os_sdk "iphone${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES Watch) + set(_os_sdk "watch${apple_platform_suffix}") + endif() + endif() + if(DEFINED os_sdk) + message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") + set(${os_sdk} ${_os_sdk} PARENT_SCOPE) + endif() + if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) + message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(${os_version} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) + endif() + endif() + endif() +endfunction() + + +function(detect_arch arch) + # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. + # Therefore this code only finds one. If the recipes support multiple architectures, the + # build will work. Otherwise, there will be a linker error for the missing architecture(s). + if(DEFINED CMAKE_OSX_ARCHITECTURES) + string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") + list(LENGTH apple_arch_list apple_arch_count) + if(apple_arch_count GREATER 1) + message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") + endif() + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") + set(host_arch ${CMAKE_OSX_ARCHITECTURES}) + elseif(MSVC) + set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) + else() + set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) + endif() + if(host_arch MATCHES "aarch64|arm64|ARM64") + set(_arch armv8) + elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") + set(_arch armv7) + elseif(host_arch MATCHES armv7s) + set(_arch armv7s) + elseif(host_arch MATCHES "i686|i386|X86") + set(_arch x86) + elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") + set(_arch x86_64) + endif() + if(EMSCRIPTEN) + # https://github.com/emscripten-core/emscripten/blob/4.0.6/cmake/Modules/Platform/Emscripten.cmake#L294C1-L294C80 + set(_arch wasm) + endif() + message(STATUS "CMake-Conan: cmake_system_processor=${_arch}") + set(${arch} ${_arch} PARENT_SCOPE) +endfunction() + + +function(detect_cxx_standard cxx_standard) + set(${cxx_standard} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) + if(CMAKE_CXX_EXTENSIONS) + set(${cxx_standard} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) + endif() +endfunction() + + +macro(detect_gnu_libstdcxx) + # _conan_is_gnu_libstdcxx true if GNU libstdc++ + check_cxx_source_compiles(" + #include + #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) + static_assert(false); + #endif + int main(){}" _conan_is_gnu_libstdcxx) + + # _conan_gnu_libstdcxx_is_cxx11_abi true if C++11 ABI + check_cxx_source_compiles(" + #include + static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); + int main () {}" _conan_gnu_libstdcxx_is_cxx11_abi) + + set(_conan_gnu_libstdcxx_suffix "") + if(_conan_gnu_libstdcxx_is_cxx11_abi) + set(_conan_gnu_libstdcxx_suffix "11") + endif() + unset (_conan_gnu_libstdcxx_is_cxx11_abi) +endmacro() + + +macro(detect_libcxx) + # _conan_is_libcxx true if LLVM libc++ + check_cxx_source_compiles(" + #include + #if !defined(_LIBCPP_VERSION) + static_assert(false); + #endif + int main(){}" _conan_is_libcxx) +endmacro() + + +function(detect_lib_cxx lib_cxx) + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") + set(${lib_cxx} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) + return() + endif() + + include(CheckCXXSourceCompiles) + + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + detect_gnu_libstdcxx() + set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + set(${lib_cxx} "libc++" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + # Check for libc++ + detect_libcxx() + if(_conan_is_libcxx) + set(${lib_cxx} "libc++" PARENT_SCOPE) + return() + endif() + + # Check for libstdc++ + detect_gnu_libstdcxx() + if(_conan_is_gnu_libstdcxx) + set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE) + return() + endif() + + # TODO: it would be an error if we reach this point + elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # Do nothing - compiler.runtime and compiler.runtime_type + # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 + return() + else() + # TODO: unable to determine, ask user to provide a full profile file instead + endif() +endfunction() + + +function(detect_compiler compiler compiler_version compiler_runtime compiler_runtime_type) + if(DEFINED CMAKE_CXX_COMPILER_ID) + set(_compiler ${CMAKE_CXX_COMPILER_ID}) + set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION}) + else() + if(NOT DEFINED CMAKE_C_COMPILER_ID) + message(FATAL_ERROR "C or C++ compiler not defined") + endif() + set(_compiler ${CMAKE_C_COMPILER_ID}) + set(_compiler_version ${CMAKE_C_COMPILER_VERSION}) + endif() + + message(STATUS "CMake-Conan: CMake compiler=${_compiler}") + message(STATUS "CMake-Conan: CMake compiler version=${_compiler_version}") + + if(_compiler MATCHES MSVC) + set(_compiler "msvc") + string(SUBSTRING ${MSVC_VERSION} 0 3 _compiler_version) + # Configure compiler.runtime and compiler.runtime_type settings for MSVC + if(CMAKE_MSVC_RUNTIME_LIBRARY) + set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) + else() + set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake + endif() + + set(_KNOWN_MSVC_RUNTIME_VALUES "") + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) + + # only accept the 6 possible values, otherwise we don't don't know to map this + if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) + message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") + endif() + + # Runtime is "dynamic" in all cases if it ends in DLL + if(_msvc_runtime_library MATCHES ".*DLL$") + set(_compiler_runtime "dynamic") + else() + set(_compiler_runtime "static") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime=${_compiler_runtime}") + + # Only define compiler.runtime_type when explicitly requested + # If a generator expression is used, let Conan handle it conditional on build_type + if(NOT _msvc_runtime_library MATCHES ":Debug>") + if(_msvc_runtime_library MATCHES "Debug") + set(_compiler_runtime_type "Debug") + else() + set(_compiler_runtime_type "Release") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_compiler_runtime_type}") + endif() + + unset(_KNOWN_MSVC_RUNTIME_VALUES) + + elseif(_compiler MATCHES AppleClang) + set(_compiler "apple-clang") + string(REPLACE "." ";" VERSION_LIST ${_compiler_version}) + list(GET VERSION_LIST 0 _compiler_version) + elseif(_compiler MATCHES Clang) + set(_compiler "clang") + string(REPLACE "." ";" VERSION_LIST ${_compiler_version}) + list(GET VERSION_LIST 0 _compiler_version) + elseif(_compiler MATCHES GNU) + set(_compiler "gcc") + string(REPLACE "." ";" VERSION_LIST ${_compiler_version}) + list(GET VERSION_LIST 0 _compiler_version) + endif() + + message(STATUS "CMake-Conan: [settings] compiler=${_compiler}") + message(STATUS "CMake-Conan: [settings] compiler.version=${_compiler_version}") + if (_compiler_runtime) + message(STATUS "CMake-Conan: [settings] compiler.runtime=${_compiler_runtime}") + endif() + if (_compiler_runtime_type) + message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_compiler_runtime_type}") + endif() + + set(${compiler} ${_compiler} PARENT_SCOPE) + set(${compiler_version} ${_compiler_version} PARENT_SCOPE) + set(${compiler_runtime} ${_compiler_runtime} PARENT_SCOPE) + set(${compiler_runtime_type} ${_compiler_runtime_type} PARENT_SCOPE) +endfunction() + + +function(detect_build_type build_type) + get_property(multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT multiconfig_generator) + # Only set when we know we are in a single-configuration generator + # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined + set(${build_type} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) + endif() +endfunction() + + +macro(set_conan_compiler_if_appleclang lang command output_variable) + if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") + execute_process(COMMAND xcrun --find ${command} + OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) + cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) + cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) + if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") + set(${output_variable} "") + endif() + unset(_xcrun_out) + unset(_xcrun_toolchain_path) + unset(_compiler_parent_path) + endif() +endmacro() + + +macro(append_compiler_executables_configuration) + set(_conan_c_compiler "") + set(_conan_cpp_compiler "") + set(_conan_rc_compiler "") + set(_conan_compilers_list "") + if(CMAKE_C_COMPILER) + set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\"") + set_conan_compiler_if_appleclang(C cc _conan_c_compiler) + list(APPEND _conan_compilers_list ${_conan_c_compiler}) + else() + message(WARNING "CMake-Conan: The C compiler is not defined. " + "Please define CMAKE_C_COMPILER or enable the C language.") + endif() + if(CMAKE_CXX_COMPILER) + set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") + set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) + list(APPEND _conan_compilers_list ${_conan_cpp_compiler}) + else() + message(WARNING "CMake-Conan: The C++ compiler is not defined. " + "Please define CMAKE_CXX_COMPILER or enable the C++ language.") + endif() + if(CMAKE_RC_COMPILER) + set(_conan_rc_compiler "\"rc\":\"${CMAKE_RC_COMPILER}\"") + list(APPEND _conan_compilers_list ${_conan_rc_compiler}) + # Not necessary to warn if RC not defined + endif() + if(NOT "x${_conan_compilers_list}" STREQUAL "x") + string(REPLACE ";" "," _conan_compilers_list "${_conan_compilers_list}") + string(APPEND profile "tools.build:compiler_executables={${_conan_compilers_list}}\n") + endif() + unset(_conan_c_compiler) + unset(_conan_cpp_compiler) + unset(_conan_rc_compiler) + unset(_conan_compilers_list) +endmacro() + + +function(detect_host_profile output_file) + detect_os(os os_api_level os_sdk os_subsystem os_version) + detect_arch(arch) + detect_compiler(compiler compiler_version compiler_runtime compiler_runtime_type) + detect_cxx_standard(compiler_cppstd) + detect_lib_cxx(compiler_libcxx) + detect_build_type(build_type) + + set(profile "") + string(APPEND profile "[settings]\n") + if(arch) + string(APPEND profile arch=${arch} "\n") + endif() + if(os) + string(APPEND profile os=${os} "\n") + endif() + if(os_api_level) + string(APPEND profile os.api_level=${os_api_level} "\n") + endif() + if(os_version) + string(APPEND profile os.version=${os_version} "\n") + endif() + if(os_sdk) + string(APPEND profile os.sdk=${os_sdk} "\n") + endif() + if(os_subsystem) + string(APPEND profile os.subsystem=${os_subsystem} "\n") + endif() + if(compiler) + string(APPEND profile compiler=${compiler} "\n") + endif() + if(compiler_version) + string(APPEND profile compiler.version=${compiler_version} "\n") + endif() + if(compiler_runtime) + string(APPEND profile compiler.runtime=${compiler_runtime} "\n") + endif() + if(compiler_runtime_type) + string(APPEND profile compiler.runtime_type=${compiler_runtime_type} "\n") + endif() + if(compiler_cppstd) + string(APPEND profile compiler.cppstd=${compiler_cppstd} "\n") + endif() + if(compiler_libcxx) + string(APPEND profile compiler.libcxx=${compiler_libcxx} "\n") + endif() + if(build_type) + string(APPEND profile "build_type=${build_type}\n") + endif() + + if(NOT DEFINED output_file) + set(file_name "${CMAKE_BINARY_DIR}/profile") + else() + set(file_name ${output_file}) + endif() + + string(APPEND profile "[conf]\n") + string(APPEND profile "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") + + # propagate compilers via profile + append_compiler_executables_configuration() + + if(os STREQUAL "Android") + string(APPEND profile "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") + endif() + + message(STATUS "CMake-Conan: Creating profile ${file_name}") + file(WRITE ${file_name} ${profile}) + message(STATUS "CMake-Conan: Profile: \n${profile}") +endfunction() + + +function(conan_profile_detect_default) + message(STATUS "CMake-Conan: Checking if a default profile exists") + execute_process(COMMAND ${CONAN_COMMAND} profile path default + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + if(NOT ${return_code} EQUAL "0") + message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") + execute_process(COMMAND ${CONAN_COMMAND} profile detect + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() +endfunction() + + +function(conan_install) + set(conan_output_folder ${CMAKE_BINARY_DIR}/conan) + # Invoke "conan install" with the provided arguments + set(conan_args ${conan_args} -of=${conan_output_folder}) + message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN}") + + + # In case there was not a valid cmake executable in the PATH, we inject the + # same we used to invoke the provider to the PATH + if(DEFINED PATH_TO_CMAKE_BIN) + set(old_path $ENV{PATH}) + set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") + endif() + + execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN} --format=json + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(DEFINED PATH_TO_CMAKE_BIN) + set(ENV{PATH} "${old_path}") + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + + # the files are generated in a folder that depends on the layout used, if + # one is specified, but we don't know a priori where this is. + # TODO: this can be made more robust if Conan can provide this in the json output + string(JSON conan_generators_folder GET "${conan_stdout}" graph nodes 0 generators_folder) + cmake_path(CONVERT ${conan_generators_folder} TO_CMAKE_PATH_LIST conan_generators_folder) + + message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${conan_generators_folder}") + set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${conan_generators_folder}") + # reconfigure on conanfile changes + string(JSON conanfile GET "${conan_stdout}" graph nodes 0 label) + message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${conanfile}") + set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${conanfile}") + # success + set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) + +endfunction() + + +function(conan_get_version conan_command conan_current_version) + execute_process( + COMMAND ${conan_command} --version + OUTPUT_VARIABLE conan_output + RESULT_VARIABLE conan_result + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(conan_result) + message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") + endif() + + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) + set(${conan_current_version} ${conan_version} PARENT_SCOPE) +endfunction() + + +function(conan_version_check) + set(options ) + set(one_value_args MINIMUM CURRENT) + set(multi_value_args ) + cmake_parse_arguments(conan_version_check + "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN}) + + if(NOT conan_version_check_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") + endif() + if(NOT conan_version_check_CURRENT) + message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") + endif() + + if(conan_version_check_CURRENT VERSION_LESS conan_version_check_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Conan version must be ${conan_version_check_MINIMUM} or later") + endif() +endfunction() + + +macro(construct_profile_argument argument_variable profile_list) + set(${argument_variable} "") + if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") + set(_arg_flag "--profile:host=") + elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") + set(_arg_flag "--profile:build=") + endif() + + set(_profile_list "${${profile_list}}") + list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") + list(TRANSFORM _profile_list PREPEND ${_arg_flag}) + set(${argument_variable} ${_profile_list}) + + unset(_arg_flag) + unset(_profile_list) +endmacro() + + +macro(conan_provide_dependency method package_name) + set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) + get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if(NOT _conan_install_success) + find_program(CONAN_COMMAND "conan" REQUIRED) + conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION) + conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) + message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") + if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) + conan_profile_detect_default() + endif() + if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) + detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) + endif() + construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) + construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) + if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile") + endif() + set(generator "") + elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. " + "Please define the generator as it will be mandatory in the future") + endif() + set(generator "-g;CMakeDeps") + endif() + get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT _multiconfig_generator) + message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}") + conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator}) + else() + message(STATUS "CMake-Conan: Installing both Debug and Release") + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) + endif() + unset(_host_profile_flags) + unset(_build_profile_flags) + unset(_multiconfig_generator) + unset(_conan_install_success) + else() + message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") + unset(_conan_install_success) + endif() + + get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + + # Ensure that we consider Conan-provided packages ahead of any other, + # irrespective of other settings that modify the search order or search paths + # This follows the guidelines from the find_package documentation + # (https://cmake.org/cmake/help/latest/command/find_package.html): + # find_package ( PATHS paths... NO_DEFAULT_PATH) + # find_package () + + # Filter out `REQUIRED` from the argument list, as the first call may fail + set(_find_args_${package_name} "${ARGN}") + list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") + if(NOT "MODULE" IN_LIST _find_args_${package_name}) + find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + unset(_find_args_${package_name}) + endif() + + # Invoke find_package a second time - if the first call succeeded, + # this will simply reuse the result. If not, fall back to CMake default search + # behaviour, also allowing modules to be searched. + if(NOT ${package_name}_FOUND) + list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) + if(_index EQUAL -1) + list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() + unset(_index) + find_package(${package_name} ${ARGN} BYPASS_PROVIDER) + list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() +endmacro() + + +cmake_language( + SET_DEPENDENCY_PROVIDER conan_provide_dependency + SUPPORTED_METHODS FIND_PACKAGE +) + + +macro(conan_provide_dependency_check) + set(_conan_provide_dependency_invoked FALSE) + get_property(_conan_provide_dependency_invoked GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) + if(NOT _conan_provide_dependency_invoked) + message(WARNING "Conan is correctly configured as dependency provider, " + "but Conan has not been invoked. Please add at least one " + "call to `find_package()`.") + if(DEFINED CONAN_COMMAND) + # supress warning in case `CONAN_COMMAND` was specified but unused. + set(_conan_command ${CONAN_COMMAND}) + unset(_conan_command) + endif() + endif() + unset(_conan_provide_dependency_invoked) +endmacro() + + +# Add a deferred call at the end of processing the top-level directory +# to check if the dependency provider was invoked at all. +cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) + +# Configurable variables for Conan profiles +set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") +set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") +set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") + +find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) +if(NOT _cmake_program) + get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) + set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") +endif() + +cmake_policy(POP) \ No newline at end of file diff --git a/cmake/config-vars.cmake b/cmake/config-vars.cmake deleted file mode 100644 index 94ca850e..00000000 --- a/cmake/config-vars.cmake +++ /dev/null @@ -1,20 +0,0 @@ -set(currency_display_decimal_point 12 CACHE STRING "CURRENCY_DISPLAY_DECIMAL_POINT" ) -set(coin 1000000000000 CACHE STRING "COIN" ) -set(base_reward_dust_threshold 1000000 CACHE STRING "BASE_REWARD_DUST_THRESHOLD") -set(default_dust_threshold 0 CACHE STRING "DEFAULT_DUST_THRESHOLD" ) -set(tx_default_fee 10000000000 CACHE STRING "TX_DEFAULT_FEE" ) -set(tx_minimum_fee 10000000000 CACHE STRING "TX_MINIMUM_FEE" ) -set(difficulty_pow_starter 1 CACHE STRING "DIFFICULTY_POW_STARTER" ) -set(difficulty_pos_target 120 CACHE STRING "DIFFICULTY_POS_TARGET" ) -set(difficulty_pow_target 120 CACHE STRING "DIFFICULTY_POW_TARGET" ) -set(difficulty_window 720 CACHE STRING "DIFFICULTY_WINDOW" ) -set(difficulty_lag 15 CACHE STRING "DIFFICULTY_LAG" ) -set(difficulty_cut 60 CACHE STRING "DIFFICULTY_CUT" ) -set(p2p_default_port 36942 CACHE STRING "P2P_DEFAULT_PORT" ) -set(rpc_default_port 36941 CACHE STRING "RPC_DEFAULT_PORT" ) -set(stratum_default_port 36940 CACHE STRING "STRATUM_DEFAULT_PORT" ) -set(p2p_maintainers_pub_key "8f138bb73f6d663a3746a542770781a09579a7b84cb4125249e95530824ee607" CACHE STRING "P2P_MAINTAINERS_PUB_KEY" ) -set(currency_name_abr "FAKE" CACHE STRING "CURRENCY_NAME_ABR" ) -set(currency_name_base "Fake" CACHE STRING "CURRENCY_NAME_BASE" ) -set(currency_name_short_base "Fake" CACHE STRING "CURRENCY_NAME_SHORT_BASE" ) -set(premine_amount 4000000000000000000 CACHE STRING "PREMINE_AMOUNT" ) diff --git a/cmake/currency_configs/example.cmake b/cmake/currency_configs/example.cmake deleted file mode 100644 index e9359b55..00000000 --- a/cmake/currency_configs/example.cmake +++ /dev/null @@ -1,20 +0,0 @@ -set(currency_display_decimal_point 12) -set(coin 1000000000000) -set(base_reward_dust_threshold 1000000) -set(default_dust_threshold 0) -set(tx_default_fee 10000000000) -set(tx_minimum_fee 10000000000) -set(difficulty_pow_starter 1) -set(difficulty_pos_target 120) -set(difficulty_pow_target 120) -set(difficulty_window 720) -set(difficulty_lag 15) -set(difficulty_cut 60) -set(p2p_default_port 36942) -set(rpc_default_port 36941) -set(stratum_default_port 36940) -set(p2p_maintainers_pub_key "8f138bb73f6d663a3746a542770781a09579a7b84cb4125249e95530824ee607") -set(currency_name_abr "NF") -set(currency_name_base "NotFake") -set(currency_name_short_base "NotFake") -set(premine_amount 4000000000000000000) diff --git a/cmake/profiles/apple-clang-arm64-release b/cmake/profiles/apple-clang-armv8 similarity index 84% rename from cmake/profiles/apple-clang-arm64-release rename to cmake/profiles/apple-clang-armv8 index d8325998..0f36faa5 100644 --- a/cmake/profiles/apple-clang-arm64-release +++ b/cmake/profiles/apple-clang-armv8 @@ -4,7 +4,6 @@ arch=armv8 compiler=apple-clang compiler.version=13 compiler.libcxx=libc++ -build_type=Release [conf] diff --git a/cmake/profiles/apple-clang-amd64-release b/cmake/profiles/apple-clang-x86_64 similarity index 78% rename from cmake/profiles/apple-clang-amd64-release rename to cmake/profiles/apple-clang-x86_64 index 0a367dcb..9af72645 100644 --- a/cmake/profiles/apple-clang-amd64-release +++ b/cmake/profiles/apple-clang-x86_64 @@ -4,7 +4,5 @@ arch=x86_64 compiler=apple-clang compiler.version=13 compiler.libcxx=libc++ -build_type=Release - -[conf] +[conf] \ No newline at end of file diff --git a/cmake/profiles/gcc-linux-armv8 b/cmake/profiles/gcc-linux-armv8 new file mode 100644 index 00000000..48e1521c --- /dev/null +++ b/cmake/profiles/gcc-linux-armv8 @@ -0,0 +1,9 @@ +[settings] +os=Linux +arch=armv8 +compiler=gcc +compiler.version=11 +compiler.libcxx=libstdc++11 + +[conf] +tools.cmake.cmaketoolchain:user_presets=False diff --git a/cmake/profiles/gcc-linux-amd64-release b/cmake/profiles/gcc-linux-x86_64 similarity index 88% rename from cmake/profiles/gcc-linux-amd64-release rename to cmake/profiles/gcc-linux-x86_64 index 94317ee6..4a58979e 100644 --- a/cmake/profiles/gcc-linux-amd64-release +++ b/cmake/profiles/gcc-linux-x86_64 @@ -4,7 +4,6 @@ arch=x86_64 compiler=gcc compiler.version=11 compiler.libcxx=libstdc++11 -build_type=Release [conf] tools.cmake.cmaketoolchain:user_presets=False diff --git a/cmake/profiles/msvc-193-x86_64 b/cmake/profiles/msvc-193-x86_64 new file mode 100644 index 00000000..19a699f5 --- /dev/null +++ b/cmake/profiles/msvc-193-x86_64 @@ -0,0 +1,10 @@ +[settings] +arch=x86_64 +compiler=msvc +compiler.cppstd=17 +compiler.runtime=static +compiler.version=193 +os=Windows + +[conf] +tools.cmake.cmaketoolchain:user_presets=False diff --git a/cmake/profiles/msvc-194-amd64-release b/cmake/profiles/msvc-194-x86_64 similarity index 89% rename from cmake/profiles/msvc-194-amd64-release rename to cmake/profiles/msvc-194-x86_64 index 52b8722a..aea65d04 100644 --- a/cmake/profiles/msvc-194-amd64-release +++ b/cmake/profiles/msvc-194-x86_64 @@ -1,6 +1,5 @@ [settings] arch=x86_64 -build_type=Release compiler=msvc compiler.cppstd=17 compiler.runtime=static diff --git a/contrib/db/libmdbx/packages/rpm/CMakeLists.txt b/contrib/db/libmdbx/packages/rpm/CMakeLists.txt index 5949e9f0..39befcb7 100644 --- a/contrib/db/libmdbx/packages/rpm/CMakeLists.txt +++ b/contrib/db/libmdbx/packages/rpm/CMakeLists.txt @@ -126,9 +126,9 @@ if(UNIX AND NOT APPLE) target_link_libraries(${TARGET}_SHARED rt) endif() -install(TARGETS ${TARGET}_STATIC DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) -install(TARGETS ${TARGET}_SHARED DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) -install(FILES mdbx.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include COMPONENT mdbx-devel) +#install(TARGETS ${TARGET}_STATIC DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) +#install(TARGETS ${TARGET}_SHARED DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) +#install(FILES mdbx.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include COMPONENT mdbx-devel) add_subdirectory(src/tools) add_subdirectory(test) diff --git a/contrib/db/libmdbx/src/CMakeLists.txt b/contrib/db/libmdbx/src/CMakeLists.txt index 7dfc94aa..5e39f344 100644 --- a/contrib/db/libmdbx/src/CMakeLists.txt +++ b/contrib/db/libmdbx/src/CMakeLists.txt @@ -61,12 +61,12 @@ if(CC_HAS_VISIBILITY) target_compile_options(mdbx PRIVATE "-fvisibility=hidden") endif() -install(TARGETS mdbx - LIBRARY DESTINATION lib COMPONENT runtime - RUNTIME DESTINATION bin COMPONENT runtime - ARCHIVE DESTINATION lib/static COMPONENT devel - PUBLIC_HEADER DESTINATION include - INCLUDES DESTINATION include COMPONENT devel) +#install(TARGETS mdbx +# LIBRARY DESTINATION lib COMPONENT runtime +# RUNTIME DESTINATION bin COMPONENT runtime +# ARCHIVE DESTINATION lib/static COMPONENT devel +# PUBLIC_HEADER DESTINATION include +# INCLUDES DESTINATION include COMPONENT devel) ################################################################################ # diff --git a/contrib/db/libmdbx/src/tools/CMakeLists.txt b/contrib/db/libmdbx/src/tools/CMakeLists.txt index 01ecd7dd..fe5197b0 100644 --- a/contrib/db/libmdbx/src/tools/CMakeLists.txt +++ b/contrib/db/libmdbx/src/tools/CMakeLists.txt @@ -32,8 +32,8 @@ foreach(TOOL ${MDBX_TOOLS}) C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON INTERPROCEDURAL_OPTIMIZATION $) - install(TARGETS ${TOOL} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin COMPONENT mdbx) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../man1/${TOOL}.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1 COMPONENT mdbx) +# install(TARGETS ${TOOL} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin COMPONENT mdbx) +# install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../man1/${TOOL}.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1 COMPONENT mdbx) endforeach() if(LIB_MATH) diff --git a/crowdin.yml b/crowdin.yml deleted file mode 100644 index 4b52ef81..00000000 --- a/crowdin.yml +++ /dev/null @@ -1,3 +0,0 @@ -files: - - source: /**/src/gui/qt-daemon/html_source/src/assets/i18n/en.json - translation: /**/src/gui/qt-daemon/html_source/src/assets/i18n/%two_letters_code%.json diff --git a/docs b/docs index eb47d517..12e20efc 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit eb47d517d3ddb2751fc5645d1e06b423588f6cb9 +Subproject commit 12e20efce7eaf51e38d8953c318633b1c5189256 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0a55cdf7..541dc852 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -50,12 +50,6 @@ MACRO(ENABLE_SHARED_PCH_EXECUTABLE target) ENDMACRO(ENABLE_SHARED_PCH_EXECUTABLE) ##### End of Precompiled Headers macros ###### -include_directories (${CMAKE_BINARY_DIR}/src ${CMAKE_BINARY_DIR}/src/currency_core) -include(../cmake/config-vars.cmake) -include(../cmake/currency_configs/example.cmake) -include(../cmake/check-config-vars.cmake) -configure_file("currency_core/currency_config.h.in" "currency_core/currency_config.h") - file(GLOB_RECURSE PCH pch/*) file(GLOB_RECURSE COMMON common/*) @@ -71,7 +65,6 @@ file(GLOB_RECURSE SIMPLEWALLET simplewallet/*) file(GLOB_RECURSE CONN_TOOL connectivity_tool/*) file(GLOB_RECURSE WALLET wallet/*) file(GLOB_RECURSE MINER miner/*) -file(GLOB_RECURSE GENESIS_GENERATOR genesis_generator/*) source_group(pch FILES ${PCH}) @@ -86,14 +79,16 @@ source_group(stratum FILES ${STRATUM}) source_group(simplewallet FILES ${SIMPLEWALLET}) source_group(connectivity-tool FILES ${CONN_TOOL}) source_group(wallet FILES ${WALLET}) -source_group(genesis_generator FILES ${GENESIS_GENERATOR}) INIT_SHARED_PCH() +add_subdirectory(config) +add_subdirectory(genesis) + add_library(common ${COMMON}) -add_dependencies(common version ${PCH_LIB_NAME}) -target_link_libraries(common PUBLIC ${Boost_LIBRARIES}) +add_dependencies(common version config ${PCH_LIB_NAME}) +target_link_libraries(common PUBLIC ${Boost_LIBRARIES} config) ENABLE_SHARED_PCH(common COMMON) if(NOT MSVC AND NOT APPLE AND NOT CLANG) # TODO(unassigned): do we really need the clang equivalent? @@ -113,15 +108,16 @@ endif() add_library(crypto ${CRYPTO}) if(USE_BITCOIN_SECP256K1_FOR_ECDSA) - add_dependencies(crypto secp256k1) - target_link_libraries(crypto secp256k1 ${BCRYPT_LIB}) + add_dependencies(crypto secp256k1 config) + target_link_libraries(crypto config secp256k1 ${BCRYPT_LIB}) else() - add_dependencies(crypto OpenSSL::Crypto) - target_link_libraries(crypto OpenSSL::Crypto ${BCRYPT_LIB}) + add_dependencies(crypto OpenSSL::Crypto config) + target_link_libraries(crypto PUBLIC config OpenSSL::Crypto ${BCRYPT_LIB}) endif() add_library(currency_core ${CURRENCY_CORE}) -add_dependencies(currency_core version ${PCH_LIB_NAME}) +add_dependencies(currency_core version config ${PCH_LIB_NAME}) +target_link_libraries(currency_core config) ENABLE_SHARED_PCH(currency_core CURRENCY_CORE) add_library(wallet ${WALLET}) @@ -129,7 +125,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Android" ) add_dependencies(wallet version ${PCH_LIB_NAME}) target_link_libraries(wallet currency_core crypto common ZLIB::ZLIB ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} android log OpenSSL::SSL OpenSSL::Crypto) else() - add_dependencies(wallet version ${PCH_LIB_NAME}) + add_dependencies(wallet version config ${PCH_LIB_NAME}) + target_link_libraries(wallet config) ENABLE_SHARED_PCH(wallet WALLET) endif() @@ -152,82 +149,27 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") endif() add_library(rpc ${RPC}) -add_dependencies(rpc version ${PCH_LIB_NAME}) +add_dependencies(rpc version config ${PCH_LIB_NAME}) +target_link_libraries(rpc config) ENABLE_SHARED_PCH(rpc RPC) add_library(stratum ${STRATUM}) -add_dependencies(stratum version ${PCH_LIB_NAME}) +add_dependencies(stratum version config ${PCH_LIB_NAME}) +target_link_libraries(stratum config) ENABLE_SHARED_PCH(stratum STRATUM) -target_link_libraries(currency_core lmdb mdbx) - -# CAUTION - wallet generation will only work properly in UNIX line environment -set(GENERATE_FRESH_GENESIS OFF CACHE BOOL "Generate new genesis block") - -set(GENESIS_PREMINE_ADDRESS "" CACHE STRING "Premine wallet address") -set(GENESIS_PROOF "" CACHE STRING "Genesis proof string") - -set(GENERATE_PREMINE_WALLET OFF CACHE BOOL "Generate premine wallet") -set(PREMINE_WALLET_PASSWORD "" CACHE STRING "Premine wallet password") - -if (GENERATE_PREMINE_WALLET AND GENERATE_FRESH_GENESIS) - message(FATAL_ERROR "Genesis can be generatet together with premine wallet") -endif() - -if (GENERATE_PREMINE_WALLET) - unset(GENERATE_PREMINE_WALLET CACHE) - message(WARNING "Generating premine wallet") - - if (NOT DEFINED PREMINE_WALLET_PASSWORD OR PREMINE_WALLET_PASSWORD STREQUAL "") - message(FATAL_ERROR "set PREMINE_WALLET_PASSWORD or GENESIS_PREMINE_ADDRESS to generate genesis block") - endif() - - # Make wallet directory - add_custom_target( - premine_wallet - "${CMAKE_COMMAND}" -E make_directory "${CMAKE_SOURCE_DIR}/premine_wallet" - COMMENT "Creating premine wallet directory" - ) - - # Generate wallet - add_custom_command(TARGET premine_wallet POST_BUILD - COMMAND echo ${PREMINE_WALLET_PASSWORD} | ${CMAKE_BINARY_DIR}/src/simplewallet --generate-new-wallet ${CMAKE_SOURCE_DIR}/premine_wallet/premine_wallet - COMMENT "Generating premine wallet in ${CMAKE_SOURCE_DIR}/premine_wallet" - ) - - add_dependencies(premine_wallet simplewallet) -endif() - -if (GENERATE_FRESH_GENESIS) - unset(GENERATE_FRESH_GENESIS CACHE) - add_executable(genesis_generator ${GENESIS_GENERATOR}) - target_link_libraries(genesis_generator currency_core crypto common zlibstatic ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) - - if (NOT DEFINED GENESIS_PREMINE_ADDRESS OR GENESIS_PREMINE_ADDRESS STREQUAL "") - message(WARNING "GENESIS_PREMINE_ADDRESS not set, loading from ${CMAKE_SOURCE_DIR}/premine_wallet/premine_wallet.address") - file(READ "${CMAKE_SOURCE_DIR}/premine_wallet/premine_wallet.address" GENESIS_PREMINE_ADDRESS) - if (NOT DEFINED GENESIS_PREMINE_ADDRESS OR GENESIS_PREMINE_ADDRESS STREQUAL "") - message(FATAL_ERROR "GENESIS_PREMINE_ADDRESS not set") - endif() - else() - add_custom_command(TARGET genesis_generator POST_BUILD - COMMAND ${CMAKE_BINARY_DIR}/src/genesis_generator --address ${GENESIS_PREMINE_ADDRESS} --proof ${GENESIS_PROOF} --output ${CMAKE_SOURCE_DIR}/src/currency_core/generated/ - COMMENT "Generating genesis data in ${CMAKE_SOURCE_DIR}/src/currency_core/" - ) - endif() - -endif() +target_link_libraries(currency_core config lmdb mdbx) add_executable(daemon ${DAEMON} ${P2P} ${CURRENCY_PROTOCOL}) add_dependencies(daemon version) -target_link_libraries(daemon rpc stratum currency_core crypto common miniupnpc::miniupnpc ZLIB::ZLIB ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) +target_link_libraries(daemon rpc stratum currency_core crypto common miniupnpc::miniupnpc ZLIB::ZLIB ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) ENABLE_SHARED_PCH(daemon DAEMON) ENABLE_SHARED_PCH_EXECUTABLE(daemon) add_executable(connectivity_tool ${CONN_TOOL}) add_dependencies(connectivity_tool version) -target_link_libraries(connectivity_tool currency_core crypto common ZLIB::ZLIB ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) +target_link_libraries(connectivity_tool currency_core crypto common ZLIB::ZLIB ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) ENABLE_SHARED_PCH(connectivity_tool CONN_TOOL) ENABLE_SHARED_PCH_EXECUTABLE(connectivity_tool) @@ -240,5 +182,16 @@ ENABLE_SHARED_PCH_EXECUTABLE(simplewallet) set_property(TARGET common crypto currency_core rpc stratum wallet PROPERTY FOLDER "libs") set_property(TARGET daemon simplewallet connectivity_tool PROPERTY FOLDER "prog") -set_property(TARGET daemon PROPERTY OUTPUT_NAME "zanod") +if (NOT TESTNET) + set_property(TARGET daemon PROPERTY OUTPUT_NAME "lethean-chain-node") + set_property(TARGET simplewallet PROPERTY OUTPUT_NAME "lethean-wallet-cli") + set_property(TARGET connectivity_tool PROPERTY OUTPUT_NAME "lethean-chain-tool") +else () + set_property(TARGET daemon PROPERTY OUTPUT_NAME "lethean-testnet-chain-node") + set_property(TARGET simplewallet PROPERTY OUTPUT_NAME "lethean-testnet-wallet-cli") + set_property(TARGET connectivity_tool PROPERTY OUTPUT_NAME "lethean-testnet-chain-tool") +endif () + +install(TARGETS daemon simplewallet + RUNTIME DESTINATION bin) diff --git a/src/common/atomics_boost_serialization.h b/src/common/atomics_boost_serialization.h index e9aa9798..c057f27a 100644 --- a/src/common/atomics_boost_serialization.h +++ b/src/common/atomics_boost_serialization.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/base58.cpp b/src/common/base58.cpp index 76e277c3..ec9d1dd1 100644 --- a/src/common/base58.cpp +++ b/src/common/base58.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/common/base58.h b/src/common/base58.h index be09658d..3f56a485 100644 --- a/src/common/base58.h +++ b/src/common/base58.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/boost_serialization_helper.h b/src/common/boost_serialization_helper.h index 1f2297a4..7ac00587 100644 --- a/src/common/boost_serialization_helper.h +++ b/src/common/boost_serialization_helper.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/boost_serialization_maps.h b/src/common/boost_serialization_maps.h index f6704b95..70f7feff 100644 --- a/src/common/boost_serialization_maps.h +++ b/src/common/boost_serialization_maps.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2022 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/common/boost_version_check.h b/src/common/boost_version_check.h index 73d96810..cd48029e 100644 --- a/src/common/boost_version_check.h +++ b/src/common/boost_version_check.h @@ -1,6 +1,19 @@ -// Copyright (c) 2025 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/callstack_helper.cpp b/src/common/callstack_helper.cpp index 939dc929..fbbe99aa 100644 --- a/src/common/callstack_helper.cpp +++ b/src/common/callstack_helper.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2019-2025 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #if defined(WIN32) diff --git a/src/common/callstack_helper.h b/src/common/callstack_helper.h index 439ddcd8..4e0bbb19 100644 --- a/src/common/callstack_helper.h +++ b/src/common/callstack_helper.h @@ -1,6 +1,19 @@ -// Copyright (c) 2019-2025 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/common/command_line.cpp b/src/common/command_line.cpp index ff83104d..7711110c 100644 --- a/src/common/command_line.cpp +++ b/src/common/command_line.cpp @@ -1,12 +1,23 @@ -// Copyright (c) 2014-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "command_line.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" namespace command_line { diff --git a/src/common/command_line.h b/src/common/command_line.h index 6797cc18..fdb3fb29 100644 --- a/src/common/command_line.h +++ b/src/common/command_line.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/config_encrypt_helper.h b/src/common/config_encrypt_helper.h index c2208c79..d9219356 100644 --- a/src/common/config_encrypt_helper.h +++ b/src/common/config_encrypt_helper.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2020 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/crypto_serialization.h b/src/common/crypto_serialization.h index ae94403c..73221027 100644 --- a/src/common/crypto_serialization.h +++ b/src/common/crypto_serialization.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include #include diff --git a/src/common/crypto_stream_operators.cpp b/src/common/crypto_stream_operators.cpp index cc87dd37..565c55d6 100644 --- a/src/common/crypto_stream_operators.cpp +++ b/src/common/crypto_stream_operators.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "crypto_stream_operators.h" bool parse_hash256(const std::string str_hash, crypto::hash& hash) diff --git a/src/common/crypto_stream_operators.h b/src/common/crypto_stream_operators.h index fa2531de..b5ff318b 100644 --- a/src/common/crypto_stream_operators.h +++ b/src/common/crypto_stream_operators.h @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/common/db_abstract_accessor.h b/src/common/db_abstract_accessor.h index b5fefad4..3bd9ff28 100644 --- a/src/common/db_abstract_accessor.h +++ b/src/common/db_abstract_accessor.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/common/db_backend_base.h b/src/common/db_backend_base.h index 01c87e1b..850daec1 100644 --- a/src/common/db_backend_base.h +++ b/src/common/db_backend_base.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/db_backend_leveldb.cpp b/src/common/db_backend_leveldb.cpp index c408c43a..a34b249e 100644 --- a/src/common/db_backend_leveldb.cpp +++ b/src/common/db_backend_leveldb.cpp @@ -1,109 +1,17 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -// -// #pragma once -// #include "db_backend_leveldb.h" -// -// namespace tools -// { -// namespace db -// { -// level_db_backend : public i_db_backend -// { -// std::string m_path; -// db_handle m_pdb; -// public: -// basic_db() :m_pdb(nullptr) -// {} -// ~basic_db(){ close(); } -// bool close() -// { -// if (m_pdb) -// delete m_pdb; -// m_pdb = nullptr; -// -// return true; -// } -// -// void begin_transaction() -// { -// //leveldb is not supporting transactions yet -// } -// -// void commit_transaction() -// { -// //leveldb is not supporting transactions yet -// } -// -// -// bool open(const std::string& path) -// { -// m_path = path; -// close(); -// leveldb::Options options; -// options.create_if_missing = true; -// leveldb::Status status = leveldb::DB::Open(options, path, &m_pdb); -// if (!status.ok()) -// { -// LOG_ERROR("Unable to open/create database " << path << ", error: " << status.ToString()); -// return err_handle; -// } -// return true; -// } -// -// bool erase(const char* k, size s) -// { -// TRY_ENTRY(); -// leveldb::WriteOptions wo; -// wo.sync = true; -// leveldb::Status s = m_pdb->Delete(wo, leveldb::Slice(k, s)); -// if (!s.ok()) -// return false; -// -// return true; -// CATCH_ENTRY_L0("get_t_object_from_db", false); -// } -// -// -// bool get(const char* k, size s, std::string& res_buff) -// { -// TRY_ENTRY(); -// leveldb::ReadOptions ro; -// leveldb::Status s = m_pdb->Get(ro, leveldb::Slice(k, s), &res_buff); -// if (!s.ok()) -// return false; -// -// CATCH_ENTRY_L0("get_t_object_from_db", false); -// } -// -// bool clear() -// { -// close(); -// boost::system::error_code ec; -// bool res = boost::filesystem::remove_all(m_path, ec); -// if (!res) -// { -// LOG_ERROR("Failed to remove db file " << m_path << ", why: " << ec); -// return false; -// } -// return open(m_path); -// } -// -// bool set(const char* k, size s, const char* v, size vs) -// { -// TRY_ENTRY(); -// leveldb::WriteOptions wo; -// wo.sync = true; -// leveldb::Status s = m_pdb->Put(wo, leveldb::Slice(k, s), leveldb::Slice(v, vs)); -// if (!s.ok()) -// return false; -// -// return true; -// CATCH_ENTRY_L0("set_t_object_to_db", false); -// } -// }; -// } -// } +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// diff --git a/src/common/db_backend_leveldb.h b/src/common/db_backend_leveldb.h index 541f3d64..b014618a 100644 --- a/src/common/db_backend_leveldb.h +++ b/src/common/db_backend_leveldb.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "include_base_utils.h" diff --git a/src/common/db_backend_lmdb.cpp b/src/common/db_backend_lmdb.cpp index d23fff80..fcd07460 100644 --- a/src/common/db_backend_lmdb.cpp +++ b/src/common/db_backend_lmdb.cpp @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "db_backend_lmdb.h" #include "misc_language.h" diff --git a/src/common/db_backend_lmdb.h b/src/common/db_backend_lmdb.h index c2920f0c..9d664cd8 100644 --- a/src/common/db_backend_lmdb.h +++ b/src/common/db_backend_lmdb.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/db_backend_mdbx.cpp b/src/common/db_backend_mdbx.cpp index 3307dec8..a303a7b6 100644 --- a/src/common/db_backend_mdbx.cpp +++ b/src/common/db_backend_mdbx.cpp @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifdef ENABLED_ENGINE_MDBX #include "db_backend_mdbx.h" #include "misc_language.h" diff --git a/src/common/db_backend_mdbx.h b/src/common/db_backend_mdbx.h index af5363f6..2f21c3dc 100644 --- a/src/common/db_backend_mdbx.h +++ b/src/common/db_backend_mdbx.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #ifdef ENABLED_ENGINE_MDBX diff --git a/src/common/db_backend_selector.cpp b/src/common/db_backend_selector.cpp index 33f1382f..ea11e898 100644 --- a/src/common/db_backend_selector.cpp +++ b/src/common/db_backend_selector.cpp @@ -1,9 +1,22 @@ -// Copyright (c) 2014-2020 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "db_backend_selector.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "command_line.h" #include "db_backend_lmdb.h" #include "db_backend_mdbx.h" diff --git a/src/common/db_backend_selector.h b/src/common/db_backend_selector.h index 54c4a10a..f2e6c210 100644 --- a/src/common/db_backend_selector.h +++ b/src/common/db_backend_selector.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2020 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/difficulty_boost_serialization.h b/src/common/difficulty_boost_serialization.h index 3630423f..d2a41796 100644 --- a/src/common/difficulty_boost_serialization.h +++ b/src/common/difficulty_boost_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/encryption_filter.cpp b/src/common/encryption_filter.cpp index 8861fa8c..ef42316b 100644 --- a/src/common/encryption_filter.cpp +++ b/src/common/encryption_filter.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "encryption_filter.h" diff --git a/src/common/encryption_filter.h b/src/common/encryption_filter.h index 854dc7ad..a1f32e15 100644 --- a/src/common/encryption_filter.h +++ b/src/common/encryption_filter.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/error_codes.h b/src/common/error_codes.h index 3a629d5e..426a60d8 100644 --- a/src/common/error_codes.h +++ b/src/common/error_codes.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/general_purpose_commands_defs.h b/src/common/general_purpose_commands_defs.h index f9da9968..ad17bf70 100644 --- a/src/common/general_purpose_commands_defs.h +++ b/src/common/general_purpose_commands_defs.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "serialization/keyvalue_hexemizer.h" diff --git a/src/common/int-util.h b/src/common/int-util.h index ddf06dfe..808cda7b 100644 --- a/src/common/int-util.h +++ b/src/common/int-util.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/make_hashable.h b/src/common/make_hashable.h index c22bfa45..84769874 100644 --- a/src/common/make_hashable.h +++ b/src/common/make_hashable.h @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2020 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/median_db_cache.h b/src/common/median_db_cache.h index 2e2dea50..6cca9d08 100644 --- a/src/common/median_db_cache.h +++ b/src/common/median_db_cache.h @@ -1,9 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "misc_language.h" diff --git a/src/common/miniupnp_helper.h b/src/common/miniupnp_helper.h index 319740b0..6d0353e3 100644 --- a/src/common/miniupnp_helper.h +++ b/src/common/miniupnp_helper.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once @@ -17,7 +28,7 @@ extern "C" { } #include "misc_language.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "version.h" namespace tools diff --git a/src/common/mnemonic-encoding.cpp b/src/common/mnemonic-encoding.cpp index f52ece6b..541ac19e 100644 --- a/src/common/mnemonic-encoding.cpp +++ b/src/common/mnemonic-encoding.cpp @@ -1,40 +1,25 @@ -// Copyright (c) 2014, The Monero Project -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are -// permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, this list of -// conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, this list -// of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// -// 3. Neither the name of the copyright holder nor the names of its contributors may be -// used to endorse or promote products derived from this software without specific -// prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// /* * This file and its cpp file are for translating Electrum-style word lists * into their equivalent byte representations for cross-compatibility with * that method of "backing up" one's wallet keys. */ -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project - - #include #include #include diff --git a/src/common/mnemonic-encoding.h b/src/common/mnemonic-encoding.h index 5e235399..03516f8b 100644 --- a/src/common/mnemonic-encoding.h +++ b/src/common/mnemonic-encoding.h @@ -1,30 +1,19 @@ -// Copyright (c) 2014, The Monero Project -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are -// permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, this list of -// conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, this list -// of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// -// 3. Neither the name of the copyright holder nor the names of its contributors may be -// used to endorse or promote products derived from this software without specific -// prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// /* * This file and its cpp file are for translating Electrum-style word lists diff --git a/src/common/ntp.cpp b/src/common/ntp.cpp index 0b50e9be..89bf9783 100644 --- a/src/common/ntp.cpp +++ b/src/common/ntp.cpp @@ -1,13 +1,20 @@ -// Copyright (c) 2019-2022 Zano Project +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// -// Note: class udp_blocking_client is a slightly modified version of an example -// taken from https://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/timeouts/blocking_udp_client.cpp -// -// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// #include #include #include diff --git a/src/common/ntp.h b/src/common/ntp.h index 4e453b32..99ad9ed7 100644 --- a/src/common/ntp.h +++ b/src/common/ntp.h @@ -1,4 +1,19 @@ -// Copyright (c) 2019 Zano Project +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/common/pod-class.h b/src/common/pod-class.h index 84c89994..47dca67a 100644 --- a/src/common/pod-class.h +++ b/src/common/pod-class.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/pod_array_file_container.h b/src/common/pod_array_file_container.h index e165480c..8aa30b90 100644 --- a/src/common/pod_array_file_container.h +++ b/src/common/pod_array_file_container.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/common/pre_download.h b/src/common/pre_download.h index cd2adb74..3e9269ca 100644 --- a/src/common/pre_download.h +++ b/src/common/pre_download.h @@ -1,7 +1,19 @@ -// Copyright (c) 2020 Zano Project -// Copyright (c) 2012-2018 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include @@ -21,10 +33,10 @@ namespace tools }; #ifndef TESTNET - static constexpr pre_download_entry c_pre_download_mdbx = { "https://f005.backblazeb2.com/file/zano-predownload/zano_mdbx_95_3150000.pak", "296d3129fee9253adea332d6c6128941aa5ef67eecaba49b9f8327f8c2d86ea1", 9388521394, 14226862080 }; - static constexpr pre_download_entry c_pre_download_lmdb = { "https://f005.backblazeb2.com/file/zano-predownload/zano_lmdb_95_3150000.pak", "bdb9d651636b36fd7d1f216c4afe89b1e7ec887da6eac7455ea18253a93345e8", 11287228509, 13988814848 }; - static constexpr pre_download_entry c_pre_download_mdbx_non_pruned = { "https://f005.backblazeb2.com/file/zano-predownload/zano_mdbx_95_3141000_non_pruned.pak", "0703902d535253627a2dd3c8697b305844b0241dfffefce5ec9d9e8e3475cdab", 10065877170, 15032156160 }; - static constexpr pre_download_entry c_pre_download_lmdb_non_pruned = { "https://f005.backblazeb2.com/file/zano-predownload/zano_lmdb_95_3141000_non_pruned.pak", "fe407e332d42a124d42781f6ccc6d2456728348230d7f05d94203ac405c37e63", 12081697874, 14824468480 }; + static constexpr pre_download_entry c_pre_download_mdbx = { "", "", 0, 0 }; + static constexpr pre_download_entry c_pre_download_lmdb = { "", "", 0, 0 }; + static constexpr pre_download_entry c_pre_download_mdbx_non_pruned = { "", "", 0, 0 }; + static constexpr pre_download_entry c_pre_download_lmdb_non_pruned = { "", "", 0, 0 }; #else static constexpr pre_download_entry c_pre_download_mdbx = { "", "", 0, 0 }; static constexpr pre_download_entry c_pre_download_lmdb = { "", "", 0, 0 }; diff --git a/src/common/threads_pool.h b/src/common/threads_pool.h index 23f4e857..fcb65104 100644 --- a/src/common/threads_pool.h +++ b/src/common/threads_pool.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/tor_helper.h b/src/common/tor_helper.h index 48cabba1..58f6a378 100644 --- a/src/common/tor_helper.h +++ b/src/common/tor_helper.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/unordered_containers_boost_serialization.h b/src/common/unordered_containers_boost_serialization.h index 644133f4..fba5afc3 100644 --- a/src/common/unordered_containers_boost_serialization.h +++ b/src/common/unordered_containers_boost_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/utf8.h b/src/common/utf8.h index b5135309..099d4862 100644 --- a/src/common/utf8.h +++ b/src/common/utf8.h @@ -1,29 +1,19 @@ -// Copyright 2006 Nemanja Trifunovic - -/* -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 diff --git a/src/common/utf8/checked.h b/src/common/utf8/checked.h index 98949f8b..2b21c65a 100644 --- a/src/common/utf8/checked.h +++ b/src/common/utf8/checked.h @@ -1,29 +1,19 @@ -// Copyright 2006-2016 Nemanja Trifunovic - -/* -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 diff --git a/src/common/utf8/core.h b/src/common/utf8/core.h index af22969e..c1175862 100644 --- a/src/common/utf8/core.h +++ b/src/common/utf8/core.h @@ -1,29 +1,19 @@ -// Copyright 2006 Nemanja Trifunovic - -/* -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 diff --git a/src/common/utf8/cpp11.h b/src/common/utf8/cpp11.h index 691633c8..743f6fa4 100644 --- a/src/common/utf8/cpp11.h +++ b/src/common/utf8/cpp11.h @@ -1,29 +1,19 @@ -// Copyright 2018 Nemanja Trifunovic - -/* -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 #define UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 diff --git a/src/common/utf8/cpp17.h b/src/common/utf8/cpp17.h index 6e2fcc23..7c1f4d49 100644 --- a/src/common/utf8/cpp17.h +++ b/src/common/utf8/cpp17.h @@ -1,29 +1,19 @@ -// Copyright 2018 Nemanja Trifunovic - -/* -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9 #define UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9 diff --git a/src/common/utf8/cpp20.h b/src/common/utf8/cpp20.h index 07b61d0f..4d956893 100644 --- a/src/common/utf8/cpp20.h +++ b/src/common/utf8/cpp20.h @@ -1,29 +1,19 @@ -// Copyright 2022 Nemanja Trifunovic - -/* -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef UTF8_FOR_CPP_207e906c01_03a3_4daf_b420_ea7ea952b3c9 #define UTF8_FOR_CPP_207e906c01_03a3_4daf_b420_ea7ea952b3c9 diff --git a/src/common/utf8/unchecked.h b/src/common/utf8/unchecked.h index bf291789..b1287790 100644 --- a/src/common/utf8/unchecked.h +++ b/src/common/utf8/unchecked.h @@ -1,29 +1,19 @@ -// Copyright 2006 Nemanja Trifunovic - -/* -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 diff --git a/src/common/util.cpp b/src/common/util.cpp index 58bcd243..3f0d1cfc 100644 --- a/src/common/util.cpp +++ b/src/common/util.cpp @@ -1,15 +1,26 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "include_base_utils.h" #include "zlib_helper.h" using namespace epee; #include "util.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "version.h" #define UTF_CPP_CPLUSPLUS 201703L #include "utf8.h" @@ -907,7 +918,7 @@ std::string get_nix_version_display_string() // { // unsigned char c2 = data[i + 1]; // // Valid second byte: 10xxxxxx -// // Also ensure its not an overlong encoding (0xC0, 0xC1 are invalid starts) +// // Also ensure it�s not an overlong encoding (0xC0, 0xC1 are invalid starts) // if ((c2 & 0xC0) == 0x80 && (c & 0xFE) != 0xC0) // { // sanitized.push_back(static_cast(c)); diff --git a/src/common/util.h b/src/common/util.h index 3b74e4dc..c686bfaf 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/variant_helper.h b/src/common/variant_helper.h index 4eb12546..b8e47bdf 100644 --- a/src/common/variant_helper.h +++ b/src/common/variant_helper.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/common/varint.h b/src/common/varint.h index 249fce23..31f48be7 100644 --- a/src/common/varint.h +++ b/src/common/varint.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/config/CMakeLists.txt b/src/config/CMakeLists.txt new file mode 100644 index 00000000..0228b42a --- /dev/null +++ b/src/config/CMakeLists.txt @@ -0,0 +1,29 @@ +# This file is responsible for generating currency_config.h +# and providing it to other targets. +add_library(config INTERFACE) + +include(${CMAKE_CURRENT_SOURCE_DIR}/default.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/check-config.cmake) + +# This generates the header file from the template. +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/currency_config.h.in" + "${CMAKE_BINARY_DIR}/src/config/currency_config.h" +) + +# This tells any target linking against 'config' where to find headers. +target_include_directories(config INTERFACE + # For targets within this build tree, add the directory containing the *generated* header. + $ + # Also add the main 'src' directory for other headers. + $ +) + + + +file(WRITE "${CMAKE_BINARY_DIR}/src/config/currency_config_dummy.cpp" "") +add_library(currency_config OBJECT + "${CMAKE_BINARY_DIR}/src/config/currency_config.h" + "${CMAKE_BINARY_DIR}/src/config/currency_config_dummy.cpp" +) +add_dependencies(currency_config config) diff --git a/src/config/check-config.cmake b/src/config/check-config.cmake new file mode 100644 index 00000000..e3825cc6 --- /dev/null +++ b/src/config/check-config.cmake @@ -0,0 +1,33 @@ + +macro(check_defined_vars) + foreach(var ${ARGN}) + if(NOT DEFINED ${var}) + message(FATAL_ERROR "${var} not set") + endif() + endforeach() +endmacro() + +check_defined_vars( + currency_display_decimal_point + coin + base_reward_dust_threshold + default_dust_threshold + tx_default_fee + tx_minimum_fee + difficulty_pow_starter + difficulty_pos_target + difficulty_pow_target + difficulty_window + difficulty_lag + difficulty_cut + p2p_default_port + rpc_default_port + stratum_default_port + p2p_maintainers_pub_key + currency_name_abr + currency_name_base + currency_name_short_base + address_prefix_integrated + address_prefix_auditable + address_prefix_auditable_integrated +) diff --git a/src/currency_core/currency_config.h.in b/src/config/currency_config.h.in similarity index 91% rename from src/currency_core/currency_config.h.in rename to src/config/currency_config.h.in index bfd066a8..f3a735ce 100644 --- a/src/currency_core/currency_config.h.in +++ b/src/config/currency_config.h.in @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once @@ -22,11 +33,11 @@ #define CURRENCY_TX_MAX_ALLOWED_INPUTS 256 // limited primarily by asset surjection proof #define CURRENCY_TX_MAX_ALLOWED_OUTS 2000 #define CURRENCY_TX_MIN_ALLOWED_OUTS 2 // effective starting HF4 Zarcanum -#define CURRENCY_PUBLIC_ADDRESS_BASE58_PREFIX 0xc5 // addresses start with 'Zx' +#define CURRENCY_PUBLIC_ADDRESS_BASE58_PREFIX @address_prefix@ // addresses start with 'Zx' #define CURRENCY_PUBLIC_INTEG_ADDRESS_BASE58_PREFIX 0x3678 // integrated addresses start with 'iZ' -#define CURRENCY_PUBLIC_INTEG_ADDRESS_V2_BASE58_PREFIX 0x36f8 // integrated addresses start with 'iZ' (new format) -#define CURRENCY_PUBLIC_AUDITABLE_ADDRESS_BASE58_PREFIX 0x98c8 // auditable addresses start with 'aZx' -#define CURRENCY_PUBLIC_AUDITABLE_INTEG_ADDRESS_BASE58_PREFIX 0x8a49 // auditable integrated addresses start with 'aiZX' +#define CURRENCY_PUBLIC_INTEG_ADDRESS_V2_BASE58_PREFIX @address_prefix_integrated@ // integrated addresses start with 'iZ' (new format) +#define CURRENCY_PUBLIC_AUDITABLE_ADDRESS_BASE58_PREFIX @address_prefix_auditable@ // auditable addresses start with 'aZx' +#define CURRENCY_PUBLIC_AUDITABLE_INTEG_ADDRESS_BASE58_PREFIX @address_prefix_auditable_integrated@ // auditable integrated addresses start with 'aiZX' #define CURRENCY_MINED_MONEY_UNLOCK_WINDOW 10 #define CURRENT_TRANSACTION_VERSION 3 #define TRANSACTION_VERSION_INITAL 0 @@ -66,7 +77,7 @@ #define TX_DEFAULT_FEE ((uint64_t)@tx_default_fee@) // .01 #define TX_MINIMUM_FEE ((uint64_t)@tx_minimum_fee@) // .01 -#define CURRENCY_BLOCK_REWARD 1000000000000 // 1.0 coin == pow(10, CURRENCY_DISPLAY_DECIMAL_POINT) +#define CURRENCY_BLOCK_REWARD @currency_block_reward@ // 1.0 coin == pow(10, CURRENCY_DISPLAY_DECIMAL_POINT) #define WALLET_MAX_ALLOWED_OUTPUT_AMOUNT ((uint64_t)0xffffffffffffffffLL) @@ -113,12 +124,12 @@ #ifndef TESTNET -#define P2P_DEFAULT_PORT (36942 + CURRENCY_FORMATION_VERSION) -#define RPC_DEFAULT_PORT 36941 -#define STRATUM_DEFAULT_PORT 36940 -//#define STRARUM_DEFAULT_PORT 51113 +#define P2P_DEFAULT_PORT @p2p_default_port@ +#define RPC_DEFAULT_PORT @rpc_default_port@ +#define STRATUM_DEFAULT_PORT @stratum_default_port@ + #define P2P_NETWORK_ID_TESTNET_FLAG 1 -#define P2P_MAINTAINERS_PUB_KEY "aaa2d7aabc8d383fd53a3ae898697b28f236ceade6bafc1eecff413a6a02272a" +#define P2P_MAINTAINERS_PUB_KEY "@p2p_maintainers_pub_key@" #define DIFFICULTY_POS_STARTER 1 #else #define P2P_DEFAULT_PORT @p2p_default_port@ diff --git a/src/config/default.cmake b/src/config/default.cmake new file mode 100644 index 00000000..5c9fbe1f --- /dev/null +++ b/src/config/default.cmake @@ -0,0 +1,50 @@ +# Tokenomics +set(coin 1000000000000 CACHE STRING "COIN" ) +set(premine_amount 4000000000000000000 CACHE STRING "PREMINE_AMOUNT" ) +set(tx_default_fee 10000000000 CACHE STRING "TX_DEFAULT_FEE" ) +set(tx_minimum_fee 10000000000 CACHE STRING "TX_MINIMUM_FEE" ) +set(currency_block_reward 1000000000000 CACHE STRING "CURRENCY_BLOCK_REWARD" ) +set(currency_display_decimal_point 12 CACHE STRING "CURRENCY_DISPLAY_DECIMAL_POINT" ) + +# Chain Config +set(currency_name_abr "LTHN" CACHE STRING "CURRENCY_NAME_ABR" ) +set(currency_name_base "Lethean" CACHE STRING "CURRENCY_NAME_BASE" ) +set(currency_name_short_base "Lethean" CACHE STRING "CURRENCY_NAME_SHORT_BASE" ) + + +# prefix is 'iT', non auditable wallets then use 'H', auditable wallets use 'h'; 'N' is a base addr, 'n' is a sub address, +set(address_prefix 0x1eaf7 CACHE STRING "CURRENCY_PUBLIC_ADDRESS_BASE58_PREFIX" ) # addresses start with 'iTHN' +set(address_prefix_integrated 0xdeaf7 CACHE STRING "CURRENCY_PUBLIC_INTEG_ADDRESS_V2_BASE58_PREFIX" ) # integrated addresses start with 'iTHn' +set(address_prefix_auditable 0x3ceff7 CACHE STRING "CURRENCY_PUBLIC_AUDITABLE_ADDRESS_BASE58_PREFIX" ) # auditable addresses start with 'iThN' +set(address_prefix_auditable_integrated 0x8b077 CACHE STRING "CURRENCY_PUBLIC_AUDITABLE_INTEG_ADDRESS_BASE58_PREFIX" ) # auditable integrated addresses start with 'iThn' +set(base_reward_dust_threshold 1000000 CACHE STRING "BASE_REWARD_DUST_THRESHOLD") +set(default_dust_threshold 0 CACHE STRING "DEFAULT_DUST_THRESHOLD" ) +set(difficulty_pow_starter 1 CACHE STRING "DIFFICULTY_POW_STARTER" ) +set(difficulty_pos_target 120 CACHE STRING "DIFFICULTY_POS_TARGET" ) +set(difficulty_pow_target 120 CACHE STRING "DIFFICULTY_POW_TARGET" ) +set(difficulty_window 720 CACHE STRING "DIFFICULTY_WINDOW" ) +set(difficulty_lag 15 CACHE STRING "DIFFICULTY_LAG" ) +set(difficulty_cut 60 CACHE STRING "DIFFICULTY_CUT" ) +set(p2p_maintainers_pub_key "8f138bb73f6d663a3746a542770781a09579a7b84cb4125249e95530824ee607" CACHE STRING "P2P_MAINTAINERS_PUB_KEY" ) + +if (TESTNET) + set(p2p_default_port 36942 CACHE STRING "P2P_DEFAULT_PORT" ) + set(rpc_default_port 36941 CACHE STRING "RPC_DEFAULT_PORT" ) + set(stratum_default_port 36940 CACHE STRING "STRATUM_DEFAULT_PORT" ) + set(package_name "lethean-testnet-cli" CACHE STRING "CPACK_PACKAGE_NAME" ) +else () + set(p2p_default_port 36942 CACHE STRING "P2P_DEFAULT_PORT" ) + set(rpc_default_port 36941 CACHE STRING "RPC_DEFAULT_PORT" ) + set(stratum_default_port 36940 CACHE STRING "STRATUM_DEFAULT_PORT" ) + set(package_name "lethean-cli" CACHE STRING "CPACK_PACKAGE_NAME" ) +endif () +# installer config +set(package_vendor "Lethean Community" CACHE STRING "CPACK_PACKAGE_VENDOR" ) +set(package_description "A privacy‑preserving blockchain node" CACHE STRING "CPACK_PACKAGE_DESCRIPTION_SUMMARY" ) +set(package_version "${BUILD_VERSION}" CACHE STRING "CPACK_PACKAGE_VERSION" ) +set(package_contact "support@lt.hn" CACHE STRING "CPACK_PACKAGE_CONTACT" ) +set(package_website "https://github.com/letheanVPN/blockchain" CACHE STRING "CPACK_PACKAGE_HOMEPAGE_URL" ) +set(package_macos_installer "PKG" CACHE STRING "CPACK_GENERATOR" ) +set(package_macos_dmg_background "DMG" CACHE STRING "CPACK_DMG_BACKGROUND_IMAGE" ) +set(package_macos_pkg_productbuild_identifier "com.lethean.blockchainnode" CACHE STRING "CPACK_PRODUCTBUILD_IDENTIFIER" ) +set(package_macos_pkg_productbuild_signer "Developer ID Installer: Your Company (TEAMID)" CACHE STRING "CPACK_PRODUCTBUILD_SIGNING_IDENTITY" ) diff --git a/src/connectivity_tool/conn_tool.cpp b/src/connectivity_tool/conn_tool.cpp index 1bc6edc4..021d59bb 100644 --- a/src/connectivity_tool/conn_tool.cpp +++ b/src/connectivity_tool/conn_tool.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// diff --git a/src/crypto/RIPEMD160.c b/src/crypto/RIPEMD160.c index 0f832305..edd62906 100644 --- a/src/crypto/RIPEMD160.c +++ b/src/crypto/RIPEMD160.c @@ -1,37 +1,19 @@ -/********************************************************************\ -* -* FILE: rmd160.c -* -* CONTENTS: A sample C-implementation of the RIPEMD-160 -* hash-function. -* TARGET: any computer with an ANSI C compiler -* -* AUTHOR: Antoon Bosselaers, ESAT-COSIC -* DATE: 1 March 1996 -* VERSION: 1.0 -* -* Copyright (c) 1996 Katholieke Universiteit Leuven -* -* Permission is hereby granted, free of charge, to any person -* obtaining a copy of this software and associated documentation -* files (the "Software"), to deal in the Software without restriction, -* including without limitation the rights to use, copy, modify, merge, -* publish, distribute, sublicense, and/or sell copies of the Software, -* and to permit persons to whom the Software is furnished to do so, -* subject to the following conditions: -* -* The above copyright notice and this permission notice shall be -* included in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -* -\********************************************************************/ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// /* header files */ #include diff --git a/src/crypto/RIPEMD160.h b/src/crypto/RIPEMD160.h index f0ea97ef..e1d1a98d 100644 --- a/src/crypto/RIPEMD160.h +++ b/src/crypto/RIPEMD160.h @@ -1,37 +1,19 @@ -/********************************************************************\ -* -* FILE: rmd160.h -* -* CONTENTS: Header file for a sample C-implementation of the -* RIPEMD-160 hash-function. -* TARGET: any computer with an ANSI C compiler -* -* AUTHOR: Antoon Bosselaers, ESAT-COSIC -* DATE: 1 March 1996 -* VERSION: 1.0 -* -* Copyright (c) 1996 Katholieke Universiteit Leuven -* -* Permission is hereby granted, free of charge, to any person -* obtaining a copy of this software and associated documentation -* files (the "Software"), to deal in the Software without restriction, -* including without limitation the rights to use, copy, modify, merge, -* publish, distribute, sublicense, and/or sell copies of the Software, -* and to permit persons to whom the Software is furnished to do so, -* subject to the following conditions: -* -* The above copyright notice and this permission notice shall be -* included in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -* -\********************************************************************/ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef RMD160H /* make sure this file is read only once */ #define RMD160H diff --git a/src/crypto/RIPEMD160_helper.cpp b/src/crypto/RIPEMD160_helper.cpp index 9962802f..4ed7f5c5 100644 --- a/src/crypto/RIPEMD160_helper.cpp +++ b/src/crypto/RIPEMD160_helper.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2020 The Zano developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "RIPEMD160_helper.h" #include "auto_val_init.h" extern "C" { diff --git a/src/crypto/RIPEMD160_helper.h b/src/crypto/RIPEMD160_helper.h index 2257e2bb..08d4693c 100644 --- a/src/crypto/RIPEMD160_helper.h +++ b/src/crypto/RIPEMD160_helper.h @@ -1,6 +1,19 @@ -// Copyright (c) 2020 The Zano developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/bitcoin/byteswap.h b/src/crypto/bitcoin/byteswap.h index 27ef1a18..64ab1742 100644 --- a/src/crypto/bitcoin/byteswap.h +++ b/src/crypto/bitcoin/byteswap.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2019 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef BITCOIN_COMPAT_BYTESWAP_H #define BITCOIN_COMPAT_BYTESWAP_H diff --git a/src/crypto/bitcoin/common.h b/src/crypto/bitcoin/common.h index afaf0e11..9387cf3b 100644 --- a/src/crypto/bitcoin/common.h +++ b/src/crypto/bitcoin/common.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2018 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef BITCOIN_CRYPTO_COMMON_H #define BITCOIN_CRYPTO_COMMON_H diff --git a/src/crypto/bitcoin/cpuid.h b/src/crypto/bitcoin/cpuid.h index 0877ad47..18c1fbbc 100644 --- a/src/crypto/bitcoin/cpuid.h +++ b/src/crypto/bitcoin/cpuid.h @@ -1,6 +1,19 @@ -// Copyright (c) 2017-2019 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef BITCOIN_COMPAT_CPUID_H #define BITCOIN_COMPAT_CPUID_H diff --git a/src/crypto/bitcoin/endian.h b/src/crypto/bitcoin/endian.h index 354c6372..eb9d87e4 100644 --- a/src/crypto/bitcoin/endian.h +++ b/src/crypto/bitcoin/endian.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2018 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef BITCOIN_COMPAT_ENDIAN_H #define BITCOIN_COMPAT_ENDIAN_H diff --git a/src/crypto/bitcoin/sha256.cpp b/src/crypto/bitcoin/sha256.cpp index 20c994f3..5d975b6d 100644 --- a/src/crypto/bitcoin/sha256.cpp +++ b/src/crypto/bitcoin/sha256.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2019 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "sha256.h" #include "common.h" diff --git a/src/crypto/bitcoin/sha256.h b/src/crypto/bitcoin/sha256.h index 80d3625c..ca690ded 100644 --- a/src/crypto/bitcoin/sha256.h +++ b/src/crypto/bitcoin/sha256.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2018 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef BITCOIN_CRYPTO_SHA256_H #define BITCOIN_CRYPTO_SHA256_H diff --git a/src/crypto/bitcoin/sha256_helper.h b/src/crypto/bitcoin/sha256_helper.h index f376913a..5dd395d2 100644 --- a/src/crypto/bitcoin/sha256_helper.h +++ b/src/crypto/bitcoin/sha256_helper.h @@ -1,6 +1,19 @@ -// Copyright (c) 2020 The Zano developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/blake2-impl.h b/src/crypto/blake2-impl.h index c1df82e0..6ee612fb 100644 --- a/src/crypto/blake2-impl.h +++ b/src/crypto/blake2-impl.h @@ -1,17 +1,19 @@ -/* - BLAKE2 reference source code package - reference C implementations - - Copyright 2012, Samuel Neves . You may use this under the - terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at - your option. The terms of these licenses can be found at: - - - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - - OpenSSL license : https://www.openssl.org/source/license.html - - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - - More information about the BLAKE2 hash function can be found at - https://blake2.net. -*/ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef BLAKE2_IMPL_H #define BLAKE2_IMPL_H diff --git a/src/crypto/blake2.h b/src/crypto/blake2.h index 4949c650..46d6081e 100644 --- a/src/crypto/blake2.h +++ b/src/crypto/blake2.h @@ -1,17 +1,19 @@ -/* - BLAKE2 reference source code package - reference C implementations - - Copyright 2012, Samuel Neves . You may use this under the - terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at - your option. The terms of these licenses can be found at: - - - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - - OpenSSL license : https://www.openssl.org/source/license.html - - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - - More information about the BLAKE2 hash function can be found at - https://blake2.net. -*/ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifndef BLAKE2_H #define BLAKE2_H diff --git a/src/crypto/blake2b-ref.c b/src/crypto/blake2b-ref.c index cd38b1ba..80219b27 100644 --- a/src/crypto/blake2b-ref.c +++ b/src/crypto/blake2b-ref.c @@ -1,17 +1,19 @@ -/* - BLAKE2 reference source code package - reference C implementations - - Copyright 2012, Samuel Neves . You may use this under the - terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at - your option. The terms of these licenses can be found at: - - - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - - OpenSSL license : https://www.openssl.org/source/license.html - - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - - More information about the BLAKE2 hash function can be found at - https://blake2.net. -*/ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/crypto/chacha8.c b/src/crypto/chacha8.c index df135af5..3f353db3 100644 --- a/src/crypto/chacha8.c +++ b/src/crypto/chacha8.c @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + /* chacha-merged.c version 20080118 D. J. Bernstein diff --git a/src/crypto/chacha8.h b/src/crypto/chacha8.h index cebc6abe..49102273 100644 --- a/src/crypto/chacha8.h +++ b/src/crypto/chacha8.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/chacha8_stream.c b/src/crypto/chacha8_stream.c index 94d9d816..18ea84ee 100644 --- a/src/crypto/chacha8_stream.c +++ b/src/crypto/chacha8_stream.c @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + /* chacha-ref.c version 20080118 D. J. Bernstein diff --git a/src/crypto/chacha8_stream.h b/src/crypto/chacha8_stream.h index a2d0b070..6df84ba6 100644 --- a/src/crypto/chacha8_stream.h +++ b/src/crypto/chacha8_stream.h @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + /* ecrypt-sync.h */ /* diff --git a/src/crypto/clsag.cpp b/src/crypto/clsag.cpp index 26be2c59..01c92d7e 100644 --- a/src/crypto/clsag.cpp +++ b/src/crypto/clsag.cpp @@ -1,10 +1,18 @@ -// Copyright (c) 2022-2024 Zano Project -// Copyright (c) 2022-2024 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) // -// This file contains implementation of the original d-CLSAG (s.a. https://eprint.iacr.org/2019/654.pdf by Goodel at el) -// and the extended d/v-CLSAG version (s.a. https://github.com/hyle-team/docs/blob/master/zano/dv-CLSAG-extension/ by sowle) +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #include "clsag.h" //#include "misc_log_ex.h" diff --git a/src/crypto/clsag.h b/src/crypto/clsag.h index 924af50d..018eb8db 100644 --- a/src/crypto/clsag.h +++ b/src/crypto/clsag.h @@ -1,10 +1,18 @@ -// Copyright (c) 2022-2024 Zano Project -// Copyright (c) 2022-2024 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) // -// This file contains implementation of the original d-CLSAG (s.a. https://eprint.iacr.org/2019/654.pdf by Goodel at el) -// and the extended d/v-CLSAG version (s.a. https://github.com/hyle-team/docs/blob/master/zano/dv-CLSAG-extension/ by sowle) +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #pragma once #include "crypto-sugar.h" diff --git a/src/crypto/crypto-ops-data.c b/src/crypto/crypto-ops-data.c index 48bfe21a..d5aebb5d 100644 --- a/src/crypto/crypto-ops-data.c +++ b/src/crypto/crypto-ops-data.c @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include diff --git a/src/crypto/crypto-ops.c b/src/crypto/crypto-ops.c index 852c5f1f..1ab21482 100644 --- a/src/crypto/crypto-ops.c +++ b/src/crypto/crypto-ops.c @@ -1,29 +1,19 @@ -// Copyright (c) 2018-2021 Zano Project -// Copyright (c) 2020-2021 sowle (val@zano.org, crypto.sowle@gmail.com) -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // -// This file contains pieces of code from libsodium project. -// libsodium is licensed under the ISC License: -/* - * ISC License - * - * Copyright (c) 2013-2020 - * Frank Denis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ #include #include diff --git a/src/crypto/crypto-ops.h b/src/crypto/crypto-ops.h index 8ed42fcd..f5bd7540 100644 --- a/src/crypto/crypto-ops.h +++ b/src/crypto/crypto-ops.h @@ -1,7 +1,19 @@ -// Copyright (c) 2018-2021 Zano Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include // size_t diff --git a/src/crypto/crypto-sugar.cpp b/src/crypto/crypto-sugar.cpp index dfc4dcc6..92a595ad 100644 --- a/src/crypto/crypto-sugar.cpp +++ b/src/crypto/crypto-sugar.cpp @@ -1,9 +1,19 @@ -// Copyright (c) 2020-2023 Zano Project -// Copyright (c) 2020-2023 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // -// Note: This file originates from tests/functional_tests/crypto_tests.cpp #include "crypto-sugar.h" diff --git a/src/crypto/crypto-sugar.h b/src/crypto/crypto-sugar.h index 3a76fa59..cd6d789b 100644 --- a/src/crypto/crypto-sugar.h +++ b/src/crypto/crypto-sugar.h @@ -1,9 +1,19 @@ -// Copyright (c) 2020-2024 Zano Project -// Copyright (c) 2020-2024 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // -// Note: This file originates from tests/functional_tests/crypto_tests.cpp #pragma once #include #include diff --git a/src/crypto/crypto.cpp b/src/crypto/crypto.cpp index b2b7c4bb..49650a6b 100644 --- a/src/crypto/crypto.cpp +++ b/src/crypto/crypto.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/crypto/crypto.h b/src/crypto/crypto.h index 9433ad4f..95ddc904 100644 --- a/src/crypto/crypto.h +++ b/src/crypto/crypto.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/ecrypt-config.h b/src/crypto/ecrypt-config.h index 9176de17..799048cd 100644 --- a/src/crypto/ecrypt-config.h +++ b/src/crypto/ecrypt-config.h @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + /* ecrypt-config.h */ /* *** Normally, it should not be necessary to edit this file. *** */ diff --git a/src/crypto/ecrypt-machine.h b/src/crypto/ecrypt-machine.h index 83356b1e..d8d62916 100644 --- a/src/crypto/ecrypt-machine.h +++ b/src/crypto/ecrypt-machine.h @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + /* ecrypt-machine.h */ /* diff --git a/src/crypto/ecrypt-portable.h b/src/crypto/ecrypt-portable.h index 4baa4d6a..dec6f907 100644 --- a/src/crypto/ecrypt-portable.h +++ b/src/crypto/ecrypt-portable.h @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + /* ecrypt-portable.h */ /* diff --git a/src/crypto/ecrypt-sync.h b/src/crypto/ecrypt-sync.h index cd5f5d43..ca8d6818 100644 --- a/src/crypto/ecrypt-sync.h +++ b/src/crypto/ecrypt-sync.h @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + /* ecrypt-sync.h */ /* diff --git a/src/crypto/eth_signature.cpp b/src/crypto/eth_signature.cpp index c5e0999b..d6e7193c 100644 --- a/src/crypto/eth_signature.cpp +++ b/src/crypto/eth_signature.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2024 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "eth_signature.h" #include "crypto.h" #ifndef USE_OPEN_SSL_FOR_ECDSA diff --git a/src/crypto/eth_signature.h b/src/crypto/eth_signature.h index 4db0b8e7..b412e96c 100644 --- a/src/crypto/eth_signature.h +++ b/src/crypto/eth_signature.h @@ -1,6 +1,19 @@ -// Copyright (c) 2024 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include #include diff --git a/src/crypto/generic-ops.h b/src/crypto/generic-ops.h index 4fe9a5ba..430619a3 100644 --- a/src/crypto/generic-ops.h +++ b/src/crypto/generic-ops.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/hash-ops.h b/src/crypto/hash-ops.h index fcc06d14..854846ea 100644 --- a/src/crypto/hash-ops.h +++ b/src/crypto/hash-ops.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/hash.c b/src/crypto/hash.c index 0d399f49..45203463 100644 --- a/src/crypto/hash.c +++ b/src/crypto/hash.c @@ -1,7 +1,19 @@ -// Copyright (c) 2020-2021 Zano project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/crypto/hash.h b/src/crypto/hash.h index 7fb0573d..41faad95 100644 --- a/src/crypto/hash.h +++ b/src/crypto/hash.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/initializer.h b/src/crypto/initializer.h index 8c84621b..a84bcf3a 100644 --- a/src/crypto/initializer.h +++ b/src/crypto/initializer.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/keccak.c b/src/crypto/keccak.c index 3ee2a887..857c6e32 100644 --- a/src/crypto/keccak.c +++ b/src/crypto/keccak.c @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + // keccak.c // 19-Nov-11 Markku-Juhani O. Saarinen // A baseline Keccak (3rd round) implementation. diff --git a/src/crypto/keccak.h b/src/crypto/keccak.h index 4f7f8572..3842a06f 100644 --- a/src/crypto/keccak.h +++ b/src/crypto/keccak.h @@ -1,3 +1,20 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + // keccak.h // 19-Nov-11 Markku-Juhani O. Saarinen diff --git a/src/crypto/msm.cpp b/src/crypto/msm.cpp index 628d905a..74abf8b1 100644 --- a/src/crypto/msm.cpp +++ b/src/crypto/msm.cpp @@ -1,7 +1,18 @@ -// Copyright (c) 2023-2023 Zano Project -// Copyright (c) 2023-2023 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #include "epee/include/misc_log_ex.h" //#include "zarcanum.h" diff --git a/src/crypto/msm.h b/src/crypto/msm.h index 218b55f6..f58ae6fd 100644 --- a/src/crypto/msm.h +++ b/src/crypto/msm.h @@ -1,7 +1,19 @@ -// Copyright (c) 2023-2023 Zano Project (https://zano.org/) -// Copyright (c) 2023-2023 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once // This file contains Multi-Scalar Multiplication routines diff --git a/src/crypto/one_out_of_many_proofs.cpp b/src/crypto/one_out_of_many_proofs.cpp index ab921f44..89028f2e 100644 --- a/src/crypto/one_out_of_many_proofs.cpp +++ b/src/crypto/one_out_of_many_proofs.cpp @@ -1,11 +1,22 @@ -// Copyright (c) 2023-2024 Zano Project -// Copyright (c) 2023-2024 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #include "one_out_of_many_proofs.h" #include "../currency_core/crypto_config.h" -#include "../currency_core/currency_config.h" // for static asset checks +#include "config/currency_config.h" // for static asset checks #include "epee/include/misc_log_ex.h" //DISABLE_GCC_AND_CLANG_WARNING(unused-function) @@ -32,7 +43,7 @@ namespace crypto { precalculated_generators.resize(mn_max * 2); - scalar_t hash_buf[2] = { hash_helper_t::hs("Zano BGE generator"), 0 }; + scalar_t hash_buf[2] = { hash_helper_t::hs("Lethean BGE generator"), 0 }; for(size_t i = 0; i < precalculated_generators.size(); ++i) { diff --git a/src/crypto/one_out_of_many_proofs.h b/src/crypto/one_out_of_many_proofs.h index e8c3c860..3746f39d 100644 --- a/src/crypto/one_out_of_many_proofs.h +++ b/src/crypto/one_out_of_many_proofs.h @@ -1,7 +1,18 @@ -// Copyright (c) 2023 Zano Project -// Copyright (c) 2023 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #pragma once #include "crypto-sugar.h" diff --git a/src/crypto/random.c b/src/crypto/random.c index f204c163..3d0f4b37 100644 --- a/src/crypto/random.c +++ b/src/crypto/random.c @@ -1,7 +1,19 @@ -// Copyright (c) 2018-2025 Zano Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/crypto/random.h b/src/crypto/random.h index 7db79b8b..aec69e23 100644 --- a/src/crypto/random.h +++ b/src/crypto/random.h @@ -1,8 +1,19 @@ -// Copyright (c) 2018-2025 Zano Project -// Copyright (c) 2014-2018 The Boolberry developers -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/crypto/range_proof_bpp.h b/src/crypto/range_proof_bpp.h index db1ffa1a..b8557804 100644 --- a/src/crypto/range_proof_bpp.h +++ b/src/crypto/range_proof_bpp.h @@ -1,7 +1,19 @@ -// Copyright (c) 2021-2022 Zano Project (https://zano.org/) -// Copyright (c) 2021-2022 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once // diff --git a/src/crypto/range_proof_bppe.h b/src/crypto/range_proof_bppe.h index de786541..f1ad30c4 100644 --- a/src/crypto/range_proof_bppe.h +++ b/src/crypto/range_proof_bppe.h @@ -1,7 +1,19 @@ -// Copyright (c) 2022 Zano Project (https://zano.org/) -// Copyright (c) 2022 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once // diff --git a/src/crypto/range_proofs.cpp b/src/crypto/range_proofs.cpp index fd14ec0f..d2932b39 100644 --- a/src/crypto/range_proofs.cpp +++ b/src/crypto/range_proofs.cpp @@ -1,7 +1,19 @@ -// Copyright (c) 2021 Zano Project (https://zano.org/) -// Copyright (c) 2021 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "range_proofs.h" namespace crypto diff --git a/src/crypto/range_proofs.h b/src/crypto/range_proofs.h index 17cbba51..c35d34f3 100644 --- a/src/crypto/range_proofs.h +++ b/src/crypto/range_proofs.h @@ -1,7 +1,19 @@ -// Copyright (c) 2021-2023 Zano Project (https://zano.org/) -// Copyright (c) 2021-2023 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "epee/include/misc_log_ex.h" @@ -78,7 +90,7 @@ namespace crypto static const scalar_t& get_initial_transcript() { - static scalar_t value = hash_helper_t::hs("Zano BP+ initial transcript"); + static scalar_t value = hash_helper_t::hs("Lethean BP+ initial transcript"); return value; } @@ -109,7 +121,7 @@ namespace crypto static bool calculated = false; if (!calculated) { - scalar_t hash_buf[2] = { hash_helper_t::hs("Zano BP+ generator"), 0 }; + scalar_t hash_buf[2] = { hash_helper_t::hs("Lethean BP+ generator"), 0 }; for (size_t i = 0; i < 2 * c_bpp_mn_max; ++i) { hash_buf[1].m_u64[0] = i; diff --git a/src/crypto/tree-hash.c b/src/crypto/tree-hash.c index 2909f319..921df382 100644 --- a/src/crypto/tree-hash.c +++ b/src/crypto/tree-hash.c @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/crypto/zarcanum.cpp b/src/crypto/zarcanum.cpp index e0b81f44..12f386b1 100644 --- a/src/crypto/zarcanum.cpp +++ b/src/crypto/zarcanum.cpp @@ -1,9 +1,19 @@ -// Copyright (c) 2022-2023 Zano Project -// Copyright (c) 2022-2023 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // -// Note: This file originates from tests/functional_tests/crypto_tests.cpp #include "epee/include/misc_log_ex.h" #include "zarcanum.h" #include "range_proofs.h" diff --git a/src/crypto/zarcanum.h b/src/crypto/zarcanum.h index 55e6b202..5621c78a 100644 --- a/src/crypto/zarcanum.h +++ b/src/crypto/zarcanum.h @@ -1,9 +1,19 @@ -// Copyright (c) 2022-2024 Zano Project -// Copyright (c) 2022-2024 sowle (val@zano.org, crypto.sowle@gmail.com) -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // -// Note: This file originates from tests/functional_tests/crypto_tests.cpp #pragma once #include "crypto-sugar.h" #include "range_proofs.h" diff --git a/src/currency_core/account.cpp b/src/currency_core/account.cpp index ff194a59..20cb2a16 100644 --- a/src/currency_core/account.cpp +++ b/src/currency_core/account.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/currency_core/account.h b/src/currency_core/account.h index d732181d..315aa2d9 100644 --- a/src/currency_core/account.h +++ b/src/currency_core/account.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/account_boost_serialization.h b/src/currency_core/account_boost_serialization.h index f0f2d634..68c2906e 100644 --- a/src/currency_core/account_boost_serialization.h +++ b/src/currency_core/account_boost_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/alias_helper.h b/src/currency_core/alias_helper.h index 3bc5b33e..4e52f407 100644 --- a/src/currency_core/alias_helper.h +++ b/src/currency_core/alias_helper.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/basic_api_response_codes.h b/src/currency_core/basic_api_response_codes.h index bb1cafe5..0914716c 100644 --- a/src/currency_core/basic_api_response_codes.h +++ b/src/currency_core/basic_api_response_codes.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// diff --git a/src/currency_core/basic_kv_structs.h b/src/currency_core/basic_kv_structs.h index 1ff520c6..aff017ae 100644 --- a/src/currency_core/basic_kv_structs.h +++ b/src/currency_core/basic_kv_structs.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/basic_pow_helpers.cpp b/src/currency_core/basic_pow_helpers.cpp index d029ee19..d0afcc7b 100644 --- a/src/currency_core/basic_pow_helpers.cpp +++ b/src/currency_core/basic_pow_helpers.cpp @@ -1,7 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Copyright (c) 2018-2019 Hyle Team -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "include_base_utils.h" @@ -11,7 +23,7 @@ using namespace epee; #include "currency_format_utils.h" #include "serialization/binary_utils.h" #include "serialization/stl_containers.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "crypto/crypto.h" #include "crypto/hash.h" #include "common/int-util.h" diff --git a/src/currency_core/basic_pow_helpers.h b/src/currency_core/basic_pow_helpers.h index 62ba7721..c9ca06ac 100644 --- a/src/currency_core/basic_pow_helpers.h +++ b/src/currency_core/basic_pow_helpers.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/bc_attachments_helpers.h b/src/currency_core/bc_attachments_helpers.h index 48f1fac4..cf788783 100644 --- a/src/currency_core/bc_attachments_helpers.h +++ b/src/currency_core/bc_attachments_helpers.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "currency_basic.h" diff --git a/src/currency_core/bc_attachments_helpers_basic.h b/src/currency_core/bc_attachments_helpers_basic.h index 74039e9d..46f13a4e 100644 --- a/src/currency_core/bc_attachments_helpers_basic.h +++ b/src/currency_core/bc_attachments_helpers_basic.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "currency_basic.h" diff --git a/src/currency_core/bc_attachments_service_manager.cpp b/src/currency_core/bc_attachments_service_manager.cpp index c56015b6..b8a53d4c 100644 --- a/src/currency_core/bc_attachments_service_manager.cpp +++ b/src/currency_core/bc_attachments_service_manager.cpp @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "bc_attachments_service_manager.h" diff --git a/src/currency_core/bc_attachments_service_manager.h b/src/currency_core/bc_attachments_service_manager.h index 632126a9..1e5f514d 100644 --- a/src/currency_core/bc_attachments_service_manager.h +++ b/src/currency_core/bc_attachments_service_manager.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/bc_block_datetime_service.h b/src/currency_core/bc_block_datetime_service.h index 4db3d743..7fe1cea9 100644 --- a/src/currency_core/bc_block_datetime_service.h +++ b/src/currency_core/bc_block_datetime_service.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2021 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #define BC_BLOCK_DATETIME_SERVICE_ID "d" diff --git a/src/currency_core/bc_escrow_service.h b/src/currency_core/bc_escrow_service.h index c9e00ae1..6c5de2fe 100644 --- a/src/currency_core/bc_escrow_service.h +++ b/src/currency_core/bc_escrow_service.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "account.h" diff --git a/src/currency_core/bc_offers_serialization.h b/src/currency_core/bc_offers_serialization.h index f786133f..52cf5675 100644 --- a/src/currency_core/bc_offers_serialization.h +++ b/src/currency_core/bc_offers_serialization.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/bc_offers_service.cpp b/src/currency_core/bc_offers_service.cpp index b6349e90..a7ff8ac6 100644 --- a/src/currency_core/bc_offers_service.cpp +++ b/src/currency_core/bc_offers_service.cpp @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "bc_offers_service.h" diff --git a/src/currency_core/bc_offers_service.h b/src/currency_core/bc_offers_service.h index 1d7c6429..2ed8d2bf 100644 --- a/src/currency_core/bc_offers_service.h +++ b/src/currency_core/bc_offers_service.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/bc_offers_service_basic.h b/src/currency_core/bc_offers_service_basic.h index 41f06c40..f9b71f34 100644 --- a/src/currency_core/bc_offers_service_basic.h +++ b/src/currency_core/bc_offers_service_basic.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/bc_payments_id_service.h b/src/currency_core/bc_payments_id_service.h index 070907bd..1ce636db 100644 --- a/src/currency_core/bc_payments_id_service.h +++ b/src/currency_core/bc_payments_id_service.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/block_chain_shortener.cpp b/src/currency_core/block_chain_shortener.cpp index 986658a1..db2522fc 100644 --- a/src/currency_core/block_chain_shortener.cpp +++ b/src/currency_core/block_chain_shortener.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "block_chain_shortener.h" #include "common/crypto_stream_operators.h" diff --git a/src/currency_core/block_chain_shortener.h b/src/currency_core/block_chain_shortener.h index dfd64de1..0738ead1 100644 --- a/src/currency_core/block_chain_shortener.h +++ b/src/currency_core/block_chain_shortener.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #pragma once diff --git a/src/currency_core/block_flags.h b/src/currency_core/block_flags.h index b7724e15..cd06b44b 100644 --- a/src/currency_core/block_flags.h +++ b/src/currency_core/block_flags.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #define CURRENCY_BLOCK_FLAG_POS_BLOCK 0x01 diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index a6fb1142..62a43393 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include @@ -22,7 +32,7 @@ #include "blockchain_storage.h" #include "currency_format_utils.h" #include "currency_boost_serialization.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "miner.h" #include "misc_language.h" #include "profile_tools.h" diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index cccc8d83..05633d73 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/blockchain_storage_basic.h b/src/currency_core/blockchain_storage_basic.h index 643ba527..09e35db5 100644 --- a/src/currency_core/blockchain_storage_basic.h +++ b/src/currency_core/blockchain_storage_basic.h @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/blockchain_storage_boost_serialization.h b/src/currency_core/blockchain_storage_boost_serialization.h index ce1babf8..9e2678d4 100644 --- a/src/currency_core/blockchain_storage_boost_serialization.h +++ b/src/currency_core/blockchain_storage_boost_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/checkpoints.cpp b/src/currency_core/checkpoints.cpp index bbce9815..7c06b355 100644 --- a/src/currency_core/checkpoints.cpp +++ b/src/currency_core/checkpoints.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "include_base_utils.h" using namespace epee; diff --git a/src/currency_core/checkpoints.h b/src/currency_core/checkpoints.h index 76675e67..08fa57ba 100644 --- a/src/currency_core/checkpoints.h +++ b/src/currency_core/checkpoints.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/checkpoints_create.h b/src/currency_core/checkpoints_create.h index 49d10037..0b1fdf82 100644 --- a/src/currency_core/checkpoints_create.h +++ b/src/currency_core/checkpoints_create.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/connection_context.h b/src/currency_core/connection_context.h index 5e094477..b858b787 100644 --- a/src/currency_core/connection_context.h +++ b/src/currency_core/connection_context.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/core_runtime_config.h b/src/currency_core/core_runtime_config.h index 92bc78bd..92f81a96 100644 --- a/src/currency_core/core_runtime_config.h +++ b/src/currency_core/core_runtime_config.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "boost/serialization/array.hpp" diff --git a/src/currency_core/core_tools.h b/src/currency_core/core_tools.h index 38d7362f..07489874 100644 --- a/src/currency_core/core_tools.h +++ b/src/currency_core/core_tools.h @@ -1,9 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/crypto_config.h b/src/currency_core/crypto_config.h index 648550bc..72d6a9b4 100644 --- a/src/currency_core/crypto_config.h +++ b/src/currency_core/crypto_config.h @@ -1,6 +1,18 @@ -// Copyright (c) 2022-2023 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #pragma once diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index c73660f6..9d5abcb3 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Copyright (c) 2014-2015 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once @@ -36,7 +46,7 @@ #include "serialization/debug_archive.h" #include "serialization/keyvalue_serialization.h" // epee key-value serialization #include "string_tools.h" -#include "currency_config.h" +#include "config/currency_config.h" #include "crypto/crypto.h" #include "crypto/hash.h" #include "crypto/range_proofs.h" @@ -772,7 +782,7 @@ namespace currency KV_SERIALIZE(current_supply) DOC_DSCR("Currently emitted supply for the given asset (ignored for REGISTER operation).") DOC_EXMP(500000000000000000) DOC_END KV_SERIALIZE(decimal_point) DOC_DSCR("Decimal point.") DOC_EXMP(12) DOC_END KV_SERIALIZE(ticker) DOC_DSCR("Ticker associated with the asset.") DOC_EXMP("ZABC") DOC_END - KV_SERIALIZE(full_name) DOC_DSCR("Full name of the asset.") DOC_EXMP("Zano wrapped ABC") DOC_END + KV_SERIALIZE(full_name) DOC_DSCR("Full name of the asset.") DOC_EXMP("Lethean wrapped ABC") DOC_END KV_SERIALIZE(meta_info) DOC_DSCR("Any other information associated with the asset, by default in a json format.") DOC_EXMP("{ \"some_arbitrary_field_name\": \"some arbitrary value\"}") DOC_END KV_SERIALIZE_POD_AS_HEX_STRING(owner) DOC_DSCR("Owner's key, used only for EMIT and UPDATE validation, can be changed by transferring asset ownership.") DOC_EXMP("f74bb56a5b4fa562e679ccaadd697463498a66de4f1760b2cd40f11c3a00a7a8") DOC_END KV_SERIALIZE(hidden_supply) DOC_DSCR("This field is reserved for future use and will be documented later.") DOC_END diff --git a/src/currency_core/currency_basic_backward_comp.inl b/src/currency_core/currency_basic_backward_comp.inl index 9dc2a903..482a4289 100644 --- a/src/currency_core/currency_basic_backward_comp.inl +++ b/src/currency_core/currency_basic_backward_comp.inl @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2022 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// diff --git a/src/currency_core/currency_boost_serialization.h b/src/currency_core/currency_boost_serialization.h index c12caf25..0d92b807 100644 --- a/src/currency_core/currency_boost_serialization.h +++ b/src/currency_core/currency_boost_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/currency_core.cpp b/src/currency_core/currency_core.cpp index 7fe8746c..b589e469 100644 --- a/src/currency_core/currency_core.cpp +++ b/src/currency_core/currency_core.cpp @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "include_base_utils.h" using namespace epee; @@ -15,7 +25,7 @@ using namespace epee; #include "common/util.h" #include "warnings.h" #include "crypto/crypto.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "currency_format_utils.h" #include "misc_language.h" #include "string_coding.h" diff --git a/src/currency_core/currency_core.h b/src/currency_core/currency_core.h index 3da70452..9ddd40de 100644 --- a/src/currency_core/currency_core.h +++ b/src/currency_core/currency_core.h @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index dbe4d82a..a3688cf3 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include "include_base_utils.h" #include @@ -17,7 +27,7 @@ using namespace epee; #include "currency_format_utils_transactions.h" #include "serialization/binary_utils.h" #include "serialization/stl_containers.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "miner.h" #include "crypto/crypto.h" #include "crypto/hash.h" diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 4e67f9a0..f3fbbb97 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2023 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/currency_format_utils_abstract.h b/src/currency_core/currency_format_utils_abstract.h index ad3d2b55..551c045c 100644 --- a/src/currency_core/currency_format_utils_abstract.h +++ b/src/currency_core/currency_format_utils_abstract.h @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/currency_format_utils_blocks.cpp b/src/currency_core/currency_format_utils_blocks.cpp index 85bcddfd..745d94da 100644 --- a/src/currency_core/currency_format_utils_blocks.cpp +++ b/src/currency_core/currency_format_utils_blocks.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// diff --git a/src/currency_core/currency_format_utils_blocks.h b/src/currency_core/currency_format_utils_blocks.h index 130b51dc..35399f6d 100644 --- a/src/currency_core/currency_format_utils_blocks.h +++ b/src/currency_core/currency_format_utils_blocks.h @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/currency_format_utils_transactions.cpp b/src/currency_core/currency_format_utils_transactions.cpp index 6c4a5a2e..bf7a863a 100644 --- a/src/currency_core/currency_format_utils_transactions.cpp +++ b/src/currency_core/currency_format_utils_transactions.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// diff --git a/src/currency_core/currency_format_utils_transactions.h b/src/currency_core/currency_format_utils_transactions.h index 6bb04b01..f1541ace 100644 --- a/src/currency_core/currency_format_utils_transactions.h +++ b/src/currency_core/currency_format_utils_transactions.h @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2023 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/currency_stat_info.h b/src/currency_core/currency_stat_info.h index 2c490a28..3c92f1b9 100644 --- a/src/currency_core/currency_stat_info.h +++ b/src/currency_core/currency_stat_info.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "serialization/keyvalue_serialization.h" diff --git a/src/currency_core/difficulty.cpp b/src/currency_core/difficulty.cpp index b0bdfac0..592b3be7 100644 --- a/src/currency_core/difficulty.cpp +++ b/src/currency_core/difficulty.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include @@ -14,7 +25,7 @@ #include "common/int-util.h" #include "crypto/hash.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "difficulty.h" #include "profile_tools.h" diff --git a/src/currency_core/difficulty.h b/src/currency_core/difficulty.h index 731fb26f..8ffb64df 100644 --- a/src/currency_core/difficulty.h +++ b/src/currency_core/difficulty.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/dispatch_core_events.h b/src/currency_core/dispatch_core_events.h index 19d3df40..c4a7a5cd 100644 --- a/src/currency_core/dispatch_core_events.h +++ b/src/currency_core/dispatch_core_events.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2014-2015 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/etc_custom_serialization.cpp b/src/currency_core/etc_custom_serialization.cpp index 555ec799..371ffbaa 100644 --- a/src/currency_core/etc_custom_serialization.cpp +++ b/src/currency_core/etc_custom_serialization.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2014-2015 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "currency_format_utils.h" #include "etc_custom_serialization.h" diff --git a/src/currency_core/etc_custom_serialization.h b/src/currency_core/etc_custom_serialization.h index b0269ba9..8fae1c82 100644 --- a/src/currency_core/etc_custom_serialization.h +++ b/src/currency_core/etc_custom_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2014-2015 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/generated/_genesis_tn.cpp.gen b/src/currency_core/generated/_genesis_tn.cpp.gen deleted file mode 100644 index fc699deb..00000000 --- a/src/currency_core/generated/_genesis_tn.cpp.gen +++ /dev/null @@ -1,3 +0,0 @@ -const genesis_tx_raw_data ggenesis_tx_raw = {{ -0xc080800100000101,0x8c0337c1b6d9e9ec,0x4e22a822e89151ed,0x945d81f56c551f9e,0x5a84b14938248553,0x00671298a0463d3a,0x7e114ec4e4e61605,0xbfcb71d85a357ea4,0x44cdc815ed8a0a0d,0x31880bc9212ad0b9,0x6d776f770c13f6e7,0x666f6f7270686375,0x0a0e36ce020b0015}, -{0x00,0x00}}; diff --git a/src/currency_core/genesis.cpp b/src/currency_core/genesis.cpp index 15ccdb7f..63ec554a 100644 --- a/src/currency_core/genesis.cpp +++ b/src/currency_core/genesis.cpp @@ -1,14 +1,26 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "genesis.h" namespace currency { #ifndef TESTNET -#include "generated/_genesis.cpp.gen" +#include "../genesis/_genesis.cpp.gen" #else -#include "generated/_genesis_tn.cpp.gen" +#include "../genesis/_genesis_tn.cpp.gen" #endif } diff --git a/src/currency_core/genesis.h b/src/currency_core/genesis.h index 5ab76152..2f83ac91 100644 --- a/src/currency_core/genesis.h +++ b/src/currency_core/genesis.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include #include @@ -10,9 +22,9 @@ namespace currency { #pragma pack(push, 1) #ifndef TESTNET -#include "generated/_genesis.h.gen" +#include "../genesis/_genesis.h.gen" #else -#include "generated/_genesis_tn.h.gen" +#include "../genesis/_genesis_tn.h.gen" #endif #pragma pack(pop) extern const genesis_tx_raw_data ggenesis_tx_raw; diff --git a/src/currency_core/genesis_acc.cpp b/src/currency_core/genesis_acc.cpp index e38f7e42..2e79f008 100644 --- a/src/currency_core/genesis_acc.cpp +++ b/src/currency_core/genesis_acc.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "genesis_acc.h" @@ -10,8 +21,8 @@ namespace currency { #ifndef TESTNET -#include "generated/_genesis_acc.cpp.gen" +#include "../genesis/_genesis_acc.cpp.gen" #else -#include "generated/_genesis_acc_tn.cpp.gen" +#include "../genesis/_genesis_acc_tn.cpp.gen" #endif } diff --git a/src/currency_core/genesis_acc.h b/src/currency_core/genesis_acc.h index c923f8c4..fbd4c0f0 100644 --- a/src/currency_core/genesis_acc.h +++ b/src/currency_core/genesis_acc.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/currency_core/miner.cpp b/src/currency_core/miner.cpp index dc37f3f6..86ecedef 100644 --- a/src/currency_core/miner.cpp +++ b/src/currency_core/miner.cpp @@ -1,9 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include diff --git a/src/currency_core/miner.h b/src/currency_core/miner.h index 674bb4d2..7685442e 100644 --- a/src/currency_core/miner.h +++ b/src/currency_core/miner.h @@ -1,9 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_core/offers_service_basics.h b/src/currency_core/offers_service_basics.h index 63feedb9..33b30bb4 100644 --- a/src/currency_core/offers_service_basics.h +++ b/src/currency_core/offers_service_basics.h @@ -1,7 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once @@ -42,12 +54,12 @@ namespace bc_services KV_SERIALIZE_CUSTOM_N(amount_target, std::string, bc_services::transform_amount_to_string, bc_services::transform_string_to_amount, "at") DOC_DSCR("Smount of other currency or goods") DOC_EXMP("10000000") DOC_END KV_SERIALIZE_N(bonus, "b") DOC_DSCR("Bonus associated with the offer") DOC_EXMP("") DOC_END KV_SERIALIZE_N(target, "t") DOC_DSCR("Target: currency / goods") DOC_EXMP("USDT") DOC_END - KV_SERIALIZE_N(primary, "p") DOC_DSCR("Currency for goods") DOC_EXMP("ZANO") DOC_END + KV_SERIALIZE_N(primary, "p") DOC_DSCR("Currency for goods") DOC_EXMP("LTHN") DOC_END KV_SERIALIZE_N(location_country, "lco") DOC_DSCR("Country of the offer location") DOC_EXMP("Montenegro") DOC_END KV_SERIALIZE_N(location_city, "lci") DOC_DSCR("City of the offer location") DOC_EXMP("Kolasin") DOC_END KV_SERIALIZE_N(contacts, "cnt") DOC_DSCR("Contacts related to the offer") DOC_EXMP("Ranko +38211111111") DOC_END KV_SERIALIZE_N(comment, "com") DOC_DSCR("Comment associated with the offer") DOC_EXMP("Dobr dan") DOC_END - KV_SERIALIZE_N(payment_types, "pt") DOC_DSCR("Types of payment accepted for the offer") DOC_EXMP("zano") DOC_END + KV_SERIALIZE_N(payment_types, "pt") DOC_DSCR("Types of payment accepted for the offer") DOC_EXMP("lethean") DOC_END KV_SERIALIZE_N(deal_option, "do") DOC_DSCR("Deal option for the offer") DOC_EXMP("full amount, by parts") DOC_END KV_SERIALIZE_N(category, "cat") DOC_DSCR("Category of the offer") DOC_EXMP("") DOC_END KV_SERIALIZE_N(expiration_time, "et") DOC_DSCR("Expiration time of the offer") DOC_EXMP(0) DOC_END diff --git a/src/currency_core/offers_services_helpers.cpp b/src/currency_core/offers_services_helpers.cpp index 0029ef4e..cc597077 100644 --- a/src/currency_core/offers_services_helpers.cpp +++ b/src/currency_core/offers_services_helpers.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include diff --git a/src/currency_core/offers_services_helpers.h b/src/currency_core/offers_services_helpers.h index 1d0aa919..193d6339 100644 --- a/src/currency_core/offers_services_helpers.h +++ b/src/currency_core/offers_services_helpers.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "profile_tools.h" diff --git a/src/currency_core/pos_mining.cpp b/src/currency_core/pos_mining.cpp index 478284d8..46225ea3 100644 --- a/src/currency_core/pos_mining.cpp +++ b/src/currency_core/pos_mining.cpp @@ -1,6 +1,18 @@ -// Copyright (c) 2022-2024 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #include "currency_basic.h" #include "difficulty.h" diff --git a/src/currency_core/pos_mining.h b/src/currency_core/pos_mining.h index ae6baf03..dd77e17f 100644 --- a/src/currency_core/pos_mining.h +++ b/src/currency_core/pos_mining.h @@ -1,6 +1,18 @@ -// Copyright (c) 2022 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 // #pragma once diff --git a/src/currency_core/tx_pool.cpp b/src/currency_core/tx_pool.cpp index ed2edf08..c80d94ef 100644 --- a/src/currency_core/tx_pool.cpp +++ b/src/currency_core/tx_pool.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include @@ -12,7 +23,7 @@ #include "common/db_backend_selector.h" #include "tx_pool.h" #include "currency_boost_serialization.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "blockchain_storage.h" #include "common/boost_serialization_helper.h" #include "common/int-util.h" diff --git a/src/currency_core/tx_pool.h b/src/currency_core/tx_pool.h index 321f0c48..27ce8ccc 100644 --- a/src/currency_core/tx_pool.h +++ b/src/currency_core/tx_pool.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "include_base_utils.h" diff --git a/src/currency_core/tx_semantic_validation.cpp b/src/currency_core/tx_semantic_validation.cpp index d358edf2..705771d5 100644 --- a/src/currency_core/tx_semantic_validation.cpp +++ b/src/currency_core/tx_semantic_validation.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// diff --git a/src/currency_core/tx_semantic_validation.h b/src/currency_core/tx_semantic_validation.h index 03a946c7..bd2a29e3 100644 --- a/src/currency_core/tx_semantic_validation.h +++ b/src/currency_core/tx_semantic_validation.h @@ -1,6 +1,19 @@ -// Copyright (c) 2018-2023 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "include_base_utils.h" diff --git a/src/currency_core/verification_context.h b/src/currency_core/verification_context.h index 85533cc5..0964fb15 100644 --- a/src/currency_core/verification_context.h +++ b/src/currency_core/verification_context.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_protocol/blobdatatype.h b/src/currency_protocol/blobdatatype.h index b3d614aa..58d0046d 100644 --- a/src/currency_protocol/blobdatatype.h +++ b/src/currency_protocol/blobdatatype.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_protocol/currency_protocol_defs.h b/src/currency_protocol/currency_protocol_defs.h index d8dca973..b2115f45 100644 --- a/src/currency_protocol/currency_protocol_defs.h +++ b/src/currency_protocol/currency_protocol_defs.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_protocol/currency_protocol_defs_print.h b/src/currency_protocol/currency_protocol_defs_print.h index 023ed305..50933489 100644 --- a/src/currency_protocol/currency_protocol_defs_print.h +++ b/src/currency_protocol/currency_protocol_defs_print.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_protocol/currency_protocol_handler.h b/src/currency_protocol/currency_protocol_handler.h index c21ac71a..2dc13609 100644 --- a/src/currency_protocol/currency_protocol_handler.h +++ b/src/currency_protocol/currency_protocol_handler.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/currency_protocol/currency_protocol_handler.inl b/src/currency_protocol/currency_protocol_handler.inl index 0d772d45..434973fb 100644 --- a/src/currency_protocol/currency_protocol_handler.inl +++ b/src/currency_protocol/currency_protocol_handler.inl @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include "currency_protocol_handler.h" #include "currency_core/currency_format_utils.h" diff --git a/src/currency_protocol/currency_protocol_handler_common.h b/src/currency_protocol/currency_protocol_handler_common.h index ba640896..9cd98833 100644 --- a/src/currency_protocol/currency_protocol_handler_common.h +++ b/src/currency_protocol/currency_protocol_handler_common.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index 9ebf02d4..c04b8e05 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// // node.cpp : Defines the entry point for the console application. // diff --git a/src/daemon/daemon_commands_handler.h b/src/daemon/daemon_commands_handler.h index 69df1340..7787d97a 100644 --- a/src/daemon/daemon_commands_handler.h +++ b/src/daemon/daemon_commands_handler.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/genesis/.genesis.txt b/src/genesis/.genesis.txt new file mode 100644 index 00000000..99d5bea0 --- /dev/null +++ b/src/genesis/.genesis.txt @@ -0,0 +1 @@ +01010000018080a0cfc8e0c8e38a0103858421a2d287027bdde3db5e385b0c728f598ad1647c8e17036d3ef63f61bb98000516f971f914382e875df5655f591c8df7b126d95f5e8331613ba3f5c797f541839c136b49742074616b657320616476616e74616765206f6620746865206e6174757265206f6620696e666f726d6174696f6e206265696e67206561737920746f2073707265616420627574206861726420746f20737469666c652e202d205361746f736869204e616b616d6f746f15000b02660d0e0a0000 \ No newline at end of file diff --git a/src/genesis/CMakeLists.txt b/src/genesis/CMakeLists.txt new file mode 100644 index 00000000..49470223 --- /dev/null +++ b/src/genesis/CMakeLists.txt @@ -0,0 +1,37 @@ +add_executable(genesis_generator EXCLUDE_FROM_ALL generate_test_genesis.cpp) + +target_link_libraries(genesis_generator + PRIVATE + config + currency_core + crypto + common + ZLIB::ZLIB + ${CMAKE_THREAD_LIBS_INIT} + ${Boost_LIBRARIES} + OpenSSL::SSL + OpenSSL::Crypto +) + +set_property(TARGET genesis_generator PROPERTY FOLDER "prog") + +if (GENERATE_FRESH_GENESIS) + if (NOT DEFINED GENESIS_PREMINE_ADDRESS OR GENESIS_PREMINE_ADDRESS STREQUAL "") + set(address_file "${CMAKE_SOURCE_DIR}/premine_wallet/premine_wallet.address") + message(STATUS "GENESIS_PREMINE_ADDRESS not set, attempting to load from ${address_file}") + if(EXISTS "${address_file}") + file(READ "${address_file}" GENESIS_PREMINE_ADDRESS) + string(STRIP "${GENESIS_PREMINE_ADDRESS}" GENESIS_PREMINE_ADDRESS) + endif() + endif() + + if (NOT DEFINED GENESIS_PREMINE_ADDRESS OR GENESIS_PREMINE_ADDRESS STREQUAL "") + message(FATAL_ERROR "GENESIS_PREMINE_ADDRESS is not set and could not be read from file. Please set it via -DGENESIS_PREMINE_ADDRESS=
") + else() + add_custom_command(TARGET genesis_generator POST_BUILD + COMMAND $ --address ${GENESIS_PREMINE_ADDRESS} --proof "${GENESIS_PROOF}" --output "${CMAKE_SOURCE_DIR}/src/genesis/" + COMMENT "Generating genesis data..." + VERBATIM + ) + endif() +endif() diff --git a/src/genesis/README.md b/src/genesis/README.md new file mode 100644 index 00000000..2c49a676 --- /dev/null +++ b/src/genesis/README.md @@ -0,0 +1,44 @@ +# Genesis Block Update Instructions + +This document outlines the steps to trigger a genesis block update. The following instructions are based on the provided Makefile snippet. + +## Prerequisites + +* CMake +* Make + +## Steps + +1. **Generate Premine Wallet (Optional):** + + This step generates a premine wallet. It sets the `GENERATE_PREMINE_WALLET` CMake option to `1` and the `PREMINE_WALLET_PASSWORD` to `12345678`. + + ```bash + cmake -DGENERATE_PREMINE_WALLET=1 -DPREMINE_WALLET_PASSWORD=12345678 + cmake --build ./src --target premine_wallet + ``` + +2. **Generate Fresh Genesis Block:** + + This step generates a fresh genesis block. It sets the `GENERATE_FRESH_GENESIS` CMake option to `1`. + + ```bash + cmake -DGENERATE_FRESH_GENESIS=1 + cmake --build ./src --target genesis_generator + ``` + +3. **Build the Project:** + + This step builds the entire project. + + ```bash + cmake + make + ``` + +## Notes + +* Replace `` and `` with the actual values used in your environment. These are likely variables defined elsewhere in the Makefile. +* The `|| true` at the end of the `premine_wallet` build command ensures that the script continues even if the build fails. +* This process assumes that the `CMAKE` macro and other variables like `dir_release` are properly defined in the Makefile. +* The exact impact of these steps on the genesis block update depends on the codebase. Consult the source code for more details. diff --git a/src/currency_core/generated/_genesis.cpp.gen b/src/genesis/_genesis.cpp.gen similarity index 100% rename from src/currency_core/generated/_genesis.cpp.gen rename to src/genesis/_genesis.cpp.gen diff --git a/src/currency_core/generated/_genesis.h.gen b/src/genesis/_genesis.h.gen similarity index 100% rename from src/currency_core/generated/_genesis.h.gen rename to src/genesis/_genesis.h.gen diff --git a/src/currency_core/generated/_genesis_acc.cpp.gen b/src/genesis/_genesis_acc.cpp.gen similarity index 100% rename from src/currency_core/generated/_genesis_acc.cpp.gen rename to src/genesis/_genesis_acc.cpp.gen diff --git a/src/currency_core/generated/_genesis_acc_tn.cpp.gen b/src/genesis/_genesis_acc_tn.cpp.gen similarity index 64% rename from src/currency_core/generated/_genesis_acc_tn.cpp.gen rename to src/genesis/_genesis_acc_tn.cpp.gen index fc0eb6f3..6add48fe 100644 --- a/src/currency_core/generated/_genesis_acc_tn.cpp.gen +++ b/src/genesis/_genesis_acc_tn.cpp.gen @@ -1,6 +1,6 @@ -const std::string ggenesis_tx_pub_key_str = "e6e4c44e117ea47e355ad871cbbf0d0a8aed15c8cd44b9d02a21c90b8831e7f6"; +const std::string ggenesis_tx_pub_key_str = "f971f914382e875df5655f591c8df7b126d95f5e8331613ba3f5c797f541839c"; const crypto::public_key ggenesis_tx_pub_key = epee::string_tools::parse_tpod_from_hex_string(ggenesis_tx_pub_key_str); extern const genesis_tx_dictionary_entry ggenesis_dict[1]; const genesis_tx_dictionary_entry ggenesis_dict[1] = { -{12209970162623619798ULL,0} +{16303433277431939751ULL,0} }; diff --git a/src/genesis/_genesis_tn.cpp.gen b/src/genesis/_genesis_tn.cpp.gen new file mode 100644 index 00000000..55bc3608 --- /dev/null +++ b/src/genesis/_genesis_tn.cpp.gen @@ -0,0 +1,3 @@ +const genesis_tx_raw_data ggenesis_tx_raw = {{ +0xa080800100000101,0x03018ae3c8e0c8cf,0x7b0287d2a2218485,0x720c5b385edbe3dd,0x178e7c64d18a598f,0x98bb613ff63e6d03,0x3814f971f9160500,0x1c595f65f55d872e,0x835e5fd926b1f78d,0xf597c7f5a33b6131,0x2074496b139c8341,0x64612073656b6174,0x20656761746e6176,0x6e2065687420666f,0x666f206572757461,0x616d726f666e6920,0x696562206e6f6974,0x207973616520676e,0x6165727073206f74,0x6168207475622064,0x7473206f74206472,0x202d202e656c6669,0x206968736f746153,0x6f746f6d616b614e,0x0a0e0d66020b0015}, +{0x00,0x00}}; diff --git a/src/currency_core/generated/_genesis_tn.h.gen b/src/genesis/_genesis_tn.h.gen similarity index 69% rename from src/currency_core/generated/_genesis_tn.h.gen rename to src/genesis/_genesis_tn.h.gen index 4fb4f441..050061a1 100644 --- a/src/currency_core/generated/_genesis_tn.h.gen +++ b/src/genesis/_genesis_tn.h.gen @@ -1,5 +1,5 @@ struct genesis_tx_raw_data { - uint64_t const v[13]; + uint64_t const v[25]; uint8_t const r[2]; }; diff --git a/src/genesis_generator/generate_test_genesis.cpp b/src/genesis/generate_test_genesis.cpp similarity index 92% rename from src/genesis_generator/generate_test_genesis.cpp rename to src/genesis/generate_test_genesis.cpp index 1f63272f..1400b22b 100644 --- a/src/genesis_generator/generate_test_genesis.cpp +++ b/src/genesis/generate_test_genesis.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "misc_log_ex.h" #include "currency_core/currency_format_utils.h" diff --git a/src/gui/qt-daemon/.gitignore b/src/gui/qt-daemon/.gitignore deleted file mode 100644 index 8a9d35c8..00000000 --- a/src/gui/qt-daemon/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.user diff --git a/src/gui/qt-daemon/Info.plist.in b/src/gui/qt-daemon/Info.plist.in deleted file mode 100644 index 8b33aed9..00000000 --- a/src/gui/qt-daemon/Info.plist.in +++ /dev/null @@ -1,63 +0,0 @@ - - - - - LSEnvironment - - - BuildMachineOSBuild - 14E46 - CFBundleDevelopmentRegion - English - CFBundleExecutable - Zano - CFBundleIconFile - app.icns - CFBundleInfoDictionaryVersion - 6.0 - CFBundleLongVersionString - - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - - CFBundleIdentifier - Zano - CSResourcesFileMapped - - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 6E35b - DTPlatformVersion - GM - DTSDKBuild - 14D125 - DTSDKName - macosx10.10 - DTXcode - 0640 - DTXcodeBuild - 6E35b - LSRequiresCarbon - - NSHumanReadableCopyright - - NSHighResolutionCapable - True - CFBundleURLTypes - - - CFBundleURLName - ZanoApp - CFBundleURLSchemes - - zano - - - - - - diff --git a/src/gui/qt-daemon/app.icns b/src/gui/qt-daemon/app.icns deleted file mode 100644 index 50e0fad5ce9a7d429e6ecacfd5dde34033e2cbe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89211 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�ZNBIeijYhp_bRpQ|mv?{vWwIeS;79xo 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

rQmYP#m8;nJ&9s{|A8U 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 diff --git a/src/gui/qt-daemon/app.qrc b/src/gui/qt-daemon/app.qrc deleted file mode 100644 index b828a450..00000000 --- a/src/gui/qt-daemon/app.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - app.ico - - \ No newline at end of file diff --git a/src/gui/qt-daemon/app.rc b/src/gui/qt-daemon/app.rc deleted file mode 100644 index 05c8afbc..00000000 --- a/src/gui/qt-daemon/app.rc +++ /dev/null @@ -1,2 +0,0 @@ - -IDI_ICON1 ICON DISCARDABLE "app.ico" \ No newline at end of file diff --git a/src/gui/qt-daemon/application/gui_utils.cpp b/src/gui/qt-daemon/application/gui_utils.cpp deleted file mode 100644 index 1a7b66bc..00000000 --- a/src/gui/qt-daemon/application/gui_utils.cpp +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright (c) 2011-2013 The Bitcoin Core developers -// Copyright (c) 2015 Boolberry developers -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "gui_utils.h" - -// #include -#include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -#include -// #include // for Qt::mightBeRichText -// #include - -// #if QT_VERSION < 0x050000 -// #include -// #else -// #include -// #endif -#include -#include -#include "currency_core/currency_config.h" -#define GUI_LINK_NAME "Zano" - -#ifdef WIN32 -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -#define _WIN32_WINNT 0x0501 -#ifdef _WIN32_IE -#undef _WIN32_IE -#endif -#define _WIN32_IE 0x0501 -#define WIN32_LEAN_AND_MEAN 1 -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#include -#include -#include -#endif - -#include -#include -#if BOOST_FILESYSTEM_VERSION >= 3 -#include -#endif -#include - -#ifndef MAX_PATH -#define MAX_PATH 1000 -#endif - -#if BOOST_FILESYSTEM_VERSION >= 3 -static boost::filesystem::detail::utf8_codecvt_facet utf8; -#endif - - - -namespace gui_tools -{ - -#ifdef WIN32 - boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate = true) - { - namespace fs = boost::filesystem; - - wchar_t pszPath[MAX_PATH] = L""; - - if (SHGetSpecialFolderPathW(NULL, pszPath, nFolder, fCreate)) - { - return fs::path(pszPath); - } - - //LogPrintf("SHGetSpecialFolderPathW() failed, could not obtain requested path.\n"); - return fs::path(""); - } -#endif -#ifdef WIN32 - boost::filesystem::path static StartupShortcutPath() - { - return GetSpecialFolderPath(CSIDL_STARTUP) / GUI_LINK_NAME ".lnk"; - } - - bool GetStartOnSystemStartup() - { - // check for Bitcoin*.lnk - return boost::filesystem::exists(StartupShortcutPath()); - } - - bool SetStartOnSystemStartup(bool fAutoStart) - { - // If the shortcut exists already, remove it for updating - boost::system::error_code ec; - std::wstring shrtcut_path = StartupShortcutPath().c_str(); - boost::filesystem::remove(shrtcut_path.c_str(), ec); - if (ec) - { - //LOG_ERROR("Autostart disable failed: " << ec.message()); - } - - if (fAutoStart) - { - CoInitialize(NULL); - - // Get a pointer to the IShellLink interface. - IShellLink* psl = NULL; - HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, - CLSCTX_INPROC_SERVER, IID_IShellLink, - reinterpret_cast(&psl)); - - if (SUCCEEDED(hres)) - { - // Get the current executable path - TCHAR pszExePath[MAX_PATH]; - GetModuleFileName(NULL, pszExePath, sizeof(pszExePath)); - - // Start client minimized - //QString strArgs = "-min"; - // Set -testnet /-regtest options - //strArgs += QString::fromStdString(strprintf(" -testnet=%d -regtest=%d", GetBoolArg("-testnet", false), GetBoolArg("-regtest", false))); - -//#ifdef UNICODE -// boost::scoped_array args(new TCHAR[strArgs.length() + 1]); - // Convert the QString to TCHAR* -// strArgs.toWCharArray(args.get()); - // Add missing '\0'-termination to string -// args[strArgs.length()] = '\0'; -//#endif - - // Set the path to the shortcut target - psl->SetPath(pszExePath); - PathRemoveFileSpec(pszExePath); - psl->SetWorkingDirectory(pszExePath); - psl->SetShowCmd(SW_SHOWMINNOACTIVE); -//#ifndef UNICODE -// psl->SetArguments(strArgs.toStdString().c_str()); -//#else -// psl->SetArguments(args.get()); -//#endif - - // Query IShellLink for the IPersistFile interface for - // saving the shortcut in persistent storage. - IPersistFile* ppf = NULL; - hres = psl->QueryInterface(IID_IPersistFile, reinterpret_cast(&ppf)); - if (SUCCEEDED(hres)) - { - WCHAR pwsz[MAX_PATH]; - // Ensure that the string is ANSI. - MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().string().c_str(), -1, pwsz, MAX_PATH); - // Save the link by calling IPersistFile::Save. - hres = ppf->Save(pwsz, TRUE); - ppf->Release(); - psl->Release(); - CoUninitialize(); - return true; - } - psl->Release(); - } - CoUninitialize(); - return false; - } - return true; - } -#elif defined(Q_OS_LINUX) - - // Follow the Desktop Application Autostart Spec: - // http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html - - boost::filesystem::path static GetAutostartDir() - { - namespace fs = boost::filesystem; - - char* pszConfigHome = getenv("XDG_CONFIG_HOME"); - if (pszConfigHome) return fs::path(pszConfigHome) / "autostart"; - char* pszHome = getenv("HOME"); - if (pszHome) return fs::path(pszHome) / ".config" / "autostart"; - return fs::path(); - } - - boost::filesystem::path static GetAutostartFilePath() - { - return GetAutostartDir() / GUI_LINK_NAME ".desktop"; - } - - bool GetStartOnSystemStartup() - { - boost::filesystem::ifstream optionFile(GetAutostartFilePath()); - if (!optionFile.good()) - return false; - // Scan through file for "Hidden=true": - std::string line; - while (!optionFile.eof()) - { - getline(optionFile, line); - if (line.find("Hidden") != std::string::npos && - line.find("true") != std::string::npos) - return false; - } - optionFile.close(); - - return true; - } - - bool SetStartOnSystemStartup(bool fAutoStart) - { - if (!fAutoStart) - boost::filesystem::remove(GetAutostartFilePath()); - else - { - char pszExePath[MAX_PATH + 1]; - memset(pszExePath, 0, sizeof(pszExePath)); - if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1) - return false; - - boost::filesystem::create_directories(GetAutostartDir()); - - boost::filesystem::ofstream optionFile(GetAutostartFilePath(), std::ios_base::out | std::ios_base::trunc); - if (!optionFile.good()) - return false; - // Write a bitcoin.desktop file to the autostart directory: - optionFile << "[Desktop Entry]\n"; - optionFile << "Type=Application\n"; - optionFile << "Name=" << CURRENCY_NAME_BASE << "\n"; - optionFile << "Exec=" << pszExePath << "\n"; - optionFile << "Terminal=false\n"; - optionFile << "Hidden=false\n"; - optionFile.close(); - } - return true; - } - - -#elif defined(Q_OS_MAC) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - // based on: https://github.com/Mozketo/LaunchAtLoginController/blob/master/LaunchAtLoginController.m - -#include -#include - - LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl); - LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl) - { - SInt32 macos_ver_maj, macos_ver_min; - Gestalt(gestaltSystemVersionMajor, &macos_ver_maj); // very old and deprecated, consider change - Gestalt(gestaltSystemVersionMinor, &macos_ver_min); // very old and deprecated, consider change - - // loop through the list of startup items and try to find the bitcoin app - CFArrayRef listSnapshot = LSSharedFileListCopySnapshot(list, NULL); - for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) { - LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i); - UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; - CFURLRef currentItemURL = NULL; - -#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED >= 10100 - if (&LSSharedFileListItemCopyResolvedURL != NULL && (macos_ver_maj > 10 || (macos_ver_maj == 10 && macos_ver_min >= 10))) - currentItemURL = LSSharedFileListItemCopyResolvedURL(item, resolutionFlags, NULL); // this is available only on macOS 10.10-10.11 (then deprecated) -#if defined(MAC_OS_X_VERSION_MIN_REQUIRED) && MAC_OS_X_VERSION_MIN_REQUIRED < 10100 - else - LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, NULL); -#endif -#else - LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, NULL); -#endif - - if(currentItemURL && CFEqual(currentItemURL, findUrl)) { - // found - CFRelease(currentItemURL); - return item; - } - if(currentItemURL) { - CFRelease(currentItemURL); - } - } - return NULL; - } - - bool GetStartOnSystemStartup() - { - CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); - LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); - return !!foundItem; // return boolified object - } - - bool SetStartOnSystemStartup(bool fAutoStart) - { - CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); - LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); - - if(fAutoStart && !foundItem) { - // add bitcoin app to startup item list - LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, bitcoinAppUrl, NULL, NULL); - } - else if(!fAutoStart && foundItem) { - // remove item - LSSharedFileListItemRemove(loginItems, foundItem); - } - return true; - } -#pragma GCC diagnostic pop -#else - - bool GetStartOnSystemStartup() { return false; } - bool SetStartOnSystemStartup(bool fAutoStart) { return false; } - -#endif -} diff --git a/src/gui/qt-daemon/application/gui_utils.h b/src/gui/qt-daemon/application/gui_utils.h deleted file mode 100644 index 0350cb16..00000000 --- a/src/gui/qt-daemon/application/gui_utils.h +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2011-2013 The Bitcoin Core developers -// Copyright (c) 2015 Boolberry developers -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#pragma once - -namespace gui_tools -{ - bool GetStartOnSystemStartup(); - bool SetStartOnSystemStartup(bool fAutoStart); -} \ No newline at end of file diff --git a/src/gui/qt-daemon/application/mainwindow.cpp b/src/gui/qt-daemon/application/mainwindow.cpp deleted file mode 100644 index 97bf0397..00000000 --- a/src/gui/qt-daemon/application/mainwindow.cpp +++ /dev/null @@ -1,2509 +0,0 @@ -// Copyright (c) 2014-2024 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include -#include -#include -#include -#include - -#include "string_coding.h" -#include "gui_utils.h" -#include "notification_helper.h" -#include "common/config_encrypt_helper.h" -#include "currency_core/basic_kv_structs.h" - -#define PREPARE_ARG_FROM_JSON(arg_type, var_name) \ - arg_type var_name = AUTO_VAL_INIT(var_name); \ - view::api_response default_ar = AUTO_VAL_INIT(default_ar); \ - LOG_PRINT_BLUE("[REQUEST]: " << param.toStdString(), LOG_LEVEL_3); \ -if (!epee::serialization::load_t_from_json(var_name, param.toStdString())) \ -{ \ - default_ar.error_code = API_RETURN_CODE_BAD_ARG; \ - return MAKE_RESPONSE(default_ar); \ -} - -template -QString make_response(const T& r) -{ - std::string str = epee::serialization::store_t_to_json(r); - LOG_PRINT_BLUE("[RESPONSE]: " << str, LOG_LEVEL_3); - return str.c_str(); -} - -template -QString make_response_dbg(const T& r, const std::string& location) -{ - std::string str = epee::serialization::store_t_to_json(r); - LOG_PRINT_YELLOW("***** API RESPONSE from " << location << " : " << ENDL << str, LOG_LEVEL_0); - return str.c_str(); -} - -#define PREPARE_RESPONSE(rsp_type, var_name) view::api_response_t var_name = AUTO_VAL_INIT(var_name) -#define MAKE_RESPONSE(r) (r.error_code == API_RETURN_CODE_OK || r.error_code == API_RETURN_CODE_TRUE) ? make_response(r) : make_response_dbg(r, LOCATION_STR) - -#define LOG_API_TIMING() const char* pfunc_call_name = LOCAL_FUNCTION_DEF__; LOG_PRINT_BLUE("[API:" << pfunc_call_name << "]-->>", LOG_LEVEL_0); uint64_t ticks_before_start = epee::misc_utils::get_tick_count(); \ - auto cb_leave = epee::misc_utils::create_scope_leave_handler([&ticks_before_start, &pfunc_call_name](){ \ - LOG_PRINT_BLUE("[API:" << pfunc_call_name << "]<<-- (" << epee::misc_utils::get_tick_count() - ticks_before_start << "ms)" << (epee::misc_utils::get_tick_count() - ticks_before_start > 1000 ? "[!!!LONG CALL!!!]":""), LOG_LEVEL_0); \ - }); - -#define LOG_API_PARAMS(log_level) LOG_PRINT_BLUE(LOCAL_FUNCTION_DEF__ << "(" << param.toStdString() << ")", log_level) - -#define CATCH_ENTRY_FAIL_API_RESPONCE() } \ - catch (const std::exception& ex) \ - { \ - LOG_ERROR("Exception catched, ERROR:" << ex.what()); \ - PREPARE_RESPONSE(view::api_void, err_resp); \ - err_resp.error_code = API_RETURN_CODE_INTERNAL_ERROR; \ - return MAKE_RESPONSE(err_resp); \ - } \ - catch(...) \ - { \ - PREPARE_RESPONSE(view::api_void, err_resp); \ - err_resp.error_code = API_RETURN_CODE_INTERNAL_ERROR; \ - return MAKE_RESPONSE(err_resp); \ - } - -#include "mainwindow.h" -// -// void MediatorObject::from_html_to_c(const QString &text) -// { -// from_c_to_html(text); -// } -// -// template -// struct InvokeWrapper { -// R *receiver; -// void (C::*memberFun)(Arg); -// void operator()(Arg result) { -// (receiver->*memberFun)(result); -// } -// }; -// -// template -// InvokeWrapper invoke(R *receiver, void (C::*memberFun)(Arg)) -// { -// InvokeWrapper wrapper = { receiver, memberFun }; -// return wrapper; -// } - - -std::wstring convert_to_lower_via_qt(const std::wstring& w) -{ - std::wstring r; - return QString().fromStdWString(w).toLower().toStdWString(); -} - -MainWindow::MainWindow() - : m_gui_deinitialize_done_1(false) - , m_backend_stopped_2(false) - , m_system_shutdown(false) - , m_view(nullptr) - , m_channel(nullptr) - , m_ui_dispatch_id_counter(0) -{ -#ifndef _MSC_VER - //workaround for macos broken tolower from std, very dirty hack - bc_services::set_external_to_low_converter(convert_to_lower_via_qt); -#endif -} - -MainWindow::~MainWindow() -{ - m_backend.subscribe_to_core_events(nullptr); - if (m_view) - { - m_view->page()->setWebChannel(nullptr); - m_view = nullptr; - } - if (m_channel) - { - m_channel->deregisterObject(this); - delete m_channel; - m_channel = nullptr; - } - if (m_ipc_worker.joinable()) - { - m_ipc_worker.join(); - } -} - -void MainWindow::on_load_finished(bool ok) -{ - TRY_ENTRY(); - LOG_PRINT("MainWindow::on_load_finished(ok = " << (ok ? "true" : "false") << ")", LOG_LEVEL_0); - CATCH_ENTRY2(void()); -} - -bool MainWindow::init_window() -{ - m_view = new QWebEngineView(this); - m_channel = new QWebChannel(m_view->page()); - m_view->page()->setWebChannel(m_channel); - - QWidget* central_widget_to_be_set = m_view; - double zoom_factor_test = 0.75; - m_view->setZoomFactor(zoom_factor_test); - - std::string qt_dev_tools_option = m_backend.get_qt_dev_tools_option(); - if (!qt_dev_tools_option.empty()) - { -#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) - std::vector qt_dev_tools_option_parts; - boost::split(qt_dev_tools_option_parts, qt_dev_tools_option, [](char c) { return c == ','; }); - - Qt::Orientation orientation = Qt::Vertical; - if (qt_dev_tools_option_parts.size() >= 1 && qt_dev_tools_option_parts[0] == "horizontal") - orientation = Qt::Horizontal; - - double zoom_factor = 1.3; - if (qt_dev_tools_option_parts.size() >= 2) - epee::string_tools::get_xtype_from_string(zoom_factor, qt_dev_tools_option_parts[1]); - - QSplitter* spliter = new QSplitter(orientation); - spliter->addWidget(m_view); - QWebEngineView* inspector = new QWebEngineView(); - spliter->addWidget(inspector); - m_view->page()->setDevToolsPage(inspector->page()); - inspector->setZoomFactor(zoom_factor); - - spliter->setCollapsible(0, false); - spliter->setCollapsible(1, false); - - QList Sizes; - Sizes.append(0.5 * m_view->sizeHint().height()); - Sizes.append(0.5 * m_view->sizeHint().height()); - spliter->setSizes(Sizes); - - central_widget_to_be_set = spliter; -#else - LOG_ERROR("Qt Dev Tool is not available for this Qt version, try building with Qt 5.11.0 or higher"); -#endif - } - - // register QObjects to be exposed to JavaScript - m_channel->registerObject(QStringLiteral("mediator_object"), this); - - connect(m_view, SIGNAL(loadFinished(bool)), SLOT(on_load_finished(bool))); - - setCentralWidget(central_widget_to_be_set); - //this->setMouseTracking(true); - - m_view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); - m_view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); - m_view->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); - - m_view->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); - m_view->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); - m_view->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); - - m_localization.resize(localization_id_couter); - m_localization[localization_id_quit] = "Quit"; - m_localization[localization_id_is_received] = " is received"; - m_localization[localization_id_is_confirmed] = " is confirmed"; - m_localization[localization_id_income_transfer_unconfirmed] = "Income transfer (unconfirmed)"; - m_localization[localization_id_income_transfer_confirmed] = "Income transfer confirmed"; - m_localization[localization_id_locked] = "(locked)"; - m_localization[localization_id_mined] = "(mined)"; - m_localization[localization_id_minimized_title] = "Zano app is minimized to tray"; - m_localization[localization_id_minimized_text] = "You can restore it with double-click or context menu"; - m_localization[localization_id_tray_menu_show] = "localization_id_tray_menu_show"; - m_localization[localization_id_tray_menu_minimize] = "localization_id_tray_menu_minimize"; - - return true; -} - -QString MainWindow::get_default_user_dir(const QString& param) -{ - TRY_ENTRY(); - return tools::get_default_user_dir().c_str(); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - - -bool MainWindow::toggle_mining(const QString& param) -{ - TRY_ENTRY(); - m_backend.toggle_pos_mining(); - return true; - CATCH_ENTRY2(false); -} - -QString MainWindow::get_exchange_last_top(const QString& params) -{ - TRY_ENTRY(); - return QString(); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_tx_pool_info(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_RESPONSE(currency::COMMAND_RPC_GET_POOL_INFO::response, ar); - ar.error_code = m_backend.get_tx_pool_info(ar.response_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::request_dummy(const QString& param) -{ - static int code_ = 0; - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_RESPONSE(currency::COMMAND_RPC_GET_POOL_INFO::response, ar); - if (code_ == 2) - { - code_ = -1; - ar.error_code = API_RETURN_CODE_CORE_BUSY; - } - else - { - ar.error_code = API_RETURN_CODE_OK; - } - - ++code_; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::call_rpc(const QString& params) -{ - TRY_ENTRY(); - - if (!m_backend.is_core_initialized()) - { - epee::json_rpc::error_response rsp; - rsp.jsonrpc = "2.0"; - rsp.error.code = -1; - rsp.error.message = API_RETURN_CODE_CORE_BUSY; - return QString::fromStdString(epee::serialization::store_t_to_json(static_cast(rsp))); - } - - epee::net_utils::http::http_request_info query_info = AUTO_VAL_INIT(query_info); - epee::net_utils::http::http_response_info response_info = AUTO_VAL_INIT(response_info); - currency::core_rpc_server::connection_context dummy_context(RPC_INTERNAL_UI_CONTEXT, 0, 0, true); - - query_info.m_URI = "/json_rpc"; - query_info.m_body = params.toStdString(); - - m_backend.get_rpc_server().handle_http_request(query_info, response_info, dummy_context); - if (response_info.m_response_code != 200) - { - epee::json_rpc::error_response rsp; - rsp.jsonrpc = "2.0"; - rsp.error.code = response_info.m_response_code; - rsp.error.message = response_info.m_response_comment; - return QString::fromStdString(epee::serialization::store_t_to_json(static_cast(rsp))); - } - return QString::fromStdString(response_info.m_body); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::call_wallet_rpc(const QString& wallet_id_str, const QString& params) -{ - TRY_ENTRY(); - - if (!m_backend.is_core_initialized()) - { - epee::json_rpc::error_response rsp; - rsp.jsonrpc = "2.0"; - rsp.error.code = -1; - rsp.error.message = API_RETURN_CODE_CORE_BUSY; - return QString::fromStdString(epee::serialization::store_t_to_json(static_cast(rsp))); - } - - uint64_t wallet_id = std::stoull(wallet_id_str.toStdString()); - - return QString::fromStdString(m_backend.invoke(wallet_id, params.toStdString())); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_default_fee(const QString& param) -{ - TRY_ENTRY(); - return QString(std::to_string(m_backend.get_default_fee()).c_str()); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_options(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_RESPONSE(view::gui_options, ar); - m_backend.get_gui_options(ar.response_data); - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -void MainWindow::tray_quit_requested(const QString& param) -{ - TRY_ENTRY(); - LOG_PRINT_MAGENTA("[GUI]->[HTML] tray_quit_requested", LOG_LEVEL_0); - emit quit_requested("{}"); - CATCH_ENTRY2(void()); -} - -void MainWindow::closeEvent(QCloseEvent *event) -{ - TRY_ENTRY(); - LOG_PRINT_L0("[GUI] CLOSE EVENT"); - CHECK_AND_ASSERT_MES(m_gui_deinitialize_done_1 == m_backend_stopped_2, void(), "m_gui_deinitialize_done_1 != m_backend_stopped_2, m_gui_deinitialize_done_1 = " << m_gui_deinitialize_done_1 - << "m_backend_stopped_2 = " << m_backend_stopped_2); - - - if (m_system_shutdown && !m_gui_deinitialize_done_1) - { - LOG_PRINT_MAGENTA("Shutting down without waiting response from html", LOG_LEVEL_0); - //Usually QtWebEngineProcess.exe already killed at this moment, so we won't get response from html. - m_gui_deinitialize_done_1 = true; - m_backend.send_stop_signal(); - } - else if (m_gui_deinitialize_done_1 && m_backend_stopped_2) - { - store_pos(true); - store_app_config(); - event->accept(); - } - else - { - event->ignore(); - //m_quit_requested = true; - LOG_PRINT_L0("[GUI]->[HTML] quit_requested"); - emit quit_requested("{}"); - } - CATCH_ENTRY2(void()); -} - -std::string state_to_text(int s) -{ - TRY_ENTRY(); - std::string res = epee::string_tools::int_to_hex(s); - res += "("; - if (s & Qt::WindowMinimized) - res += " WindowMinimized"; - if (s & Qt::WindowMaximized) - res += " WindowMaximized"; - if (s & Qt::WindowFullScreen) - res += " WindowFullScreen"; - if (s & Qt::WindowActive) - res += " WindowActive"; - res += ")"; - - return res; - CATCH_ENTRY2(""); -} - -void MainWindow::changeEvent(QEvent *e) -{ - TRY_ENTRY(); - switch (e->type()) - { - case QEvent::WindowStateChange: - { - QWindowStateChangeEvent* event = static_cast< QWindowStateChangeEvent* >(e); - qDebug() << "Old state: " << state_to_text(event->oldState()).c_str() << ", new state: " << state_to_text(this->windowState()).c_str(); - - if (event->oldState() & Qt::WindowMinimized && !(this->windowState() & Qt::WindowMinimized)) - { - qDebug() << "Window restored (to normal or maximized state)!"; - if (m_tray_icon) - { - //QTimer::singleShot(250, this, SLOT(show())); - } - restore_pos(); - } - else if (!(event->oldState() & Qt::WindowMinimized) && (this->windowState() & Qt::WindowMinimized)) - { - store_pos(); - qDebug() << "Window minimized"; - show_notification(m_localization[localization_id_minimized_title], m_localization[localization_id_minimized_text]); - } - else if (!(event->oldState() & Qt::WindowFullScreen) && (this->windowState() & Qt::WindowFullScreen)) - { - //maximize - store_window_pos(); - this->update(); - } - else if ((event->oldState() & Qt::WindowFullScreen) && !(this->windowState() & Qt::WindowFullScreen)) - { - //restore - this->update(); - } - - break; - } - default: - break; - } - - QWidget::changeEvent(e); - CATCH_ENTRY2(void()); -} - -bool MainWindow::store_app_config() -{ - TRY_ENTRY(); - std::string conf_path = m_backend.get_config_folder() + "/" + GUI_INTERNAL_CONFIG2; - LOG_PRINT_L0("storing gui internal config to " << conf_path); - CHECK_AND_ASSERT_MES(epee::serialization::store_t_to_json_file(m_config, conf_path), false, "failed to store gui internal config"); - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::load_app_config() -{ - TRY_ENTRY(); - std::string conf_path = m_backend.get_config_folder() + "/" + GUI_INTERNAL_CONFIG2; - LOG_PRINT_L0("loading gui internal config from " << conf_path); - bool r = epee::serialization::load_t_from_json_file(m_config, conf_path); - LOG_PRINT_L0("gui internal config " << (r ? "loaded ok" : "was not loaded")); - return r; - CATCH_ENTRY2(false); -} - -bool MainWindow::init(const std::string& html_path) -{ - TRY_ENTRY(); - //QtWebEngine::initialize(); - init_tray_icon(html_path); - set_html_path(html_path); - m_threads_pool.init(2); - m_backend.subscribe_to_core_events(this); - - bool r = QSslSocket::supportsSsl(); - if (r) - { - LOG_PRINT_GREEN("[Support SSL]: YES", LOG_LEVEL_0); - } - else - { -// QMessageBox::question(this, "OpenSSL support disabled.", "OpenSSL support disabled.", -// QMessageBox::Ok); - LOG_PRINT_RED("[Support SSL]: NO", LOG_LEVEL_0); - } - - //---- - this->setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu); - m_view->setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu); - - return true; - CATCH_ENTRY2(false); -} - -void MainWindow::on_menu_show(const QString& param) -{ - TRY_ENTRY(); - qDebug() << "Context menu: show()"; - this->show(); - this->activateWindow(); - CATCH_ENTRY2(void()); -} - -void MainWindow::init_tray_icon(const std::string& html_path) -{ - TRY_ENTRY(); - if (!QSystemTrayIcon::isSystemTrayAvailable()) - { - LOG_PRINT_L0("System tray is unavailable"); - return; - } - - - m_restore_action = std::unique_ptr(new QAction(tr("&Restore"), this)); - connect(m_restore_action.get(), SIGNAL(triggered()), this, SLOT(on_menu_show())); - - m_quit_action = std::unique_ptr(new QAction(tr("&Quit"), this)); - connect(m_quit_action.get(), SIGNAL(triggered()), this, SLOT(tray_quit_requested())); - - m_minimize_action = std::unique_ptr(new QAction(tr("minimizeAction"), this)); - connect(m_minimize_action.get(), SIGNAL(triggered()), this, SLOT(showMinimized())); - - m_tray_icon_menu = std::unique_ptr(new QMenu(this)); - m_tray_icon_menu->addAction(m_minimize_action.get()); - //m_tray_icon_menu->addAction(m_restore_action.get()); - m_tray_icon_menu->addSeparator(); - m_tray_icon_menu->addAction(m_quit_action.get()); - - m_tray_icon = std::unique_ptr(new QSystemTrayIcon(this)); - m_tray_icon->setContextMenu(m_tray_icon_menu.get()); - - //setup icon -#ifdef TARGET_OS_MAC - m_normal_icon_path = html_path + "/files/app22macos.png"; // X11 tray icon size is 22x22 - m_blocked_icon_path = html_path + "/files/app22macos_blocked.png"; // X11 tray icon size is 22x22 -#else - m_normal_icon_path = html_path + "/files/app22windows.png"; // X11 tray icon size is 22x22 - m_blocked_icon_path = html_path + "/files/app22windows_blocked.png"; // X11 tray icon size -#endif - //setWindowIcon(QIcon(iconPath.c_str())); - QIcon qi( QString::fromWCharArray(epee::string_encoding::utf8_to_wstring(m_normal_icon_path).c_str()) ); - qi.setIsMask(true); - m_tray_icon->setIcon(qi); - m_tray_icon->setToolTip(CURRENCY_NAME_BASE); - connect(m_tray_icon.get(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); - m_tray_icon->show(); - CATCH_ENTRY2(void()); -} - -void MainWindow::bool_toggle_icon(const QString& param) -{ - TRY_ENTRY(); - std::string path; - - if (param == "blocked") - path = m_blocked_icon_path; - else - path = m_normal_icon_path; - - QIcon qi( QString::fromWCharArray(epee::string_encoding::utf8_to_wstring(path).c_str()) ); - qi.setIsMask(true); - m_tray_icon->setIcon(qi); - CATCH_ENTRY2(void()); -} - -QString MainWindow::get_log_file(const QString& param) -{ - TRY_ENTRY(); - std::string buff; - epee::file_io_utils::load_last_n_from_file_to_string(log_space::log_singletone::get_actual_log_file_path(), 1000000, buff); - return QString::fromStdString(buff); - CATCH_ENTRY2(""); -} - -void MainWindow::store_window_pos() -{ - TRY_ENTRY(); - QPoint pos = this->pos(); - QSize sz = this->size(); - m_config.m_window_position.first = pos.x(); - m_config.m_window_position.second = pos.y(); - m_config.m_window_size.first = sz.height(); - m_config.m_window_size.second = sz.width(); - - CATCH_ENTRY2(void()); -} -void MainWindow::store_pos(bool consider_showed) -{ - TRY_ENTRY(); - m_config.is_maximazed = this->isMaximized(); - //here position supposed to be filled from last unserialize or filled on maximize handler - if (!m_config.is_maximazed) - store_window_pos(); - if (consider_showed) - m_config.is_showed = this->isVisible(); - - CATCH_ENTRY2(void()); -} -void MainWindow::restore_pos(bool consider_showed) -{ - TRY_ENTRY(); - if (consider_showed) - { - if (m_config.is_showed) - this->showNormal(); - else - this->showMinimized(); - } - - if (m_config.is_maximazed) - { - this->setWindowState(windowState() | Qt::WindowMaximized); - } - else - { - QScreen* screen = QGuiApplication::primaryScreen(); - if (!screen) - { - LOG_ERROR("No primary screen found, cannot restore window position."); - return; - } - QPoint point = screen->geometry().bottomRight(); - if (m_config.m_window_position.first + m_config.m_window_size.second > point.x() || - m_config.m_window_position.second + m_config.m_window_size.first > point.y() - ) - { - QSize sz = AUTO_VAL_INIT(sz); - sz.setHeight(770); - sz.setWidth(1200); - this->resize(sz); - store_window_pos(); - //reset position(screen changed or other reason) - } - else - { - QPoint pos = AUTO_VAL_INIT(pos); - QSize sz = AUTO_VAL_INIT(sz); - pos.setX(m_config.m_window_position.first); - pos.setY(m_config.m_window_position.second); - sz.setHeight(m_config.m_window_size.first); - sz.setWidth(m_config.m_window_size.second); - this->move(pos); - this->resize(sz); - } - } - - CATCH_ENTRY2(void()); -} -void MainWindow::trayIconActivated(QSystemTrayIcon::ActivationReason reason) -{ - TRY_ENTRY(); - if (reason == QSystemTrayIcon::ActivationReason::Trigger) - { - if ( !(this->windowState() & Qt::WindowMinimized)) - { - showMinimized(); - } - else - { - showNormal(); - activateWindow(); - } - - - } - CATCH_ENTRY2(void()); -} - -void MainWindow::load_file(const QString &fileName) -{ - TRY_ENTRY(); - LOG_PRINT_L0("Loading html from path: " << fileName.toStdString()); - QUrl url = QUrl::fromLocalFile(QFileInfo(fileName).absoluteFilePath()); - m_view->load(url); - CATCH_ENTRY2(void()); -} - -QString MainWindow::set_clipboard(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - QClipboard *clipboard = QApplication::clipboard(); - clipboard->setText(param); - return API_RETURN_CODE_OK; - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::get_clipboard(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - QClipboard *clipboard = QApplication::clipboard(); - return clipboard->text(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::on_request_quit(const QString& param) -{ - TRY_ENTRY(); - LOG_PRINT_MAGENTA("[HTML]->[GUI] on_request_quit", LOG_LEVEL_0); - m_gui_deinitialize_done_1 = true; - m_backend.send_stop_signal(); - - return API_RETURN_CODE_OK; - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -bool MainWindow::do_close() -{ - TRY_ENTRY(); - this->close(); - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::show_inital() -{ - TRY_ENTRY(); - if (load_app_config()) - { - restore_pos(true); - } - else - { - LOG_PRINT_L1("set defaults values to config"); - m_config = AUTO_VAL_INIT(m_config); - this->show(); - QSize sz = AUTO_VAL_INIT(sz); - sz.setHeight(770); - sz.setWidth(1200); - this->resize(sz); - store_window_pos(); - m_config.is_maximazed = false; - m_config.is_showed = true; - m_config.disable_notifications = false; - } - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::on_backend_stopped() -{ - TRY_ENTRY(); - LOG_PRINT_L0("[BACKEND]->[GUI] on_backend_stopped"); - m_backend_stopped_2 = true; - //m_deinitialize_done = true; -// if (m_quit_requested) -// { - - /*bool r = */QMetaObject::invokeMethod(this, "do_close", Qt::QueuedConnection); -// } - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::update_daemon_status(const view::daemon_status_info& info) -{ - TRY_ENTRY(); - //this->update_daemon_state(info); - std::string json_str; - epee::serialization::store_t_to_json(info, json_str); - - //lifehack - if (m_last_update_daemon_status_json == json_str) - return true; - - LOG_PRINT_L0("SENDING SIGNAL -> [update_daemon_state] " << info.daemon_network_state); - //this->update_daemon_state(json_str.c_str()); - QMetaObject::invokeMethod(this, "update_daemon_state", Qt::QueuedConnection, Q_ARG(QString, json_str.c_str())); - m_last_update_daemon_status_json = json_str; - return true; - CATCH_ENTRY2(false); -} - - -bool MainWindow::show_msg_box(const std::string& message) -{ - TRY_ENTRY(); - QMessageBox::information(this, "Error", message.c_str(), QMessageBox::Ok); - return true; - CATCH_ENTRY2(false); -} - -void qt_log_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &msg) -{ - QByteArray local_msg = msg.toLocal8Bit(); - const char* msg_type = ""; - switch (type) - { - case QtDebugMsg: msg_type = "DEBG "; break; - case QtInfoMsg: msg_type = "INFO "; break; - case QtWarningMsg: msg_type = "WARN "; break; - case QtCriticalMsg: msg_type = "CRIT "; break; - case QtFatalMsg: msg_type = "FATAL "; break; - } - - if (context.file == nullptr && context.function == nullptr) - { - // no debug info - LOG_PRINT("[QT] " << msg_type << local_msg.constData(), LOG_LEVEL_0); - } - else - { - // some debug info - LOG_PRINT("[QT] " << msg_type << local_msg.constData() << " @ " << (context.file ? context.file : "") << ":" << context.line << ", " << (context.function ? context.function : ""), LOG_LEVEL_0); - } -} - -bool MainWindow::remove_ipc() -{ - try { - boost::interprocess::message_queue::remove(GUI_IPC_MESSAGE_CHANNEL_NAME); - } - catch (...) - { - } - return true; -} - - -bool MainWindow::init_ipc_server() -{ - - //in case previous instance wasn't close graceful, ipc channel will remain open and new creation will fail, so we - //trying to close it anyway before open, to make sure there are no dead channels. If there are another running instance, it wom't - //let channel to close, so it will fail later on creating channel - remove_ipc(); -#define GUI_IPC_BUFFER_SIZE 10000 - try { - //Create a message queue. - std::shared_ptr pmq(new boost::interprocess::message_queue(boost::interprocess::create_only //only create - , GUI_IPC_MESSAGE_CHANNEL_NAME //name - , 100 //max message number - , GUI_IPC_BUFFER_SIZE //max message size - )); - - m_ipc_worker = std::thread([this, pmq]() - { - //m_ipc_worker; - try - { - unsigned int priority = 0; - boost::interprocess::message_queue::size_type recvd_size = 0; - - while (m_gui_deinitialize_done_1 == false) - { - std::string buff(GUI_IPC_BUFFER_SIZE, ' '); - bool data_received = pmq->timed_receive((void*)buff.data(), GUI_IPC_BUFFER_SIZE, recvd_size, priority, boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) + boost::posix_time::milliseconds(1000)); - if (data_received && recvd_size != 0) - { - buff.resize(recvd_size, '*'); - handle_ipc_event(buff);//todo process token - } - } - remove_ipc(); - LOG_PRINT_L0("IPC Handling thread finished"); - } - catch (const std::exception& ex) - { - remove_ipc(); - boost::interprocess::message_queue::remove(GUI_IPC_MESSAGE_CHANNEL_NAME); - LOG_ERROR("Failed to receive IPC que: " << ex.what()); - } - - catch (...) - { - remove_ipc(); - LOG_ERROR("Failed to receive IPC que: unknown exception"); - } - }); - } - catch(const std::exception& ex) - { - boost::interprocess::message_queue::remove(GUI_IPC_MESSAGE_CHANNEL_NAME); - LOG_ERROR("Failed to initialize IPC que: " << ex.what()); - return false; - } - - catch (...) - { - boost::interprocess::message_queue::remove(GUI_IPC_MESSAGE_CHANNEL_NAME); - LOG_ERROR("Failed to initialize IPC que: unknown exception"); - return false; - } - return true; -} - - -bool MainWindow::handle_ipc_event(const std::string& arguments) -{ - std::string zzz = std::string("Received IPC: ") + arguments.c_str(); - std::cout << zzz;//message_box(zzz.c_str()); - - handle_deeplink_click(arguments.c_str()); - - return true; -} - -bool MainWindow::handle_deeplink_params_in_commandline() -{ - std::string deep_link_params = command_line::get_arg(m_backend.get_arguments(), command_line::arg_deeplink); - - try { - boost::interprocess::message_queue mq(boost::interprocess::open_only, GUI_IPC_MESSAGE_CHANNEL_NAME); - mq.send(deep_link_params.data(), deep_link_params.size(), 0); - return false; - } - catch (...) - { - //ui not launched yet - return true; - } -} - -bool MainWindow::init_backend(int argc, char* argv[]) -{ - - TRY_ENTRY(); - std::string command_line_fail_details; - if (!m_backend.init_command_line(argc, argv, command_line_fail_details)) - { - this->show_msg_box(command_line_fail_details); - return false; - } - - if (command_line::has_arg(m_backend.get_arguments(), command_line::arg_deeplink)) - { - if (!handle_deeplink_params_in_commandline()) - return false; - } - - if (!init_window()) - { - this->show_msg_box("Failed to main screen launch, check logs for the more detais."); - return false; - } - - if (!m_backend.init(this)) - { - this->show_msg_box("Failed to initialize backend, check debug logs for more details."); - return false; - } - - - - if (m_backend.is_qt_logs_enabled()) - { - qInstallMessageHandler(qt_log_message_handler); - QLoggingCategory::setFilterRules("*=true"); // enable all logs - } - - if (!init_ipc_server()) - { - this->show_msg_box("Failed to initialize IPC server, check debug logs for more details."); - return false; - } - - return true; - CATCH_ENTRY2(false); -} - -QString MainWindow::is_remnotenode_mode_preconfigured(const QString& param) -{ - TRY_ENTRY(); - view::api_response ar{}; - if (m_backend.is_remote_node_mode()) - ar.error_code = API_RETURN_CODE_TRUE; - else - ar.error_code = API_RETURN_CODE_FALSE; - return MAKE_RESPONSE(ar); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::start_backend(const QString& params) -{ - TRY_ENTRY(); - view::api_response ar = AUTO_VAL_INIT(ar); - - bool r = m_backend.start(); - if (!r) - { - ar.error_code = API_RETURN_CODE_INTERNAL_ERROR; - return MAKE_RESPONSE(ar); - } - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -void MainWindow::show_notification(const QString& title, const QString& message) -{ - show_notification(title.toStdString(), message.toStdString()); -} - -QString MainWindow::sync_call(const QString& func_name, const QString& params) -{ - if (func_name == "test_call") - { - return params; - } - std::string fuc_name_std = func_name.toStdString(); - QString response_str; - bool r = QMetaObject::invokeMethod(this, fuc_name_std.c_str(), Qt::DirectConnection, Q_RETURN_ARG(QString, response_str), Q_ARG(QString, params)); - //bool r = this->invokeMethod(fuc_name_std.c_str(), Q_RETURN_ARG(QString, response_str), Q_ARG(QString, params)); - if (r) - return response_str; - else - { - return QString(QString() + "{ \"status\": \"Method '" + func_name + "' not found\"}"); - } - -} - -QString MainWindow::sync_call_2a(const QString& func_name, const QString& params1, const QString& params2) -{ - std::string fuc_name_std = func_name.toStdString(); - QString response_str; - bool r = QMetaObject::invokeMethod(this, fuc_name_std.c_str(), Qt::DirectConnection, Q_RETURN_ARG(QString, response_str), Q_ARG(QString, params1), Q_ARG(QString, params2)); - //bool r = this->invokeMethod(fuc_name_std.c_str(), Q_RETURN_ARG(QString, response_str), Q_ARG(QString, params)); - if (r) - return response_str; - else - { - return QString(QString() + "{ \"status\": \"Method '" + func_name + "' not found\"}"); - } - -} - -QString MainWindow::async_call(const QString& func_name, const QString& params) -{ - - uint64_t job_id = m_ui_dispatch_id_counter++; - QString method_name = func_name; - QString argements = params; - - auto async_callback = [this, method_name, argements, job_id]() - { - QString res_str = this->sync_call(method_name, argements); - this->dispatch_async_call_result(std::to_string(job_id).c_str(), res_str); //general function - }; - - m_threads_pool.add_job(async_callback); - LOG_PRINT_L2("[UI_ASYNC_CALL]: started " << method_name.toStdString() << ", job id: " << job_id); - return QString::fromStdString(std::string("{ \"job_id\": ") + std::to_string(job_id) + "}"); -} - -QString MainWindow::async_call_2a(const QString& func_name, const QString& params1, const QString& params2) -{ - - uint64_t job_id = m_ui_dispatch_id_counter++; - QString method_name = func_name; - QString argements1 = params1; - QString argements2 = params2; - - - auto async_callback = [this, method_name, argements1, argements2, job_id]() - { - QString res_str = this->sync_call_2a(method_name, argements1, argements2); - this->dispatch_async_call_result(std::to_string(job_id).c_str(), res_str); //general function - }; - - m_threads_pool.add_job(async_callback); - LOG_PRINT_L2("[UI_ASYNC_CALL]: started " << method_name.toStdString() << ", job id: " << job_id); - return QString::fromStdString(std::string("{ \"job_id\": ") + std::to_string(job_id) + "}"); -} - -bool MainWindow::update_wallet_status(const view::wallet_status_info& wsi) -{ - TRY_ENTRY(); - m_wallet_states->operator [](wsi.wallet_id) = wsi.wallet_state; - - std::string json_str_pub; - epee::serialization::store_t_to_json(static_cast(wsi), json_str_pub, 0); - LOG_PRINT_L0(get_wallet_log_prefix(wsi.wallet_id) + "SENDING SIGNAL -> [update_wallet_status]:" << std::endl << json_str_pub); - - std::string json_str; - epee::serialization::store_t_to_json(wsi, json_str, 0); - QMetaObject::invokeMethod(this, "update_wallet_status", Qt::QueuedConnection, Q_ARG(QString, json_str.c_str())); - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::set_options(const view::gui_options& opt) -{ - TRY_ENTRY(); - std::string json_str; - epee::serialization::store_t_to_json(opt, json_str, 0); - LOG_PRINT_L0("SENDING SIGNAL -> [set_options]:" << std::endl << json_str); - QMetaObject::invokeMethod(this, "set_options", Qt::QueuedConnection, Q_ARG(QString, json_str.c_str())); - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::update_tor_status(const view::current_action_status& opt) -{ - TRY_ENTRY(); - std::string json_str; - epee::serialization::store_t_to_json(opt, json_str, 0); - LOG_PRINT_L0("SENDING SIGNAL -> [HANDLE_CURRENT_ACTION_STATE]:" << std::endl << json_str); - QMetaObject::invokeMethod(this, "handle_current_action_state", Qt::QueuedConnection, Q_ARG(QString, json_str.c_str())); - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) -{ - TRY_ENTRY(); -#ifdef WIN32 - MSG *msg = static_cast< MSG * >(message); - if (msg->message == WM_QUERYENDSESSION) - { - m_system_shutdown = true; - LOG_PRINT_MAGENTA("SYSTEM SHUTDOWN", LOG_LEVEL_0); - } -#endif - return false; - CATCH_ENTRY2(false); -} - -bool MainWindow::get_is_disabled_notifications(const QString& param) -{ - return m_config.disable_notifications; -} -bool MainWindow::set_is_disabled_notifications(const bool& param) -{ - LOG_PRINT_L1("set_is_disabled_notifications: notifications were " << (m_config.disable_notifications ? "DISABLED" : "ENABLED") << " -> now " << (param ? "DISABLED" : "ENABLED")); - m_config.disable_notifications = param; - return m_config.disable_notifications; -} -QString MainWindow::export_wallet_history(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::export_wallet_info, ewi); - PREPARE_RESPONSE(view::api_response, ar); - ar.error_code = m_backend.export_wallet_history(ewi); - return MAKE_RESPONSE(ar); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} -bool MainWindow::update_wallets_info(const view::wallets_summary_info& wsi) -{ - TRY_ENTRY(); - std::string json_str; - epee::serialization::store_t_to_json(wsi, json_str, 0); - LOG_PRINT_L0("SENDING SIGNAL -> [update_wallets_info]"<< std::endl << json_str ); - - QMetaObject::invokeMethod(this, "update_wallets_info", Qt::QueuedConnection, Q_ARG(QString, json_str.c_str())); - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::money_transfer(const view::transfer_event_info& tei) -{ - TRY_ENTRY(); - std::string json_str; - epee::serialization::store_t_to_json(tei, json_str, 0); - - LOG_PRINT_L0(get_wallet_log_prefix(tei.wallet_id) + "SENDING SIGNAL -> [money_transfer]" << std::endl << json_str); - //this->money_transfer(json_str.c_str()); - QMetaObject::invokeMethod(this, "money_transfer", Qt::QueuedConnection, Q_ARG(QString, json_str.c_str())); - if (m_config.disable_notifications) - return true; - - - if (!m_tray_icon) - return true; - if (tei.ti.has_outgoing_entries()) - return true; - if (!tei.ti.get_native_amount()) - return true; -// if (tei.ti.is_mining && m_wallet_states->operator [](tei.wallet_id) != view::wallet_status_info::wallet_state_ready) -// return true; - -//don't show unconfirmed tx - if (tei.ti.height == 0) - return true; - if (tei.is_wallet_in_sync_process) - { - //don't show notification if it long sync process(mmight cause system freeze) - return true; - } - - auto amount_str = currency::print_money_brief(tei.ti.get_native_amount()); //@#@ add handling of assets - std::string title, msg; - if (tei.ti.height == 0) // unconfirmed tx - { - msg = amount_str + " " + CURRENCY_NAME_ABR + " " + m_localization[localization_id_is_received]; - title = m_localization[localization_id_income_transfer_unconfirmed]; - } - else - { - msg = amount_str + " " + CURRENCY_NAME_ABR + " " + m_localization[localization_id_is_confirmed]; - title = m_localization[localization_id_income_transfer_confirmed]; - } - if (tei.ti.is_mining) - msg += m_localization[localization_id_mined]; - else if (tei.ti.unlock_time) - msg += m_localization[localization_id_locked]; - - - show_notification(title, msg); - - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::money_transfer_cancel(const view::transfer_event_info& tei) -{ - TRY_ENTRY(); - std::string json_str; - epee::serialization::store_t_to_json(tei, json_str, 0); - - LOG_PRINT_L0(get_wallet_log_prefix(tei.wallet_id) + "SENDING SIGNAL -> [money_transfer_cancel]"); - //this->money_transfer_cancel(json_str.c_str()); - QMetaObject::invokeMethod(this, "money_transfer_cancel", Qt::QueuedConnection, Q_ARG(QString, json_str.c_str())); - - return true; - - CATCH_ENTRY2(false); -} -bool MainWindow::wallet_sync_progress(const view::wallet_sync_progres_param& p) -{ - TRY_ENTRY(); - LOG_PRINT_L2(get_wallet_log_prefix(p.wallet_id) + "SENDING SIGNAL -> [wallet_sync_progress]" << " wallet_id: " << p.wallet_id << ": " << p.progress << "%"); - //this->wallet_sync_progress(epee::serialization::store_t_to_json(p).c_str()); - QMetaObject::invokeMethod(this, "wallet_sync_progress", Qt::QueuedConnection, Q_ARG(QString, epee::serialization::store_t_to_json(p, 0).c_str())); - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::set_html_path(const std::string& path) -{ - TRY_ENTRY(); - //init_tray_icon(path); -#ifdef _MSC_VER - QString url = QString::fromUtf8(path.c_str()) + "/index.html"; - load_file(url); -#else -// load_file(QString((std::string("file://") + path + "/index.html").c_str())); - load_file(QString((std::string("") + path + "/index.html").c_str())); -#endif - return true; - CATCH_ENTRY2(false); -} - -bool MainWindow::pos_block_found(const currency::block& block_found) -{ - TRY_ENTRY(); - std::stringstream ss; - ss << "Found Block h = " << currency::get_block_height(block_found); - LOG_PRINT_L0("SENDING SIGNAL -> [update_pos_mining_text]"); - //this->update_pos_mining_text(ss.str().c_str()); - QMetaObject::invokeMethod(this, "update_pos_mining_text", Qt::QueuedConnection, Q_ARG(QString, ss.str().c_str())); - return true; - CATCH_ENTRY2(false); -} - -QString MainWindow::get_version(const QString& param) -{ - TRY_ENTRY(); - return PROJECT_VERSION_LONG; - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_os_version(const QString& param) -{ - TRY_ENTRY(); - return tools::get_os_version_string().c_str(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::get_network_type(const QString& param) -{ -#if defined(TESTNET) - return "testnet"; -#else - return "mainnet"; -#endif -} - -QString MainWindow::get_alias_coast(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(currency::struct_with_one_t_type, lvl); - view::get_alias_coast_response resp; - resp.error_code = m_backend.get_alias_coast(lvl.v, resp.coast); - return epee::serialization::store_t_to_json(resp, 0).c_str(); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::set_localization_strings(const QString param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::set_localization_request, lr); - view::api_response resp; - - if (lr.strings.size() < localization_id_couter) - { - LOG_ERROR("Wrong localization size: " << lr.strings.size() << ", expected size at least " << localization_id_couter); - resp.error_code = API_RETURN_CODE_FAIL; - } - else - { - m_localization = lr.strings; - if(m_quit_action) - m_quit_action->setText(QString::fromStdString(m_localization[localization_id_quit])); - if(m_restore_action) - m_restore_action->setText(QString::fromStdString(m_localization[localization_id_tray_menu_show])); - if(m_minimize_action) - m_minimize_action->setText(QString::fromStdString(m_localization[localization_id_tray_menu_minimize])); - resp.error_code = API_RETURN_CODE_OK; - LOG_PRINT_L0("New localization set, language title: " << lr.language_title << ", strings " << lr.strings.size()); - } - return epee::serialization::store_t_to_json(resp, 0).c_str(); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::request_alias_registration(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("request_alias_registration", param, [this](const view::request_alias_param& tp, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::request_alias_param, tp); - PREPARE_RESPONSE(view::transfer_response, ar); - - // view::transfer_response tr = AUTO_VAL_INIT(tr); - currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - ar.error_code = m_backend.request_alias_registration(tp.alias, tp.wallet_id, tp.fee, res_tx, tp.reward); - if (ar.error_code != API_RETURN_CODE_OK) - return MAKE_RESPONSE(ar); - - - ar.response_data.success = true; - ar.response_data.tx_hash = string_tools::pod_to_hex(currency::get_transaction_hash(res_tx)); - ar.response_data.tx_blob_size = currency::get_object_blobsize(res_tx); - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::request_alias_update(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::request_alias_param, tp); - PREPARE_RESPONSE(view::transfer_response, ar); - - // view::transfer_response tr = AUTO_VAL_INIT(tr); - currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - ar.error_code = m_backend.request_alias_update(tp.alias, tp.wallet_id, tp.fee, res_tx); - if (ar.error_code != API_RETURN_CODE_OK) - return MAKE_RESPONSE(ar); - - - ar.response_data.success = true; - ar.response_data.tx_hash = string_tools::pod_to_hex(currency::get_transaction_hash(res_tx)); - ar.response_data.tx_blob_size = currency::get_object_blobsize(res_tx); - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::transfer(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("transfer", json_transfer_object, [this](const view::transfer_params& tp, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::transfer_params, tp); - PREPARE_RESPONSE(view::transfer_response, ar); - - if (!tp.destinations.size()) - { - ar.error_code = API_RETURN_CODE_BAD_ARG; - return MAKE_RESPONSE(ar); - } - - currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - ar.error_code = m_backend.transfer(tp.wallet_id, tp, res_tx); - if (ar.error_code != API_RETURN_CODE_OK) - return MAKE_RESPONSE(ar); - - ar.response_data.success = true; - ar.response_data.tx_hash = string_tools::pod_to_hex(currency::get_transaction_hash(res_tx)); - ar.response_data.tx_blob_size = currency::get_object_blobsize(res_tx); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -void MainWindow::message_box(const QString& msg) -{ - TRY_ENTRY(); - show_msg_box(msg.toStdString()); - CATCH_ENTRY2(void()); -} - -struct serialize_variant_visitor : public boost::static_visitor -{ - template - std::string operator()(const t_type& v) const - { - return epee::serialization::store_t_to_json(v); - } -}; - -template -std::string serialize_variant(const t_variant& v) -{ - TRY_ENTRY(); - return boost::apply_visitor(serialize_variant_visitor(), v); - CATCH_ENTRY2(""); -} - - -void MainWindow::on_core_event(const std::string event_name, const currency::core_event_v& e) -{ - TRY_ENTRY(); - //at the moment we don't forward CORE_EVENT_BLOCK_ADDEDevent to GUI - if (CORE_EVENT_BLOCK_ADDED == event_name) - return; - - m_events.m_que.push_back(currency::core_event()); - m_events.m_que.back().details = currency::core_event_v(e); - m_events.m_que.back().method = event_name; - CATCH_ENTRY2(void()); -} - -std::string get_events_que_json_string(const std::list& eq, std::string& methods_list) -{ - TRY_ENTRY(); - //t the moment portable_storage is not supporting polymorphic objects lists, so - //there is no hope to make serialization with variant list, lets handle it manual - std::stringstream ss; - ss << "{ \"events\" : ["; - uint64_t need_coma = false; - for (const auto& e : eq) - { - if (need_coma) - { - ss << ","; - methods_list += "|"; - } - methods_list += e.method; - ss << "{ \"method\": \"" << e.method << "\"," << ENDL; - ss << "\"details\": " << serialize_variant(e.details) << ENDL << "}"; - need_coma = true; - } - ss << "]}"; - return ss.str(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -void MainWindow::on_complete_events() -{ - TRY_ENTRY(); - if (m_events.m_que.size()) - { - std::string methods_list; - TIME_MEASURE_START_MS(core_events_handl_time); - TIME_MEASURE_START_MS(json_buff_generate_time); - std::string json_buff = get_events_que_json_string(m_events.m_que, methods_list); - TIME_MEASURE_FINISH_MS(json_buff_generate_time); - - - QMetaObject::invokeMethod(this, "on_core_event", - Qt::QueuedConnection, - Q_ARG(QString, QString(json_buff.c_str()))); - TIME_MEASURE_FINISH_MS(core_events_handl_time); - LOG_PRINT_L0("SENT SIGNAL -> [CORE_EVENTS]: " << m_events.m_que.size() - << ", handle_time: " << core_events_handl_time << "(json: " << json_buff_generate_time << ")ms, json_buff size = " << json_buff.size() << ", methods: " << methods_list); - LOG_PRINT_L2("CORE_EVENTS sent signal details: " << ENDL << json_buff); - m_events.m_que.clear(); - - } - CATCH_ENTRY2(void()); -} - -void MainWindow::on_clear_events() -{ - TRY_ENTRY(); - m_events.m_que.clear(); - CATCH_ENTRY2(void()); -} - - -QString MainWindow::store_secure_app_data(const QString& param, const QString& password) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - if (!tools::create_directories_if_necessary(m_backend.get_config_folder())) - { - view::api_response ar; - LOG_PRINT_L0("Failed to create data directory: " << m_backend.get_config_folder()); - ar.error_code = API_RETURN_CODE_FAIL; - return MAKE_RESPONSE(ar); - } - - view::api_response ar = AUTO_VAL_INIT(ar); - ar.error_code = tools::store_encrypted_file(m_backend.get_config_folder() + "/" + GUI_SECURE_CONFIG_FILENAME, - m_master_password, param.toStdString(), APP_DATA_FILE_BINARY_SIGNATURE); - if (ar.error_code != API_RETURN_CODE_OK) - { - return MAKE_RESPONSE(ar); - } - - crypto::hash master_password_pre_hash = crypto::cn_fast_hash(m_master_password.c_str(), m_master_password.length()); - crypto::hash master_password_hash = crypto::cn_fast_hash(&master_password_pre_hash, sizeof master_password_pre_hash); - LOG_PRINT_L0("store_secure_app_data, r = " << ar.error_code << ", pass hash: " << master_password_hash); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_secure_app_data(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - view::password_data pwd = AUTO_VAL_INIT(pwd); - - if (!epee::serialization::load_t_from_json(pwd, param.toStdString())) - { - view::api_response ar; - ar.error_code = API_RETURN_CODE_BAD_ARG; - return MAKE_RESPONSE(ar); - } - - std::string filename = m_backend.get_config_folder() + "/" + GUI_SECURE_CONFIG_FILENAME; - std::string res_body; - std::string rsp_code = tools::load_encrypted_file(filename, pwd.pass, res_body, APP_DATA_FILE_BINARY_SIGNATURE); - if (rsp_code != API_RETURN_CODE_OK) - { - view::api_response ar; - ar.error_code = rsp_code; - return MAKE_RESPONSE(ar); - } - m_master_password = pwd.pass; - crypto::hash master_password_pre_hash = crypto::cn_fast_hash(m_master_password.c_str(), m_master_password.length()); - crypto::hash master_password_hash = crypto::cn_fast_hash(&master_password_pre_hash, sizeof master_password_pre_hash); - LOG_PRINT_L0("gui secure config loaded ok from " << filename << ", pass hash: " << master_password_hash); - - return res_body.c_str(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::set_master_password(const QString& param) -{ - view::api_response ar; - - view::password_data pwd = AUTO_VAL_INIT(pwd); - - if (!epee::serialization::load_t_from_json(pwd, param.toStdString())) - { - ar.error_code = API_RETURN_CODE_BAD_ARG; - return MAKE_RESPONSE(ar); - } - - if (!currency::validate_password(pwd.pass)) - { - ar.error_code = API_RETURN_CODE_BAD_ARG; - return MAKE_RESPONSE(ar); - } - - m_master_password = pwd.pass; - - crypto::hash master_password_pre_hash = crypto::cn_fast_hash(m_master_password.c_str(), m_master_password.length()); - crypto::hash master_password_hash = crypto::cn_fast_hash(&master_password_pre_hash, sizeof master_password_pre_hash); - LOG_PRINT_L0("set_master_password, pass hash: " << master_password_hash); - - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); -} - -QString MainWindow::check_master_password(const QString& param) -{ - view::password_data pwd = AUTO_VAL_INIT(pwd); - view::api_response ar = AUTO_VAL_INIT(ar); - - if (!epee::serialization::load_t_from_json(pwd, param.toStdString())) - { - ar.error_code = API_RETURN_CODE_BAD_ARG; - return MAKE_RESPONSE(ar); - } - - crypto::hash master_password_pre_hash = crypto::cn_fast_hash(m_master_password.c_str(), m_master_password.length()); - crypto::hash master_password_hash = crypto::cn_fast_hash(&master_password_pre_hash, sizeof master_password_pre_hash); - crypto::hash pwd_pre_hash = crypto::cn_fast_hash(pwd.pass.c_str(), pwd.pass.length()); - crypto::hash pwd_hash = crypto::cn_fast_hash(&pwd_pre_hash, sizeof pwd_pre_hash); - - if (m_master_password != pwd.pass) - { - ar.error_code = API_RETURN_CODE_WRONG_PASSWORD; - LOG_PRINT_L0("check_master_password: pwd hash: " << pwd_hash << ", expected: " << master_password_hash); - } - else - { - ar.error_code = API_RETURN_CODE_OK; - } - return MAKE_RESPONSE(ar); -} - -QString MainWindow::store_app_data(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - view::api_response ar; - ar.error_code = API_RETURN_CODE_FAIL; - if (!tools::create_directories_if_necessary(m_backend.get_config_folder())) - { - LOG_PRINT_L0("Failed to create data directory: " << m_backend.get_config_folder()); - return MAKE_RESPONSE(ar); - } - - std::string filename = m_backend.get_config_folder() + "/" + GUI_CONFIG_FILENAME; - bool r = file_io_utils::save_string_to_file(filename, param.toStdString()); - if (r) - { - ar.error_code = API_RETURN_CODE_OK; - LOG_PRINT_L1("config saved: " << filename); - } - else - { - ar.error_code = API_RETURN_CODE_FAIL; - LOG_PRINT_L1("config save failed: " << filename); - } - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::is_file_exist(const QString& path) -{ - TRY_ENTRY(); - try{ - bool r = file_io_utils::is_file_exist(path.toStdWString()); - if (r) - return API_RETURN_CODE_ALREADY_EXISTS; - else - return API_RETURN_CODE_FILE_NOT_FOUND; - } - catch (const std::exception& ex) - { - LOG_ERROR("failed to check file existance: " << path.toStdString() << " ERROR:" << ex.what()); - return QString(API_RETURN_CODE_ALREADY_EXISTS) + ": " + ex.what(); - } - - catch (...) - { - return API_RETURN_CODE_ALREADY_EXISTS; - } - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::store_to_file(const QString& path, const QString& buff) -{ - TRY_ENTRY(); - try{ - bool r = file_io_utils::save_string_to_file_throw(path.toStdWString(), buff.toStdString()); - if (r) - return API_RETURN_CODE_OK; - else - return API_RETURN_CODE_ACCESS_DENIED; - } - catch (const std::exception& ex) - { - LOG_ERROR("FILED TO STORE TO FILE: " << path.toStdString() << " ERROR:" << ex.what()); - return QString(API_RETURN_CODE_ACCESS_DENIED) + ": " + ex.what(); - } - - catch (...) - { - return API_RETURN_CODE_ACCESS_DENIED; - } - - - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::load_from_file(const QString& path) -{ - TRY_ENTRY(); - try { - std::string buff; - bool r = epee::file_io_utils::load_file_to_string(path.toStdWString(), buff); - if (r) - return QString::fromStdString(buff); - else - return QString(); - } - catch (const std::exception& ex) - { - LOG_ERROR("FILED TO LOAD FROM FILE: " << path.toStdString() << " ERROR:" << ex.what()); - return QString(API_RETURN_CODE_ACCESS_DENIED) + ": " + ex.what(); - } - - catch (...) - { - return API_RETURN_CODE_ACCESS_DENIED; - } - - - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::get_app_data(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - std::string app_data_buff; - file_io_utils::load_file_to_string(m_backend.get_config_folder() + "/" + GUI_CONFIG_FILENAME, app_data_buff); - return app_data_buff.c_str(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - - -QString MainWindow::have_secure_app_data(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - view::api_response ar = AUTO_VAL_INIT(ar); - - boost::system::error_code ec; - if (boost::filesystem::exists(epee::string_encoding::utf8_to_wstring(m_backend.get_config_folder() + "/" + GUI_SECURE_CONFIG_FILENAME), ec)) - ar.error_code = API_RETURN_CODE_TRUE; - else - ar.error_code = API_RETURN_CODE_FALSE; - - LOG_PRINT_L0("have_secure_app_data, r = " << ar.error_code); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::drop_secure_app_data() -{ - TRY_ENTRY(); - LOG_API_TIMING(); - view::api_response ar = AUTO_VAL_INIT(ar); - - boost::system::error_code ec; - if (boost::filesystem::remove(epee::string_encoding::utf8_to_wstring(m_backend.get_config_folder() + "/" + GUI_SECURE_CONFIG_FILENAME), ec)) - ar.error_code = API_RETURN_CODE_TRUE; - else - ar.error_code = API_RETURN_CODE_FALSE; - - LOG_PRINT_L0("drop_secure_app_data, r = " << ar.error_code); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_all_aliases(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //PREPARE_ARG_FROM_JSON(currency::struct_with_one_t_type, param); - PREPARE_RESPONSE(view::alias_set, rsp); - - rsp.error_code = m_backend.get_aliases(rsp.response_data); - QString res = MAKE_RESPONSE(rsp); - LOG_PRINT_GREEN("GET_ALL_ALIASES: res: " << rsp.error_code << ", count: " << rsp.response_data.aliases.size() << ", string buff size: " << res.size(), LOG_LEVEL_1); - return res; - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::get_alias_info_by_address(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_RESPONSE(currency::alias_rpc_details, rsp); - rsp.error_code = m_backend.get_alias_info_by_address(param.toStdString(), rsp.response_data); - return MAKE_RESPONSE(rsp); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::get_alias_info_by_name(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_RESPONSE(currency::alias_rpc_details, rsp); - rsp.error_code = m_backend.get_alias_info_by_name(param.toStdString(), rsp.response_data); - return MAKE_RESPONSE(rsp); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::validate_address(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - view::address_validation_response ar = AUTO_VAL_INIT(ar); - ar.error_code = m_backend.validate_address(param.toStdString(), ar.payment_id); - - //@#@ -//#ifdef _DEBUG -// std::string json_body; -// bool r = epee::file_io_utils::load_file_to_string("C:\\Users\\roky\\home\\temp\\deploy_test.json", json_body); -// async_call_2a("call_wallet_rpc", "0", json_body.c_str()); -//#endif - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::set_log_level(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(currency::struct_with_one_t_type, lvl); - epee::log_space::get_set_log_detalisation_level(true, lvl.v); - default_ar.error_code = API_RETURN_CODE_OK; - LOG_PRINT("[LOG LEVEL]: set to " << lvl.v, LOG_LEVEL_MIN); - - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::get_log_level(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_RESPONSE(currency::struct_with_one_t_type, ar); - ar.response_data.v = epee::log_space::get_set_log_detalisation_level(); - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::set_enable_tor(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(currency::struct_with_one_t_type, enabl_tor); - m_backend.set_use_tor(enabl_tor.v); - //epee::log_space::get_set_log_detalisation_level(true, enabl_tor.v); - default_ar.error_code = API_RETURN_CODE_OK; - LOG_PRINT("[TOR]: Enable TOR set to " << enabl_tor.v, LOG_LEVEL_MIN); - - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -// QString MainWindow::dump_all_offers() -// { -// LOG_API_TIMING(); -// //return que_call2("dump_all_offers", "{}", [this](const view::api_void& owd, view::api_response& ar){ -// PREPARE_RESPONSE(view::api_void, ar); -// //view::api_void av; -// QString path = QFileDialog::getOpenFileName(this, "Select file", -// "", -// ""); -// -// if (!path.length()) -// { -// ar.error_code = API_RETURN_CODE_CANCELED; -// return MAKE_RESPONSE(ar); -// } -// -// currency::COMMAND_RPC_GET_OFFERS_EX::response rp = AUTO_VAL_INIT(rp); -// ar.error_code = m_backend.get_all_offers(rp); -// -// std::string buff = epee::serialization::store_t_to_json(rp); -// bool r = file_io_utils::save_string_to_file(path.toStdString(), buff); -// if (!r) -// ar.error_code = API_RETURN_CODE_FAIL; -// else -// ar.error_code = API_RETURN_CODE_OK; -// -// return MAKE_RESPONSE(ar); -// } - -QString MainWindow::webkit_launched_script(const QString& param) -{ - TRY_ENTRY(); - m_last_update_daemon_status_json.clear(); - return ""; - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} -//////////////////// -QString MainWindow::show_openfile_dialog(const QString& param) -{ - TRY_ENTRY(); - view::system_filedialog_request ofdr = AUTO_VAL_INIT(ofdr); - view::system_filedialog_response ofdres = AUTO_VAL_INIT(ofdres); - if (!epee::serialization::load_t_from_json(ofdr, param.toStdString())) - { - ofdres.error_code = API_RETURN_CODE_BAD_ARG; - return epee::serialization::store_t_to_json(ofdres, 0).c_str(); - } - - QString path = QFileDialog::getOpenFileName(this, ofdr.caption.c_str(), - ofdr.default_dir.c_str(), - ofdr.filemask.c_str()); - - if (!path.length()) - { - ofdres.error_code = API_RETURN_CODE_CANCELED; - return epee::serialization::store_t_to_json(ofdres, 0).c_str(); - } - - ofdres.error_code = API_RETURN_CODE_OK; - ofdres.path = path.toStdString(); - return MAKE_RESPONSE(ofdres); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - - -QString MainWindow::show_savefile_dialog(const QString& param) -{ - TRY_ENTRY(); - PREPARE_ARG_FROM_JSON(view::system_filedialog_request, ofdr); - view::system_filedialog_response ofdres = AUTO_VAL_INIT(ofdres); - - QString path = QFileDialog::getSaveFileName(this, ofdr.caption.c_str(), - ofdr.default_dir.c_str(), - ofdr.filemask.c_str()); - - if (!path.length()) - { - ofdres.error_code = API_RETURN_CODE_CANCELED; - return epee::serialization::store_t_to_json(ofdres, 0).c_str(); - } - - ofdres.error_code = API_RETURN_CODE_OK; - ofdres.path = path.toStdString(); - return MAKE_RESPONSE(ofdres); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::close_wallet(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("close_wallet", param, [this](const view::wallet_id_obj& owd, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, owd); - PREPARE_RESPONSE(view::api_void, ar); - ar.error_code = m_backend.close_wallet(owd.wallet_id); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_contracts(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, owd); - PREPARE_RESPONSE(tools::wallet_public::contracts_array, ar); - ar.error_code = m_backend.get_contracts(owd.wallet_id, ar.response_data.contracts); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::create_proposal(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::create_proposal_param_gui, cpp); - PREPARE_RESPONSE(tools::wallet_public::contracts_array, ar); - ar.error_code = m_backend.create_proposal(cpp); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - - -QString MainWindow::accept_proposal(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_and_contract_id_param, waip); - PREPARE_RESPONSE(view::api_void, ar); - - ar.error_code = m_backend.accept_proposal(waip.wallet_id, waip.contract_id); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::release_contract(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::release_contract_param, rcp); - PREPARE_RESPONSE(view::api_void, ar); - - ar.error_code = m_backend.release_contract(rcp.wallet_id, rcp.contract_id, rcp.release_type); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::request_cancel_contract(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::crequest_cancel_contract_param, rcp); - PREPARE_RESPONSE(view::api_void, ar); - - ar.error_code = m_backend.request_cancel_contract(rcp.wallet_id, rcp.contract_id, rcp.fee, rcp.expiration_period); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::accept_cancel_contract(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_and_contract_id_param, wci); - PREPARE_RESPONSE(view::api_void, ar); - - ar.error_code = m_backend.accept_cancel_contract(wci.wallet_id, wci.contract_id); - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::generate_wallet(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("generate_wallet", param, [this](const view::open_wallet_request& owd, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::open_wallet_request, owd); - PREPARE_RESPONSE(view::open_wallet_response, ar); - ar.error_code = m_backend.generate_wallet(epee::string_encoding::utf8_to_wstring(owd.path), owd.pass, ar.response_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - - -QString MainWindow::restore_wallet(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("restore_wallet", param, [this](const view::restore_wallet_request& owd, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::restore_wallet_request, owd); - PREPARE_RESPONSE(view::open_wallet_response, ar); - ar.error_code = m_backend.restore_wallet(epee::string_encoding::utf8_to_wstring(owd.path), owd.pass, owd.seed_phrase, owd.seed_pass, ar.response_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::use_whitelisting(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("restore_wallet", param, [this](const view::restore_wallet_request& owd, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::api_request_t, owd); - PREPARE_RESPONSE(view::api_responce_return_code, ar); - ar.error_code = m_backend.use_whitelisting(owd.wallet_id, owd.req_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::open_wallet(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - - //return que_call2("open_wallet", param, [this](const view::open_wallet_request& owd, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::open_wallet_request, owd); - PREPARE_RESPONSE(view::open_wallet_response, ar); - ar.error_code = m_backend.open_wallet(epee::string_encoding::utf8_to_wstring(owd.path), owd.pass, owd.txs_to_return, ar.response_data, owd.exclude_mining_txs); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::get_my_offers(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("open_wallet", param, [this](const view::open_wallet_request& owd, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(bc_services::core_offers_filter, f); - PREPARE_RESPONSE(currency::COMMAND_RPC_GET_OFFERS_EX::response, ar); - ar.error_code = m_backend.get_my_offers(f, ar.response_data.offers); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::get_fav_offers(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::get_fav_offers_request, f); - PREPARE_RESPONSE(currency::COMMAND_RPC_GET_OFFERS_EX::response, ar); - ar.error_code = m_backend.get_fav_offers(f.ids, f.filter, ar.response_data.offers); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::is_pos_allowed(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - return m_backend.is_pos_allowed().c_str(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::run_wallet(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, wio); - - default_ar.error_code = m_backend.run_wallet(wio.wallet_id); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::resync_wallet(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("get_wallet_info", param, [this](const view::wallet_id_obj& a, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, a); - PREPARE_RESPONSE(view::api_void, ar); - - ar.error_code = m_backend.resync_wallet(a.wallet_id); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_offers_ex(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return que_call2("get_offers_ex", param, [this](const bc_services::core_offers_filter& f, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(bc_services::core_offers_filter, f); - PREPARE_RESPONSE(currency::COMMAND_RPC_GET_OFFERS_EX::response, ar); - ar.error_code = m_backend.get_offers_ex(f, ar.response_data.offers, ar.response_data.total_offers); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::push_offer(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - LOG_API_PARAMS(LOG_LEVEL_2); - //return que_call2("push_offer", param, [this](const view::push_offer_param& a, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::push_offer_param, a); - PREPARE_RESPONSE(view::transfer_response, ar); - - currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - - ar.error_code = m_backend.push_offer(a.wallet_id, a.od, res_tx); - if (ar.error_code != API_RETURN_CODE_OK) - return MAKE_RESPONSE(ar); - - ar.response_data.success = true; - ar.response_data.tx_hash = string_tools::pod_to_hex(currency::get_transaction_hash(res_tx)); - ar.response_data.tx_blob_size = currency::get_object_blobsize(res_tx); - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::cancel_offer(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - LOG_API_PARAMS(LOG_LEVEL_2); - // return que_call2("cancel_offer", param, [this](const view::cancel_offer_param& a, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(view::cancel_offer_param, a); - PREPARE_RESPONSE(view::transfer_response, ar); - - currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - - ar.error_code = m_backend.cancel_offer(a, res_tx); - if (ar.error_code != API_RETURN_CODE_OK) - return MAKE_RESPONSE(ar); - - ar.response_data.success = true; - ar.response_data.tx_hash = string_tools::pod_to_hex(currency::get_transaction_hash(res_tx)); - ar.response_data.tx_blob_size = currency::get_object_blobsize(res_tx); - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::push_update_offer(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - LOG_API_PARAMS(LOG_LEVEL_2); - //return que_call2("cancel_offer", param, [this](const bc_services::update_offer_details& a, view::api_response& ar){ - PREPARE_ARG_FROM_JSON(bc_services::update_offer_details, a); - PREPARE_RESPONSE(view::transfer_response, ar); - - currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - - ar.error_code = m_backend.push_update_offer(a, res_tx); - if (ar.error_code != API_RETURN_CODE_OK) - return MAKE_RESPONSE(ar); - - ar.response_data.success = true; - ar.response_data.tx_hash = string_tools::pod_to_hex(currency::get_transaction_hash(res_tx)); - ar.response_data.tx_blob_size = currency::get_object_blobsize(res_tx); - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_recent_transfers(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::get_recent_transfers_request, a); - PREPARE_RESPONSE(view::transfers_array, ar); - ar.error_code = m_backend.get_recent_transfers(a.wallet_id, a.offset, a.count, ar.response_data, a.exclude_mining_txs); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - - -QString MainWindow::get_mining_history(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - //return prepare_call("get_mining_history", param, [this](const view::wallet_id_obj& a, view::api_response& ar) { - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, a); - PREPARE_RESPONSE(tools::wallet_public::mining_history, ar); - - ar.error_code = m_backend.get_mining_history(a.wallet_id, ar.response_data); - if (ar.error_code != API_RETURN_CODE_OK) - return MAKE_RESPONSE(ar); - - ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::start_pos_mining(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, wo); - default_ar.error_code = m_backend.start_pos_mining(wo.wallet_id); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::stop_pos_mining(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, wo); - default_ar.error_code = m_backend.stop_pos_mining(wo.wallet_id); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_smart_wallet_info(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::request_get_smart_wallet_info, wo); - PREPARE_RESPONSE(view::get_restore_info_response, ar); - ar.error_code = m_backend.get_wallet_restore_info(wo.wallet_id, ar.response_data.seed_phrase, wo.seed_password); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::get_mining_estimate(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::request_mining_estimate, me); - PREPARE_RESPONSE(view::response_mining_estimate, ar); - ar.error_code = m_backend.get_mining_estimate(me.amount_coins, me.time, ar.response_data.final_amount, ar.response_data.all_coins_and_pos_diff_rate, ar.response_data.days_estimate); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::add_custom_asset_id(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_and_asset_id, waid); - PREPARE_RESPONSE(currency::COMMAND_RPC_GET_ASSET_INFO::response, ar); - - ar.error_code = m_backend.add_custom_asset_id(waid.wallet_id, waid.asset_id, ar.response_data.asset_descriptor); - ar.response_data.status = ar.error_code; - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::remove_custom_asset_id(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_and_asset_id, waid); - default_ar.error_code = m_backend.delete_custom_asset_id(waid.wallet_id, waid.asset_id); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::get_wallet_info(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::wallet_id_obj, waid); - PREPARE_RESPONSE(view::wallet_info, ar); - ar.error_code = m_backend.get_wallet_info(waid.wallet_id, ar.response_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::create_ionic_swap_proposal(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::create_ionic_swap_proposal_request, cispr); - PREPARE_RESPONSE(std::string, ar); - ar.error_code = m_backend.create_ionic_swap_proposal(cispr.wallet_id, cispr, ar.response_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::get_ionic_swap_proposal_info(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::api_request_t, tx_raw_hex); - PREPARE_RESPONSE(tools::wallet_public::ionic_swap_proposal_info, ar); - ar.error_code = m_backend.get_ionic_swap_proposal_info(tx_raw_hex.wallet_id, tx_raw_hex.req_data, ar.response_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); - -} - -QString MainWindow::accept_ionic_swap_proposal(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::api_request_t, tx_raw_hex); - PREPARE_RESPONSE(std::string, ar); - ar.error_code = m_backend.accept_ionic_swap_proposal(tx_raw_hex.wallet_id, tx_raw_hex.req_data, ar.response_data); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::backup_wallet_keys(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::backup_keys_request, me); - default_ar.error_code = m_backend.backup_wallet(me.wallet_id, epee::string_encoding::utf8_to_wstring(me.path)); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::reset_wallet_password(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::reset_pass_request, me); - default_ar.error_code = m_backend.reset_wallet_password(me.wallet_id, me.pass); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -QString MainWindow::is_wallet_password_valid(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::reset_pass_request, me); - default_ar.error_code = m_backend.is_wallet_password_valid(me.wallet_id, me.pass); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::is_autostart_enabled(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - view::api_response ar; - - if (gui_tools::GetStartOnSystemStartup()) - ar.error_code = API_RETURN_CODE_TRUE; - else - ar.error_code = API_RETURN_CODE_FALSE; - - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::toggle_autostart(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(currency::struct_with_one_t_type, as); - - if (gui_tools::SetStartOnSystemStartup(as.v)) - default_ar.error_code = API_RETURN_CODE_OK; - else - default_ar.error_code = API_RETURN_CODE_FAIL; - - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} -/* -QString MainWindow::check_available_sources(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::api_request_t >, sources); - return m_backend.check_available_sources(sources.wallet_id, sources.req_data).c_str(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} -*/ - -QString MainWindow::open_url_in_browser(const QString& param) -{ - TRY_ENTRY(); - QString prefix = "https://"; - if (!QDesktopServices::openUrl(QUrl(prefix + param))) - { - LOG_ERROR("Failed top open URL: " << param.toStdString()); - return API_RETURN_CODE_FAIL; - } - LOG_PRINT_L0("[Open URL]: " << param.toStdString()); - return API_RETURN_CODE_OK; - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::setup_jwt_wallet_rpc(const QString& param) -{ - TRY_ENTRY(); - - m_backend.setup_wallet_rpc(param.toStdString()); - - return API_RETURN_CODE_OK; - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::is_valid_restore_wallet_text(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::seed_info_param, rwtp); - return m_backend.is_valid_brain_restore_data(rwtp.seed_phrase, rwtp.seed_password).c_str(); - CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); -} - -QString MainWindow::get_seed_phrase_info(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::seed_info_param, rwtp); - PREPARE_RESPONSE(view::seed_phrase_info, ar); - ar.error_code = m_backend.get_seed_phrase_info(rwtp.seed_phrase, rwtp.seed_password, ar.response_data).c_str(); - LOG_PRINT_CYAN("[get_seed_phrase_info]:" << epee::serialization::store_t_to_json(ar), LOG_LEVEL_0); - return MAKE_RESPONSE(ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -void MainWindow::contextMenuEvent(QContextMenuEvent * event) -{ - TRY_ENTRY(); - - CATCH_ENTRY2(void()); -} -QString MainWindow::print_text(const QString& param) -{ - TRY_ENTRY(); - LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::print_text_param, ptp); - - //in >> htmlContent; - - QTextDocument *document = new QTextDocument(); - document->setHtml(ptp.html_text.c_str()); - - QPrinter printer; - default_ar.error_code = API_RETURN_CODE_CANCELED; - - QPrintDialog *dialog = new QPrintDialog(&printer, this); - dialog->setOptions(QAbstractPrintDialog::PrintToFile); - auto res = dialog->exec(); - if (res != QDialog::Accepted) - { - LOG_PRINT_L0("[PRINT_TEXT] exec != QDialog::Accepted, res=" << res); - return MAKE_RESPONSE(default_ar); - } - - document->print(&printer); - - delete document; - default_ar.error_code = API_RETURN_CODE_OK; - LOG_PRINT_L0("[PRINT_TEXT] default_ar.error_code = " << default_ar.error_code); - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -QString MainWindow::print_log(const QString& param) -{ - TRY_ENTRY(); - PREPARE_ARG_FROM_JSON(view::print_log_params, plp); - - LOG_PRINT("[GUI_LOG]" << plp.msg, plp.log_level); - - default_ar.error_code = API_RETURN_CODE_OK; - return MAKE_RESPONSE(default_ar); - CATCH_ENTRY_FAIL_API_RESPONCE(); -} - -void MainWindow::show_notification(const std::string& title, const std::string& message) -{ - TRY_ENTRY(); - - if (m_config.disable_notifications) - return; - - LOG_PRINT_L1("system notification: \"" << title << "\", \"" << message << "\""); - - // it's expected that title and message are utf-8 encoded! - -#if !defined(__APPLE__) - // use Qt tray icon to show messages on Windows and Linux - CHECK_AND_ASSERT_MES(m_tray_icon != nullptr, (void)(0), "m_tray_icon is null!"); - m_tray_icon->showMessage(QString().fromUtf8(title.c_str()), QString().fromUtf8(message.c_str())); -#else - // use native notification system on macOS - notification_helper::show(title, message); -#endif - CATCH_ENTRY2(void()); -} diff --git a/src/gui/qt-daemon/application/mainwindow.h b/src/gui/qt-daemon/application/mainwindow.h deleted file mode 100644 index 9344d65f..00000000 --- a/src/gui/qt-daemon/application/mainwindow.h +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#pragma once -#include -#include -#include - -#include "wallet/view_iface.h" -#include "serialization/keyvalue_helper_structs.h" - - -#ifndef Q_MOC_RUN -#include "wallet/wallets_manager.h" -#include "currency_core/offers_services_helpers.h" -#endif - -#include "common/threads_pool.h" - -QT_BEGIN_NAMESPACE -class QWebEngineView; -class QLineEdit; -QT_END_NAMESPACE - - -#define APP_DATA_FILE_BINARY_SIGNATURE 0x1000111101101021LL - - -// class MediatorObject : public QObject -// { -// Q_OBJECT -// -// public: -// -// signals : -// /*! -// This signal is emitted from the C++ side and the text displayed on the HTML client side. -// */ -// void from_c_to_html(const QString &text); -// -// public slots: -// /*! -// This slot is invoked from the HTML client side and the text displayed on the server side. -// */ -// void from_html_to_c(const QString &text); -// }; - -// -class MainWindow : public QMainWindow, - public currency::i_core_event_handler, - public view::i_view, - public QAbstractNativeEventFilter -{ - Q_OBJECT - -public: - MainWindow(); - ~MainWindow() override; - - bool init_backend(int argc, char* argv[]); - bool show_inital(); - void show_notification(const std::string& title, const std::string& message); - bool handle_ipc_event(const std::string& arguments); - - struct app_config - { - - epee::kvserializable_pair m_window_position; - epee::kvserializable_pair m_window_size; - bool is_maximazed; - bool is_showed; - bool disable_notifications; - - BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE(m_window_position) - KV_SERIALIZE(m_window_size) - KV_SERIALIZE(is_maximazed) - KV_SERIALIZE(is_showed) - KV_SERIALIZE(disable_notifications) - END_KV_SERIALIZE_MAP() - }; - - protected slots: - - void on_load_finished(bool ok); - bool do_close(); - - - public slots: - QString show_openfile_dialog(const QString& param); - QString show_savefile_dialog(const QString& param); - QString open_wallet(const QString& param); - QString get_my_offers(const QString& param); - QString get_fav_offers(const QString& param); - QString generate_wallet(const QString& param); - QString run_wallet(const QString& param); - QString close_wallet(const QString& wallet_id); - QString get_contracts(const QString& wallet_id); - QString create_proposal(const QString& param); - QString accept_proposal(const QString& param); - QString release_contract(const QString& param); - QString request_cancel_contract(const QString& param); - QString accept_cancel_contract(const QString& param); - - - QString on_request_quit(const QString& param); - QString get_version(const QString& param); - QString get_os_version(const QString& param); - QString get_network_type(const QString& param); - QString transfer(const QString& param); - QString have_secure_app_data(const QString& param); - QString drop_secure_app_data(); - QString get_secure_app_data(const QString& param); - QString store_secure_app_data(const QString& param, const QString& password); - QString set_master_password(const QString& param); - QString check_master_password(const QString& param); - QString get_app_data(const QString& param); - QString store_app_data(const QString& param); - QString get_default_user_dir(const QString& param); -// QString get_all_offers(const QString& param); - QString get_offers_ex(const QString& param); - QString push_offer(const QString& param); - QString cancel_offer(const QString& param); - QString push_update_offer(const QString& param); - QString get_alias_info_by_address(const QString& param); - QString get_alias_info_by_name(const QString& param); - QString get_all_aliases(const QString& param); - QString request_alias_registration(const QString& param); - QString request_alias_update(const QString& param); - QString get_alias_coast(const QString& param); - QString validate_address(const QString& param); - QString resync_wallet(const QString& param); - QString get_recent_transfers(const QString& param); - QString get_mining_history(const QString& param); - QString start_pos_mining(const QString& param); - QString stop_pos_mining(const QString& param); - QString set_log_level(const QString& param); - QString get_log_level(const QString& param); - QString set_enable_tor(const QString& param); -// QString dump_all_offers(); - QString webkit_launched_script(const QString& param); - QString get_smart_wallet_info(const QString& param); - QString restore_wallet(const QString& param); - QString use_whitelisting(const QString& param); - QString is_pos_allowed(const QString& param); - QString store_to_file(const QString& path, const QString& buff); - QString load_from_file(const QString& path); - QString is_file_exist(const QString& path); - QString get_mining_estimate(const QString& obj); - QString backup_wallet_keys(const QString& obj); - QString reset_wallet_password(const QString& param); - QString is_wallet_password_valid(const QString& param); - QString is_autostart_enabled(const QString& param); - QString toggle_autostart(const QString& param); - QString is_valid_restore_wallet_text(const QString& param); - QString get_seed_phrase_info(const QString& param); - QString print_text(const QString& param); - QString print_log(const QString& param); - QString set_clipboard(const QString& param); - QString set_localization_strings(const QString str); - QString get_clipboard(const QString& param); - void message_box(const QString& msg); - bool toggle_mining(const QString& param); - QString get_exchange_last_top(const QString& params); - QString get_tx_pool_info(const QString& param); - QString get_default_fee(const QString& param); - QString get_options(const QString& param); - void bool_toggle_icon(const QString& param); - QString add_custom_asset_id(const QString& param); - QString remove_custom_asset_id(const QString& param); - QString get_wallet_info(const QString& param); - - QString create_ionic_swap_proposal(const QString& param); - QString get_ionic_swap_proposal_info(const QString& param); - QString accept_ionic_swap_proposal(const QString& param); - - bool get_is_disabled_notifications(const QString& param); - bool set_is_disabled_notifications(const bool& param); - QString export_wallet_history(const QString& param); - QString get_log_file(const QString& param); - //QString check_available_sources(const QString& param); - QString open_url_in_browser(const QString& param); - QString setup_jwt_wallet_rpc(const QString& param); - - void trayIconActivated(QSystemTrayIcon::ActivationReason reason); - void tray_quit_requested(const QString& param); - void on_menu_show(const QString& param); - QString is_remnotenode_mode_preconfigured(const QString& param); - QString start_backend(const QString& params); - void show_notification(const QString& title, const QString& message); - - QString async_call(const QString& func_name, const QString& params); - QString sync_call(const QString& func_name, const QString& params); - - QString async_call_2a(const QString& func_name, const QString& params1, const QString& params2); - QString sync_call_2a(const QString& func_name, const QString& params1, const QString& params2); - - //for test purposes only - QString request_dummy(const QString& param); - - QString call_rpc(const QString& params); - QString call_wallet_rpc(const QString& wallet_id, const QString& params); - -signals: - void quit_requested(const QString str); - void update_daemon_state(const QString str); - void update_wallet_status(const QString str); - void update_wallet_info(const QString str); - void money_transfer(const QString str); - void money_transfer_cancel(const QString str); - void wallet_sync_progress(const QString str); - void handle_internal_callback(const QString str, const QString callback_name); - void update_pos_mining_text(const QString str); - void on_core_event(const QString method_name); //general function - void set_options(const QString str); //general function - void handle_deeplink_click(const QString str); - void handle_current_action_state(const QString str); - void dispatch_async_call_result(const QString id, const QString resp); //general function - -private: - //-------------------- i_core_event_handler -------------------- - virtual void on_core_event(const std::string event_name, const currency::core_event_v& e); - virtual void on_complete_events(); - virtual void on_clear_events(); - - //------- i_view --------- - virtual bool update_daemon_status(const view::daemon_status_info& info); - virtual bool on_backend_stopped(); - virtual bool show_msg_box(const std::string& message); - virtual bool update_wallet_status(const view::wallet_status_info& wsi); - virtual bool update_wallets_info(const view::wallets_summary_info& wsi); - virtual bool money_transfer(const view::transfer_event_info& tei); - virtual bool wallet_sync_progress(const view::wallet_sync_progres_param& p); - virtual bool money_transfer_cancel(const view::transfer_event_info& wsi); - virtual bool init(const std::string& path); - virtual bool pos_block_found(const currency::block& block_found); - virtual bool set_options(const view::gui_options& opt); - virtual bool update_tor_status(const view::current_action_status& opt); - //--------- QAbstractNativeEventFilter --------------------------- - bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override; - //---------------------------------------------- - - - void closeEvent(QCloseEvent *event); - void contextMenuEvent(QContextMenuEvent * event); - void changeEvent(QEvent *e); - void on_maximized(); - bool handle_deeplink_params_in_commandline(); - //void setOrientation(Qt::ScreenOrientation orientation); - - - - void init_tray_icon(const std::string& htmlPath); - bool set_html_path(const std::string& path); - void load_file(const QString &fileName); - void store_pos(bool consider_showed = false); - void store_window_pos(); - void restore_pos(bool consider_showed = false); - bool store_app_config(); - bool load_app_config(); - bool init_window(); - bool init_ipc_server(); - bool remove_ipc(); - - - std::string get_wallet_log_prefix(size_t wallet_id) const { return m_backend.get_wallet_log_prefix(wallet_id); } - - - //MediatorObject mo; - // UI - QWebEngineView *m_view; - QWebChannel* m_channel; - - // DATA - wallets_manager m_backend; - //std::atomic m_quit_requested; - std::atomic m_gui_deinitialize_done_1; - std::atomic m_backend_stopped_2; - std::atomic m_system_shutdown; - std::atomic m_ui_dispatch_id_counter; - utils::threads_pool m_threads_pool; - - std::string m_master_password; - - - app_config m_config; - - epee::locked_object> m_wallet_states; - std::thread m_ipc_worker; - struct events_que_struct - { - std::list m_que; - - BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE(m_que) - END_KV_SERIALIZE_MAP() - }; - events_que_struct m_events; - - std::vector m_localization; - - enum localization_string_indices - { - // order is surprisingly important here! (see also updateLocalisation in AppController.js) - localization_id_quit = 0, - localization_id_is_received, - localization_id_is_confirmed, - localization_id_income_transfer_unconfirmed, - localization_id_income_transfer_confirmed, - localization_id_mined, - localization_id_locked, - localization_id_minimized_text, - localization_id_minimized_title, - localization_id_tray_menu_show, - localization_id_tray_menu_minimize, - - localization_id_couter // keep it at the end of list - }; - - std::string m_normal_icon_path; - std::string m_blocked_icon_path; - - std::unique_ptr m_tray_icon; - std::unique_ptr m_tray_icon_menu; - std::unique_ptr m_restore_action; - std::unique_ptr m_quit_action; - std::unique_ptr m_minimize_action; - - std::string m_last_update_daemon_status_json; - - template - QString prepare_call(const char* name, const QString& param, callback_t cb) - { - LOG_PRINT_L0("que_call: [" << name << "]"); - view::api_response_t ar; - argument_type wio = AUTO_VAL_INIT(wio); - if (!epee::serialization::load_t_from_json(wio, param.toStdString())) - { - ar.error_code = API_RETURN_CODE_BAD_ARG; - return epee::serialization::store_t_to_json(ar).c_str(); - } - cb(wio, ar); - return epee::serialization::store_t_to_json(ar).c_str(); - } -}; - -namespace boost -{ - namespace serialization - { - template - void serialize(archive_t & ar, MainWindow::app_config& ac, const unsigned int version) - { - ar & ac.is_maximazed; - ar & ac.is_showed; - ar & ac.m_window_position; - ar & ac.m_window_size; - } - } -} diff --git a/src/gui/qt-daemon/application/notification_helper.h b/src/gui/qt-daemon/application/notification_helper.h deleted file mode 100644 index c00ccc88..00000000 --- a/src/gui/qt-daemon/application/notification_helper.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - - -#pragma once -#include -#include "epee/include/misc_log_ex.h" - -struct notification_helper -{ - static void show(const std::string& title, const std::string& message) -#if !defined(__APPLE__) - { - // just a stub, implemented for macOS only, see .mm - LOG_PRINT_RED("system notifications are supported only for macOS!", LOG_LEVEL_0); - } -#endif - ; -}; diff --git a/src/gui/qt-daemon/application/notification_helper.mm b/src/gui/qt-daemon/application/notification_helper.mm deleted file mode 100644 index 0c2a51f5..00000000 --- a/src/gui/qt-daemon/application/notification_helper.mm +++ /dev/null @@ -1,14 +0,0 @@ -#include "notification_helper.h" -#include -#include - -void notification_helper::show(const std::string& title, const std::string& message) -{ - NSUserNotification *userNotification = [[[NSUserNotification alloc] init] autorelease]; - userNotification.title = [NSString stringWithUTF8String:title.c_str()]; - userNotification.informativeText = [NSString stringWithUTF8String:message.c_str()]; - - NSUserNotificationCenter* center = [NSUserNotificationCenter defaultUserNotificationCenter]; - [center deliverNotification:userNotification]; -} - diff --git a/src/gui/qt-daemon/application/urleventfilter.cpp b/src/gui/qt-daemon/application/urleventfilter.cpp deleted file mode 100644 index 910b10f4..00000000 --- a/src/gui/qt-daemon/application/urleventfilter.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "urleventfilter.h" -#include - -bool URLEventFilter::eventFilter(QObject *obj, QEvent *event) -{ - if (event->type() == QEvent::FileOpen) { - QFileOpenEvent *fileEvent = static_cast(event); - if(!fileEvent->url().isEmpty()) - { - m_pmainwindow->handle_deeplink_click(fileEvent->url().toString()); - //QMessageBox msg; - //msg.setText(fileEvent->url().toString()); - //msg.exec(); - return true; - } - return true; - } else { - // standard event processing - return QObject::eventFilter(obj, event); - } - }; diff --git a/src/gui/qt-daemon/application/urleventfilter.h b/src/gui/qt-daemon/application/urleventfilter.h deleted file mode 100644 index 1e3e0dc2..00000000 --- a/src/gui/qt-daemon/application/urleventfilter.h +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include -#include "mainwindow.h" - -class URLEventFilter : public QObject -{ - Q_OBJECT -public: - URLEventFilter(MainWindow* pmainwindow) : m_pmainwindow(pmainwindow),QObject() - {}; -protected: - bool eventFilter(QObject *obj, QEvent *event) override; - -private: - MainWindow* m_pmainwindow; -}; \ No newline at end of file diff --git a/src/gui/qt-daemon/main.cpp b/src/gui/qt-daemon/main.cpp deleted file mode 100644 index 89722222..00000000 --- a/src/gui/qt-daemon/main.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2017-2025 Lethean VPN -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include -#include "application/mainwindow.h" -// #include "qdebug.h" -#include -// ReSharper disable once CppUnusedIncludeDirective -#include "include_base_utils.h" -#include "currency_core/currency_config.h" -#ifdef Q_OS_DARWIN -#include "application/urleventfilter.h" -#endif - -namespace -{ - using string_encoding::wstring_to_utf8; - using string_tools::set_module_name_and_folder; -} - -int main(int argc, char *argv[]) -{ - - if(argc > 1) - std::cout << argv[1] << std::endl; - -#ifdef _MSC_VER - #ifdef _WIN64 - _set_FMA3_enable(0); - #endif - //mutex to let InnoSetup know about running instance - CreateMutexA(nullptr, FALSE, CURRENCY_NAME_BASE "_instance"); -#endif - - -#ifdef WIN32 - WCHAR sz_file_name[MAX_PATH + 1] = L""; - GetModuleFileNameW(nullptr, sz_file_name, MAX_PATH + 1); - std::string path_to_process_utf8 = wstring_to_utf8(sz_file_name); -#else - std::string path_to_process_utf8 = argv[0]; -#endif - - TRY_ENTRY(); - set_module_name_and_folder(path_to_process_utf8); - - log_space::get_set_log_detalisation_level(true, LOG_LEVEL_0); - log_space::get_set_need_thread_id(true, true); - log_space::log_singletone::enable_channels("core,currency_protocol,tx_pool,p2p,wallet"); - - - QApplication app(argc, argv); - - MainWindow viewer; - if (!viewer.init_backend(argc, argv)) - { - return 1; - } - -#ifdef Q_OS_DARWIN - URLEventFilter url_event_filter(&viewer); - app.installEventFilter(&url_event_filter); -#endif - - app.installNativeEventFilter(&viewer); - viewer.setWindowTitle(CURRENCY_NAME_BASE); - viewer.show_inital(); - - int res = QApplication::exec(); - LOG_PRINT_L0("Process exit with code: " << res); - return res; - CATCH_ENTRY2(0); -} diff --git a/src/gui/qt-daemon/qtlogger.h b/src/gui/qt-daemon/qtlogger.h deleted file mode 100644 index b1ff2e76..00000000 --- a/src/gui/qt-daemon/qtlogger.h +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (c) 2014-2018 Zano Project -// Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#pragma once - -#include - -//#define QT_CONSOLE_STREAM qDebug() - -#define QT_CONSOLE_STREAM(s) \ -{std::stringstream ss; ss << s; fputs(ss.str().c_str(), stderr); fflush(stderr);} - - - -//fputs(buf.c_str(), stderr); -//fflush(stderr); - - -void customHandler(QtMsgType type, const char* msg) { - fputs(msg, stderr); - fflush(stderr); -} - - -class qt_console_stream : public epee::log_space::ibase_log_stream -{ - QDebug db; -public: - qt_console_stream() : db(qDebug()) - { - // Somewhere in your program - //qInstallMsgHandler(customHandler); - } - - ~qt_console_stream() - { - } - - int get_type(){ return LOGGER_CONSOLE; } - - inline void set_console_color(int color, bool bright) - { - switch (color) - { - case epee::log_space::console_color_default: - if (bright) - {QT_CONSOLE_STREAM("\033[1;37m");} - else - {QT_CONSOLE_STREAM("\033[0m");} - break; - case epee::log_space::console_color_white: - if (bright) - {QT_CONSOLE_STREAM("\033[1;37m");} - else - {QT_CONSOLE_STREAM("\033[0;37m");} - break; - case epee::log_space::console_color_red: - if (bright) - {QT_CONSOLE_STREAM("\033[1;31m");} - else - {QT_CONSOLE_STREAM("\033[0;31m");} - break; - case epee::log_space::console_color_green: - if (bright) - {QT_CONSOLE_STREAM("\033[1;32m");} - else - {QT_CONSOLE_STREAM("\033[0;32m");} - break; - - case epee::log_space::console_color_blue: - if (bright) - {QT_CONSOLE_STREAM("\033[1;34m");} - else - {QT_CONSOLE_STREAM("\033[0;34m");} - break; - - case epee::log_space::console_color_cyan: - if (bright) - {QT_CONSOLE_STREAM("\033[1;36m");} - else - {QT_CONSOLE_STREAM("\033[0;36m");} - break; - - case epee::log_space::console_color_magenta: - if (bright) - {QT_CONSOLE_STREAM("\033[1;35m");} - else - {QT_CONSOLE_STREAM("\033[0;35m");} - break; - - case epee::log_space::console_color_yellow: - if (bright) - {QT_CONSOLE_STREAM("\033[1;33m");} - else - {QT_CONSOLE_STREAM("\033[0;33m");} - break; - - } - } - - inline void reset_console_color() - { - {QT_CONSOLE_STREAM("\033[0m");} - } - - virtual bool out_buffer(const char* buffer, int buffer_len, int log_level, int color, const char* plog_name = NULL) - { - if (plog_name) - return true; //skip alternative logs from console - - set_console_color(color, log_level < 1); - - std::string buf(buffer, buffer_len); - for (size_t i = 0; i != buf.size(); i++) - { - if (buf[i] == 7 || buf[i] == -107) - buf[i] = '^'; - //remove \n - //if (i == buf.size()-1) - // buf[i] = ' '; - } - - QT_CONSOLE_STREAM(buf.c_str()); - - - reset_console_color(); - return true; - } - - -}; diff --git a/src/miner/simpleminer.cpp b/src/miner/simpleminer.cpp index 9ae89e4c..c497ee6f 100644 --- a/src/miner/simpleminer.cpp +++ b/src/miner/simpleminer.cpp @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "common/command_line.h" diff --git a/src/miner/simpleminer.h b/src/miner/simpleminer.h index 104afe6f..ad9fc4b7 100644 --- a/src/miner/simpleminer.h +++ b/src/miner/simpleminer.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "net/http_client.h" diff --git a/src/miner/target_helper.h b/src/miner/target_helper.h index 54583f6b..316f198b 100644 --- a/src/miner/target_helper.h +++ b/src/miner/target_helper.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "currency_core/difficulty.h" diff --git a/src/p2p/maintainers_info_boost_serialization.h b/src/p2p/maintainers_info_boost_serialization.h index b8b5df48..beff02d2 100644 --- a/src/p2p/maintainers_info_boost_serialization.h +++ b/src/p2p/maintainers_info_boost_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "p2p_protocol_defs.h" diff --git a/src/p2p/net_node.h b/src/p2p/net_node.h index eda9ea37..dba2f284 100644 --- a/src/p2p/net_node.h +++ b/src/p2p/net_node.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include @@ -27,7 +38,7 @@ #include "math_helper.h" #include "net_node_common.h" #include "maintainers_info_boost_serialization.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" using namespace epee; #undef LOG_DEFAULT_CHANNEL diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index 9de58a86..2f1df0e2 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once @@ -423,25 +434,25 @@ namespace nodetool { #ifndef TESTNET //TODO: - //ADD_HARDCODED_SEED_NODE(std::string("0.0.0.0:") + std::to_string(P2P_DEFAULT_PORT)); - ADD_HARDCODED_SEED_NODE("95.217.43.225", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("94.130.137.230", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("95.217.42.247", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("94.130.160.115", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("195.201.107.230", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("95.217.46.49", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("159.69.76.144", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("144.76.183.143", P2P_DEFAULT_PORT); + ADD_HARDCODED_SEED_NODE(std::string("0.0.0.0:") + std::to_string(P2P_DEFAULT_PORT)); + ADD_HARDCODED_SEED_NODE("116.202.82.115", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("94.130.137.230", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("95.217.42.247", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("94.130.160.115", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("195.201.107.230", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("95.217.46.49", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("159.69.76.144", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("144.76.183.143", P2P_DEFAULT_PORT); #else // TESTNET - ADD_HARDCODED_SEED_NODE("95.217.43.225", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("94.130.137.230", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("95.217.42.247", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("94.130.160.115", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("195.201.107.230", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("95.217.46.49", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("159.69.76.144", P2P_DEFAULT_PORT); - ADD_HARDCODED_SEED_NODE("144.76.183.143", P2P_DEFAULT_PORT); + ADD_HARDCODED_SEED_NODE("116.202.82.115", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("94.130.137.230", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("95.217.42.247", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("94.130.160.115", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("195.201.107.230", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("95.217.46.49", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("159.69.76.144", P2P_DEFAULT_PORT); + //ADD_HARDCODED_SEED_NODE("144.76.183.143", P2P_DEFAULT_PORT); #endif bool res = handle_command_line(vm); diff --git a/src/p2p/net_node_common.h b/src/p2p/net_node_common.h index 12fe6453..0551a279 100644 --- a/src/p2p/net_node_common.h +++ b/src/p2p/net_node_common.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/p2p/net_peerlist.h b/src/p2p/net_peerlist.h index 0b5e662a..2e0ac37d 100644 --- a/src/p2p/net_peerlist.h +++ b/src/p2p/net_peerlist.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2021 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once @@ -24,7 +35,7 @@ #include "syncobj.h" #include "net/local_ip.h" #include "p2p_protocol_defs.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "net_peerlist_boost_serialization.h" #include "common/boost_serialization_helper.h" diff --git a/src/p2p/net_peerlist_boost_serialization.h b/src/p2p/net_peerlist_boost_serialization.h index d10370b2..fa7602b4 100644 --- a/src/p2p/net_peerlist_boost_serialization.h +++ b/src/p2p/net_peerlist_boost_serialization.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/p2p/p2p_networks.h b/src/p2p/p2p_networks.h index 3f278e92..46883b10 100644 --- a/src/p2p/p2p_networks.h +++ b/src/p2p/p2p_networks.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/p2p/p2p_protocol_defs.h b/src/p2p/p2p_protocol_defs.h index 61d7db19..48812e0b 100644 --- a/src/p2p/p2p_protocol_defs.h +++ b/src/p2p/p2p_protocol_defs.h @@ -1,15 +1,26 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include #include "serialization/keyvalue_serialization.h" #include "misc_language.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "crypto/crypto.h" namespace nodetool diff --git a/src/pch/stdafx.cpp b/src/pch/stdafx.cpp index 1577c4e3..fde0bd08 100644 --- a/src/pch/stdafx.cpp +++ b/src/pch/stdafx.cpp @@ -1 +1,18 @@ +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// + #include "stdafx.h" \ No newline at end of file diff --git a/src/pch/stdafx.h b/src/pch/stdafx.h index 76afcc62..32bb3b82 100644 --- a/src/pch/stdafx.h +++ b/src/pch/stdafx.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2020 Zano Project -// Copyright (c) 2014-2017 The The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/platform/mingw/alloca.h b/src/platform/mingw/alloca.h index 9e18ae9e..2dccbdc5 100644 --- a/src/platform/mingw/alloca.h +++ b/src/platform/mingw/alloca.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/platform/msc/alloca.h b/src/platform/msc/alloca.h index 918bdd1f..047e61c5 100644 --- a/src/platform/msc/alloca.h +++ b/src/platform/msc/alloca.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/platform/msc/inline_c.h b/src/platform/msc/inline_c.h index bfd46237..2eddf60d 100644 --- a/src/platform/msc/inline_c.h +++ b/src/platform/msc/inline_c.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/platform/msc/stdbool.h b/src/platform/msc/stdbool.h index 2e1a0673..9981a0f4 100644 --- a/src/platform/msc/stdbool.h +++ b/src/platform/msc/stdbool.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/platform/msc/sys/param.h b/src/platform/msc/sys/param.h index b44de84b..3183353c 100644 --- a/src/platform/msc/sys/param.h +++ b/src/platform/msc/sys/param.h @@ -1,6 +1,19 @@ -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/rpc/core_rpc_server.cpp b/src/rpc/core_rpc_server.cpp index 0be19ed3..bed582f2 100644 --- a/src/rpc/core_rpc_server.cpp +++ b/src/rpc/core_rpc_server.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "include_base_utils.h" using namespace epee; @@ -1609,13 +1620,13 @@ namespace currency if (!get_account_address_and_payment_id_from_str(addr, payment_id_from_provided_addr, req.regular_address)) { error_resp.code = WALLET_RPC_ERROR_CODE_WRONG_ADDRESS; - error_resp.message = std::string("invalid address provided: \'") + req.regular_address + "\', Zano address expected"; + error_resp.message = std::string("invalid address provided: \'") + req.regular_address + "\', Lethean address expected"; return false; } if (payment_id_from_provided_addr.size()) { error_resp.code = WALLET_RPC_ERROR_CODE_WRONG_ADDRESS; - error_resp.message = std::string("invalid address provided: \'") + req.regular_address + "\', Zano address expected be regular and NOT integrated address"; + error_resp.message = std::string("invalid address provided: \'") + req.regular_address + "\', Lethean address expected be regular and NOT integrated address"; return false; } diff --git a/src/rpc/core_rpc_server.h b/src/rpc/core_rpc_server.h index 3dc4049d..fb288d51 100644 --- a/src/rpc/core_rpc_server.h +++ b/src/rpc/core_rpc_server.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h index 2e571212..41a7aacb 100644 --- a/src/rpc/core_rpc_server_commands_defs.h +++ b/src/rpc/core_rpc_server_commands_defs.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "serialization/keyvalue_hexemizer.h" #include "currency_protocol/currency_protocol_defs.h" @@ -154,7 +165,7 @@ namespace currency struct COMMAND_RPC_GET_ASSETS_LIST { - DOC_COMMAND("Return list of assets registered in Zano blockchain"); + DOC_COMMAND("Return list of assets registered in Lethean blockchain"); struct request { @@ -174,7 +185,7 @@ namespace currency BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(status) DOC_DSCR("Status code of operation, OK if success") DOC_EXMP(API_RETURN_CODE_OK) DOC_END - KV_SERIALIZE(assets) DOC_DSCR("List of assets registered in Zano blockchain") DOC_EXMP_AUTO(1) DOC_END + KV_SERIALIZE(assets) DOC_DSCR("List of assets registered in Lethean blockchain") DOC_EXMP_AUTO(1) DOC_END END_KV_SERIALIZE_MAP() }; }; @@ -455,7 +466,7 @@ namespace currency BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(payment_id) DOC_DSCR("Hex-encoded Payment ID to be associated with the this address. If empty then wallet would generate new payment id using system random library") DOC_EXMP("1dfe5a88ff9effb3") DOC_END - KV_SERIALIZE(regular_address) DOC_DSCR("Zano wallet address to be used as a base for integrated address") DOC_EXMP("ZxCSpsGGeJsS8fwvQ4HktDU3qBeauoJTR6j73jAWWZxFXdF7XTbGm4YfS2kXJmAP4Rf5BVsSQ9iZ45XANXEYsrLN2L2W77dH7") DOC_END + KV_SERIALIZE(regular_address) DOC_DSCR("Lethean wallet address to be used as a base for integrated address") DOC_EXMP("iTHNHvUTA2gR7gSb854s58SpAyqtR5aCNcfzBzVHjhvPcw2gQ2PHDiwT48U4ZyLVjtLxev8fAQ7NaGLZe6ihTSgp7gL45MJTCK") DOC_END END_KV_SERIALIZE_MAP() }; diff --git a/src/rpc/core_rpc_server_error_codes.h b/src/rpc/core_rpc_server_error_codes.h index 38df7321..ba6645b9 100644 --- a/src/rpc/core_rpc_server_error_codes.h +++ b/src/rpc/core_rpc_server_error_codes.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/serialization/binary_archive.h b/src/serialization/binary_archive.h index 3fe31e72..088cd3ae 100644 --- a/src/serialization/binary_archive.h +++ b/src/serialization/binary_archive.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// /* binary_archive.h * diff --git a/src/serialization/binary_utils.h b/src/serialization/binary_utils.h index c9b5c31a..bd0e1092 100644 --- a/src/serialization/binary_utils.h +++ b/src/serialization/binary_utils.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include "binary_archive.h" diff --git a/src/serialization/boost_types.h b/src/serialization/boost_types.h index 463316fc..e54f29f4 100644 --- a/src/serialization/boost_types.h +++ b/src/serialization/boost_types.h @@ -1,8 +1,19 @@ -// Copyright (c) 2018-2024 Zano Project -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/serialization/debug_archive.h b/src/serialization/debug_archive.h index 4f5bec8d..8d986f1f 100644 --- a/src/serialization/debug_archive.h +++ b/src/serialization/debug_archive.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/serialization/json_archive.h b/src/serialization/json_archive.h index 09fea679..ad8f3178 100644 --- a/src/serialization/json_archive.h +++ b/src/serialization/json_archive.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2019 The Zano Project -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// /* json_archive.h * diff --git a/src/serialization/json_utils.h b/src/serialization/json_utils.h index 990f0f53..d8eb5e03 100644 --- a/src/serialization/json_utils.h +++ b/src/serialization/json_utils.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include "json_archive.h" diff --git a/src/serialization/multiprecision.h b/src/serialization/multiprecision.h index 36f7de94..cc1ac360 100644 --- a/src/serialization/multiprecision.h +++ b/src/serialization/multiprecision.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/serialization/serialization.h b/src/serialization/serialization.h index a44ec405..ff915958 100644 --- a/src/serialization/serialization.h +++ b/src/serialization/serialization.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2018 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// /* serialization.h * diff --git a/src/serialization/serialize_basic_types.h b/src/serialization/serialize_basic_types.h index 499a458e..3678adfa 100644 --- a/src/serialization/serialize_basic_types.h +++ b/src/serialization/serialize_basic_types.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/serialization/stl_containers.h b/src/serialization/stl_containers.h index f6cdbd49..24156320 100644 --- a/src/serialization/stl_containers.h +++ b/src/serialization/stl_containers.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/serialization/string.h b/src/serialization/string.h index e6e6b7e6..29723d9f 100644 --- a/src/serialization/string.h +++ b/src/serialization/string.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/serialization/variant.h b/src/serialization/variant.h index 716d54cf..7934d468 100644 --- a/src/serialization/variant.h +++ b/src/serialization/variant.h @@ -1,7 +1,19 @@ -// Copyright (c) 2014-2017 The The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/simplewallet/password_container.cpp b/src/simplewallet/password_container.cpp index ccba0c16..cd205b59 100644 --- a/src/simplewallet/password_container.cpp +++ b/src/simplewallet/password_container.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "password_container.h" diff --git a/src/simplewallet/password_container.h b/src/simplewallet/password_container.h index 5bca195b..985246af 100644 --- a/src/simplewallet/password_container.h +++ b/src/simplewallet/password_container.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp index 57186476..1137f878 100644 --- a/src/simplewallet/simplewallet.cpp +++ b/src/simplewallet/simplewallet.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #if defined(WIN32) @@ -297,7 +308,7 @@ simple_wallet::simple_wallet() m_cmd_binder.set_handler("incoming_counts", boost::bind(&simple_wallet::show_incoming_transfers_counts, this, ph::_1), "incoming_transfers counts"); m_cmd_binder.set_handler("list_recent_transfers", boost::bind(&simple_wallet::list_recent_transfers, this, ph::_1), "list_recent_transfers [offset] [count] - Show recent maximum 1000 transfers, offset default = 0, count default = 100 "); m_cmd_binder.set_handler("export_recent_transfers", boost::bind(&simple_wallet::export_recent_transfers, this, ph::_1), "list_recent_transfers_tx - Write recent transfer in json to wallet_recent_transfers.txt"); - m_cmd_binder.set_handler("list_outputs", boost::bind(&simple_wallet::list_outputs, this, ph::_1), "list_outputs [spent|unspent] [ticker=ZANO] [unknown] - Lists all the outputs. The result may be filtered by spent status, asset ticker or unknown asset ids."); + m_cmd_binder.set_handler("list_outputs", boost::bind(&simple_wallet::list_outputs, this, ph::_1), "list_outputs [spent|unspent] [ticker=LTHN] [unknown] - Lists all the outputs. The result may be filtered by spent status, asset ticker or unknown asset ids."); m_cmd_binder.set_handler("lo", boost::bind(&simple_wallet::list_outputs, this, ph::_1), "alias for list_outputs"); m_cmd_binder.set_handler("dump_transfers", boost::bind(&simple_wallet::dump_transfers, this, ph::_1), "dump_transfers - Write transfers in json to dump_transfers.txt"); m_cmd_binder.set_handler("dump_keyimages", boost::bind(&simple_wallet::dump_key_images, this, ph::_1), "dump_keyimages - Write key_images in json to dump_key_images.txt"); @@ -697,7 +708,7 @@ bool simple_wallet::restore_wallet(const std::string& wallet_file, const std::st "Your wallet has been restored.\n" << "To start synchronizing with the daemon use \"refresh\" command.\n" << "Use \"help\" command to see the list of available commands.\n" << - "Always use \"exit\" command when closing simplewallet to save\n" << + "Always use \"exit\" command when closing your wallet to save\n" << "current session's state. Otherwise, you will possibly need to synchronize \n" << "your wallet again. Your wallet keys is NOT under risk anyway.\n" << "**********************************************************************"; @@ -892,7 +903,7 @@ std::string print_money_trailing_zeros_replaced_with_spaces(uint64_t amount, siz //---------------------------------------------------------------------------------------------------- std::string simple_wallet::get_token_info_string(const crypto::public_key& asset_id, uint64_t& decimal_points) { - std::string token_info = "ZANO"; + std::string token_info = "LTHN"; decimal_points = CURRENCY_DISPLAY_DECIMAL_POINT; if (asset_id != currency::native_coin_asset_id) { @@ -1596,6 +1607,7 @@ bool simple_wallet::validate_wrap_status(uint64_t amount) currency::void_struct req = AUTO_VAL_INIT(req); currency::rpc_get_wrap_info_response res = AUTO_VAL_INIT(res); + return false; //@todo remove manual bock - Snider 2025 bool r = epee::net_utils::invoke_http_json_remote_command2("http://wrapped.zano.org/api2/get_wrap_info", req, res, http_client, 10000); if (!r) { @@ -1607,7 +1619,7 @@ bool simple_wallet::validate_wrap_status(uint64_t amount) if (amount <= zano_needed_for_wrap) { fail_msg_writer() << "Too small amount to cover ERC20 fee. ERC20 cost is: " - << print_money(zano_needed_for_wrap) << " Zano" << + << print_money(zano_needed_for_wrap) << " Lethean" << "($" << res.tx_cost.usd_needed_for_erc20 << ")"; return false; } @@ -1615,11 +1627,11 @@ bool simple_wallet::validate_wrap_status(uint64_t amount) if (amount > unwrapped_coins_left) { fail_msg_writer() << "Amount is bigger than ERC20 tokens left available: " - << print_money(unwrapped_coins_left) << " wZano"; + << print_money(unwrapped_coins_left) << " wLTHN"; return false; } - success_msg_writer(false) << "You'll receive estimate " << print_money(amount - zano_needed_for_wrap) << " wZano (" << print_money(zano_needed_for_wrap)<< " Zano will be used to cover ERC20 fee)"; + success_msg_writer(false) << "You'll receive estimate " << print_money(amount - zano_needed_for_wrap) << " wLTHN (" << print_money(zano_needed_for_wrap)<< " Lethean will be used to cover ERC20 fee)"; success_msg_writer(false) << "Proceed? (yes/no)"; while (true) { @@ -1729,7 +1741,7 @@ bool simple_wallet::transfer_impl(const std::vector &args_, uint64_ { success_msg_writer(false) << "Address " << local_args[i] << " recognized as wrapped address, creating wrapping transaction."; - success_msg_writer(false) << "This transaction will create wZano (\"Wrapped Zano\") which will be sent to the specified address on the Ethereum network."; + success_msg_writer(false) << "This transaction will create wLTHN (\"Wrapped Lethean\") which will be sent to the specified address on the Ethereum network."; if (!validate_wrap_status(de.amount)) { @@ -1788,13 +1800,13 @@ bool simple_wallet::transfer_impl(const std::vector &args_, uint64_ if (!m_wallet->is_watch_only()) { if(wrapped_transaction) - success_msg_writer(true) << "Transaction successfully sent to wZano custody wallet, id: " << get_transaction_hash(tx) << ", " << get_object_blobsize(tx) << " bytes"; + success_msg_writer(true) << "Transaction successfully sent to wLTHN custody wallet, id: " << get_transaction_hash(tx) << ", " << get_object_blobsize(tx) << " bytes"; else success_msg_writer(true) << "Transaction successfully sent, id: " << get_transaction_hash(tx) << ", " << get_object_blobsize(tx) << " bytes"; } else { - success_msg_writer(true) << "Transaction prepared for signing and saved into \"zano_tx_unsigned\" file, use full wallet to sign transfer and then use \"submit_transfer\" on this wallet to broadcast the transaction to the network"; + success_msg_writer(true) << R"(Transaction prepared for signing and saved into "lethean_tx_unsigned" file, use full wallet to sign transfer and then use "submit_transfer" on this wallet to broadcast the transaction to the network)"; } SIMPLE_WALLET_CATCH_TRY_ENTRY() @@ -2772,7 +2784,7 @@ bool simple_wallet::sweep_below(const std::vector &args) size_t outs_total = 0, outs_swept = 0; uint64_t amount_total = 0, amount_swept = 0; currency::transaction result_tx = AUTO_VAL_INIT(result_tx); - std::string filename = "zano_tx_unsigned"; + std::string filename = "lethean_tx_unsigned"; m_wallet->sweep_below(fake_outs_count, addr, amount, payment_id, fee, outs_total, amount_total, outs_swept, amount_swept, &result_tx, &filename); success_msg_writer(false) << outs_swept << " outputs (" << print_money_brief(amount_swept) << " coins) of " << outs_total << " total (" << print_money_brief(amount_total) @@ -2827,12 +2839,12 @@ bool simple_wallet::sweep_bare_outs(const std::vector &args) uint64_t unlocked_balance = 0; uint64_t balance = m_wallet->balance(unlocked_balance); if (balance < COIN) - success_msg_writer(false) << "Looks like it's not enough coins to perform this operation. Transferring " << print_money_brief(TX_MINIMUM_FEE) << " ZANO or more to this wallet may help."; + success_msg_writer(false) << "Looks like it's not enough coins to perform this operation. Transferring " << print_money_brief(TX_MINIMUM_FEE) << " LTHN or more to this wallet may help."; else if (unlocked_balance < COIN) success_msg_writer(false) << "Not enough spendable outputs to perform this operation. Please, try again later."; else { - success_msg_writer(false) << "This operation couldn't be performed for some reason. Please, copy simplewallet's log file and ask for support. Nothing was done."; + success_msg_writer(false) << "This operation couldn't be performed for some reason. Please, copy wallet's log file and ask for support. Nothing was done."; LOG_PRINT_L0("strange situation: balance: " << print_money_brief(balance) << ", unlocked_balance: " << print_money_brief(unlocked_balance) << " but get_bare_unspent_outputs_stats returned empty result"); } return true; @@ -3363,14 +3375,14 @@ int main(int argc, char* argv[]) if (command_line::get_arg(vm, command_line::arg_help)) { - success_msg_writer() << "Usage: simplewallet [--wallet-file=|--generate-new[-auditable]-wallet=] [--daemon-address=:] []"; + success_msg_writer() << "Usage: lethean-wallet-cli [--wallet-file=|--generate-new[-auditable]-wallet=] [--daemon-address=:] []"; success_msg_writer() << desc_all << '\n' << sw->get_commands_str(); exit_requested = true; return true; } else if (command_line::get_arg(vm, command_line::arg_version)) { - success_msg_writer() << CURRENCY_NAME << " simplewallet v" << PROJECT_VERSION_LONG; + success_msg_writer() << CURRENCY_NAME << " Wallet v" << PROJECT_VERSION_LONG; exit_requested = true; return true; } @@ -3397,7 +3409,7 @@ int main(int argc, char* argv[]) log_dir = log_file_path.has_parent_path() ? log_file_path.parent_path().string() : log_space::log_singletone::get_default_log_folder(); log_space::log_singletone::add_logger(LOGGER_FILE, log_file_path.filename().string().c_str(), log_dir.c_str(), LOG_LEVEL_4); LOG_PRINT_L0(ENDL << ENDL); - message_writer(epee::log_space::console_color_white, true, std::string(), LOG_LEVEL_0) << CURRENCY_NAME << " simplewallet v" << PROJECT_VERSION_LONG; + message_writer(epee::log_space::console_color_white, true, std::string(), LOG_LEVEL_0) << CURRENCY_NAME << " Wallet v" << PROJECT_VERSION_LONG; if (command_line::has_arg(vm, command_line::arg_log_level)) { diff --git a/src/simplewallet/simplewallet.h b/src/simplewallet/simplewallet.h index 13ef637f..23657d38 100644 --- a/src/simplewallet/simplewallet.h +++ b/src/simplewallet/simplewallet.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/stratum/stratum_helpers.h b/src/stratum/stratum_helpers.h index 6eacd377..a872a679 100644 --- a/src/stratum/stratum_helpers.h +++ b/src/stratum/stratum_helpers.h @@ -1,7 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/stratum/stratum_server.cpp b/src/stratum/stratum_server.cpp index 95729637..05e1c6cc 100644 --- a/src/stratum/stratum_server.cpp +++ b/src/stratum/stratum_server.cpp @@ -1,12 +1,24 @@ -// Copyright (c) 2018-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "stratum_server.h" #include "stratum_helpers.h" #include "net/abstract_tcp_server2.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "currency_core/currency_core.h" #include "common/command_line.h" #include "common/int-util.h" diff --git a/src/stratum/stratum_server.h b/src/stratum/stratum_server.h index 7647e34e..e2330e97 100644 --- a/src/stratum/stratum_server.h +++ b/src/stratum/stratum_server.h @@ -1,7 +1,19 @@ -// Copyright (c) 2018-2019 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/version.h.in b/src/version.h.in index 3112b961..52a6c7de 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -3,11 +3,11 @@ #define BUILD_COMMIT_ID "@VERSION@" -#define PROJECT_MAJOR_VERSION "2" -#define PROJECT_MINOR_VERSION "1" -#define PROJECT_REVISION "8" +#define PROJECT_MAJOR_VERSION "6" +#define PROJECT_MINOR_VERSION "0" +#define PROJECT_REVISION "1" #define PROJECT_VERSION PROJECT_MAJOR_VERSION "." PROJECT_MINOR_VERSION "." PROJECT_REVISION -#define PROJECT_VERSION_BUILD_NO 428 +#define PROJECT_VERSION_BUILD_NO 2 #define PROJECT_VERSION_BUILD_NO_STR STRINGIFY_EXPAND(PROJECT_VERSION_BUILD_NO) #define PROJECT_VERSION_LONG PROJECT_VERSION "." PROJECT_VERSION_BUILD_NO_STR "[" BUILD_COMMIT_ID "]" diff --git a/src/wallet/core_default_rpc_proxy.cpp b/src/wallet/core_default_rpc_proxy.cpp index 5e67beb4..32f39ac2 100644 --- a/src/wallet/core_default_rpc_proxy.cpp +++ b/src/wallet/core_default_rpc_proxy.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "core_default_rpc_proxy.h" diff --git a/src/wallet/core_default_rpc_proxy.h b/src/wallet/core_default_rpc_proxy.h index d82ec28d..d3d5e813 100644 --- a/src/wallet/core_default_rpc_proxy.h +++ b/src/wallet/core_default_rpc_proxy.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/core_fast_rpc_proxy.h b/src/wallet/core_fast_rpc_proxy.h index 0b1c4b0e..5d00d5a5 100644 --- a/src/wallet/core_fast_rpc_proxy.h +++ b/src/wallet/core_fast_rpc_proxy.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "rpc/core_rpc_server.h" #include "wallet/core_rpc_proxy.h" diff --git a/src/wallet/core_rpc_proxy.h b/src/wallet/core_rpc_proxy.h index 655548b7..138f40b7 100644 --- a/src/wallet/core_rpc_proxy.h +++ b/src/wallet/core_rpc_proxy.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/decoy_selection.cpp b/src/wallet/decoy_selection.cpp index e9d24446..4a04832d 100644 --- a/src/wallet/decoy_selection.cpp +++ b/src/wallet/decoy_selection.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2023 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "decoy_selection.h" #include "decoy_selection_default_distribution.hpp" diff --git a/src/wallet/decoy_selection.h b/src/wallet/decoy_selection.h index de4cecf9..40ed2e91 100644 --- a/src/wallet/decoy_selection.h +++ b/src/wallet/decoy_selection.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2023 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/wallet/decoy_selection_default_distribution.hpp b/src/wallet/decoy_selection_default_distribution.hpp index 9dc44579..f519fbd4 100644 --- a/src/wallet/decoy_selection_default_distribution.hpp +++ b/src/wallet/decoy_selection_default_distribution.hpp @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2023 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// const std::vector g_default_distribution = diff --git a/src/wallet/plain_wallet_api.cpp b/src/wallet/plain_wallet_api.cpp index eceb536e..d45dce26 100644 --- a/src/wallet/plain_wallet_api.cpp +++ b/src/wallet/plain_wallet_api.cpp @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2020 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #ifdef ANDROID_BUILD @@ -8,7 +21,7 @@ #endif #include "plain_wallet_api.h" #include "plain_wallet_api_defs.h" -#include "currency_core/currency_config.h" +#include "config/currency_config.h" #include "version.h" #include "string_tools.h" #include "currency_core/currency_format_utils.h" @@ -18,7 +31,7 @@ #include "static_helpers.h" #include "wallet_helpers.h" -#define ANDROID_PACKAGE_NAME "com.zano_mobile" +#define ANDROID_PACKAGE_NAME "com.lethean.mobile" #define LOGS_FOLDER "logs" @@ -427,7 +440,7 @@ namespace plain_wallet { const std::string src_folder_path = get_bundle_working_dir(); boost::system::error_code ec; - const std::string full_target_path = target_dir + "/Zano_export" + std::to_string(epee::misc_utils::get_tick_count()); + const std::string full_target_path = target_dir + "/Lethean_export" + std::to_string(epee::misc_utils::get_tick_count()); boost::filesystem::create_directory(full_target_path, ec); if (ec) { diff --git a/src/wallet/plain_wallet_api.h b/src/wallet/plain_wallet_api.h index ec5af47d..a15cea0d 100644 --- a/src/wallet/plain_wallet_api.h +++ b/src/wallet/plain_wallet_api.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2025 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/wallet/plain_wallet_api_defs.h b/src/wallet/plain_wallet_api_defs.h index 613227d0..df52e544 100644 --- a/src/wallet/plain_wallet_api_defs.h +++ b/src/wallet/plain_wallet_api_defs.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2020 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include "net/http_server_handlers_map2.h" diff --git a/src/wallet/view_iface.h b/src/wallet/view_iface.h index 67f90240..852a47b4 100644 --- a/src/wallet/view_iface.h +++ b/src/wallet/view_iface.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 42f7ac0c..de4bb0b4 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include @@ -8194,7 +8205,7 @@ void wallet2::transfer(construct_tx_param& ctp, if (m_watch_only) { - bool r = store_unsigned_tx_to_file_and_reserve_transfers(ftp, (p_unsigned_filename_or_tx_blob_str != nullptr ? *p_unsigned_filename_or_tx_blob_str : "zano_tx_unsigned"), p_unsigned_filename_or_tx_blob_str); + bool r = store_unsigned_tx_to_file_and_reserve_transfers(ftp, (p_unsigned_filename_or_tx_blob_str != nullptr ? *p_unsigned_filename_or_tx_blob_str : "lethean_tx_unsigned"), p_unsigned_filename_or_tx_blob_str); WLT_THROW_IF_FALSE_WALLET_CMN_ERR_EX(r, "failed to store unsigned tx"); WLT_LOG_GREEN("[wallet::transfer]" << " prepare_transaction_time: " << print_fixed_decimal_point(prepare_transaction_time, 3), LOG_LEVEL_0); return; diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index ef2c3a39..9d7afacb 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2023 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/wallet/wallet2_base.h b/src/wallet/wallet2_base.h index d991a55b..bf71b34e 100644 --- a/src/wallet/wallet2_base.h +++ b/src/wallet/wallet2_base.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2023 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include diff --git a/src/wallet/wallet2_escrow.cpp b/src/wallet/wallet2_escrow.cpp index 2efab94c..1fdaaaf2 100644 --- a/src/wallet/wallet2_escrow.cpp +++ b/src/wallet/wallet2_escrow.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2016 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #define KEEP_WALLET_LOG_MACROS #include "wallet2.h" diff --git a/src/wallet/wallet_debug_events_definitions.h b/src/wallet/wallet_debug_events_definitions.h index 85eb9614..90acaf13 100644 --- a/src/wallet/wallet_debug_events_definitions.h +++ b/src/wallet/wallet_debug_events_definitions.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2023 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/wallet_errors.h b/src/wallet/wallet_errors.h index 12581bc5..bcb71142 100644 --- a/src/wallet/wallet_errors.h +++ b/src/wallet/wallet_errors.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/wallet_helpers.h b/src/wallet/wallet_helpers.h index 50da63a0..8efb9b72 100644 --- a/src/wallet/wallet_helpers.h +++ b/src/wallet/wallet_helpers.h @@ -1,6 +1,19 @@ -// Copyright (c) 2014-2020 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 Zano Project +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/wallet_id_adapter.h b/src/wallet/wallet_id_adapter.h index f13ce0c7..272fb052 100644 --- a/src/wallet/wallet_id_adapter.h +++ b/src/wallet/wallet_id_adapter.h @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index f3908c24..b5dcf2cc 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once #include @@ -179,8 +190,8 @@ namespace wallet_public KV_SERIALIZE(timestamp) DOC_DSCR("Timestamp of the block that included transaction in blockchain, 0 for unconfirmed") DOC_EXMP(1712590951) DOC_END KV_SERIALIZE(employed_entries) DOC_DSCR("Mark entries from transaction that was connected to this wallet") DOC_END KV_SERIALIZE(fee) DOC_DSCR("Transaction fee") DOC_EXMP(10000000000) DOC_END - KV_SERIALIZE(is_service) DOC_DSCR("Tells if this transaction is used as utility by one of Zano services(contracts, ionic swaps, etc)") DOC_EXMP(false) DOC_END - KV_SERIALIZE(is_mixing) DOC_DSCR("Tells if this transaction using mixins or not(auditble wallets normally don't use mixins)") DOC_EXMP(false) DOC_END + KV_SERIALIZE(is_service) DOC_DSCR("Tells if this transaction is used as utility by one of Lethean services(contracts, ionic swaps, etc)") DOC_EXMP(false) DOC_END + KV_SERIALIZE(is_mixing) DOC_DSCR("Tells if this transaction using mixins or not(auditable wallets normally don't use mixins)") DOC_EXMP(false) DOC_END KV_SERIALIZE(is_mining) DOC_DSCR("Tells if this transaction is coinbase transaction(ie generated by PoW mining or by PoS staking)") DOC_EXMP(false) DOC_END KV_SERIALIZE(tx_type) DOC_DSCR("Could be one of this: GUI_TX_TYPE_NORMAL=0, GUI_TX_TYPE_PUSH_OFFER=1, GUI_TX_TYPE_UPDATE_OFFER=2, GUI_TX_TYPE_CANCEL_OFFER=3, GUI_TX_TYPE_NEW_ALIAS=4,GUI_TX_TYPE_UPDATE_ALIAS=5,GUI_TX_TYPE_COIN_BASE=6,GUI_TX_TYPE_ESCROW_PROPOSAL=7,GUI_TX_TYPE_ESCROW_TRANSFER=8,GUI_TX_TYPE_ESCROW_RELEASE_NORMAL=9,GUI_TX_TYPE_ESCROW_RELEASE_BURN=10,GUI_TX_TYPE_ESCROW_CANCEL_PROPOSAL=11,GUI_TX_TYPE_ESCROW_RELEASE_CANCEL=12,GUI_TX_TYPE_HTLC_DEPOSIT=13,GUI_TX_TYPE_HTLC_REDEEM=14") DOC_EXMP(0) DOC_END KV_SERIALIZE(show_sender) DOC_DSCR("If sender is included in tx") DOC_EXMP(false) DOC_END @@ -188,8 +199,8 @@ namespace wallet_public KV_SERIALIZE(service_entries) DOC_DSCR("Additional entries that might be stored in transaction but not part of it's consensus") DOC_EXMP_AUTO(1) DOC_END KV_SERIALIZE(transfer_internal_index) DOC_DSCR("Index of this entry in the wallet's array of transaction's history") DOC_EXMP(12) DOC_END KV_SERIALIZE(remote_addresses) DOC_DSCR("Remote addresses of this transfer(destination if it's outgoing transfer or sender if it's incoming transaction)") DOC_EXMP_AUTO(1, "ZxBvJDuQjMG9R2j4WnYUhBYNrwZPwuyXrC7FHdVmWqaESgowDvgfWtiXeNGu8Px9B24pkmjsA39fzSSiEQG1ekB225ZnrMTBp") DOC_END - KV_SERIALIZE(remote_aliases) DOC_DSCR("Aliases for remot addresses, of discovered") DOC_EXMP_AUTO(1, "roger") DOC_END - KV_SERIALIZE(subtransfers) DOC_DSCR("Essential part of transfer entry: amounts that been transfered in this transaction grouped by asset id") DOC_EXMP_AUTO(1) DOC_END + KV_SERIALIZE(remote_aliases) DOC_DSCR("Aliases for remote addresses, of discovered") DOC_EXMP_AUTO(1, "roger") DOC_END + KV_SERIALIZE(subtransfers) DOC_DSCR("Essential part of transfer entry: amounts that been transferred in this transaction grouped by asset id") DOC_EXMP_AUTO(1) DOC_END KV_SERIALIZE_EPHEMERAL_N(currency::asset_descriptor_operation, wallet_transfer_info_get_ado, "ado") DOC_DSCR("\"Asset Descriptor Operation\" if it was present in transaction") DOC_END END_KV_SERIALIZE_MAP() @@ -712,7 +723,7 @@ namespace wallet_public KV_SERIALIZE(comment) DOC_DSCR("Text comment that is displayed in UI") DOC_EXMP_AUTO("Thanks for the coffe") DOC_END KV_SERIALIZE(push_payer) DOC_DSCR("Reveal information about sender of this transaction, basically add sender address to transaction in encrypted way, so only receiver can see who sent transaction") DOC_EXMP(false) DOC_END KV_SERIALIZE(hide_receiver) DOC_DSCR("This add to transaction information about remote address(destination), might be needed when the wallet restored from seed phrase and fully resynched, if this option were true, then sender won't be able to see remote address for sent transactions anymore.") DOC_EXMP(true) DOC_END - KV_SERIALIZE(service_entries) DOC_DSCR("Service entries that might be used by different apps that works on top of Zano network, not part of consensus") DOC_EXMP_AUTO(1) DOC_END + KV_SERIALIZE(service_entries) DOC_DSCR("Service entries that might be used by different apps that works on top of Lethean network, not part of consensus") DOC_EXMP_AUTO(1) DOC_END KV_SERIALIZE(service_entries_permanent) DOC_DSCR("Point to wallet that service_entries should be placed to 'extra' section of transaction(which won't be pruned after checkpoints)") DOC_EXMP_AUTO(1) DOC_END END_KV_SERIALIZE_MAP() }; diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index 82b11dfb..f9fabdbd 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -1,8 +1,19 @@ -// Copyright (c) 2014-2024 Zano Project +// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include "include_base_utils.h" diff --git a/src/wallet/wallet_rpc_server.h b/src/wallet/wallet_rpc_server.h index 2bc4edb8..ca9c9fb9 100644 --- a/src/wallet/wallet_rpc_server.h +++ b/src/wallet/wallet_rpc_server.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once @@ -13,7 +24,7 @@ #include "wallet2.h" #include "common/command_line.h" -#define ZANO_ACCESS_TOKEN "Zano-Access-Token" +#define ZANO_ACCESS_TOKEN "Lethean-Access-Token" namespace tools { diff --git a/src/wallet/wallet_rpc_server_error_codes.h b/src/wallet/wallet_rpc_server_error_codes.h index 8ef2af3f..81ddece2 100644 --- a/src/wallet/wallet_rpc_server_error_codes.h +++ b/src/wallet/wallet_rpc_server_error_codes.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project -// Copyright (c) 2012-2013 The Cryptonote developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/wallets_manager.cpp b/src/wallet/wallets_manager.cpp index 72ccdf7d..163e601e 100644 --- a/src/wallet/wallets_manager.cpp +++ b/src/wallet/wallets_manager.cpp @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #include #include "wallets_manager.h" diff --git a/src/wallet/wallets_manager.h b/src/wallet/wallets_manager.h index 77e2cbc7..a728662c 100644 --- a/src/wallet/wallets_manager.h +++ b/src/wallet/wallets_manager.h @@ -1,8 +1,19 @@ // Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Boolberry developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/src/wallet/wrap_service.h b/src/wallet/wrap_service.h index cefbfe6f..3918045e 100644 --- a/src/wallet/wrap_service.h +++ b/src/wallet/wrap_service.h @@ -1,6 +1,19 @@ // Copyright (c) 2014-2018 Zano Project -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// Copyright (c) 2014-2018 The Louisdor Project +// Copyright (c) 2012-2013 The Boolberry developers +// Copyright (c) 2017-2025 Lethean (https://lt.hn) +// +// Licensed under the European Union Public Licence (EUPL) version 1.2. +// You may obtain a copy of the licence at: +// +// https://joinup.ec.europa.eu/software/page/eupl/licence-eupl +// +// The EUPL is a copyleft licence that is compatible with the MIT/X11 +// licence used by the original projects; the MIT terms are therefore +// considered “grandfathered” under the EUPL for this code. +// +// SPDX‑License‑Identifier: EUPL-1.2 +// #pragma once diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index fb38a979..812dca5d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -28,12 +28,12 @@ add_executable(net_load_tests_srv net_load_tests/srv.cpp) add_dependencies(coretests version) -target_link_libraries(coretests rpc wallet currency_core common crypto zlibstatic ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) -target_link_libraries(functional_tests rpc wallet currency_core crypto common zlibstatic ethash libminiupnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) +target_link_libraries(coretests rpc wallet currency_core common crypto ZLIB::ZLIB ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) +target_link_libraries(functional_tests rpc wallet currency_core crypto common ZLIB::ZLIB ethash miniupnpc::miniupnpc ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) target_link_libraries(hash-tests crypto ethash) target_link_libraries(hash-target-tests crypto currency_core ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) -target_link_libraries(performance_tests wallet rpc currency_core common crypto zlibstatic ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) -target_link_libraries(unit_tests wallet currency_core common crypto gtest_main zlibstatic ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) +target_link_libraries(performance_tests wallet rpc currency_core common crypto ZLIB::ZLIB ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) +target_link_libraries(unit_tests wallet currency_core common crypto gtest_main ZLIB::ZLIB ethash ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto) target_link_libraries(net_load_tests_clt currency_core common crypto gtest_main ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) target_link_libraries(net_load_tests_srv currency_core common crypto gtest_main ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) diff --git a/tests/db_tests/CMakeLists.txt b/tests/db_tests/CMakeLists.txt index 50d0e9df..4203961e 100644 --- a/tests/db_tests/CMakeLists.txt +++ b/tests/db_tests/CMakeLists.txt @@ -1,3 +1,3 @@ add_executable(db_tests db_tests.cpp) -target_link_libraries(db_tests crypto common lmdb zlibstatic ${Boost_LIBRARIES}) +target_link_libraries(db_tests crypto common lmdb ZLIB::ZLIB ${Boost_LIBRARIES}) diff --git a/utils/boost_1.70_gcc_8.patch b/utils/boost_1.70_gcc_8.patch deleted file mode 100644 index 812eed14..00000000 --- a/utils/boost_1.70_gcc_8.patch +++ /dev/null @@ -1,15 +0,0 @@ -# This patch fixes compilation issue in Boost 1.70-1.71 while it is being compiled by GCC ver >= 8.3 -# -- sowle -# see also: https://github.com/boostorg/thread/pull/297 -# ---- boost/thread/pthread/thread_data.hpp.orig 2023-10-10 20:22:30.860192033 +0000 -+++ boost/thread/pthread/thread_data.hpp 2023-10-10 18:19:22.460764089 +0000 -@@ -57,7 +57,7 @@ - #else - std::size_t page_size = ::sysconf( _SC_PAGESIZE); - #endif --#if PTHREAD_STACK_MIN > 0 -+#ifdef PTHREAD_STACK_MIN - if (size ") - exit(1) - -msg = EmailMessage() -msg['Subject'] = sys.argv[1] -msg['From'] = zs_from -msg['To'] = sys.argv[2] -msg.add_header('Content-Type','text/html') -msg.set_payload(sys.argv[3]) - -s = smtplib.SMTP(zs_addr, zs_port) -s.starttls() -s.login(zs_user, zs_pass) -s.send_message(msg) -s.quit() - -print("e-mail sent.") diff --git a/utils/build_script_linux.sh b/utils/build_script_linux.sh deleted file mode 100755 index 96bf6ea0..00000000 --- a/utils/build_script_linux.sh +++ /dev/null @@ -1,147 +0,0 @@ -#!/bin/bash -x - -# Environment prerequisites: -# 1) QT_PREFIX_PATH should be set to Qt libs folder -# 2) BOOST_ROOT should be set to the root of Boost -# 3) OPENSSL_ROOT_DIR should be set to the root of OpenSSL -# -# for example, place these lines to the end of your ~/.bashrc : -# -# export BOOST_ROOT=/home/user/boost_1_66_0 -# export QT_PREFIX_PATH=/home/user/Qt5.10.1/5.10.1/gcc_64 -# export OPENSSL_ROOT_DIR=/home/user/openssl - -ARCHIVE_NAME_PREFIX=zano-linux-x64- - -: "${BOOST_ROOT:?BOOST_ROOT should be set to the root of Boost, ex.: /home/user/boost_1_66_0}" -: "${QT_PREFIX_PATH:?QT_PREFIX_PATH should be set to Qt libs folder, ex.: /home/user/Qt5.10.1/5.10.1/gcc_64}" -: "${OPENSSL_ROOT_DIR:?OPENSSL_ROOT_DIR should be set to OpenSSL root folder, ex.: /home/user/openssl}" - -if [ -n "$build_prefix" ]; then - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}${build_prefix}- - build_prefix_label="$build_prefix " -fi - -if [ "$testnet" == true ]; then - testnet_def="-D TESTNET=TRUE" - testnet_label="testnet " - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}testnet- -fi - -if [ "$testnet" == true ] || [ -n "$qt_dev_tools" ]; then - copy_qt_dev_tools=true - copy_qt_dev_tools_label="devtools " - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}devtools- -fi - - -prj_root=$(pwd) - -echo "---------------- BUILDING PROJECT ----------------" -echo "--------------------------------------------------" - -echo "Building...." - -rm -rf build; mkdir -p build/release; cd build/release; -cmake $testnet_def -D STATIC=true -D ARCH=x86-64 -D BUILD_GUI=TRUE -D OPENSSL_ROOT_DIR="$OPENSSL_ROOT_DIR" -D CMAKE_PREFIX_PATH="$QT_PREFIX_PATH" -D CMAKE_BUILD_TYPE=Release ../.. -if [ $? -ne 0 ]; then - echo "Failed to run cmake" - exit 1 -fi - -make -j2 daemon simplewallet connectivity_tool -if [ $? -ne 0 ]; then - echo "Failed to make!" - exit 1 -fi - -make -j1 Zano -if [ $? -ne 0 ]; then - echo "Failed to make!" - exit 1 -fi - - -read version_str <<< $(./src/zanod --version | awk '/^Zano/ { print $2 }') -version_str=${version_str} -echo $version_str - -rm -rf Zano; -mkdir -p Zano; - -rsync -a ../../src/gui/qt-daemon/layout/html ./Zano --exclude less --exclude package.json --exclude gulpfile.js -cp -Rv ../../utils/Zano.sh ./Zano -chmod 777 ./Zano/Zano.sh -mkdir ./Zano/lib -cp $QT_PREFIX_PATH/lib/libicudata.so.56 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libicui18n.so.56 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libicuuc.so.56 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Core.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5DBus.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Gui.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Network.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5OpenGL.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Positioning.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5PrintSupport.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Qml.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Quick.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Sensors.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Sql.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5Widgets.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5WebEngine.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5WebEngineCore.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5WebEngineWidgets.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5WebChannel.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5XcbQpa.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/lib/libQt5QuickWidgets.so.5 ./Zano/lib -cp $QT_PREFIX_PATH/libexec/QtWebEngineProcess ./Zano -cp $QT_PREFIX_PATH/resources/qtwebengine_resources.pak ./Zano -cp $QT_PREFIX_PATH/resources/qtwebengine_resources_100p.pak ./Zano -cp $QT_PREFIX_PATH/resources/qtwebengine_resources_200p.pak ./Zano -cp $QT_PREFIX_PATH/resources/icudtl.dat ./Zano - -if [ "$copy_qt_dev_tools" = true ] ; then - cp $QT_PREFIX_PATH/resources/qtwebengine_devtools_resources.pak ./Zano -fi - -mkdir ./Zano/lib/platforms -cp $QT_PREFIX_PATH/plugins/platforms/libqxcb.so ./Zano/lib/platforms -mkdir ./Zano/xcbglintegrations -cp $QT_PREFIX_PATH/plugins/xcbglintegrations/libqxcb-glx-integration.so ./Zano/xcbglintegrations - -cp -Rv src/zanod src/Zano src/simplewallet src/connectivity_tool ./Zano - -package_filename=${ARCHIVE_NAME_PREFIX}${version_str}.tar.bz2 - -rm -f ./$package_filename -tar -cjvf $package_filename Zano -if [ $? -ne 0 ]; then - echo "Failed to pack" - exit 1 -fi - -echo "Build success" - -if [ -z "$upload_build" ]; then - exit 0 -fi - -echo "Uploading..." - -scp $package_filename zano_build_server:/var/www/html/builds -if [ $? -ne 0 ]; then - echo "Failed to upload to remote server" - exit $? -fi - -read checksum <<< $(sha256sum $package_filename | awk '/^/ { print $1 }' ) - -mail_msg="New ${build_prefix_label}${testnet_label}${copy_qt_dev_tools_label}build for linux-x64:
-
https://build.zano.org/builds/$package_filename
-sha256: $checksum" - -echo "$mail_msg" - -python3 ../../utils/build_mail.py "Zano linux-x64 ${build_prefix_label}${testnet_label}${copy_qt_dev_tools_label}build $version_str" "${emails}" "$mail_msg" - -exit 0 diff --git a/utils/build_script_linux_appimage.sh b/utils/build_script_linux_appimage.sh deleted file mode 100755 index 21ffc53e..00000000 --- a/utils/build_script_linux_appimage.sh +++ /dev/null @@ -1,159 +0,0 @@ -#!/bin/bash -x - -# Environment prerequisites: -# 1) QT_PREFIX_PATH should be set to Qt libs folder -# 2) BOOST_ROOT should be set to the root of Boost -# 3) OPENSSL_ROOT_DIR should be set to the root of OpenSSL -# -# for example, place these lines to the end of your ~/.bashrc : -# -# export BOOST_ROOT=/home/user/boost_1_66_0 -# export QT_PREFIX_PATH=/home/user/Qt5.10.1/5.10.1/gcc_64 -# export OPENSSL_ROOT_DIR=/home/user/openssl -# export LINUX_DEPLOY_QT=/home/user/QtDeployment.appimage -# export LINUX_APPIMAGE_TOOL=/home/user/AppImageTool.appimage - - -ARCHIVE_NAME_PREFIX=zano-linux-x64- - -: "${BOOST_ROOT:?BOOST_ROOT should be set to the root of Boost, ex.: /home/user/boost_1_66_0}" -: "${QT_PREFIX_PATH:?QT_PREFIX_PATH should be set to Qt libs folder, ex.: /home/user/Qt5.10.1/5.10.1/gcc_64}" -: "${OPENSSL_ROOT_DIR:?OPENSSL_ROOT_DIR should be set to OpenSSL root folder, ex.: /home/user/openssl}" - -if [ -n "$build_prefix" ]; then - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}${build_prefix}- - build_prefix_label="$build_prefix " -fi - -if [ "$testnet" == true ]; then - testnet_def="-D TESTNET=TRUE" - testnet_label="testnet " - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}testnet- -fi - -if [ "$testnet" == true ] || [ -n "$qt_dev_tools" ]; then - copy_qt_dev_tools=true - copy_qt_dev_tools_label="devtools " - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}devtools- -fi - - -prj_root=$(pwd) - -if [ "$1" == "skip_build" ]; then - echo "Skipping build, only packing..." - cd build/release; -else -echo "---------------- BUILDING PROJECT ----------------" -echo "--------------------------------------------------" - -echo "Building...." - -rm -rf build; mkdir -p build/release; -cd build/release; -cmake $testnet_def -D STATIC=true -D ARCH=x86-64 -D DISABLE_TOR=TRUE -D BUILD_GUI=TRUE -D OPENSSL_ROOT_DIR="$OPENSSL_ROOT_DIR" -D CMAKE_PREFIX_PATH="$QT_PREFIX_PATH" -D CMAKE_BUILD_TYPE=Release ../.. -if [ $? -ne 0 ]; then - echo "Failed to run cmake" - exit 1 -fi - -make -j2 daemon simplewallet connectivity_tool -if [ $? -ne 0 ]; then - echo "Failed to make!" - exit 1 -fi - -make -j1 Zano -if [ $? -ne 0 ]; then - echo "Failed to make!" - exit 1 -fi - -fi - - - -read version_str <<< $(./src/zanod --version | awk '/^Zano/ { print $2 }') -version_str=${version_str} - -read commit_str <<< $(./src/zanod --version | grep -m 1 -P -o "(?<=\[)[0-9a-f]{7}") -commit_str=${commit_str} - -echo $version_str -echo $commit_str - - -rm -rf Zano; -mkdir -p Zano/usr/bin; -mkdir -p Zano/usr/lib; -mkdir -p Zano/usr/share/applications; -mkdir -p Zano/usr/share/icons/hicolor/scalable/apps; -mkdir -p Zano/usr/share/icons/hicolor/256x256/apps; - - -rsync -a ../../src/gui/qt-daemon/layout/html ./Zano/usr/bin --exclude less --exclude package.json --exclude gulpfile.js - -cp -Rv src/zanod src/Zano src/simplewallet src/connectivity_tool ./Zano/usr/bin -cp -Rv ../../utils/Zano.desktop ./Zano/usr/share/applications/Zano.desktop -cp -Rv ../../resources/app_icon.svg ./Zano/usr/share/icons/hicolor/scalable/apps/Zano.svg -cp -Rv ../../resources/app_icon_256.png ./Zano/usr/share/icons/hicolor/256x256/apps/Zano.png - - -echo "Exec=$prj_root/build/release/Zano/usr/bin/Zano" >> ./Zano/usr/share/applications/Zano.desktop -if [ $? -ne 0 ]; then - echo "Failed to append deskyop file" - exit 1 -fi - -$LINUX_DEPLOY_QT ./Zano/usr/share/applications/Zano.desktop -qmake=$QT_PREFIX_PATH/bin/qmake -if [ $? -ne 0 ]; then - echo "Failed to run linuxqtdeployment" - exit 1 -fi - -rm -f $prj_root/build/release/Zano/AppRun -cp -Rv ../../utils/Zano_appimage_wrapper.sh $prj_root/build/release/Zano/AppRun - -package_filename=${ARCHIVE_NAME_PREFIX}${version_str}.AppImage - -$LINUX_APPIMAGE_TOOL ./Zano ./$package_filename -if [ $? -ne 0 ]; then - echo "Failed to run appimagetool" - exit 1 -fi - - - - -#pattern="*.AppImage" -#files=( $pattern ) -#app_image_file=${files[0]} - - -#mv ./$app_image_file ./$package_filename - -echo "Build success" - -if [ -z "$upload_build" ]; then - exit 0 -fi - -echo "Uploading..." - -scp $package_filename zano_build_server:/var/www/html/builds -if [ $? -ne 0 ]; then - echo "Failed to upload to remote server" - exit $? -fi - -read checksum <<< $(sha256sum $package_filename | awk '/^/ { print $1 }' ) - -mail_msg="New ${build_prefix_label}${testnet_label}${copy_qt_dev_tools_label}build for linux-x64:
-https://build.zano.org/builds/$package_filename
-sha256: $checksum" - -echo "$mail_msg" - -python3 ../../utils/build_mail.py "Zano linux-x64 ${build_prefix_label}${testnet_label}${copy_qt_dev_tools_label}build $version_str" "${emails}" "$mail_msg" - -exit 0 diff --git a/utils/build_script_mac_osx.sh b/utils/build_script_mac_osx.sh deleted file mode 100755 index 79d74827..00000000 --- a/utils/build_script_mac_osx.sh +++ /dev/null @@ -1,197 +0,0 @@ -set -x # echo on -set +e # switch off exit on error -curr_path=${BASH_SOURCE%/*} - -# check that all the required environment vars are set -: "${ZANO_QT_PATH:?variable not set, see also macosx_build_config.command}" -: "${ZANO_BOOST_ROOT:?variable not set, see also macosx_build_config.command}" -: "${ZANO_BOOST_LIBS_PATH:?variable not set, see also macosx_build_config.command}" -: "${ZANO_BUILD_DIR:?variable not set, see also macosx_build_config.command}" -: "${CMAKE_OSX_SYSROOT:?CMAKE_OSX_SYSROOT should be set to macOS SDK path, e.g.: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk}" -: "${OPENSSL_ROOT_DIR:?variable not set, see also macosx_build_config.command}" - -ARCHIVE_NAME_PREFIX=zano-macos-x64- - -if [ -n "$build_prefix" ]; then - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}${build_prefix}- - build_prefix_label="$build_prefix " -fi - -if [ "$testnet" == true ]; then - testnet_def="-D TESTNET=TRUE" - testnet_label="testnet " - ARCHIVE_NAME_PREFIX=${ARCHIVE_NAME_PREFIX}testnet- -fi - -######### DEBUG ########## -#cd "$ZANO_BUILD_DIR/release/src" -#rm *.dmg -#if false; then -##### end of DEBUG ###### - -rm -rf $ZANO_BUILD_DIR; mkdir -p "$ZANO_BUILD_DIR/release"; cd "$ZANO_BUILD_DIR/release" - -cmake $testnet_def -D OPENSSL_ROOT_DIR=$OPENSSL_ROOT_DIR -D CMAKE_OSX_SYSROOT=$CMAKE_OSX_SYSROOT -D BUILD_GUI=TRUE -D CMAKE_PREFIX_PATH="$ZANO_QT_PATH/clang_64" -D CMAKE_BUILD_TYPE=Release -D BOOST_ROOT="$ZANO_BOOST_ROOT" -D BOOST_LIBRARYDIR="$ZANO_BOOST_LIBS_PATH" ../.. -if [ $? -ne 0 ]; then - echo "Failed to cmake" - exit 1 -fi - - - -make -j Zano -if [ $? -ne 0 ]; then - echo "Failed to make Zano" - exit 1 -fi - -make -j connectivity_tool daemon simplewallet -if [ $? -ne 0 ]; then - echo "Failed to make binaries!" - exit 1 -fi - - -cd src/ -if [ $? -ne 0 ]; then - echo "Failed to cd src" - exit 1 -fi - -# copy all necessary libs into the bundle in order to workaround El Capitan's SIP restrictions -mkdir -p Zano.app/Contents/Frameworks/boost_libs -cp -R $ZANO_BOOST_LIBS_PATH/*.dylib Zano.app/Contents/Frameworks/boost_libs/ -if [ $? -ne 0 ]; then - echo "Failed to cp workaround to MacOS" - exit 1 -fi - -# rename process name to big letter -mv Zano.app/Contents/MacOS/zano Zano.app/Contents/MacOS/Zano -if [ $? -ne 0 ]; then - echo "Failed to rename process" - exit 1 -fi - -cp zanod simplewallet Zano.app/Contents/MacOS/ -if [ $? -ne 0 ]; then - echo "Failed to copy binaries to Zano.app folder" - exit 1 -fi - -# fix boost libs paths in main executable and libs to workaround El Capitan's SIP restrictions -source ../../../utils/macosx_fix_boost_libs_path.sh -fix_boost_libs_in_binary @executable_path/../Frameworks/boost_libs Zano.app/Contents/MacOS/Zano -fix_boost_libs_in_binary @executable_path/../Frameworks/boost_libs Zano.app/Contents/MacOS/simplewallet -fix_boost_libs_in_binary @executable_path/../Frameworks/boost_libs Zano.app/Contents/MacOS/zanod -#fix_boost_libs_in_libs @executable_path/../Frameworks/boost_libs Zano.app/Contents/Frameworks/boost_libs - - -"$ZANO_QT_PATH/clang_64/bin/macdeployqt" Zano.app -if [ $? -ne 0 ]; then - echo "Failed to macdeployqt Zano.app" - exit 1 -fi - - -rm -rf Zano.app/Contents/Frameworks/libboost*.dylib - - -rsync -a ../../../src/gui/qt-daemon/layout/html Zano.app/Contents/MacOS --exclude less --exclude package.json --exclude gulpfile.js -if [ $? -ne 0 ]; then - echo "Failed to cp html to MacOS" - exit 1 -fi - -cp ../../../src/gui/qt-daemon/app.icns Zano.app/Contents/Resources -if [ $? -ne 0 ]; then - echo "Failed to cp app.icns to resources" - exit 1 -fi - -codesign -s "Developer ID Application: Zano Limited" --timestamp --options runtime -f --entitlements ../../../utils/macos_entitlements.plist --deep ./Zano.app -if [ $? -ne 0 ]; then - echo "Failed to sign Zano.app" - exit 1 -fi - - -read version_str <<< $(DYLD_LIBRARY_PATH=$ZANO_BOOST_LIBS_PATH ./connectivity_tool --version | awk '/^Zano/ { print $2 }') -version_str=${version_str} -echo $version_str - - -echo "############### Prepearing archive... ################" -mkdir package_folder -if [ $? -ne 0 ]; then - echo "Failed to zip app" - exit 1 -fi - -mv Zano.app package_folder -if [ $? -ne 0 ]; then - echo "Failed to top app package" - exit 1 -fi - -#fi - -package_filename=${ARCHIVE_NAME_PREFIX}${version_str}.dmg - -source ../../../utils/macosx_dmg_builder.sh -build_fancy_dmg package_folder $package_filename -if [ $? -ne 0 ]; then - echo "Failed to create fancy dmg" - exit 1 -fi - -echo "Build success" - -echo "############### Uploading... ################" - -package_filepath="$(pwd)/$package_filename" - -#scp $package_filepath zano_build_server:/var/www/html/builds/ -source ../../../utils/macosx_build_uploader.sh -pushd . -upload_build $package_filepath -if [ $? -ne 0 ]; then - echo "Failed to upload to remote server" - exit 1 -fi -popd - - -read checksum <<< $( shasum -a 256 $package_filepath | awk '/^/ { print $1 }' ) - -mail_msg="New ${build_prefix_label}${testnet_label}build for macOS-x64:
-https://build.zano.org/builds/$package_filename
-sha256: $checksum" - -echo "$mail_msg" - -python3 ../../../utils/build_mail.py "Zano macOS-x64 ${build_prefix_label}${testnet_label}build $version_str" "${emails}" "$mail_msg" - -###################### -# notarization -###################### - -cd package_folder - -echo "Notarizing..." - -# creating archive for notarizing -echo "Creating archive for notarizing" -rm -f Zano.zip -/usr/bin/ditto -c -k --keepParent ./Zano.app ./Zano.zip - -tmpfile="tmptmptmp" -#xcrun altool --notarize-app --primary-bundle-id "org.zano.desktop" -u "andrey@zano.org" -p "@keychain:Developer-altool" --file ./Zano.zip > $tmpfile 2>&1 -xcrun notarytool submit --wait --keychain-profile "notarytool-password" ./Zano.zip -RETURN=$? -if [ $RETURN -ne 0 ]; then - echo "Failed to submit for notarization or notarization failed, error code $RETURN" - exit 1 -fi - -echo "Notarization done" diff --git a/utils/build_script_windows.bat b/utils/build_script_windows.bat deleted file mode 100644 index fcd8fe53..00000000 --- a/utils/build_script_windows.bat +++ /dev/null @@ -1,236 +0,0 @@ -call configure_local_paths.cmd - -;; MSVC version-specific paths -SET QT_MSVC_PATH=%QT_PREFIX_PATH%\msvc2017_64 - -SET ACHIVE_NAME_PREFIX=zano-win-x64- -SET MY_PATH=%~dp0 -SET SOURCES_PATH=%MY_PATH:~0,-7% - -IF NOT [%build_prefix%] == [] ( - SET ACHIVE_NAME_PREFIX=%ACHIVE_NAME_PREFIX%%build_prefix%- -) - -IF "%testnet%" == "true" ( - SET TESTNET_DEF=-D TESTNET=TRUE - SET TESTNET_LABEL=testnet - SET ACHIVE_NAME_PREFIX=%ACHIVE_NAME_PREFIX%testnet- -) - -SET PARAM=%~1 -IF "%PARAM%"=="--skip-build" ( GOTO skip_build ) - -@echo on - -set BOOST_ROOT=%LOCAL_BOOST_PATH% -set BOOST_LIBRARYDIR=%LOCAL_BOOST_LIB_PATH% - - - -@echo "---------------- PREPARING BINARIES ---------------------------" -@echo "---------------------------------------------------------------" - - - -cd %SOURCES_PATH% - -@echo "---------------- BUILDING APPLICATIONS ------------------------" -@echo "---------------------------------------------------------------" - - - - -rmdir build /s /q -mkdir build -cd build - -cmake %TESTNET_DEF% -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_MSVC_PATH%" -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-14.2" -G "Visual Studio 16 2019" -A x64 -T host=x64 .. -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - -call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" x86_amd64 -echo on -cd %SOURCES_PATH%\build - -msbuild version.vcxproj /p:SubSystem="CONSOLE,5.02" /p:Configuration=Release /t:Build -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - -msbuild src/daemon.vcxproj /p:SubSystem="CONSOLE,5.02" /p:Configuration=Release /t:Build -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - -msbuild src/simplewallet.vcxproj /p:SubSystem="CONSOLE,5.02" /p:Configuration=Release /t:Build -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - -msbuild src/Zano.vcxproj /p:SubSystem="WINDOWS,5.02" /p:Configuration=Release /t:Build - -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - - -@echo on -echo "sources are built successfully" - - - - -:skip_build -cd %SOURCES_PATH%/build - -set cmd=src\Release\simplewallet.exe --version -FOR /F "tokens=3" %%a IN ('%cmd%') DO set version=%%a -set version=%version:~0,-2% -echo '%version%' - -set build_zip_filename=%ACHIVE_NAME_PREFIX%%version%.zip -set build_zip_path=%BUILDS_PATH%\builds\%build_zip_filename% - -del /F /Q %build_zip_path% - -cd src\release - -call :sign_file Zano.exe || goto error -call :sign_file zanod.exe || goto error -call :sign_file simplewallet.exe || goto error - -@echo on - - -mkdir bunch - -copy /Y Zano.exe bunch -copy /Y zanod.exe bunch -copy /Y simplewallet.exe bunch -copy /Y *.pdb bunch - -%QT_MSVC_PATH%\bin\windeployqt.exe bunch\Zano.exe || goto error - -cd bunch - -zip -r %build_zip_path% *.* -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - - -@echo "Add html" - -cd %SOURCES_PATH%\src\gui\qt-daemon\layout -zip -x html/package.json html/gulpfile.js html/less/* -r %build_zip_path% html -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - - -@echo "Add runtime stuff" - - -cd %ETC_BINARIES_PATH% -zip -r %build_zip_path% *.* -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - - -cd %SOURCES_PATH%\build -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - - -@echo "---------------------------------------------------------------" -@echo "-------------------Building installer--------------------------" -@echo "---------------------------------------------------------------" - -mkdir installer_src - - -unzip -o %build_zip_path% -d installer_src -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - - -"%INNOSETUP_PATH%" /dBinariesPath=../build/installer_src /DMyAppVersion=%version% /o%BUILDS_PATH%\builds\ /f%ACHIVE_NAME_PREFIX%%version%-installer ..\utils\setup_64.iss -IF %ERRORLEVEL% NEQ 0 ( - goto error -) - - -@echo "---------------------------------------------------------------" -@echo "---------------------------------------------------------------" - -set installer_file=%ACHIVE_NAME_PREFIX%%version%-installer.exe -set installer_path=%BUILDS_PATH%\builds\%installer_file% - -@echo " SIGNING the installer ...." - -call :sign_file %installer_path% || goto error - -@echo " UPLOADING TO SERVER ...." - -pscp -load zano_build_server %installer_path% %ZANO_BUILDS_HOST%:/var/www/html/builds -IF %ERRORLEVEL% NEQ 0 ( - @echo "FAILED TO UPLOAD EXE TO SERVER" - goto error -) -call :sha256 %installer_path% installer_checksum - -pscp -load zano_build_server %build_zip_path% %ZANO_BUILDS_HOST%:/var/www/html/builds -IF %ERRORLEVEL% NEQ 0 ( - @echo "FAILED TO UPLOAD ZIP TO SERVER" - goto error -) -call :sha256 %build_zip_path% build_zip_checksum - -set mail_msg="New %build_prefix% %TESTNET_LABEL%build for win-x64:
INST: https://build.zano.org/builds/%installer_file%
sha256: %installer_checksum%

ZIP: https://build.zano.org/builds/%build_zip_filename%
sha256: %build_zip_checksum%
" - -echo %mail_msg% - -python ../utils/build_mail.py "Zano win-x64 %build_prefix% %TESTNET_LABEL%build %version%" "%emails%" %mail_msg% - -goto success - -:error -echo "BUILD FAILED" -exit /B %ERRORLEVEL% - -:success -echo "BUILD SUCCESS" - -cd .. - -EXIT /B %ERRORLEVEL% - - -:: functions - -:sha256 -@setlocal enabledelayedexpansion -@set /a count=1 -@for /f "skip=1 delims=:" %%a in ('CertUtil -hashfile %1 SHA256') do @( - @if !count! equ 1 set "hash=%%a" - @set /a count+=1 -) -@( - @endlocal - @set "%2=%hash: =% -) -@exit /B 0 - - -:sign_file -@echo Signing %1... -@call %ZANO_SIGN_CMD% %1 -@if %ERRORLEVEL% neq 0 ( - @echo ERROR: failed to sign %1 - @exit /B 1 -) -@exit /B 0 diff --git a/utils/configure_local_paths.cmd.example b/utils/configure_local_paths.cmd.example deleted file mode 100644 index 65c5e891..00000000 --- a/utils/configure_local_paths.cmd.example +++ /dev/null @@ -1,13 +0,0 @@ -@echo off -rem -rem This file contains local path settings for your own personal dev environment. -rem Rename to configure_local_paths.cmd and do not commit. -rem - -set QT_PREFIX_PATH=C:\dev\_sdk\Qt5.11.2\5.11.2 -set INNOSETUP_PATH=C:\Program Files (x86)\Inno Setup 5\ISCC.exe -set ETC_BINARIES_PATH=C:\dev\deploy\etc-binaries -set BUILDS_PATH=C:\dev\deploy\zano -set LOCAL_BOOST_PATH=C:\dev\_sdk\boost_1_70_0 -set OPENSSL_ROOT_DIR=C:\dev\_sdk\OpenSSL-Win64 -set BOOST_ROOT=%LOCAL_BOOST_PATH% diff --git a/utils/configure_local_paths_msvs2019.cmd b/utils/configure_local_paths_msvs2019.cmd deleted file mode 100644 index fa277065..00000000 --- a/utils/configure_local_paths_msvs2019.cmd +++ /dev/null @@ -1,9 +0,0 @@ -@echo off -rem -rem This file contains local path settings for your own personal dev environment. -rem Rename to configure_local_paths.cmd and do not commit. -rem - -set QT_PREFIX_PATH=C:\dev\_sdk\Qt5.15.2\5.15.2 -set BOOST_ROOT=C:\dev\_sdk\boost_1_77_0 -set OPENSSL_ROOT_DIR=C:\dev\_sdk\OpenSSL-Win64 diff --git a/utils/configure_macos_xcodeproj.sh b/utils/configure_macos_xcodeproj.sh deleted file mode 100755 index 394689d4..00000000 --- a/utils/configure_macos_xcodeproj.sh +++ /dev/null @@ -1,19 +0,0 @@ -set -x #echo on -curr_path=${BASH_SOURCE%/*} - -# check that all the required environment vars are set -: "${ZANO_QT_PATH:?variable not set, see also macosx_build_config.command}" -: "${ZANO_BOOST_ROOT:?variable not set, see also macosx_build_config.command}" -: "${ZANO_BOOST_LIBS_PATH:?variable not set, see also macosx_build_config.command}" -: "${ZANO_BUILD_DIR:?variable not set, see also macosx_build_config.command}" -: "${CMAKE_OSX_SYSROOT:?CMAKE_OSX_SYSROOT should be set to macOS SDK path, e.g.: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk}" - -BUILD_DIR=$curr_path/../$ZANO_BUILD_DIR/macos_xcodeproj -BUILD_TYPE=Release - -rm -rf $BUILD_DIR -mkdir -p "$BUILD_DIR/$BUILD_TYPE" -cd "$BUILD_DIR/$BUILD_TYPE" - -cmake -D BUILD_GUI=TRUE -D CMAKE_PREFIX_PATH="$ZANO_QT_PATH/clang_64" -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D BOOST_ROOT="$ZANO_BOOST_ROOT" -D BOOST_LIBRARYDIR="$ZANO_BOOST_LIBS_PATH" -G Xcode ../../.. - diff --git a/utils/configure_win32_msvs2015_gui.cmd b/utils/configure_win32_msvs2015_gui.cmd deleted file mode 100644 index f0a84e32..00000000 --- a/utils/configure_win32_msvs2015_gui.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths.cmd - -cd .. -@mkdir build_msvc2015_32 -cd build_msvc2015_32 - -cmake -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2015 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib32-msvc-14.0" -G "Visual Studio 14 2015" ".." diff --git a/utils/configure_win64_msvs2013_gui.cmd b/utils/configure_win64_msvs2013_gui.cmd deleted file mode 100644 index 3e8a8b82..00000000 --- a/utils/configure_win64_msvs2013_gui.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths.cmd - -cd .. -@mkdir build_msvc2013_64 -cd build_msvc2013_64 - -cmake -D BUILD_TESTS=TRUE -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2013_64 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-12.0" -G "Visual Studio 12 2013 Win64" ".." \ No newline at end of file diff --git a/utils/configure_win64_msvs2015_gui.cmd b/utils/configure_win64_msvs2015_gui.cmd deleted file mode 100644 index d365843e..00000000 --- a/utils/configure_win64_msvs2015_gui.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths.cmd - -cd .. -@mkdir build_msvc2015_64 -cd build_msvc2015_64 - -cmake -D USE_PCH=TRUE -D BUILD_TESTS=TRUE -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2015_64 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-14.0" -G "Visual Studio 14 2015 Win64" -T host=x64 ".." \ No newline at end of file diff --git a/utils/configure_win64_msvs2017_gui.cmd b/utils/configure_win64_msvs2017_gui.cmd deleted file mode 100644 index 7b887d75..00000000 --- a/utils/configure_win64_msvs2017_gui.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths.cmd - -cd .. -@mkdir build_msvc2017_64 -cd build_msvc2017_64 - -cmake -D USE_PCH=TRUE -D BUILD_TESTS=TRUE -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2017_64 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-14.1" -G "Visual Studio 15 2017 Win64" -T host=x64 ".." \ No newline at end of file diff --git a/utils/configure_win64_msvs2017_gui_testnet.cmd b/utils/configure_win64_msvs2017_gui_testnet.cmd deleted file mode 100644 index 61d34790..00000000 --- a/utils/configure_win64_msvs2017_gui_testnet.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths.cmd - -cd .. -@mkdir build_msvc2017_64_tn -cd build_msvc2017_64_tn - -cmake -D TESTNET=TRUE -D USE_PCH=TRUE -D BUILD_TESTS=TRUE -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2017_64 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-14.1" -G "Visual Studio 15 2017 Win64" -T host=x64 ".." \ No newline at end of file diff --git a/utils/configure_win64_msvs2019_gui_testnet.cmd b/utils/configure_win64_msvs2019_gui_testnet.cmd deleted file mode 100644 index afc14035..00000000 --- a/utils/configure_win64_msvs2019_gui_testnet.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths_msvs2019.cmd - -cd .. -@mkdir build_msvc2019_64_tn -cd build_msvc2019_64_tn - -cmake -D TESTNET=TRUE -D USE_PCH=TRUE -D BUILD_TESTS=TRUE -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2019_64 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-14.2" -G "Visual Studio 16 2019" -A x64 -T host=x64 ".." diff --git a/utils/configure_win64_msvs2022_gui.cmd b/utils/configure_win64_msvs2022_gui.cmd deleted file mode 100644 index b5dcbbf5..00000000 --- a/utils/configure_win64_msvs2022_gui.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths_msvs2022.cmd - -cd .. -@mkdir build_msvc2022_64 -cd build_msvc2022_64 - -cmake -D TESTNET=FALSE -D USE_PCH=TRUE -D BUILD_TESTS=TRUE -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2019_64 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-14.3" -G "Visual Studio 17 2022" -A x64 -T host=x64 ".." diff --git a/utils/configure_win64_msvs2022_gui_testnet.cmd b/utils/configure_win64_msvs2022_gui_testnet.cmd deleted file mode 100644 index f41547c3..00000000 --- a/utils/configure_win64_msvs2022_gui_testnet.cmd +++ /dev/null @@ -1,7 +0,0 @@ -call configure_local_paths_msvs2022.cmd - -cd .. -@mkdir build_msvc2022_64_tn -cd build_msvc2022_64_tn - -cmake -D TESTNET=TRUE -D USE_PCH=TRUE -D BUILD_TESTS=TRUE -D OPENSSL_ROOT_DIR="%OPENSSL_ROOT_DIR%" -D CMAKE_PREFIX_PATH="%QT_PREFIX_PATH%"\msvc2019_64 -D BUILD_GUI=TRUE -D STATIC=FALSE -DBOOST_ROOT="%BOOST_ROOT%" -DBOOST_LIBRARYDIR="%BOOST_ROOT%\lib64-msvc-14.3" -G "Visual Studio 17 2022" -A x64 -T host=x64 ".." diff --git a/utils/docker/containers/README.md b/utils/docker/containers/README.md new file mode 100644 index 00000000..f50dbf2b --- /dev/null +++ b/utils/docker/containers/README.md @@ -0,0 +1,5 @@ +# Standard Docker Deployments + +You can define a multitude of configurations in code using Docker Compose. Each folder in this directory represents a specific use case with a corresponding reference configuration. + +Instead of writing your own Dockerfile, we recommend that you tailor the stack for your needs by editing one of the existing configurations. If you believe your changes will be useful to others, please submit a patch to improve the reference Dockerfiles. \ No newline at end of file diff --git a/utils/docker/images/lthn-chain/Dockerfile b/utils/docker/images/lthn-chain/Dockerfile new file mode 100644 index 00000000..f32c9603 --- /dev/null +++ b/utils/docker/images/lthn-chain/Dockerfile @@ -0,0 +1,85 @@ +# use --target=builder to return a docker image able to compile the software, probbly used with -v .:/code +FROM ubuntu:24.04 AS builder +LABEL authors="snider" + +ARG THREADS=1 +ARG BUILD_BRANCH=dev +ARG BUILD_LOCAL=1 +ARG BUILD_REPO=https://github.com/letheanVPN/blockchain.git +ARG BUILD_TARGET=gcc-linux-x86_64 +ARG BUILD_FOLDER=build/release +ARG BUILD_TYPE=Release +ARG BUILD_TESTNET=1 +ARG USE_CUSTOM_PROFILE=0 + + +ENV CONAN_HOME=/root/sdk +# CONAN: disables the generation of color escape characters. +ENV NO_COLOR=1 +ENV BUILD_TARGET=${BUILD_TARGET} +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt update && apt -y upgrade + +RUN apt install -y build-essential pkgconf \ + curl ca-certificates bison autotools-dev checkinstall \ + g++ llvm clang lld cmake python-is-python3 \ + git python3 python3-pip python3-dev xz-utils gperf + +RUN pip3 install conan --break-system-packages + +WORKDIR / + +# Copy the build context. +COPY . /tmp/local-src +RUN if [ "$BUILD_LOCAL" = "1" ]; then \ + mv /tmp/local-src /code; \ + else \ + rm -rf /tmp/local-src; \ + git clone --recursive --branch ${BUILD_BRANCH} ${BUILD_REPO} code; \ + fi + +WORKDIR /code + +RUN conan profile detect --name=default --force + +#RUN conan install . --output-folder=${BUILD_FOLDER} --build=missing -s build_type=${BUILD_TYPE} -pr:h=/code/cmake/profiles/$BUILD_TARGET + +RUN set -eux; \ + BCMD="conan install . \ + --output-folder=${BUILD_FOLDER} \ + --build=missing \ + -s build_type=${BUILD_TYPE}"; \ + if [ "${USE_CUSTOM_PROFILE}" = "1" ]; then \ + BCMD="$BCMD -pr:h=/code/cmake/profiles/${BUILD_TARGET}"; \ + fi; \ + echo "Running: $BCMD"; \ + eval $BCMD; + +RUN cmake -S /code -B ${BUILD_FOLDER} -DCMAKE_TOOLCHAIN_FILE=${BUILD_FOLDER}/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DTESTNET=${BUILD_TESTNET} + +RUN cmake --build ${BUILD_FOLDER} --config=${BUILD_TYPE} --parallel=${THREADS} + +# minor cmd-fu; TESTNEt and MAINNET, in docker context, use MAIINNET binaries names. +# do i like removing `-testnet`, no, but i dislike working around multiple names for ever more, so... +RUN if [ "$BUILD_TESTNET" = "1" ]; then \ + cd ${BUILD_FOLDER}/src && \ + for f in lethean-testnet-*; do \ + ln -s "$f" "$(echo "$f" | sed 's/-testnet//')"; \ + done; \ + fi + +# use --target=build-cache to return just the cache files +FROM scratch AS build-cache +COPY --from=builder ${CONAN_HOME} / + +# use --target=build-artifacts to return the binaries +FROM scratch AS build-artifacts +COPY --from=builder /code/build/release/src/lethean-* / + +# use --target=chain-service to return a working chain node +FROM ubuntu:24.04 AS chain-service + +COPY --from=build-artifacts --chmod=+x / /bin + +RUN lethean-chain-node --help diff --git a/utils/gpg/zoidberg.asc b/utils/gpg/zoidberg.asc deleted file mode 100644 index 77dde383..00000000 --- a/utils/gpg/zoidberg.asc +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -0588HZ6Q -=Esla ------END PGP PUBLIC KEY BLOCK----- diff --git a/utils/macosx_build_config.command b/utils/macosx_build_config.command deleted file mode 100644 index 89cfe02b..00000000 --- a/utils/macosx_build_config.command +++ /dev/null @@ -1,12 +0,0 @@ -# -# This file contains local path settings for your own personal environment. -# To use in macosx add export entries to your ~/.bash_profile file -# - -set -x #echo on - -export ZANO_QT_PATH="/Users/roky/Qt5.6.0/5.6" -export ZANO_BOOST_ROOT="/Users/roky/boost_1_60_0" -export ZANO_BOOST_LIBS_PATH="$ZANO_BOOST_ROOT/stage/lib" -export ZANO_BUILD_DIR="build_mac_osx_64" -export OPENSSL_ROOT_DIR="/usr/local/opt/openssl" diff --git a/utils/macosx_build_uploader.sh b/utils/macosx_build_uploader.sh deleted file mode 100644 index 45813204..00000000 --- a/utils/macosx_build_uploader.sh +++ /dev/null @@ -1,51 +0,0 @@ -set +e -curr_path=${BASH_SOURCE%/*} - -function upload_build() # $1 - path to the file to be uploaded -{ - if [ -z "$1" ] - then - echo "ERROR: upload_build is called with no or invalid parameters" - return 1 - fi - - # check if the directory contains files - #if [ -n "$(ls -A "$ZANO_BLD_UPL_DIR" 2>/dev/null)" ] - #then - # echo "ERROR: uploading folder contains files" - # return 1 - #fi - - cd "$ZANO_BLD_UPL_DIR" || return 2 - rm -rf ./* || return 3 - #popd || return 4 - - touch WAIT || return 5 - cp $1 . || return 6 - rm WAIT || return 7 - - counter=0 - while [ ! -f DONE ] - do - if [ "$counter" -ge 500 ] - then - echo "ERROR: uploading is taking longer than expected" - touch STOP - return 8 - fi - sleep 2 - echo "waiting..." - counter=$((counter + 1)) - done - - rc=$( " - echo " -- fixes lib paths in binary and libs to relative-to-binary paths, using given lib dir as final lib folder" - exit 1 -fi - -path_to_lib=$1 -path_to_binary=$2 -rel_bin_to_lib=$(rel_path $path_to_lib $path_to_binary) -fix_boost_libs_in_binary @executable_path/$rel_bin_to_lib $path_to_binary -fix_boost_libs_in_libs @executable_path/$rel_bin_to_lib $path_to_lib - -exit 0 diff --git a/utils/macosx_fixup.sh b/utils/macosx_fixup.sh deleted file mode 100644 index 74094166..00000000 --- a/utils/macosx_fixup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#/bin/sh - -INSTALL_DIR=$1 - -function fixup() { - echo $3": "$1" -> "$2 - install_name_tool -change $1 $2 $3 -} - -fixup_lib() { - FROM="\"/opt/local/lib/"$1"\"" - TO="\"@executable_path/lib/"$1"\"" - fixup $FROM $TO $2 -} - -for BIN in $INSTALL_DIR/*; do - if [ ! -d "$BIN" ]; then - fixup_lib "libboost_system-mt.dylib" $BIN - fixup_lib "libboost_filesystem-mt.dylib" $BIN - fixup_lib "libboost_thread-mt.dylib" $BIN - fixup_lib "libboost_date_time-mt.dylib" $BIN - fixup_lib "libboost_chrono-mt.dylib" $BIN - fixup_lib "libboost_regex-mt.dylib" $BIN - fixup_lib "libboost_serialization-mt.dylib" $BIN - fixup_lib "libboost_atomic-mt.dylib" $BIN - fixup_lib "libboost_program_options-mt.dylib" $BIN - fi -done