1
0
Fork 0
forked from lthn/blockchain

Compare commits

..

2447 commits

Author SHA1 Message Date
Claude
c9ad4de9bb
ci: multi-platform Forgejo Actions pipeline
Build Linux x86_64 (snider-linux) and macOS ARM64 (M3 Ultra) natively
via self-hosted forgejo-runner, aggregate into single release.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 19:37:35 +00:00
Claude
22c0c5a251
ci: use Forgejo Conan registry instead of actions/cache
Pull pre-built dependencies from the Forgejo package registry
(conan_build remote) instead of caching the SDK locally. Removes
the 570MB actions/cache overhead since all packages are already
available as pre-compiled binaries on the registry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 15:06:47 +00:00
Claude
f3df50cba5
ci: prune old releases to keep only latest per branch
After uploading new release assets, delete older beta releases (dev)
or older stable releases (main) to conserve disk. Only the latest
build per branch is kept on the Forgejo instance; older builds are
available on mirrored free hosting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 15:03:13 +00:00
Claude
1545a80335
ci: add Forgejo Actions build & release workflow
Add .forgejo/workflows/build.yml that builds the Lethean blockchain
on push to dev/main with workflow_dispatch support. Builds testnet
on dev, mainnet on main, creates Forgejo releases with RPM/tar.xz/zip
packages and SHA256 checksums.

- CPU limited to 3 cores (~10% of 32-thread host) via Docker --cpus cap
- Private submodule auth via git credential store with RELEASE_TOKEN
- SDK caching with actions/cache for Conan build artifacts
- CMake installed via pip for preset version 8 support
- Tags fetched for libmdbx git describe version detection
- Fix missing contrib/randomx entry in .gitmodules

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 15:02:28 +00:00
Claude
467c64d015
feat: RandomX PoW, LWMA difficulty, stratum mining.* protocol, new genesis
Replace ProgPowZ with RandomX for ASIC-resistant proof-of-work. The
full dataset is initialized multi-threaded at startup with the key
"LetheanRandomXv1". Thread-local VMs are created on demand.

Switch difficulty algorithm from Zano's 720-block window to LWMA-1
(zawy12) with a 60-block window for much faster convergence after
hashrate changes. Target block time set to 10s for PoW.

Add standard stratum mining.* protocol handlers (subscribe, authorize,
submit, extranonce.subscribe) alongside existing EthProxy eth_*
handlers, with automatic protocol detection and mining.notify
translation for XMRig-based miners.

Generate fresh Lethean genesis block and premine wallet. Replace all
remaining hardcoded Zano addresses in tests with runtime-generated
keys to avoid prefix mismatches. Link RandomX library across all
build targets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 13:22:25 +00:00
Claude
7ee2265cae
fix: crypto test PRNG determinism, checkpoint hashes, and Zano address remnants
The crypto test PRNG was non-deterministic because setup_random() seeded
the state but grant_random_initialize_no_lock() overwrote it with
/dev/urandom on the first random call. Calling it before memset ensures
the initialized flag is set, preventing the overwrite.

Also adds --generate mode to crypto-tests for future vector regeneration,
updates checkpoint hashes for multisig_and_checkpoints (height 15) and
gen_no_attchments_in_coinbase (height 12), and replaces hardcoded Zano
addresses/URLs with Lethean equivalents in manual test scaffolding.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 13:17:11 +00:00
Claude
4120a9a664
Rebrand to SASE, restore cmake test fixture
- Update .core/build.yaml description: SASE infrastructure chain
- cmake/test-static-assert.c already committed separately

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 03:56:41 +00:00
Claude
5dae74347c
Restore project-specific cmake/test-static-assert.c
This file was wrongly extracted to the .core/build submodule during the
build system extraction. It's a project-specific compile test used by
CMakeLists.txt:185 and must remain in the project tree.

Verified: make configure && make build && make package all pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 03:27:11 +00:00
Claude
92e0aa779b
feat(build): add .core/build.yaml for core CLI integration
C++ build configuration for core CLI project detection and future
`core compile` command. Defines Conan dependencies, CMake settings,
cross-compilation targets, and packaging options.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 02:47:44 +00:00
Claude
7b0a08f9ff
Replace cmake/ with host-uk/build submodule at .core/build
Build system extracted to host-uk/build and wired in as a git
submodule following the core CLI convention (.core/<tool>/).

- CMake modules, cross-compilation profiles now from .core/build/cmake/
- Conan credentials read from environment instead of hardcoded
- Removed cmake/ directory (14 files) — all now in submodule
- Makefile, CMakeLists.txt, CMakePresets.json updated for new paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 01:57:40 +00:00
Snider
88d4357628
New API Interface (#27)
This pull request introduces a comprehensive new API interface for the blockchain, leveraging OpenAPI v3 to facilitate direct consumption of chain data by GUI and web applications. This change significantly refines the project's build infrastructure, incorporating Conan for dependency management and CMake for configuration, alongside the integration of an OpenAPI Generator to produce SDKs for multiple languages. 

### Highlights

* **New API Interface**: Introduced a new API interface using OpenAPI v3 to enable GUI/WEB development to consume chain data without needing custom server applications.
* **Build System Enhancements**: Significant updates to the build system, including Makefile, CMake, and Conan configurations, to streamline the build process and support new functionalities.
* **Multi-language SDK Generation**: Integrated OpenAPI Generator to automatically create SDKs for various programming languages, including Go, Angular, and PHP, simplifying client-side integration.
2025-10-19 19:12:37 +01:00
Snider
4a5c5ae742 Refactor build presets and Makefile targets
Updated CMakePresets.json to add 'testnet' and 'mainnet' workflows, removed unused Windows preset, and improved environment and cache variable handling. Makefile targets for testnet and mainnet workflows were added, and Conan-related targets were renamed for consistency. Added a function to reset ConanPresets.json in CleanBuild.cmake and fixed the path for GetConan.cmake in conan_provider.cmake. Deleted obsolete .idea/cmake.xml.
2025-10-09 03:10:46 +01:00
Snider
57983cb865 Since Clion is OSS now, adding more sharable ide project defaults. 2025-10-09 01:27:15 +01:00
Snider
ef776a93cc
Add CMake and Conan presets, update build config (#26)
* Add CMake and Conan presets, update build config

Introduces CMakePresets.json and ConanPresets.json for standardized build configuration. Updates Makefile to use CMake presets, modifies .gitignore for IDE files, and refines conanfile.py to support CI option and preset integration.

* Update Makefile

* Update _on-pr.yml

* Refactor build presets and folder layout for Windows

Updated Makefile and GitHub workflow to use configurable build and configure presets, improving flexibility for different environments. Adjusted CMakePresets.json to fix preset naming and version, and refactored conanfile.py to set build folders based on compiler type, ensuring correct folder structure for MSVC and other compilers.

* Update build presets and CPack config for Windows

Set PRESET_CONFIGURE to 'conan-default' for Windows builds in Makefile and GitHub workflow. Broaden CPack packaging conditions to include additional build types and comment out WIX generator settings for Windows in CPackConfig.cmake.
2025-10-09 00:25:29 +01:00
Snider
106b3431db Add JetBrains IDE config and update CMake setup
Added .idea configuration files for JetBrains IDE support and updated .gitignore to exclude only specific userland .idea files. Refactored CMakeLists.txt to improve include_directories usage, re-enable -fno-fat-lto-objects for GNU compilers. This improves IDE integration and build configuration clarity.
2025-10-08 20:22:51 +01:00
Snider
0882f94203 Update debug build paths in Makefile
Modified debug target to use absolute paths with $(CURDIR) for build directory and toolchain file. This improves reliability of file detection across environments and browsers.
2025-10-08 15:17:18 +01:00
Snider
1c584e7c76
Update CMakeLists.txt 2025-10-07 02:29:17 +01:00
Snider
79121dce71
Remove ccache from tool_requires 2025-10-07 02:28:22 +01:00
Snider
3dbb8b1487
Add 'secrets: inherit' to all build jobs 2025-10-07 02:24:12 +01:00
Snider
11d19e5446
Add caching and dependency installation steps for ARM, Intel, and mac… (#25) 2025-10-07 02:20:06 +01:00
Snider
e4ff164f0d
Build Simplification (#24) 2025-10-06 22:38:29 +01:00
Snider
dd7a19ac6f Lower min build version for hardforks 05 and 06
Updated ZANO_HARDFORK_05_MIN_BUILD_VER and ZANO_HARDFORK_06_MIN_BUILD_VER from 382 to 2 to allow compatibility with older builds.
2025-10-05 21:10:34 +01:00
Snider
eb60d4519c Revert "Use actual remote port for async connection"
This reverts commit 3e2bad36a6.
2025-10-05 20:44:13 +01:00
Snider
3e2bad36a6 Use actual remote port for async connection
Replaces usage of node_data.my_port with context.m_remote_port when establishing an async connection, ensuring the correct remote port is used for peer connections.
2025-10-05 20:03:58 +01:00
Snider
7f930b0fec Capture remote_ip by value in try_ping lambda
The lambda in try_ping now captures remote_ip by value instead of accessing context.m_remote_ip directly. This ensures the correct IP is used even if the context changes before the lambda executes.
2025-10-05 18:01:59 +01:00
Snider
c2c130a076
Add conditional check for alpha and beta versions
the tag + release deleting only happens for -alpha or -beta
2025-10-05 14:35:21 +01:00
Snider
d8d81c1f2e
Implement cleanup job for merged pull requests
Add cleanup job for closed pull requests that are merged.
2025-10-05 14:21:10 +01:00
Snider
c8acc964e3
Testnet updates (#22) 2025-10-05 14:00:36 +01:00
Snider
763d70bec2
Testnet 1 (#15) 2025-09-30 16:48:13 +01:00
llebubell
b02addf264
Centralised chain config (#4) 2025-09-25 16:38:18 +01:00
Snider
bf22a89733
Dev 12 documentation overhaul (#13)
Introduces a 'docs' submodule for project documentation and integrates MkDocs build steps via CMake and Makefile.
2025-09-25 16:04:33 +01:00
Snider
2f1011e27c
Final Build Foundations (#11) 2025-09-25 00:25:52 +01:00
Snider
7b0c286cef Update build workflows for macOS and Windows
Changed build commands and artifact directories in macOS and Windows GitHub Actions workflows to use new target names and paths. Removed 'connectivity_tool' from CLI artifacts.
2025-09-24 22:21:43 +01:00
Snider
b84b99287d Refactor build profiles and update CI workflows
Renamed and reorganized CMake build profiles for consistency, removing unused Android, iOS, and MinGW profiles. Updated GitHub Actions workflows and Makefile to use new profile names and increased build parallelism for faster builds.
2025-09-24 22:21:32 +01:00
Snider
a03d081287
Build Improvements (#10) 2025-09-24 21:01:35 +01:00
Snider
2eaa599066
GitHub Build Workflows (#7) 2025-08-30 17:46:00 +01:00
Snider
eafeb894f9
GitHub CLI Building (#5)
- Linux: https://github.com/letheanVPN/blockchain/actions/runs/17264025940
- MacOS-aarch64: https://github.com/letheanVPN/blockchain/actions/runs/17264025933
- MacOS-amd64: https://github.com/letheanVPN/blockchain/actions/runs/17264025928
- Windows: https://github.com/letheanVPN/blockchain/actions/runs/17265388073
2025-08-27 12:51:11 +01:00
sowle
db80165063
Merge branch 'release' 2025-08-15 15:53:44 +03:00
zano build machine
b9d85e1c09 === build number: 427 -> 428 === 2025-08-13 17:09:03 +03:00
sowle
5982abd525
Merge branch 'develop' into release 2025-08-13 17:02:57 +03:00
zano build machine
de5e0caebd === build number: 426 -> 427 === 2025-08-12 19:51:10 +03:00
sowle
91ced14b2d
ui update (PR 158) 2025-08-12 19:50:17 +03:00
zano build machine
d7d0ba0a41 === build number: 425 -> 426 === 2025-08-11 00:17:35 +03:00
sowle
c36355d489
Merge branch 'random_refactoring' into develop 2025-08-11 00:16:15 +03:00
sowle
11d4bbf1da
crypto: generate_system_random_bytes_* refactored: improved error handling, win32 version moved to BCrypt API, split into normal and _or_die funcs
Thanks to @gitToki for spotting the error handling issue!
2025-08-10 05:24:25 +03:00
sowle
15417edbce
Merge branch 'develop' into random_refactoring 2025-08-10 05:20:03 +03:00
sowle
b9b175c00f
ui update (PR 157) 2025-08-07 11:34:25 +03:00
cryptozoidberg
e3186aef40
Merge branch 'release' into develop 2025-08-01 13:52:15 +01:00
cryptozoidberg
feb5de6f20
Merge branch 'master' into release 2025-08-01 13:51:39 +01:00
cryptozoidberg
9aaa0f8cb8
XCode 16.4 fix 2025-08-01 13:51:11 +01:00
sowle
cc8ff1d5a3
minor fix (presumable, not worthy but anyway) 2025-08-01 04:26:08 +03:00
sowle
ff6cbe2548
Merge branch 'random_refactoring' into develop 2025-08-01 01:50:13 +03:00
sowle
3a9245f743
crypto::random refactoring and improvements (credits to @dimmarvel for spotting the thread safety issue) 2025-07-31 04:14:10 +03:00
crypto.sowle
8b57f3acab
priority_peers_list in p2p_manual_config.json updated (added missing backbone node) 2025-07-29 02:58:30 +03:00
sowle
96081db687
coretests: wallet_rpc_multiple_receivers -- work in progress 2025-07-26 02:26:08 +03:00
sowle
a93aefd507
ui update (PR 156) 2025-07-24 18:27:55 +03:00
sowle
4923f644c4
coretests: minor improvements for wallet_rpc_cold_signing 2025-07-24 18:18:44 +03:00
sowle
260228433c
=== build number: 424 -> 425 === 2025-07-24 18:07:42 +03:00
sowle
cbc7357fa7
Merge branch 'release' into develop 2025-07-24 18:06:27 +03:00
sowle
0c7d09d951
Merge remote-tracking branch 'origin/release' into release 2025-07-24 18:06:09 +03:00
sowle
d78911b344
Merge branch 'release' into develop
# Conflicts:
#	src/version.h.in
#	src/wallet/wallet_rpc_server.cpp
2025-07-24 18:04:36 +03:00
sowle
e10a711c36
Merge branch 'master' into release 2025-07-24 18:02:51 +03:00
sowle
6e6831c355
Merge branch 'release' 2025-07-24 17:39:58 +03:00
cryptozoidberg
8953e201d6
error handling improved in zlib 2025-07-24 17:56:31 +04:00
sowle
d9557d3bb1
clang compilation fix 2025-07-24 13:56:36 +03:00
sowle
334d26a4ac
=== build number: 423 -> 424 === 2025-07-24 05:38:14 +03:00
sowle
d6c6df78f4
Merge branch 'transfer_so' into release 2025-07-24 05:37:22 +03:00
sowle
035f233bc7
transfer_so implemented +minor code cleanup 2025-07-24 05:25:17 +03:00
sowle
cd16b5c743
=== build number: 422 -> 423 === 2025-07-23 19:21:02 +03:00
sowle
b57fa844ef
ui update (PR 154, 155) 2025-07-23 19:20:19 +03:00
sowle
4618c240f2
Merge branch 'release' into develop
# Conflicts:
#	src/version.h.in
#	src/wallet/wallet_rpc_server.cpp
2025-07-23 13:22:24 +03:00
sowle
3e71f078ca
gcc warnings fixed 2025-07-22 21:47:22 +03:00
sowle
7a463d8065
coretests adapted to temp changes 2025-07-22 21:34:04 +03:00
sowle
06573647b8
=== build number: 421 -> 422 === 2025-07-22 14:57:55 +03:00
sowle
06d6553473
tx_comment is temporary disabled 2025-07-22 14:57:02 +03:00
sowle
2c920287d3
=== build number: 420 -> 421 === 2025-07-22 05:10:00 +03:00
sowle
b0e00c0803
Merge branch 'ip_blacklisting' into release 2025-07-22 05:09:07 +03:00
cryptozoidberg
b0b30e20b2
sender/receiver disabled 2025-07-21 21:54:13 +04:00
sowle
1b8cfa0194
Merge branch 'release' into develop
# Conflicts:
#	src/version.h.in
2025-07-21 15:10:54 +03:00
sowle
0c48a01fbf
=== build number: 419 -> 420 === 2025-07-21 14:53:20 +03:00
sowle
60560ad18c
Merge branch 'ip_blacklisting' into release 2025-07-21 14:52:28 +03:00
cryptozoidberg
71cc7d1363
renamed field 2025-07-21 15:17:40 +04:00
cryptozoidberg
be3938a886
renamed to field 2025-07-21 15:17:12 +04:00
cryptozoidberg
e2bfde5bbc
Create p2p_manual_config.json 2025-07-21 14:44:16 +04:00
cryptozoidberg
6fed9dcac5
Create p2p_manual_config.json (full proxy) 2025-07-21 14:42:58 +04:00
sowle
68871b93ec
p2p minor improvements 2025-07-20 22:54:32 +03:00
cryptozoidberg
32194f88b1
p2p network manual configuration from config file 2025-07-20 18:41:27 +04:00
sowle
854c198415
reverted sanity check improvement 2025-07-20 02:34:45 +03:00
sowle
23cf10a4b8
Merge remote-tracking branch 'origin/release' into develop 2025-07-19 23:49:58 +03:00
Dmitry Matsiukhov
94c2e65dad
coretests: tx_coinbase_separate_sig_flag test added; (separate flag for PoW miner tx coinbase (#538))
* add tests for pow separate tx flag

* refactoring test, leave only poW validation
2025-07-19 15:49:10 +03:00
cryptozoidberg
0e1618c496
sanity check improved 2025-07-19 14:48:10 +04:00
dependabot[bot]
015c7ddbb4
Bump axios from 1.7.7 to 1.8.2 in /utils/JS (#528)
Bumps [axios](https://github.com/axios/axios) from 1.7.7 to 1.8.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.7...v1.8.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.8.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-19 09:42:00 +04:00
sowle
f8e298af86
Merge branch 'release' 2025-07-18 21:25:32 +03:00
Dmitry Matsiukhov
4695229f2a
fix warnings (#546)
* fix warnings

* refactoring
2025-07-18 20:17:02 +03:00
sowle
97b17221d9
=== build number: 418 -> 419 === 2025-07-18 13:39:01 +03:00
sowle
98f5880ae6
Merge branch 'release' into develop 2025-07-18 13:38:36 +03:00
sowle
6c318fc34b
minor fix to please clang 2025-07-17 21:05:08 +03:00
sowle
9e81e7228c
Merge branch 'release' into develop 2025-07-17 19:16:29 +03:00
sowle
556746c194
currency_protocol: there's no hop in this place anymore 2025-07-17 19:05:35 +03:00
sowle
ee883a690c
Merge branch 'release' into develop
# Conflicts:
#	src/wallet/wallet2.cpp
2025-07-17 15:39:00 +03:00
sowle
2edb2e6fe4
=== build number: 416 -> 417 === 2025-07-17 15:36:42 +03:00
Dmitry Matsiukhov
a3587a48e7
fix array entry deserialization and JSON parsing edge cases + tests (#545)
credits go to Lilith (>_>) of Cisco Talos (TALOS-2018-0637) and moneromooo-monero (DoS/RPC fixes PR#4438)
2025-07-17 15:14:41 +03:00
sowle
63cf4e5dd6
wallet2: removed redundant log 2025-07-17 13:07:22 +03:00
sowle
cac85721a2
wallet: minor improvements for balance() + coretest extended to cover more cases 2025-07-17 03:04:12 +03:00
sowle
8574cc0894
wallet: various balance() improvements 2025-07-16 20:30:17 +03:00
sowle
d241861d86
wallet: various minor improvements (balance, balance raw, unknown asset) 2025-07-16 17:30:38 +03:00
sowle
fed84de8b7
compilation fix 2025-07-15 23:59:20 +03:00
Dmitry Matsiukhov
a08772ea6a
coretests: tx_input_mixins test added (test that will combine spending old coins and new coins in one tx and use mixins as 15)
* try to write test for 2 input with nmix

* one of incorrect version

* add test for input old/new

* refactoring and add comments

* delete garbage

* fix from vector variant to unordered_map

* add comment

* using to typedef
2025-07-15 23:36:53 +03:00
sowle
8fb16d207f
Merge branch 'release' into develop
# Conflicts:
#	src/rpc/core_rpc_server.cpp
#	src/version.h.in
2025-07-15 22:22:36 +03:00
sowle
d711373824
Merge branch 'release' 2025-07-15 22:18:27 +03:00
sowle
eed7d9e3af
=== build number: 411 -> 416 === 2025-07-15 22:18:09 +03:00
sowle
ffd279f21f
Merge branch 'limitations_for_rpc' into release 2025-07-15 22:16:17 +03:00
sowle
8042f9a6a5
Merge branch 'master' into release 2025-07-15 22:15:46 +03:00
sowle
573028c764
minor improvements 2025-07-15 20:57:20 +03:00
cryptozoidberg
695bd88c11
made some of the api optional 2025-07-15 20:51:37 +03:00
cryptozoidberg
992ea22294
added warning for binding to 0.0.0.0 2025-07-15 21:37:50 +04:00
cryptozoidberg
9cce235931
renamed macro to proper name 2025-07-15 20:55:20 +04:00
cryptozoidberg
9fe3f812aa
limitations for rpc cals 2025-07-15 20:41:46 +04:00
cryptozoidberg
75ad8c7a69
made some of the api optional 2025-07-15 14:31:35 +04:00
sowle
6f8d727332
Revert "wallet: keep custom added assets while resetting history"
This reverts commit 5e0c84e735.
2025-07-14 20:30:12 +03:00
sowle
f287916372
=== build number: 414 -> 415 === 2025-07-11 21:46:56 +03:00
sowle
5e0c84e735
wallet: keep custom added assets while resetting history 2025-07-11 21:46:03 +03:00
sowle
0cd2ef8ccb
wallet: various minor improvements (balance, balance raw, unknown asset) 2025-07-11 21:45:24 +03:00
sowle
65241adc1c
ui update (PR 153) 2025-07-11 21:26:52 +03:00
sowle
6ad7dad01d
gcc warning fixed 2025-07-11 21:26:07 +03:00
sowle
51990c9d2d
an attempt 3 to fix gcc linking (prior to gcc 9, the std::filesystem library required explicit linking) 2025-07-11 21:25:48 +03:00
sowle
d56bf75bde
an attempt 2 to fil gcc linking (prior to gcc 9, the std::filesystem library required explicit linking) 2025-07-10 04:32:36 +03:00
sowle
94b9741976
an attempt to fil gcc linking (prior to gcc 9, the std::filesystem library required explicit linking) 2025-07-10 04:00:56 +03:00
sowle
87cd247eb5
wallet: clear_utxo_cold_sig_reservation() made available only for watch-only wallets 2025-07-09 19:10:33 +03:00
sowle
28606d07ef
=== build number: 413 -> 414 === 2025-07-09 17:33:17 +03:00
sowle
9589c952f8
ui updated (PR 152) 2025-07-09 17:32:49 +03:00
sowle
0554d7b8c4
wallet: clear_utxo_cold_sig_reservation() implemented + RPC clear_utxo_cold_sig_reservation added + coretest wallet_rpc_cold_signing improved to test this new RPC 2025-07-09 17:16:01 +03:00
sowle
db86b3fa15
simplewallet: --restore-ki-in-wo-wallet command-line option implemented 2025-07-09 14:42:18 +03:00
sowle
5ac8b20816
coretests: wallet_rpc_cold_signing test improved to cover key image recovery in a watch-only wallet using a full keys wallet 2025-07-09 14:41:22 +03:00
sowle
c241cb3f9b
wallet2: restore_key_images_in_wo_wallet() implemented 2025-07-09 14:40:24 +03:00
sowle
2f368cbf2c
fixed missing member serialization in tx_source_entry 2025-07-08 02:45:52 +03:00
sowle
04364afc53
coretests: wallet_rpc_cold_signing test improved to cover asset transferring along with native coins (exposes a bug) 2025-07-08 02:44:05 +03:00
sowle
035a441efe
wallet2: dump_transfers now prints asset id instead of key images +typo fixed 2025-07-08 02:42:42 +03:00
cryptozoidberg
e232c827a6
example of using zano wallet jwt auth 2025-07-04 19:42:08 +04:00
Dmitry Matsiukhov
c637e16848
unit_tests: added a test for pod array file container, fixed clear() (#535)
* add test for pod array file container

* add tests for pod, clear and is open

* header update

---------

Co-authored-by: sowle <crypto.sowle@gmail.com>
2025-07-04 00:41:53 +02:00
sowle
dfbda0a77f
minor improvements for wallet/simplewallet (logs, comments, error handling) 2025-07-03 16:13:44 +02:00
sowle
d5890e3c7f
pod_array_file_container::clear() implemented 2025-07-03 15:17:12 +02:00
Dmitry Matsiukhov
187a830f58
fixed input password bug (#536) 2025-07-03 11:55:40 +02:00
cryptozoidberg
6a4d6e1fc6
fixed #483, thanks to @gurglespuge for reporting it and proposing fix 2025-07-01 23:37:53 +04:00
cryptozoidberg
430d31ba5e
added --no-white-list option for offline working 2025-07-01 20:37:30 +04:00
cryptozoidberg
05ea60a70c
made seed request non-synchronized 2025-06-30 15:40:11 +04:00
cryptozoidberg
22b49d93a8
Update LICENSE (fixed #534)
Thanks to @Alrighttt to pointing that out
2025-06-28 16:02:19 +04:00
Dmitry Matsiukhov
5340c6db32
coretests: test for miner tx with non-empty extra_nonce before and after HF4 (#532)
* try check extra nonce in miner_tx

* update c1

* write extra nonces, create pow pos block, checkers for exnonce, bug with HF4

* success check pos block

* correct pos/pos extra nonce validation for hf3+

* clean code, separate to methods, add template test, pos/pow extra nonce check in block

* delete logs

* back normal naming

* fix review comments
2025-06-27 20:16:24 +02:00
cryptozoidberg
a0c1c8b4df
fixed typo 2025-06-25 16:46:37 +04:00
cryptozoidberg
2b3360f66a
added more logs 2025-06-25 16:41:52 +04:00
Dmitry Matsiukhov
ffa94febc6
coretests: block_choice_rule_bigger_fee test added (#530)
* add bigger fee block choice test

* fix block_validation

* remove c1, add check_top_block callback

* added more checks

* update test case

* delete: cmake fix for linux

* part of fixs

* add new check

* delete unused declareted

* add comments

* fix comment

* fix comments
2025-06-23 20:54:52 +02:00
Dmitry Matsiukhov
f8600d9fe4
fix cmake for linux build (#531) 2025-06-23 18:38:55 +04:00
zano build machine
afd479fa62 === build number: 412 -> 413 === 2025-06-23 14:10:04 +03:00
sowle
aaf878419d
ui update (PR 151) 2025-06-23 13:03:26 +02:00
sowle
0c77467c7b
=== version bump: 2.1.7 -> 2.1.8 === 2025-06-20 01:36:09 +02:00
zano build machine
a3905348f1 === build number: 411 -> 412 === 2025-06-20 02:32:11 +03:00
sowle
c6614912b1
wallet: 1) tx_comment is only allowed in extra; 2) tx_comment temporary allowed only if destinations addresses are the same; 3) integrated address can be only the first if there are many 2025-06-20 01:31:42 +02:00
sowle
46eab64834
rename: encrypt_attachments() -> encrypt_payload_items() + test gen_wallet_decrypted_attachments -> gen_wallet_decrypted_payload_items improved (tx_comment put in extra) 2025-06-20 01:30:00 +02:00
sowle
1b0f64176d
wallet rpc: tx_comment is now put into tx's extra for consistency with wallet_manager's approach 2025-06-19 17:42:00 +02:00
sowle
430cbffd25
wallet rpc: WALLET_RPC_ERROR_CODE_GENERIC_ERROR (-9) added 2025-06-19 17:40:47 +02:00
sowle
ab01ce4fd6
ui update (PR 150) 2025-06-19 12:55:44 +02:00
sowle
2fb8f499e1
Merge remote-tracking branch 'origin/p2pdbgcmd' into develop 2025-06-19 12:53:34 +02:00
cryptozoidberg
2bab917700
fixed typo 2025-06-19 14:35:11 +04:00
cryptozoidberg
90a4a68eb5
added sanitize_utf8 to invoke() in plain_wallet 2025-06-18 22:45:28 +04:00
cryptozoidberg
166b683295
tiny format tweak 2025-06-17 17:06:35 +04:00
sowle
4f7345e475
Merge branch 'release' 2025-06-10 15:08:01 +02:00
sowle
79a3d416c1
Merge branch 'develop' into release 2025-06-10 15:07:25 +02:00
sowle
ecabd4a73a
functional tests: core_concurrency_test.cpp compilation fix 2025-06-09 11:51:08 +02:00
sowle
29d02c1816
Merge branch 'develop' into release 2025-06-09 05:48:54 +02:00
sowle
23f874f142
=== build number: 410 -> 411 === 2025-06-09 05:45:54 +02:00
sowle
48176b6a72
chaingen: "clear_tx_pool" now clears tx pool indeed 2025-06-09 05:44:49 +02:00
sowle
2bb1113b43
core: HF4 coinage rule is not checked while adding a tx to the pool, letting it being confirmed later 2025-06-09 05:43:39 +02:00
sowle
2a13a63eb7
coretests: tx_pool_validation_and_chain_switch improved 2025-06-09 05:39:57 +02:00
cryptozoidberg
7ac70737dc
fix that makes sure that daemon and wallet are 'on the same page' in terms of hardfork recognition 2025-06-07 16:17:54 +04:00
cryptozoidberg
9efce2ddb3
added check if console is available #510 2025-06-07 14:10:45 +04:00
cryptozoidberg
87fae9440c
bug that have been there for ages 2025-06-06 21:18:41 +04:00
zano build machine
79f4c3ef75 === build number: 409 -> 410 === 2025-06-06 03:24:10 +03:00
sowle
06af2ea879
ui update (PR 149) 2025-06-06 02:02:08 +02:00
sowle
1131d25725
ui update (PR 148) 2025-06-04 17:16:11 +02:00
sowle
cb3891ac0c
minor improvements 2025-06-04 16:48:53 +02:00
sowle
e0acea65b8
=== version bump: 2.1.6.408 -> 2.1.7.409 === 2025-06-03 01:59:16 +02:00
sowle
c6b1a84461
Merge branch 'master' into develop 2025-06-03 01:58:12 +02:00
sowle
c86a19de08
Merge branch 'mempool_blacklist_fix' 2025-06-03 01:56:32 +02:00
sowle
e725b784c1
version bump: 2.1.5.397 -> 2.1.6.399 2025-06-03 01:55:58 +02:00
sowle
f84ecf579e
improved condition in tx_memory_pool::is_transaction_ready_to_go() limited to >=HF4 to please old tests 2025-06-03 01:38:55 +02:00
sowle
7fb2fcc188
minor fix 2025-06-03 00:33:26 +02:00
sowle
411cda4ad4
improved condition in tx_memory_pool::is_transaction_ready_to_go() 2025-06-03 00:22:30 +02:00
sowle
7eb6986f4d
txpool fixed: txs with too small max_related_block_height will wait in the pool till the current height is okay + coretests tx_pool_validation_and_chain_switch added 2025-06-03 00:01:11 +02:00
cryptozoidberg
3d2ce52b8e
small performance tweak of fill_block_template and more logs related to pool txs blacklisting 2025-06-02 23:50:31 +04:00
sowle
7793efaeac
msvc: EHa exception mode enabled to catch both structured and standard C++ exceptions 2025-06-02 19:12:50 +02:00
zano build machine
25056b751e === build number: 407 -> 408 === 2025-05-30 16:03:48 +03:00
sowle
1c045d0732
ui update (PR 147) 2025-05-30 15:00:22 +02:00
sowle
c4c8d65798
fixed a rare issue with printing random control characters to the console, breaking it 2025-05-30 14:49:31 +02:00
sowle
be0b6ab35e
callstack_helper: fixed a potential issue in get_mod_info::operator() 2025-05-30 14:45:24 +02:00
Anton Mikhailov
99bcf712df
feat: install includes on android (#524) 2025-05-29 14:20:47 +04:00
sowle
8a91bccea3
an attempt to make all callstack-retrieval routines exception-safe 2025-05-28 01:15:28 +02:00
cryptozoidberg
686c137332
added wallet_transfer_info to transfer() RPC 2025-05-23 23:52:49 +04:00
sowle
e66b21085b
wallet2: keep tx_keys while resetting wallet's history 2025-05-23 05:35:06 +03:00
sowle
ffe5051d8b
wallet2 : store_watch_only fixed 2025-05-23 05:34:22 +03:00
sowle
0066e75c39
minor improvements (formatting, logging) 2025-05-23 05:33:32 +03:00
sowle
1bb0523b83
get_out_pub_key_from_tx_out_v() implemented 2025-05-23 05:32:33 +03:00
zano build machine
4d272c4edb === build number: 406 -> 407 === 2025-05-22 20:26:59 +03:00
sowle
296a6c6211
fixed a rare race condition in get_coinbase_hash_cached() 3 2025-05-22 16:58:34 +03:00
sowle
43bde5aa99
fixed a rare race condition in get_coinbase_hash_cached() 2 2025-05-22 15:50:18 +03:00
sowle
cebeebe730
fixed a rare race condition in get_coinbase_hash_cached() 2025-05-22 14:26:05 +03:00
zano build machine
91cd6148e8 === build number: 405 -> 406 === 2025-05-22 03:01:56 +03:00
sowle
ec35462267
forgotten line 2025-05-22 00:26:16 +03:00
cryptozoidberg
0b7a8a89bd
added error handling for custom seed generator 2025-05-21 20:16:08 +04:00
zano build machine
dd9fb6c8a7 === build number: 404 -> 405 === 2025-05-21 05:02:17 +03:00
sowle
54f5b2acc1
Merge branch 'get_coinbase_hash_cached_refactoring' into develop 2025-05-21 04:49:01 +03:00
sowle
d911673544
cache_base: typo fixed 2025-05-21 04:47:39 +03:00
sowle
cc9e39825c
cache_helper/cache_base fixed and improved 2025-05-21 04:33:24 +03:00
sowle
4be5761a90
epee::misc_utils::void_copy introduced 2025-05-21 04:32:16 +03:00
cryptozoidberg
bafae7b120
added get_integrated_address to daemon 2025-05-20 22:18:10 +04:00
sowle
d9c7a2ac08
get_coinbase_hash_cached refactored 2025-05-20 20:08:24 +03:00
sowle
d4cc1bd6ff
wallet2: cold-signing process adapted to post-HF4 realm 2025-05-15 05:40:54 +03:00
sowle
83234af5b6
coretests: wallet_rpc_cold_signing test added 2025-05-15 05:40:10 +03:00
sowle
92ea96a41d
coretests: set_playtime_test_wallet_options() minor refactoring 2025-05-15 05:39:34 +03:00
sowle
915d01fa7d
minor improvements 2025-05-15 05:38:13 +03:00
zano build machine
11ff5a8c62 === build number: 403 -> 404 === 2025-05-09 07:01:17 +03:00
sowle
6ff59d2392
Merge branch 'non_pruning_mode' into develop 2025-05-09 06:53:44 +03:00
sowle
3a5e37f34c
predownlod files updated to height 3150000 2025-05-09 02:14:44 +03:00
sowle
6ea2d90104
predownload files for non-pruning mode 2025-05-08 18:54:02 +03:00
zano build machine
078b03534d === build number: 402 -> 403 === 2025-05-08 04:39:19 +03:00
sowle
0cbe915ed5
ui update (PR #146) 2025-05-08 04:38:29 +03:00
sowle
7a0b4cdc82
conn_tool: minor improvement 2025-05-06 00:37:09 +03:00
sowle
22196f9de6
predownload files updated for non-pruning mode 2025-05-06 00:36:38 +03:00
cryptozoidberg
ef0a47c720
added force_rescan_tx_pool command to wallet rpc 2025-05-05 21:33:13 +04:00
sowle
c2bd27cb58
gcc compilation fix 2025-04-30 21:54:55 +03:00
sowle
c8d41b5e4a
non-pruning via special flag (WIP) 2025-04-30 05:46:25 +03:00
sowle
e5323d0c5a
non-pruning mode implemented using checkpoints 2025-04-30 03:55:13 +03:00
zano build machine
cc7188f450 === build number: 401 -> 402 === 2025-04-28 20:01:28 +03:00
sowle
59a55f7ebd
ui update (PR 145) 2025-04-28 19:59:17 +03:00
cryptozoidberg
13b73bcb33
reduced cache for m_db_blocks_index 2025-04-24 14:50:50 +04:00
zano build machine
90ed7ee409 === build number: 400 -> 401 === 2025-04-22 14:56:42 +03:00
sowle
36d14dbc99
conn_tool: get-anonymized-peers command-line option implemented 2025-04-18 15:09:16 +03:00
sowle
7606c69961
p2p: COMMAND_REQUEST_ANONYMIZED_PEERS (WIP) 2025-04-18 06:18:57 +03:00
sowle
f087117a33
tx_pool: allow incoming txs to register alias to address, that already has associated alias only for testnet (for a while) 2025-04-18 00:58:13 +03:00
cryptozoidberg
02da52eb0d
improve over all tx to json serialization 2025-04-17 22:07:36 +04:00
cryptozoidberg
a7a4505b79
attempt to fix seg fault on foreach_connection 2025-04-16 15:27:44 +04:00
cryptozoidberg
7f8dbb73db
added back zconf.h.included 2025-04-15 23:55:38 +04:00
cryptozoidberg
fe220afdde
fixed binary serialization of tx to json 2025-04-15 23:51:01 +04:00
zano build machine
83eefd205e === build number: 399 -> 400 === 2025-04-14 17:51:46 +03:00
sowle
15d2c1f725
ui update (PR 144) 2025-04-14 17:48:04 +03:00
sowle
afb9ddb42e
zlib: minor improvements for build/cmake
see also: https://github.com/madler/zlib/issues/781
see also: cacf7f1d4e/CMakeLists.txt (L69)
2025-04-13 19:06:52 +03:00
sowle
48725ea817
minor improvements 2025-04-11 15:51:19 +03:00
sowle
24600931ac
=== version bump: 2.1.5.398 -> 2.1.6.399 === 2025-04-11 02:09:31 +03:00
sowle
ed7597e6b9
tx pool: allow incoming txs to register alias to address, that already has associated alias 2025-04-11 02:07:50 +03:00
cryptozoidberg
7f7b99ed7e
added debug symbols to release builds on unix systems 2025-04-10 23:19:24 +04:00
cryptozoidberg
d4366d3f18
added some diagnostic logs for blockchain caching 2025-04-10 22:42:56 +04:00
zano build machine
cbb9a39bf1 === build number: 397 -> 398 === 2025-04-10 20:13:55 +03:00
sowle
cd5b0c22da
Merge branch 'transfership_refactoring' into develop 2025-04-10 20:12:25 +03:00
cyan
34b9e15301
deps: bump zlib to 1.3.1 (#519)
* Update Dockerfile (#514)

Fixed versions and hardcoded versions in dockerfile

* deps: bump zlib to 1.3.1

---------

Co-authored-by: sowle <crypto.sowle@gmail.com>
Co-authored-by: cryptozoidberg <crypto.zoidberg@gmail.com>
Co-authored-by: David Ed <40647185+Dedme@users.noreply.github.com>
2025-04-10 19:20:19 +03:00
sowle
3abfd90e2f
asset ownership transfer refactoring (WIP) 2025-04-10 03:47:02 +03:00
cryptozoidberg
71248cfd25
fix with resetting state to blocchain shortener 2025-04-10 00:35:59 +04:00
cryptozoidberg
e2406fc518
fixed is_in_long_refresh issue 2025-04-09 16:46:57 +04:00
sowle
f65578f5a5
simplewallet: fixed incorrect handling of daemon-address, daemon-host and daemon-port 2025-04-09 15:39:19 +03:00
cryptozoidberg
144d403c8b
fixed compilation issue 2025-04-09 12:25:05 +04:00
cryptozoidberg
5978ed27f2
fixed issue with deploy asset 2025-04-09 12:10:52 +04:00
sowle
affa0a91ac
Merge remote-tracking branch 'origin/tests_improvements' into develop 2025-04-08 23:20:13 +03:00
sowle
745932738e
coretests: get_tx_version_and_harfork_id_from_events refactoring 2025-04-07 04:47:55 +03:00
cryptozoidberg
d95b07fe0a
multiple improvements over mobile library safety 2025-04-04 12:42:56 +04:00
sowle
0ad804fbc0
Merge branch 'tx_pool_readdition' into develop 2025-04-03 23:32:57 +03:00
sowle
7736199189
minor improvement (log) 2025-04-03 23:32:21 +03:00
sowle
c7f0106bf0
experimental improvements for purge_transaction_from_blockchain() 2025-04-03 18:59:51 +03:00
sowle
df0171d989
coretests: set_use_assets_whitelisting(false) made default for wallets in coretests (2) 2025-04-03 18:27:43 +03:00
sowle
d1cade7bdb
minor improvements 2025-04-03 18:26:47 +03:00
cryptozoidberg
7d3bd99867
potential fix for preventing data race 2025-04-03 17:06:53 +04:00
cryptozoidberg
23f3593ae0
Update README.md 2025-04-01 23:26:22 +04:00
sowle
ff2bb36de4
construct_tx_handle_ado() won't treat opt_descriptor set as an error when >=HF5 anymore, because there's no such a requirement in the core 2025-04-01 18:15:34 +03:00
sowle
d3a2392cfa
coretests: set_use_assets_whitelisting(false) made default for wallets in coretests 2025-04-01 17:03:43 +03:00
cryptozoidberg
701625d2f0
added json-version for sendrawtransaction (cherry-picked) 2025-04-01 15:19:13 +03:00
sowle
68194dc60b
coretests: asset_operations_and_chain_switching added (finished) 2025-04-01 15:18:02 +03:00
sowle
2fd53a59cb
minor improvements (construct_tx, construct_tx_out) 2025-04-01 05:49:35 +03:00
sowle
fb0ba230ea
chaingen: improvements for fill_tx_sources, get_sources_total_amount to support assets more correctly 2025-04-01 05:48:22 +03:00
cryptozoidberg
2872515117
added missing closing tag 2025-03-31 16:14:46 +04:00
cryptozoidberg
bd05907dd8
fixed errors in compilation 2025-03-31 15:37:21 +04:00
cryptozoidberg
9115226f00
fixed tyoe 2025-03-31 15:23:39 +04:00
cryptozoidberg
857a7eabe2
added version to auto-doc 2025-03-31 15:22:14 +04:00
cryptozoidberg
048886c4e9
added ms to lock time report 2025-03-31 13:39:44 +04:00
cryptozoidberg
490198feee
Merge branch 'rpc_extension' into develop 2025-03-29 23:41:45 +04:00
cryptozoidberg
ace2b4dbf5
tests for rpc transfer ownership done 2025-03-29 23:39:36 +04:00
sowle
b48f23ab54
wallet: fixed clearing owner of other type in transfer_asset_ownership() 2025-03-29 12:55:43 +01:00
cryptozoidberg
938050df0f
multiple fixes for wallet rpc api on_asset_send_ext_signed_tx on_attach_asset_descriptor and on_transfer_asset_ownership 2025-03-29 00:14:47 +04:00
sowle
20ad8de9f5
marketplace API: added simple check for zero fee (or incorrect json, resulted in default zero fee) 2025-03-28 21:12:17 +01:00
cryptozoidberg
0662f9bbed
Merge branch 'develop' into rpc_extension 2025-03-28 18:09:38 +04:00
cryptozoidberg
60471f7f46
moved boost checker to right place(now for sure) 2025-03-28 15:27:46 +04:00
cryptozoidberg
8b910b9111
moved boost version checker to right place 2025-03-28 15:23:48 +04:00
cryptozoidberg
2241263925
added message with boost version output 2025-03-28 14:01:22 +04:00
cryptozoidberg
77100b462e
added boost version verification in source code 2025-03-28 13:55:14 +04:00
sowle
9a816a090d
coretests: asset_operations_and_chain_switching added (work is still in progress) 2025-03-27 03:46:05 +03:00
David Ed
d85b94df92
Update Dockerfile (#514)
Fixed versions and hardcoded versions in dockerfile
2025-03-26 15:59:12 +04:00
cryptozoidberg
b603d70be8
Merge branch 'release' into develop 2025-03-26 15:18:31 +04:00
cryptozoidberg
013b7f77ef
compression speed tweak in prewoanload 2025-03-24 22:23:09 +04:00
sowle
c2f0b1166c
Merge branch 'release' into develop 2025-03-24 20:01:42 +03:00
sowle
3095e0fbcb
Merge branch 'release' 2025-03-24 20:01:22 +03:00
sowle
3917d95019
=== version bump: 2.1.4.396 -> 2.1.5.397 === 2025-03-24 19:58:16 +03:00
cryptozoidberg
532f9a81dc
Merge branch 'release' 2025-03-24 14:49:10 +04:00
cryptozoidberg
39e36cf8c8
p2pstate reset 2025-03-24 08:52:40 +04:00
sowle
767f02a3ba
Merge branch 'release' 2025-03-24 07:37:34 +03:00
sowle
f0f54efe17
=== version bump: 2.1.3.395 -> 2.1.4.396 === 2025-03-24 07:07:18 +03:00
sowle
695fc1dd4e
predownload updated to height 3083770 2025-03-24 07:05:25 +03:00
cryptozoidberg
ef9a0ab5fd
added ip blacklisting on unexpected block id 2025-03-24 07:21:52 +04:00
sowle
5984b47ad9
=== version bump: 2.1.2.394 -> 2.1.3.395 === 2025-03-24 02:27:57 +03:00
cryptozoidberg
dc5b5f72a3
moved to v3 db 2025-03-24 03:09:29 +04:00
cryptozoidberg
be129f7a87
tests are work in progress 2025-03-24 02:36:54 +04:00
sowle
5f56d146c2
fixed an issue in pop_asset_info() with deregistering asset after HF5 during chain switching 2025-03-24 01:32:01 +03:00
cryptozoidberg
64e2e53629
test for RPC API COMMAND_ATTACH_ASSET_DESCRIPTOR (in work) 2025-03-22 14:38:57 +04:00
sowle
ec08952674
Merge branch 'release' into develop 2025-03-22 02:44:59 +03:00
sowle
4303f84152
Merge branch 'release' 2025-03-22 00:05:15 +03:00
sowle
616c56fa35
Merge branch 'db_hardfork_id' into release 2025-03-21 23:02:38 +03:00
sowle
cf3930e863
=== version bump: 2.1.1.392 -> 2.1.2.394 === 2025-03-21 23:01:56 +03:00
cryptozoidberg
78293c32d6
couple tweaks for hf5 transition 2025-03-21 21:38:40 +04:00
cryptozoidberg
89e70c74cd
RPC extended for ownership transfer and attachment to wallet 2025-03-21 18:09:27 +04:00
sowle
ead80ac4cb
improvements for the workaround for rear case when an old node is stuck in an altchain right after the hardfork 2025-03-21 14:24:14 +03:00
sowle
b0cbce935e
removed unicode chars from comment 2025-03-21 13:58:11 +03:00
sowle
bbc80a8a77
fixed compilation for gcc/clang 2025-03-20 22:28:10 +03:00
sowle
2e57faf822
implemented workaround for rear case when an old node is stuck in an altchain right after the hardfork 2025-03-20 20:33:34 +03:00
sowle
6be32747c7
minor improvements 2025-03-20 20:30:48 +03:00
sowle
56a265bd48
removed unicode chars from comment 2025-03-20 20:29:28 +03:00
cryptozoidberg
334a90bbe0
added comment 2025-03-20 19:05:18 +04:00
cryptozoidberg
1cc85850bb
merge from p2p_fix2 2025-03-20 19:03:58 +04:00
zano build machine
f136bff547 === build number: 392 -> 393 === 2025-03-20 17:08:25 +03:00
sowle
f08d2ff8af
ui update (PR 143) 2025-03-20 17:07:18 +03:00
Stёpa Dolgorukov
cb92f260e4
one more fix for launching Zano in Ubuntu: Edit AppImage wrapper (#512) 2025-03-20 15:02:39 +01:00
sowle
cd51fcc293
minor updates to currency config 2025-03-20 14:46:13 +03:00
cryptozoidberg
932414dc32
long refresh initially true as well 2025-03-20 15:00:25 +04:00
cryptozoidberg
db788333de
changed initial state of wallet as synchronizing 2025-03-20 14:59:07 +04:00
sowle
488c16138a
Merge branch 'release' into develop 2025-03-20 04:02:52 +03:00
sowle
9674bc9d7a
Merge branch 'master' into release 2025-03-20 04:00:57 +03:00
crypto.sowle
71336c1bc0
readme: added additional step for version check 2025-03-20 01:59:00 +01:00
crypto.sowle
4d5d32c7ed
readme: updated minimum cmake version 2025-03-20 01:40:07 +01:00
cryptozoidberg
357a59a1f7
fixed issue with has_arg missing argument 2025-03-19 18:32:44 +04:00
cryptozoidberg
3e2a39db2c
added proxy to daemon 2025-03-18 18:51:27 +04:00
cryptozoidberg
3a29780d8f
added diagnostic message 2025-03-15 13:35:17 +04:00
cryptozoidberg
ccfc0327e0
version up 2025-03-14 19:18:11 +04:00
cryptozoidberg
405d076ce2
another fix with utf8 sanitizing 2025-03-14 19:15:54 +04:00
cryptozoidberg
e07bba437b
version updated 2025-03-14 14:45:56 +04:00
cryptozoidberg
3ad96b5028
added sanitizing of utf8 in plain wallet, removed unnecessary rpc calls from get recent history 2025-03-14 14:44:27 +04:00
cryptozoidberg
09c3c2c156
increased version 2025-03-14 12:58:41 +04:00
cryptozoidberg
be59c78439
Merge branch 'master' into develop 2025-03-14 12:55:41 +04:00
cryptozoidberg
dfe5238f77
fixed critical issue with SSL support(failed re-connections) 2025-03-14 00:49:14 +04:00
cryptozoidberg
a54c00e823
changed order of warming up(to have most recent blocks as most recent cache) 2025-03-13 17:36:53 +04:00
cryptozoidberg
4715d69596
removed unused header 2025-03-13 16:51:30 +04:00
cryptozoidberg
926549e740
implemented warp-mode for zano daemon 2025-03-12 19:52:10 +04:00
Stёpa Dolgorukov
a588173605
Create .desktop file with name including version (#511) 2025-03-12 16:39:36 +04:00
cryptozoidberg
ec54dc72c9
added full warm up feature 2025-03-12 14:17:40 +04:00
sowle
01b5f89725
Merge branch 'small_amount_min_outs' into develop 2025-03-12 06:29:23 +01:00
sowle
b6efadad40
wallet: more needed_money fixes (primarily for escrow, mode separate tx and sweep bare outs) 2025-03-11 23:38:36 +01:00
cryptozoidberg
d40311da17
put levin return code to right place 2025-03-10 13:59:19 +04:00
cryptozoidberg
d93624bbf4
fixed bug with dummy server destructor being nasty 2025-03-10 13:56:48 +04:00
cryptozoidberg
6b152827af
more profiling logs + callback for the native lib 2025-03-09 14:59:21 +04:00
sowle
e15a7f804e
coretests: asset_operation_and_hardfork_checks fixed to reflect recent changes in balance calculation 2025-03-07 22:26:34 +01:00
sowle
dc81b4331f
fixed a rare bug when very small amounts are being transferred and there's not enough outputs in tx to satisfy min limit 2025-03-07 03:14:23 +01:00
sowle
fca1194f55
coretests: assets_transfer_with_smallest_amount implemented (exposes a bug) 2025-03-06 14:23:01 +01:00
sowle
79e3c6eaf1
chaingen, wallet: improved wallet transfers listing and balance checking when an asset is specified 2025-03-06 14:21:59 +01:00
cryptozoidberg
09ddda7dba
fixed ancient p2p bug 2025-03-05 14:51:11 +04:00
sowle
fbeb658ae0
Merge branch 'release' 2025-03-05 02:46:40 +01:00
sowle
c5c206ea13
Merge branch 'release' into develop 2025-03-05 02:46:06 +01:00
sowle
7ddbabc51e
cmake: set min boost version to 1.75 for all platforms (because of boost::pfr dependency) 2025-03-04 21:37:04 +01:00
cryptozoidberg
11437ac38f
Update Dockerfile 2025-03-04 15:06:59 +04:00
cryptozoidberg
a13eedf556
fix of currency protocol for long range splits 2025-02-28 19:11:37 +04:00
cryptozoidberg
bb92e52ae2
fix of JWT auth wrong expiration units 2025-02-26 14:56:47 +04:00
cryptozoidberg
ca46fca7b1
Added more comments on initi of the plain wallet 2025-02-26 01:20:46 +04:00
cryptozoidberg
5808e1a3d3
changed meta info format to json 2025-02-26 01:20:46 +04:00
sowle
1354eb0d47
Merge branch 'release' into develop 2025-02-25 18:21:03 +01:00
sowle
a448b62e9a
Merge branch 'master' into release 2025-02-25 18:20:35 +01:00
sowle
fe85ce27fb
Merge branch 'release' 2025-02-25 18:17:49 +01:00
cyan
936ff46f9c
add keys to open_wallet_response (#507) 2025-02-18 13:41:27 +04:00
sowle
571897a23b
Merge branch 'develop' into release 2025-02-16 22:59:04 +01:00
zano build machine
f0378d8be0 === build number: 381 -> 382 === 2025-02-17 00:57:26 +03:00
sowle
ede5df5afe
predownload files moved to CDN and updated to height 3030303 2025-02-16 22:56:43 +01:00
sowle
2bcc6075b7
HF5 height is set to 3076400 (mainnet) 2025-02-14 16:08:07 +01:00
Stёpa Dolgorukov
88060ee2a4
linux gui: Escape back slash in the value by the key "Exec" (#505) 2025-02-14 15:03:53 +01:00
sowle
38ae547f5c
send raw tx is disabled during the pre hardfork tx freeze period 2025-02-14 03:24:45 +01:00
sowle
8341f4f31f
minor improvements 2025-02-14 03:23:40 +01:00
sowle
141a8eac6a
chaingen: zarcanum_in_alt_chain_2 (forgotten changes) 2025-02-14 03:22:31 +01:00
sowle
672309ba5f
fixed an issue in alt block miner tx validation 2025-02-14 03:21:24 +01:00
sowle
d8f12cdcc8
chaingen: zarcanum_in_alt_chain_2 test added (highlights an issue in alt block validation) 2025-02-14 03:20:23 +01:00
sowle
cb74abddc5
coretests: chaingen: fill_tx_sources improved 2025-02-14 03:18:25 +01:00
sowle
4c860417f5
pre hardfork tx freeze period implemented (+HF6) 2025-02-14 03:17:33 +01:00
sowle
2006b71250
readme: added bzip2 and libssl-dev to prerequisites 2025-02-13 11:57:47 +01:00
sowle
664a971c46
readme: fixed a typo (credits to @dudebing99) 2025-02-13 11:54:05 +01:00
sowle
05f0458658
ui update (PR 142) 2025-02-12 16:50:10 +01:00
cryptozoidberg
6893535388
changed meta info format to json 2025-02-10 20:44:59 +04:00
zano build machine
b79e962e75 === build number: 380 -> 381 === 2025-02-07 00:11:32 +03:00
sowle
820569ff4e
ui update (PR 141) 2025-02-06 22:09:28 +01:00
zano build machine
c47dee5158 === build number: 379 -> 380 === 2025-02-05 10:02:52 +03:00
sowle
3bbdc9c140
ui update (PR 140) 2025-02-05 08:00:44 +01:00
sowle
337ce00b77
Merge branch 'develop' into release 2025-02-04 12:58:03 +01:00
sowle
a25baf8d94
=== version bump: 2.0.1.378 -> 2.1.0.379 === 2025-02-03 21:27:30 +01:00
sowle
a85445083f
testnet restart (currency formation version: 99 -> 100) 2025-02-03 21:24:32 +01:00
sowle
a0ddaea1a3
Merge branch 'txhfid' into develop 2025-02-03 21:09:01 +01:00
sowle
a101a676b0
minor compilation fix 2025-02-03 19:40:10 +01:00
sowle
ca9a8f95de
Merge branch 'develop' into txhfid 2025-02-03 18:29:45 +01:00
zano build machine
3cf39eec88 === build number: 377 -> 378 === 2025-01-31 19:30:36 +03:00
sowle
3d1f4a5336
now max_seed_height is always greater then or equal to current node's top block height 2025-01-31 17:30:02 +01:00
sowle
8fc70f4d6d
wallet: fixed a bug when a freshly created wallet's node is in then-become alt-chain (credits to @cryptozoidberg) 2025-01-31 17:28:28 +01:00
zano build machine
467fd4b6ba === build number: 376 -> 377 === 2025-01-30 17:40:03 +03:00
sowle
1cd3a95625
ui update (PR 139) 2025-01-30 15:35:53 +01:00
cryptozoidberg
4ad93162e8
https enabled in remote node 2025-01-30 14:50:51 +04:00
zano build machine
2628656537 === build number: 375 -> 376 === 2025-01-29 23:08:01 +03:00
sowle
d14ca4f53f
ui update PR 138 2025-01-29 21:07:07 +01:00
Stёpa Dolgorukov
dd64c805d7
coretests: Update "block_with_correct_prev_id_on_wrong_height" test (#499)
* Core tests: implement the test "block_with_correct_prev_id_on_wrong_height"

* Core tests: update "block_with_correct_prev_id_on_wrong_height" test
2025-01-29 11:24:18 +01:00
Stёpa Dolgorukov
072d53de9b
coretests: Fix MSVC C4146 warning in the test "get_xtype_from_string" (#503)
* Change macros for creating test names

* Add test for values of types int{16,32,64}_t

* Fix MSVC C4146 warning

---------

Co-authored-by: sowle <crypto.sowle@gmail.com>
2025-01-28 10:28:14 +01:00
zano build machine
a23ccd76fb === build number: 374 -> 375 === 2025-01-24 07:27:36 +03:00
sowle
38e6556a49
2nd iteration on diminishing CPU mining presence in mainnet builds 2025-01-24 04:41:55 +01:00
zano build machine
f6d363d313 === build number: 373 -> 374 === 2025-01-21 20:35:34 +03:00
sowle
e73eb4f59a
Merge remote-tracking branch 'origin/nocpumining' into develop 2025-01-21 18:30:58 +01:00
sowle
aab20167fb
ui update (PR 137) 2025-01-21 18:30:30 +01:00
Stёpa Dolgorukov
075ee3119b
coretests: Update "asset_operation_in_consolidated_tx" test (#501)
* coretests: Implement "asset_operation_in_consolidated_tx" test

* Define "construct_tx" overload with a generation context argument

* Update the test "asset_operation_in_consolidated_tx"

---------

Co-authored-by: crypto.sowle <crypto.sowle@gmail.com>
2025-01-21 03:33:11 +01:00
sowle
35f79d3780
zanod, simplewallet now return exit code 0 when '--version' or '--help' are given 2025-01-21 02:22:13 +01:00
sowle
ddd91d8fec
minor warning fix 2025-01-21 01:22:28 +01:00
Stёpa Dolgorukov
1087be7b0a
coretests: implement the tests "block_reward_in_main_chain_basic", "block_reward_in_alt_chain_basic" (#493)
* Core tests: implement tests "block_reward_in_main_chain_basic", "block_reward_in_alt_chain_basic"

* Use an automatic variable type deduction

* Call "assert_reward" callback before the callback "assert_balance"

* Update comments for the test "block_reward_in_alt_chain_basic"
2025-01-21 01:12:44 +01:00
Stёpa Dolgorukov
dcd7f62968
coretests: Fix an execution of the core test "fill_tx_rpc_inputs", rename callbacks (#498)
* Core tests: implement a test of the function "blockchain_storage::fill_tx_rpc_inputs"

* Fix test execution when compiling via gcc 8.4.0

* Rename callbacks in the test "fill_tx_rpc_inputs"
2025-01-20 04:21:27 +01:00
sowle
cf69c29e8d
Merge branch 'release' 2025-01-16 05:52:22 +01:00
sowle
7a5fb3ee25
Merge branch 'release' into develop 2025-01-16 05:50:07 +01:00
sowle
819fd97261
fixed more serious warnings for gcc 2025-01-16 05:49:58 +01:00
sowle
93c6c2a0b3
more compilation fixed for gcc 2025-01-16 05:40:28 +01:00
sowle
cc33fd8b9c
fixed more serious warnings for gcc 2025-01-16 04:24:00 +01:00
sowle
46f6e29efb
fixed gcc 13 compilation + some warnings 2025-01-16 04:23:04 +01:00
sowle
c9fe605ee8
Merge branch 'master' into release 2025-01-16 04:21:51 +01:00
sowle
e2a70189b3
OpenSSL 3.x support 2025-01-14 18:57:50 +01:00
cryptozoidberg
bd4d54e491
added docker sources for remote node 2025-01-09 20:26:02 +04:00
cryptozoidberg
aa24fc2126
Delete unused tests/data directory 2025-01-09 14:44:36 +04:00
sowle
4f1f2ba7e7
Merge branch 'master' into develop 2025-01-06 16:07:03 +01:00
zano build machine
81e77ba37b === build number: 372 -> 373 === 2025-01-06 18:06:45 +03:00
sowle
303e216b26
ui update (PR 136) 2025-01-06 16:05:47 +01:00
sowle
b58939cf27
readme: updated components' version 2025-01-05 04:24:01 +01:00
sowle
68649070cd
Merge branch 'master' into develop 2025-01-05 03:05:50 +01:00
dylan
31e17f91e2
docs: change boost upstream source (#495) 2025-01-05 03:03:31 +01:00
sowle
ad2b10116d
coretests: presumably all tests fixed: multisig_and_unlock_time, multisig_and_coinbase, pos_altblocks_validation@5, gen_wallet_alias_and_unconfirmed_txs@5, hard_fork_4_consolidated_txs@5, multisig_and_checkpoints@0 2024-12-30 15:37:14 +01:00
sowle
6ab3d46529
gcc compilation fix 2024-12-28 18:20:14 +01:00
sowle
23723ca05e
Merge branch 'develop' into txhfid 2024-12-28 15:21:21 +01:00
sowle
13b09ee914
coretests: fill_tx_rpc_inputs temporarily disabled 2024-12-28 15:17:32 +01:00
sowle
4197736fe2
coretests: gcc compilation fixed for fill_tx_rpc_inputs 2024-12-28 04:21:58 +01:00
sowle
059a71fd97
tx hf id: wallet adaptation 2024-12-28 04:20:50 +01:00
sowle
653b05298b
coretests: hard_fork_5_tx_version implemented 2024-12-28 00:27:16 +01:00
sowle
2e01f2291e
tests: fixes for performance_tests and functional_tests 2024-12-27 19:37:39 +01:00
sowle
8dd8a6ac1c
tx hf id: WIP 2024-12-27 07:27:43 +01:00
sowle
61a358b753
2nd attempt to calm down heuristic av by disabling cpu mining in mainnet build 2024-12-25 16:16:10 +01:00
sowle
cd2f044ad8
an attempt to calm down heuristic av by disabling cpu mining in mainnet build 2024-12-25 02:22:22 +01:00
sowle
8e2c70de93
Merge branch 'develop' into txhfid 2024-12-24 22:16:36 +01:00
zano build machine
484f362676 === build number: 371 -> 372 === 2024-12-24 23:49:18 +03:00
sowle
7b527483c2
wallet rpc: getbalance now returns brief utxo stat for each asset 2024-12-24 20:58:58 +01:00
Stёpa Dolgorukov
eda0472f1e
coretests: implemented a test for the function "blockchain_storage::fill_tx_rpc_inputs" (#486) 2024-12-13 23:10:34 +01:00
zano build machine
c0ca49c30a === build number: 370 -> 371 === 2024-12-11 15:58:01 +03:00
sowle
13ed32d67a
ui update (pr 135) 2024-12-11 13:56:20 +01:00
sowle
78f622ead1
bcs: get_block_reward_by_main_chain_height(), get_block_reward_by_hash() implemented; 2) core_rpc_server::fill_block_header_response() now correctly fills 'reward' 2024-12-10 21:27:34 +01:00
sowle
b9557dd70e
chaingen: run-single-test made more specific (exact match is now required) 2024-12-09 23:31:39 +01:00
Stёpa Dolgorukov
18c17e48b1
coretests: implemented test "input_refers_to_incompatible_by_type_output" (#480) 2024-12-09 17:34:28 +01:00
Stёpa Dolgorukov
9e3ece1818
coretests: implemented the test "block_with_correct_prev_id_on_wrong_height" (#479) 2024-12-09 17:32:41 +01:00
zano build machine
11b8933345 === build number: 369 -> 370 === 2024-12-09 17:53:08 +03:00
sowle
8cc4e99199
gui: is_remnotenode_mode_preconfigured() implemented 2024-12-09 15:52:07 +01:00
sowle
13f524defb
tx hardfork id: wip (basic structures, miner tx creation adapted, tests adapted almost all + hard_fork_5_tx_version) 2024-12-06 05:39:18 +01:00
cryptozoidberg
8a8e5c3011
moved docker to subfolder 2024-12-05 17:56:17 +04:00
zano build machine
8a7572d1b8 === build number: 368 -> 369 === 2024-12-04 18:27:52 +03:00
sowle
192ad1382c
get_connectivity_status: is_remote_node_mode flag implemented 2024-12-04 16:25:17 +01:00
sowle
504b4a2ad8
ui update, PR 134 2024-12-04 16:19:47 +01:00
sowle
e747b11d44
implemented https multiple attempts support in interruptible_http_client (using another approach, http_https_simple_client_wrapper introduced) 2024-12-04 02:49:28 +01:00
sowle
95dabbe63a
fixed url parse error for RPCs 2024-12-04 02:46:45 +01:00
zano build machine
1701b97f86 === build number: 367 -> 368 === 2024-12-03 05:07:03 +03:00
sowle
9cfa03d119
ui update 2024-12-03 03:06:02 +01:00
sowle
be44020b1c
win32: CloseHandle removed from console handler stop() to avoid exception on exit in dbg 2024-12-03 02:31:06 +01:00
sowle
2e73594378
predownload https test 2024-12-03 02:30:09 +01:00
sowle
b903d84cac
added https support to interruptible_http_client 2024-12-03 02:29:20 +01:00
cryptozoidberg
9763548fa8
add runtime check for buffer size 2024-11-27 15:34:34 +04:00
cryptozoidberg
6a7c29be51
Fix #482 suggested by @jeffro256 2024-11-26 21:51:23 +04:00
sowle
2817090c8a
Merge branch 'release' 2024-11-21 18:19:50 +01:00
sowle
fe67a2933a
Merge remote-tracking branch 'origin/develop' into release 2024-11-11 18:13:10 +01:00
zano build machine
d63feec2e1 === build number: 366 -> 367 === 2024-11-11 20:12:13 +03:00
sowle
524aa1c79b
Merge branch 'develop' into release 2024-11-11 04:09:40 +01:00
sowle
c8a55c08c7
predownload updated to height 2892700 2024-11-11 04:09:14 +01:00
sowle
c24d165627
Merge branch 'develop' into release 2024-11-11 01:21:05 +01:00
sowle
099f940751
=== set version to 2.0.1.366 === 2024-11-10 22:51:07 +01:00
sowle
2b249ef414
unit_tests: wallet_seed.basic_test fixed to reflect recent changes in password limitations 2024-11-10 22:18:01 +01:00
sowle
912392bee7
=== build number: 364 -> 365 === 2024-11-09 23:29:31 +01:00
sowle
85c2591cfc
account: fixed rare checksum oob issue 2024-11-09 19:47:46 +01:00
sowle
74ef510288
wallets_manager: wallet callback lifetime management fixed 2024-11-09 19:46:51 +01:00
sowle
d28a0e1b13
wallet: minor improvements (override keyword) 2 2024-11-09 19:44:28 +01:00
sowle
fead9075b6
wallet: minor improvements (override keyword) 2024-11-09 19:42:15 +01:00
Stёpa Dolgorukov
7b2388290c
unit_tests: Test the function "check_tx_inputs_keyimages_diff" on different type inputs in the "tx_pool_semantic_validation" test (#478) 2024-11-07 16:13:58 +01:00
zano build machine
41d87d3e27 === build number: 361 -> 362 === 2024-11-07 16:17:45 +03:00
sowle
fa35d54fbb
ui update 2024-11-07 14:00:56 +01:00
zano build machine
23cd004f36 === build number: 360 -> 361 === 2024-11-06 18:17:20 +03:00
sowle
45cd764e80
ui update 2024-11-06 15:49:58 +01:00
sowle
ea394e872a
minor improvements here and there 2024-11-06 14:33:50 +01:00
zano build machine
dca18f4963 === build number: 359 -> 360 === 2024-11-05 17:32:30 +03:00
sowle
b963acc6da
ui update 2024-11-05 15:06:05 +01:00
sowle
c7e17edbc7
simplewallet: minor fix for error text 2024-11-04 22:16:23 +01:00
sowle
f74445d7fd
implemented password validation for seed phrases generation 2024-11-04 22:15:18 +01:00
sowle
0dd79e77c4
removing backslash from allowed password symbols 2024-11-04 19:46:43 +01:00
Stёpa Dolgorukov
422c7f2a3a
unit_tests: implemented a test for the function "prepare_outputs_for_key_offsets" (#477) 2024-11-04 14:12:19 +01:00
cryptozoidberg
d0971413ca
added postponed wallet loop launch in plain wallet 2024-11-02 13:06:08 +04:00
sowle
753effce28
fixed usage of generate_zc_outs_range_proof() 2024-10-31 04:00:11 +01:00
sowle
5bdaf8eaed
removed a redundant param in generate_zc_outs_range_proof() 2024-10-31 03:39:09 +01:00
zano build machine
8be6f286f1 === build number: 358 -> 359 === 2024-10-30 21:16:10 +03:00
sowle
b3393af19a
ui update 2024-10-30 19:07:21 +01:00
sowle
d3632b2f04
wallet2 refactoring: the callback is a weak pointer now 2024-10-30 16:41:01 +01:00
sowle
0fe6631e50
improvements for assets ticket/full_name checking and for password validation 2024-10-30 14:10:24 +01:00
zano build machine
69284ae297 === build number: 357 -> 358 === 2024-10-30 12:41:17 +03:00
cryptozoidberg
10df225359
logs cleanup 2024-10-29 13:37:16 +04:00
cryptozoidberg
e4d9f1da59
added command for printing ip blacklist 2024-10-27 17:49:13 +04:00
zano build machine
a6538b5eca === build number: 356 -> 357 === 2024-10-27 11:01:46 +03:00
cryptozoidberg
647b5c80f6
fixes related to USE_OPEN_SSL_FOR_ECDSA 2024-10-26 15:36:31 +04:00
cryptozoidberg
b0efef8ef1
temporary disabled secp256k1 library 2024-10-26 14:28:27 +04:00
cryptozoidberg
13e67e23e1
very intial code for ECDSA from OpenSSL 2024-10-25 23:57:59 +04:00
cryptozoidberg
c0c39276c7
fixed BUILD_SHARED_LIBS overriding in bitcoin-secp256k1 2024-10-25 20:19:46 +04:00
Stёpa Dolgorukov
4e78beebeb
unit_tests: repair compilation on the G++ 12 compiler (#473) 2024-10-25 18:06:21 +02:00
cryptozoidberg
d88e1952a6
additional condition to handle ado tx 2024-10-25 15:26:45 +04:00
cryptozoidberg
26f2f7511a
added salt to asset generation 2024-10-25 13:43:50 +04:00
cryptozoidberg
8747abe3dd
updated read.me 2024-10-24 21:57:51 +04:00
sowle
f7e64b9164
don't populate cache in get_last_n_blocks_timestamps_median() if the resulted num of blocks isn't equal to window size 2024-10-24 14:44:15 +02:00
cryptozoidberg
a58c0810fb
added ephemenral field for ado in tx history api response 2024-10-24 16:36:11 +04:00
sowle
d625ec94a5
made ts check for pow block template optional 2024-10-24 14:10:14 +02:00
sowle
5ae9b2038e
coretests: several_asset_emit_burn_txs_in_pool test improved and enabled 2024-10-23 23:45:19 +02:00
sowle
6087a1bd40
cpu miner minor improvements (sounds nice) 2024-10-23 22:14:10 +02:00
sowle
2b15aad320
minor improvement for blockchain_storage::create_block_template() 2024-10-23 21:59:05 +02:00
sowle
c90344ea47
an attempt to fix incorrect PoW block template creation in case when there are lots of PoS blocks 2024-10-23 21:52:33 +02:00
cryptozoidberg
f08d8797a0
fixed http-forwarding issue 2024-10-23 20:05:03 +04:00
cryptozoidberg
a8a188b754
workaround fix for old android sdk with old boost(with missing pfr) v3 (shame on me) 2024-10-23 15:05:46 +04:00
cryptozoidberg
5387a7711c
workaround fix for old android sdk with old boost(with missing pfr) v2 2024-10-23 15:01:43 +04:00
cryptozoidberg
fd810d5e29
workaround fix for old android sdk with old boost(with missing pfr) 2024-10-23 14:47:17 +04:00
zano build machine
5e4fae1246 === build number: 355 -> 356 === 2024-10-23 13:22:54 +03:00
sowle
bd473960e4
testnet: hardforks heights reset 2024-10-23 12:22:32 +02:00
zano build machine
d3fc6b955f === build number: 354 -> 355 === 2024-10-23 12:27:24 +03:00
sowle
635cea55e0
testnet: P2P_DEFAULT_PORT calculation pattern changed 2024-10-23 11:26:34 +02:00
sowle
88fa0bca64
readme: Boost version updated 2024-10-23 11:04:12 +02:00
zano build machine
312444aa48 === build number: 353 -> 354 === 2024-10-23 04:41:18 +03:00
sowle
6d7923b7e3
hf5 min build number set to 354 2024-10-23 03:40:43 +02:00
sowle
109b187426
daemon_commands_handler fixed 2024-10-23 03:33:23 +02:00
sowle
fd1ddf5ffc
=== version bump: 2.0.2.352 -> 2.1.0.353 === 2024-10-23 02:01:20 +02:00
sowle
7d93211b9f
testnet relaunch (currency formation version: 98 -> 99) 2024-10-23 02:00:10 +02:00
cryptozoidberg
61ac4dd356
some clarity on opt_amount 2024-10-22 20:45:17 +04:00
cryptozoidberg
0c35b75a9d
Merge branch 'develop' into emmit_burn_refactoring 2024-10-22 20:42:10 +04:00
sowle
d23fa1911e
unit_tests: asset_id serializations test: WIP 2024-10-22 18:27:17 +02:00
cryptozoidberg
05d8c27577
cake wallet fixes in cmake 2024-10-22 20:07:03 +04:00
sowle
121067e36d
Merge branch 'develop' into emmit_burn_refactoring
# Conflicts:
#	src/wallet/wallet2.cpp
#	tests/unit_tests/multiassets_test.cpp
2024-10-22 15:58:29 +02:00
Stёpa Dolgorukov
8cc826f5b3
unit_tests: edit the "p2p_client_version.test0" (#471)
* Unit tests: implement the "p2p_client_version.test0"

* Unit tests: edit the "p2p_client_version.test_0"

* Change a default value for a commit identifier on a non empty expected value

* Format the source text

* Fix the test

* Comment on the cases where results differ on Windows, GNU/Linux
2024-10-22 14:48:29 +02:00
Stёpa Dolgorukov
0cd719474b
unit_tests: reimplement "get_or_calculate_asset_id" tests, fix "get_or_calculate_asset_id" due to serialization changes (#467) 2024-10-22 14:47:36 +02:00
Stёpa Dolgorukov
fbf0d413a8
Get rid of the compiler warning "not all control paths return a value" (#472) 2024-10-22 14:34:19 +02:00
cryptozoidberg
1968608018
fix for android 2024-10-22 14:46:28 +04:00
sowle
ac51ccbf8c
gcc compilation fixed 2024-10-21 20:51:27 +02:00
sowle
6a32f3f26d
readme: Boost minimum version bumped to 1.75 because of boost::pfr 2024-10-21 20:24:13 +02:00
sowle
9cd1121c75
Merge branch 'develop' into emmit_burn_refactoring 2024-10-21 20:21:03 +02:00
sowle
9b033842ab
Merge branch 'master' into develop 2024-10-21 20:20:25 +02:00
sowle
9d259f5455
unit_tests: get_or_calculate_asset_id_* made compilable (but still not runnable) 2024-10-21 20:19:49 +02:00
sowle
e9e7bbf0c5
some fixes in assets handling 2024-10-21 19:17:04 +02:00
cryptozoidberg
aeb313a72c
fixed bugs in ado transition 2024-10-21 19:51:31 +04:00
cryptozoidberg
fcb5513d68
Update README.md 2024-10-21 18:56:52 +04:00
sowle
42b5f32116
test code for wallet2::update_asset 2024-10-21 14:21:55 +02:00
sowle
b2b4342c14
Merge branch 'develop' into emmit_burn_refactoring
# Conflicts:
#	src/version.h.in
#	tests/core_tests/multiassets_test.cpp
2024-10-21 12:42:54 +02:00
sowle
ecc6cc4605
coretests: several_asset_emit_burn_txs_in_pool test added 2024-10-21 12:39:33 +02:00
sowle
3b1f08676e
warning fixed 2024-10-21 12:37:52 +02:00
cryptozoidberg
97b145f8b6
fixes in a coretests related to ado-operations 2024-10-20 23:08:44 +04:00
cryptozoidberg
2dd029fb5d
fixed multiassets_test.cpp 2024-10-20 15:57:47 +04:00
sowle
60423e71b8
boost serialization for crypto::scalar_vec_t and scalar_mat_t 2024-10-20 01:57:30 +02:00
cryptozoidberg
9dc293ec04
core and wallet fixed, coretests still broken 2024-10-19 22:53:43 +04:00
cryptozoidberg
f3618e6418
construc_tx compilation fixed 2024-10-19 21:33:42 +04:00
cryptozoidberg
844e5b823f
wallet2.cpp compilation fixed 2024-10-19 18:50:11 +04:00
cryptozoidberg
1fe0cd17ad
wallet2: implemented proper versioning in serialization asset_descriptor_* structs etc 2024-10-19 17:49:38 +04:00
sowle
0930090365
resurrected asset_owner_pub_key_v 2024-10-18 13:49:21 +02:00
sowle
2632446ee5
core: asset operation refactoring WIP 2024-10-18 03:15:33 +02:00
sowle
7345096a91
Merge branch 'release' into emmit_burn_refactoring
# Conflicts:
#	src/version.h.in
#	tests/functional_tests/crypto_tests_performance.h
2024-10-17 23:38:55 +02:00
cryptozoidberg
2ba22bc53b
fixed typos and minor changes in currency_format_utils.cpp 2024-10-18 01:15:47 +04:00
sowle
7205312837
asset ticker/tull_name regexp updated 2024-10-17 22:30:31 +02:00
cryptozoidberg
b5a44b1698
removed temporary code 2024-10-18 00:27:18 +04:00
cryptozoidberg
b2e9872645
implemented proper versioning in serialization asset_descriptor_* structs + serialization refactoring + boost serialization maps versioning self-vaidation 2024-10-18 00:26:30 +04:00
Stёpa Dolgorukov
40539c1f9d
coretests: edit the test "asset_current_and_total_supplies_comparative constraints" (#469)
* Coretests: implement the test "asset_current_and_total_supplies_comparative_constraints"

* Core tests: correct the test "asset_current_and_total_supplies_comparative_constraints"

* Add a return statement to the body end of the "asset_current_and_total_supplies_comparative_constraints::assert_asset_beta_registered" function
2024-10-17 17:58:48 +02:00
sowle
3c23d42ae4
minor refactoring around crypto::pod_to_hex (added generalized buff_to_hex + performance test) 2024-10-16 00:01:43 +02:00
sowle
5d429e1e76
Merge branch 'release' into develop
# Conflicts:
#	src/version.h.in
2024-10-15 17:39:11 +02:00
sowle
9186119620
=== build number: 349 -> 352 === 2024-10-15 17:35:13 +02:00
sowle
4af367fb5e
new limitations for asset ticker and full_name (wip) 2024-10-15 17:33:46 +02:00
cryptozoidberg
2c72622d7e
merge from develop 2024-10-15 17:57:50 +04:00
cryptozoidberg
ca51bd4886
fixing RPC API for burn 2024-10-15 17:54:50 +04:00
Stёpa Dolgorukov
b836742f66
coretests: improve of the test "tx_pool_semantic_validation" (#465)
* Coretests: implement the test "tx_pool_semantic_validation"

* Play the test "tx_pool_semantic_validation" on the HF 3

* Delete an extra space after the ":"

* Remove an extra adding of objects to the transaction

* Create the input objects of the specified type in the "unsupported input type" case

* Modify the function bodies "inputs_sum", "outputs_sum" to be short

* Remove adding output to the transaction in the cases "inputs amount overflow", "two entries of the same type in extra"

* Get rid of use the object "image" of the type key_image in the case "equal key images in inputs"
2024-10-15 02:30:05 +02:00
Stёpa Dolgorukov
c344739de9
unit_tests: implement the "p2p_client_version.test0" (#466) 2024-10-14 20:41:50 +02:00
sowle
4bb068f056
point_t::operator==() fixed and optimized + various tests 2024-10-12 03:05:07 +02:00
sowle
0a055e892c
Merge commit 'e58b20ae5b62745513b8451af1ae195c9c6a8e20' into release 2024-10-12 03:04:17 +02:00
zano build machine
d06ba31125 === build number: 350 -> 351 === 2024-10-12 04:02:03 +03:00
sowle
5d15ed1c15
point_t::operator==() fixed and optimized + various tests 2024-10-12 03:01:33 +02:00
sowle
b1c70ac2bb
=== version: 2.0.1 -> 2.0.2 === 2024-10-11 05:41:36 +02:00
zano build machine
52bd48dbc3 === build number: 349 -> 350 === 2024-10-10 23:47:36 +03:00
sowle
a307862320
Merge branch 'concise' into develop 2024-10-10 21:23:10 +02:00
sowle
bfa68e4b88
an attempt to fix gcc compilation 2024-10-10 20:45:43 +02:00
sowle
d92a54045b
Merge branch 'develop' into concise 2024-10-10 19:11:50 +02:00
sowle
e58b20ae5b
coretests: test asset_current_and_total_supplies_comparative_constraints was temporary disabled 2024-10-10 19:11:30 +02:00
sowle
986f7dc7d3
minor improvements 2024-10-10 15:20:42 +02:00
Stёpa Dolgorukov
cf8004050c
coretests: correct the test "asset_current_and_total_supplies_comparative_constraints" (#468)
* Coretests: implement the test "asset_current_and_total_supplies_comparative_constraints"

* Core tests: correct the test "asset_current_and_total_supplies_comparative_constraints"
2024-10-10 15:10:25 +02:00
sowle
02aeaa2078
wallet2 : transfer_flags_to_str updated to support recently added flags 2024-10-09 18:10:17 +02:00
sowle
93fdf0e677
functional tests: transactions flow test fixed 2024-10-09 17:48:41 +02:00
sowle
3a6e0c0f2f
Merge branch 'develop' into concise
# Conflicts:
#	src/wallet/wallet2.cpp
#	src/wallet/wallet2_base.h
2024-10-09 01:03:02 +02:00
Stёpa Dolgorukov
3daaad6d43
coretests: implemented test "asset_current_and_total_supplies_comparative_constraints" (#464) 2024-10-08 17:30:23 +02:00
sowle
4e750bf1b0
an attempt to make the merge less freaking crazy 2024-10-08 03:46:40 +02:00
cryptozoidberg
e77831f1f9
little tweak on wallet unconfirmed balance 2024-10-01 20:31:42 +04:00
cryptozoidberg
fc3922996d
added comments to JS code 2024-10-01 15:59:27 +04:00
cryptozoidberg
74b0e6d70f
added secp256k1_ecdsa example in JS/ethers 2024-10-01 15:53:33 +04:00
zano build machine
890b3155b8 === build number: 348 -> 349 === 2024-09-30 13:00:02 +03:00
cryptozoidberg
d992a8bdc3
merged lates UI 2024-09-30 13:57:21 +04:00
sowle
27e310bb84
gcc compilation fixes 2024-09-30 05:06:17 +02:00
cryptozoidberg
744522f3ca
minor changes relatd to secp256k1_ecdsa integration 2024-09-29 23:31:22 +04:00
sowle
53eefa044a
Merge branch 'develop' into release 2024-09-28 03:18:34 +02:00
zano build machine
2badfead11 === build number: 347 -> 348 === 2024-09-28 04:18:10 +03:00
Stёpa Dolgorukov
c1264169cc
Coretests: implement "tx_pool_semantic_validation" test (#462) 2024-09-28 03:17:36 +02:00
sowle
deb74ad9d0
predownload updated up to height 2829200 2024-09-28 03:15:38 +02:00
sowle
4438949480
Merge remote-tracking branch 'origin/develop' into release 2024-09-27 19:08:02 +02:00
zano build machine
ffb90714d6 === build number: 346 -> 347 === 2024-09-27 20:07:40 +03:00
sowle
dd85ad7fce
ui update (fixed wrong commit id) 2024-09-27 17:43:29 +02:00
sowle
d71d82b690
Merge branch 'develop' into release 2024-09-27 13:58:39 +02:00
sowle
48b3796f66
=== version: 2.0.0 -> 2.0.1 === 2024-09-27 13:58:25 +02:00
zano build machine
83b4dd9b36 === build number: 345 -> 346 === 2024-09-27 14:56:11 +03:00
sowle
39b4646e5d
mainwindow: removed redundant param for drop_secure_app_data() 2024-09-27 13:55:10 +02:00
zano build machine
0fafe09544 === build number: 344 -> 345 === 2024-09-25 23:17:33 +03:00
sowle
a9de7944dd
fixed an old error in stratum server when incorrect worker's name (!="miner") invalidates mining address that was already set in daemon 2024-09-25 21:05:02 +02:00
sowle
b8afa3f9c5
gcc warning fixed 2024-09-25 19:06:24 +02:00
zano build machine
565e950072 === build number: 343 -> 344 === 2024-09-25 19:42:09 +03:00
sowle
b1a136561d
testnet: set hardfork 5 height to 241750 2024-09-25 18:32:18 +02:00
zano build machine
f3eceda66b === build number: 342 -> 343 === 2024-09-25 06:25:36 +03:00
sowle
426ca5a22b
p2p: clients with outdated versions now rejected by p2p upon hf activation as well (+tied to hf min build number) 2024-09-25 04:13:41 +02:00
sowle
b77419afc7
runtime config: min build number introduced and tied to hardfork 2024-09-25 04:10:29 +02:00
sowle
8758f6dc79
utils: parse_client_version, parse_client_version_build_number() implemented + unit tests stub 2024-09-25 04:03:57 +02:00
sowle
e0c4a3ec42
epee: added support of "000" to string_to_num_fast 2024-09-25 04:02:47 +02:00
sowle
8c9582d0f7
coretests: eth_signed_asset_basics, eth_signed_asset_via_rpc made HF5-only 2024-09-24 16:00:25 +02:00
sowle
75e30c1372
fixed a warning 2024-09-24 15:59:43 +02:00
zano build machine
39201f3d4a === build number: 341 -> 342 === 2024-09-24 06:37:23 +03:00
sowle
b5e0b21f13
core: asset_operation_ownership_proof_eth is only allowed only since HF5 2024-09-24 05:36:40 +02:00
sowle
cf32e44926
reverted a minor forgotten change in COMMAND_RPC_SEND_RAW_TX 2024-09-24 02:57:54 +02:00
sowle
f17dba64ce
Merge branch 'secp256k1' into develop 2024-09-24 02:14:12 +02:00
sowle
82403dba51
coretests: eth_signed_asset_basics fixed and then greatly improved 2024-09-24 01:34:08 +02:00
sowle
2fc37934cf
removed forcefully nullifying asset_id in emit_asset() (it's up to the caller now) 2024-09-24 01:26:04 +02:00
sowle
f0891a36e8
minor improvements 2024-09-24 01:24:42 +02:00
sowle
d610c38c4e
fixed an error in construct_tx when asset update operation is ongoing with standard owner (non eth) 2024-09-23 20:35:22 +02:00
sowle
7b9c728de2
core: minor readability improvement in validate_asset_operation_against_current_blochain_state() 2024-09-23 20:34:17 +02:00
sowle
c117a76a04
upstream changes 2024-09-23 14:33:22 +02:00
sowle
08281059fb
Merge branch 'develop' into secp256k1
# Conflicts:
#	src/gui/qt-daemon/layout
#	src/simplewallet/simplewallet.cpp
#	src/version.h.in
#	tests/core_tests/chaingen_main.cpp
#	tests/core_tests/multiassets_test.cpp
#	tests/core_tests/multiassets_test.h
#	tests/unit_tests/multiassets_test.cpp
2024-09-23 14:24:00 +02:00
sowle
ef5c1f9c03
coretests: gcc compilation fixed 2024-09-23 06:15:23 +02:00
sowle
7c781ca0ff
chaingen: eth_signed_asset_via_rpc test added 2024-09-23 05:40:16 +02:00
sowle
e737bf5e02
chaingen: check_balance_via_wallet() various improvements 2024-09-23 05:39:40 +02:00
sowle
8ffbfbe60a
minor improvements 2024-09-23 05:38:47 +02:00
sowle
b66c0efc2b
wallet rpc: implemented support for third-party external asset operations signing + various 2024-09-23 05:37:36 +02:00
sowle
44b19dd070
wallet rpc: send_ext_signed_asset_tx call implemented 2024-09-23 05:34:55 +02:00
sowle
bb758a916a
wallet2: assets-related tx generation refactored 2024-09-23 05:29:57 +02:00
sowle
e414752976
refactored asset ownership handling in tx construction 2024-09-23 05:27:46 +02:00
sowle
3c9d6666cd
wallet2: various improvements 2024-09-23 05:25:24 +02:00
sowle
5f1defc5a1
core validation: additional condition validate_ado_ownership() 2024-09-23 05:19:58 +02:00
sowle
3d1ac6124e
core rpc: decrypt_tx_details call implmented 2024-09-23 05:17:00 +02:00
sowle
9d06106a78
fxed arguments order for cast_assign_a_to_b() 2024-09-23 05:15:28 +02:00
sowle
37e62ac079
various improvements 2024-09-23 05:13:26 +02:00
sowle
9d213b19b1
construct_miner_tx() doesn't clear result tx anymore, allowing to pass additional data in extra 2024-09-17 17:59:37 +02:00
Stёpa Dolgorukov
35427f8381
coretests: alt_chain_and_block_tx_fee_median test (#456)
* coretests: alt_chain_and_block_tx_fee_median test

* Run test "alt_chain_and_block_tx_fee_median" on run core tests

* Edit the test preamble
2024-09-16 22:13:49 +02:00
zano build machine
a8adcc07b7 === build number: 340 -> 341 === 2024-09-14 20:52:55 +03:00
cryptozoidberg
17aebd29b5
implemented custom seed option(experimental) 2024-09-14 21:46:52 +04:00
Stёpa Dolgorukov
9d10050325
coretests: asset_operation_in_consolidated_tx test added (#459)
* coretests: Implement "asset_operation_in_consolidated_tx" test
* Define "construct_tx" overload with a generation context argument

---------

Co-authored-by: crypto.sowle <crypto.sowle@gmail.com>
2024-09-12 22:29:09 +02:00
zano build machine
77d6939411 === build number: 339 -> 340 === 2024-09-12 17:05:49 +03:00
sowle
43602031b8
gui: show_notification slot added + minor improvements (logs) 2024-09-12 16:05:08 +02:00
zano build machine
41ef9caf40 === build number: 338 -> 339 === 2024-09-12 07:10:06 +03:00
sowle
d083f54edd
gui update 2024-09-12 06:09:23 +02:00
sowle
7fbfec3441
minor improvements (now unit_tests should be autoexecuted each commit) 2024-09-12 02:39:20 +02:00
sowle
ab73f0d19f
coretests: asset_operation_and_hardfork_checks test fixed 2024-09-11 22:36:54 +02:00
cryptozoidberg
8904cc20c4
fixed serialization test 2024-09-10 18:49:19 +04:00
cryptozoidberg
2a2987b17a
concise mode: last setings for production and tests 2024-09-09 18:26:16 +04:00
cryptozoidberg
1eeb9a4a81
wallet truncating fixed all core tests 2024-09-08 22:42:31 +04:00
Stёpa Dolgorukov
dc76fb9051
unit_tests: fixes for multiassets.get_or_calculate_asset_id_*
* Create multiassets test

* Correct an indentation

* Remove unnecessary assertions in cases of ASSET_DESCRIPTOR_OPERATION_UNDEFINED

* Correctly specify a string that represents the serialized object
2024-09-07 02:12:44 +02:00
Stёpa Dolgorukov
d74a04d6df
coretests: asset_operation_and_hardfork_checks test added
* Implement "asset_operation_and_hardfork_checks" test

* Run "asset_operation_and_hardfork_checks" test on core tests run
2024-09-06 13:57:14 +02:00
cryptozoidberg
9c2e2bb0f8
multiple fixes 2024-09-04 23:04:44 +04:00
Stёpa Dolgorukov
0d3e90f4a5
coretests: asset_operation_and_hardfork_checks test added 2024-09-02 21:26:39 +02:00
cryptozoidberg
ca09405491
core tests working 2024-09-02 21:44:41 +04:00
cryptozoidberg
77a928c78a
wallet compiled ok 2024-09-01 21:23:58 +04:00
cryptozoidberg
4b9a457e64
initial changes on wallet file size/memory consumption improvements 2024-08-31 22:38:23 +04:00
sowle
c82809a0b9
Merge branch 'develop' into secp256k1
# Conflicts:
#	src/wallet/wallet2.cpp
2024-08-28 19:33:26 +02:00
sowle
0b7a138abd
attempt to fix macos compilation 2024-08-27 19:50:05 +02:00
zano build machine
bc3077e429 === build number: 337 -> 338 === 2024-08-27 19:53:11 +03:00
sowle
62c02dab24
minor improvements 2024-08-27 18:52:34 +02:00
sowle
ee93fc00e6
updated ui 2024-08-27 18:48:10 +02:00
sowle
4d6291d7ff
rpc: find_outs_in_recent_blocks RPC implemented 2024-08-22 15:30:51 +02:00
sowle
47a1bd985d
unit_tests: fix for a gcc warning 2024-08-20 18:27:17 +02:00
Stёpa Dolgorukov
443386489c
unit tests: wallet_seed.{timestamp_from_word, word_from_timestamp} added + typo fixed (#450)
* Create wallet_seed.{timestamp_from_word, word_from_timestamp} tests
* Rename functions that convert a word to a timestamp, a timestamp to a word
* Make an implementation of the test in the source code shorter
2024-08-20 17:23:21 +02:00
Stёpa Dolgorukov
9e6faffb49
Create multiassets test (#449) 2024-08-19 12:13:56 +02:00
cryptozoidberg
fde28efdc5
latest fixes for cake wallet 2024-08-14 23:21:19 +04:00
sowle
0c90262e8a
conn_tool: fixed minor error 2024-08-13 21:05:48 +02:00
sowle
f0c7d57c41
LMDB: implemented experimental conversion from 4k pages to 16k pages (untested) 2024-08-13 21:04:51 +02:00
sowle
9f0fa8a390
wallet rpc: parameter renamed 2024-08-13 19:22:48 +02:00
sowle
88a1e96820
wallet rpc: split destinations by default (for users convenience) 2024-08-13 02:07:25 +02:00
sowle
2c06293f24
added additional check for incorrect asset operation type to get_or_calculate_asset_id() 2024-08-13 01:10:22 +02:00
sowle
bc552ff635
kv serialization for asset_descriptor_operation 2024-08-13 01:04:14 +02:00
sowle
faa95dd555
use boost::optional in asset_descriptor_base to avoid gcc compilation issues 2024-08-12 20:14:31 +02:00
sowle
19c818ed9b
minor improvements 2024-08-12 20:09:22 +02:00
sowle
b861d854a9
boost::shared_ptr ->std::shared_ptr 2024-08-12 20:04:18 +02:00
sowle
764e5a2adf
kv serialization support for std::shared_ptr 2024-08-12 19:41:55 +02:00
cryptozoidberg
e5f0fe6e76
attempt to fix broken compilation for android(and keep ios healthy with std::filesystrem) 2024-08-09 19:20:09 +04:00
cryptozoidberg
820d5a88ac
test data for new forkchoice rule generated(fork_choice_rule_test.fork_choice_rule_test_hf4) 2024-08-08 21:04:52 +04:00
cryptozoidberg
08e2f0fbf1
fixed space-failing of the seed phrase 2024-08-08 15:55:50 +04:00
cryptozoidberg
44d3317dd2
replacing conflicting namespace 2024-08-08 11:22:21 +04:00
cryptozoidberg
f48811ff44
attempt to fix filesystem crosscompiling 2024-08-08 10:04:44 +04:00
zano build machine
79fdecce32 === build number: 336 -> 337 === 2024-08-07 18:26:53 +03:00
cryptozoidberg
1cbb2eca1b
seed doctor implemented 2024-08-07 19:18:44 +04:00
cryptozoidberg
592fe81a47
fix for emmit api 2024-08-06 15:51:36 +04:00
sowle
389662b8c9
gcc compilation fix (2) 2024-08-02 16:14:23 +02:00
sowle
f8c54492f1
gcc compilation fix 2024-08-02 14:11:32 +02:00
sowle
e816cd969c
minor improvements 2024-08-02 12:36:08 +02:00
sowle
896eadd77b
coretests: eth_signed_asset_basics test added 2024-08-02 12:35:46 +02:00
sowle
27ecfad1d6
asset owner eth signer support for currency_format_utils and wallet2 2024-08-02 12:34:28 +02:00
sowle
fa4a2680f9
minor improvements for init_playtime_test_wallet_t() 2024-08-02 12:31:33 +02:00
sowle
e97b585659
crypto: eth_secret_key_to_public_key() implemented, other useful stuff for eth sig added 2024-08-02 12:00:35 +02:00
sowle
65af445ebb
Merge branch 'develop' into secp256k1 2024-08-02 11:56:53 +02:00
Stёpa Dolgorukov
a1a53012fb
Implement xtype_from_string tests for types int16_t, int32_t, int64_t (#447)
* Change macros for creating test names
* Add test for values of types int{16,32,64}_t

---------

Co-authored-by: sowle <crypto.sowle@gmail.com>
2024-08-01 23:10:19 +02:00
sowle
168281f862
coretests: tx_version_against_hardfork test added (not working yet due to few issues left intentionally) 2024-08-01 01:39:13 +02:00
zano build machine
132d2bf89f === build number: 335 -> 336 === 2024-07-26 14:02:37 +03:00
sowle
0a23950747
ui update 2024-07-26 13:01:34 +02:00
sowle
ef28b3ab71
Merge branch 'develop' into secp256k1 2024-07-26 12:10:57 +02:00
zano build machine
968051109a === build number: 334 -> 335 === 2024-07-26 13:04:43 +03:00
sowle
4365a76169
wallet: minor improvements 2024-07-26 04:53:32 +02:00
sowle
ac01843e27
wallet: sweep_below improved (fixed a couple of issues happening when there's a lot of small outs in the wallet) 2024-07-26 04:52:38 +02:00
sowle
449ac06070
simplewallet: balance and "balance raw" commands prioritize Zano native coins by showing it on the top row + minor improvements 2024-07-26 04:50:49 +02:00
sowle
fe98c140ac
wallet: minor refactoring for tx_too_big and other for clearness 2024-07-26 04:49:04 +02:00
sowle
712f66d3ee
set formal limit on tx input count to 256 (because of the asset surjection proof limits) 2024-07-26 02:22:21 +02:00
zano build machine
f0d82776b7 === build number: 333 -> 334 === 2024-07-25 15:51:12 +03:00
cryptozoidberg
12c5a0237b
fixed asset_emission_and_unconfirmed_balance 2024-07-24 23:49:00 +04:00
sowle
0bc14fa477
eth signature for CA: data structures + validate_ado_ownership() adaptation 2024-07-18 00:14:03 +02:00
sowle
ef73204960
added support for std::optional to src/serialization and boost serialization 2024-07-17 19:43:53 +02:00
cryptozoidberg
270bb925f5
updated documentation 2024-07-17 19:30:19 +04:00
sowle
3cb471c46c
Merge branch 'develop' into secp256k1 2024-07-15 21:41:12 +02:00
sowle
7c3d21e31f
coretests: minor fixes (gcc) 2024-07-13 00:31:49 +02:00
sowle
69a5d42d99
Merge branch 'release' 2024-07-12 13:57:57 +02:00
sowle
7d442b4c9a
coretests: gen_wallet_mine_pos_block adapted for HF4 2024-07-12 02:17:54 +02:00
sowle
b556f2ad86
minor improvements 2024-07-11 22:10:54 +02:00
sowle
567700635c
coretests: wallet_true_rpc_pos_mining test added 2024-07-11 22:10:37 +02:00
sowle
2582159a26
coretests: added ability to run "true" HTTP-RPC wallet tests via localhost connections 2024-07-11 22:09:55 +02:00
sowle
e17ede1649
rpc: set_ignore_connectivity_status() was ignored for some RPC, fixed 2024-07-11 22:04:42 +02:00
sowle
59ea01339d
Merge branch 'develop' into release 2024-07-11 21:34:59 +02:00
zano build machine
45eeb8c5f9 === build number: 332 -> 333 === 2024-07-11 22:34:29 +03:00
sowle
156c96fc42
minor bugfix in print_asset_info() 2024-07-11 21:32:18 +02:00
sowle
648f6954f4
wallet: allow to burn an asset up to zero 2024-07-11 21:21:22 +02:00
sowle
337e88254e
Merge branch 'develop' into release 2024-07-11 13:50:11 +02:00
zano build machine
c1d37852c5 === build number: 331 -> 332 === 2024-07-11 14:49:28 +03:00
sowle
55358fc420
ui update 2024-07-11 12:32:20 +02:00
sowle
bb439b0107
fixed a bug in transform_t_pod_array_to_hex_str_array() 2024-07-10 13:52:36 +02:00
sowle
1165101867
Merge branch 'develop' into release 2024-07-09 17:46:51 +02:00
zano build machine
ebd5815845 === build number: 330 -> 331 === 2024-07-09 18:46:08 +03:00
sowle
461f8b9b47
ui update 2024-07-09 17:45:44 +02:00
zano build machine
c50c5f42be === build number: 329 -> 330 === 2024-07-09 18:37:16 +03:00
sowle
8a8030c99b
Merge remote-tracking branch 'origin/dp_limits' into develop 2024-07-09 17:32:48 +02:00
zano build machine
f6400abaec === build number: 328 -> 329 === 2024-07-08 01:47:13 +03:00
sowle
f0aef9782a
Merge branch 'develop' into dp_limits 2024-07-07 22:34:31 +02:00
zano build machine
86e5af333f === build number: 327 -> 328 === 2024-07-07 23:33:39 +03:00
sowle
4ca10cfcb4
wallet: fixed a mistake in wallet2::finalize_transaction() fee check 2024-07-07 22:32:14 +02:00
zano build machine
c5d5311121 === build number: 327 -> 328 === 2024-07-07 22:40:54 +03:00
sowle
b844f2ddf8
simplewallet: asset_emit and asset_update now uses human-friendly amouts format + minor improvements 2024-07-07 20:40:33 +02:00
sowle
d3a4db9e37
set upper limit for the decimal point to to 18 in wallet2::deploy_new_asset() 2024-07-07 20:39:22 +02:00
zano build machine
1910715033 === build number: 326 -> 327 === 2024-07-07 21:37:23 +03:00
sowle
cdb9dd2f1f
unit tests: added a test for print_money_brief 2024-07-07 20:35:03 +02:00
sowle
e2998acc9d
print_fixed_decimal_point() and print_money_brief() fixed for too big decimal point values 2024-07-07 20:34:19 +02:00
sowle
bb6fa6f7bd
wallet: minor improvements over balance command 2024-07-07 20:33:06 +02:00
sowle
039b6674c4
coretests: asset_emission_and_unconfirmed_balance test added 2024-07-06 21:57:38 +02:00
sowle
e7ac63adb3
wallet2: minor improvement for wallet2::finalize_transaction() 2024-07-06 21:56:24 +02:00
sowle
4f33eb4078
minor improvements for fill_tx_rpc_payload_items() 2024-07-06 21:55:36 +02:00
sowle
11ba3489c3
Merge branch 'release' into develop 2024-07-06 21:55:04 +02:00
zano build machine
31ac5e4974 === build number: 325 -> 326 === 2024-07-06 18:16:52 +03:00
sowle
0eabc7b69e
fixed non-standard decimal point handlinig in wallets_manager::transfer() 2024-07-06 17:15:56 +02:00
sowle
b547e51719
Merge branch 'develop' into release 2024-07-05 18:01:49 +02:00
zano build machine
4d4e362c61 === build number: 324 -> 325 === 2024-07-05 19:01:13 +03:00
sowle
07c5256440
using of asset id clarified for docs 2024-07-05 18:00:22 +02:00
sowle
9973546472
wallet RPC: enforce null asset id in destinations for asset emit operation 2024-07-05 17:19:37 +02:00
cryptozoidberg
1ea5c1aa53
implemented burn assets API + fixed deploy asset API 2024-07-05 18:23:30 +04:00
sowle
e726ae9da6
Merge branch 'develop' into release 2024-07-04 20:14:27 +02:00
zano build machine
d0c65a04e7 === build number: 323 -> 324 === 2024-07-04 21:13:27 +03:00
sowle
3d69468cfd
wallet2: minor improvements for get_balance_str_raw() and get_asset_decimal_point() 2024-07-04 20:11:11 +02:00
zano build machine
a6808b4646 === build number: 322 -> 323 === 2024-07-03 05:37:56 +03:00
sowle
3154c7b72d
fixed select_indices_for_transfer() + several improvements to decimal_point=0 support 2024-07-03 01:40:40 +02:00
sowle
8aa1654a3f
=== build number: 321 -> 322 === 2024-07-02 20:59:07 +02:00
sowle
95e63b7b7e
wallet: minor improvement for get_transfers_str (aka list_outputs): mark locked transfers with * 2024-07-02 20:57:58 +02:00
sowle
28d841d114
wallet: fixed non-native coins error, incorrect mixin count and tx regeneration in sweep_below() 2024-07-02 20:57:00 +02:00
sowle
fe3a0ea39a
wallet: fixed incorrect decimal point for some log messages and not_enough_money error 2024-07-02 20:54:41 +02:00
sowle
3a3aed7469
simplewallet: fixed a bug with incorrect parsing of transfer amounts when the decimal point is non-standard + more verbose error messages 2024-07-02 20:51:47 +02:00
sowle
b6e84b460e
added decimal point support to currency::parse_amount() + minor refactoring 2024-07-02 20:49:51 +02:00
sowle
9150c31666
fixed wallet2::finalize_transaction() to correctly handle too big txs (and not to pass them to the daemon) 2024-07-02 17:22:07 +02:00
sowle
2b9caf2cb3
docs: some asset_descriptor fileds clarified a bit 2024-07-02 17:20:02 +02:00
sowle
fb22df4850
build: unused mdbx tools projects are excluded from the default MSVC build for convenience 2024-07-02 17:18:47 +02:00
sowle
d7cf27033c
forgotten include 2024-07-02 13:16:30 +02:00
sowle
f05d14a944
crypto: basic eth signature implementation + functional test 2024-07-02 13:15:48 +02:00
sowle
486fb05f73
updated submodule bitcoin-secp256k1 in attempt to fix gcc compilation issue 2024-07-01 21:35:27 +02:00
sowle
3b6fa728b7
added bitcoin-secp256k1 submodule at version 5.0 2024-07-01 14:14:00 +02:00
sowle
d94afc207c
Merge branch 'develop' into secp256k1 2024-07-01 13:58:37 +02:00
sowle
0e69e059fe
fixed incorrect end-of-object indentation in dump_as_json() and similar functions 2024-06-29 13:59:01 +02:00
sowle
4e20dad924
RPC API: added missing documentation examples 3 2024-06-28 19:51:28 +02:00
cryptozoidberg
05547c5c0d
added LICENSE file to root folder 2024-06-27 23:34:07 +04:00
zano build machine
41f9302fce === build number: 320 -> 321 === 2024-06-27 21:03:11 +03:00
sowle
b51b26cb14
ui update 2024-06-27 20:01:57 +02:00
sowle
c26d449630
RPC API: added missing documentation examples 2 2024-06-27 19:38:19 +02:00
sowle
d2b60b0090
RPC API: added missing documentation examples 2024-06-27 16:08:44 +02:00
sowle
21aae4496c
DOC_EXMP_AGGR added 2024-06-27 16:08:04 +02:00
sowle
8f25f0d460
bitcoin-secp256k1 submodule added + native crypto test 2024-06-26 21:15:44 +02:00
cryptozoidberg
7ff58b6b18
added missing documetation - 2 2024-06-26 22:29:58 +04:00
cryptozoidberg
e31e2730c9
added missing documetation 2024-06-26 22:02:03 +04:00
sowle
da5c484025
functional_tests/crypto_tests: all performance tests now have prefix "perf", all normal tests with "crypto" prefix will be run regularly since now 2024-06-26 17:30:55 +02:00
sowle
cee6e51cbb
unit_tests: tx_signatures_packing.1 fixed 2024-06-26 15:35:52 +02:00
sowle
d4d3ea1d23
unit_tests: p2p_client_version_test_1 fixed 2024-06-26 14:56:37 +02:00
cryptozoidberg
291d39383d
fixed description in simplewallet(reported by Gonbatfire) 2024-06-25 21:20:36 +04:00
sowle
c101a21010
warning fixed 2024-06-25 15:55:36 +02:00
sowle
5ab468be42
validate_tx_details_against_tx_generation_context implemented 2024-06-25 15:46:53 +02:00
sowle
5e8cfb9ee3
coretests: hard_fork_2_incorrect_alias_update fixed due to change in logic of wallet2::request_alias_update() 2024-06-25 14:41:36 +02:00
sowle
226c3653ac
minor improvements: CHECK_AND_ASSERT_EQ(), stream support for std::type_info 2024-06-24 23:28:47 +02:00
sowle
c21785add4
fix for #440 2024-06-24 12:16:42 +02:00
zano build machine
63c2a299a5 === build number: 319 -> 320 === 2024-06-22 21:37:45 +03:00
sowle
3882d024cb
simplewallet: display own assets with correct decimal point, get_asset_info() knows own assets, + minor fixes 2024-06-22 20:25:04 +02:00
sowle
6408ea007f
ui update 2024-06-22 19:55:14 +02:00
cryptozoidberg
c01e9a5862
added async call for 2-arguments slots 2024-06-19 14:45:53 +02:00
zano build machine
5f62c76a2f === build number: 318 -> 319 === 2024-06-19 00:55:44 +03:00
cryptozoidberg
af49225221
small tweak for bridge serialization 2024-06-17 22:13:07 +02:00
zano build machine
cb08646fc1 === build number: 317 -> 318 === 2024-06-17 01:42:12 +03:00
cryptozoidberg
2f535f011e
fixed get_assets_list api 2024-06-14 23:20:43 +02:00
cryptozoidberg
cdd435f042
added update alias api + coretest 2024-06-14 15:08:56 +02:00
cryptozoidberg
47e10e7209
added new api to update alias 2024-06-06 21:24:31 +02:00
cryptozoidberg
d622078ef9
added universal command that call rpc-api 2024-06-03 20:57:53 +04:00
cryptozoidberg
10c1f7f59a
added commands for transfer ownership over asset descripto 2024-06-02 21:12:06 +04:00
sowle
dd7d1d3109
greatly refactored alt block verification and improved it for post-HF4 era (now all updated tests should pass) 2024-06-01 22:06:21 +02:00
sowle
66fd58b8ee
coretests: many altchain tests adapted for post-HF4:
pos_altblocks_validation
  chain_switching_when_gindex_spent_in_both_chains
  alt_blocks_validation_and_same_new_amount_in_two_txs
  alt_blocks_with_the_same_txs
  chain_switching_when_out_spent_in_alt_chain_mixin
  chain_switching_when_out_spent_in_alt_chain_ref_id
2024-06-01 21:20:58 +02:00
sowle
7da72fcc89
chaingen: pos_block_builder adapted for HF4 and now can generate correct Zarcanum PoS blocks 2024-06-01 21:15:42 +02:00
sowle
66f2761f67
chaingen: find_global_index_for_output, generate_pos_block_with_given_coinstake adapted for HF4; decode_output_amount_and_asset_id, decode_native_output_amount_or_throw added 2024-06-01 21:12:26 +02:00
sowle
fdc8bf19e0
gcc compilation fix 2024-05-31 16:05:52 +02:00
sowle
c92ca6fb93
chaingen: --run-single-test now accepts specific HF, e.g.: --run-single-test=test_name@4 2024-05-31 15:51:42 +02:00
sowle
092e0f1e60
minor improvements, typos, log msgs 2024-05-31 15:49:55 +02:00
cryptozoidberg
d0bad4213a
fixed bug in rpc asset deploy function 2024-05-25 01:11:30 +04:00
sowle
0c1fe0cf80
Dockerfile brought up-to-date 2024-05-21 02:17:58 +02:00
sowle
cc79aa87b3
Merge branch 'release' 2024-05-16 20:35:43 +02:00
sowle
db1dedbb0a
Merge branch 'develop' into release 2024-05-16 14:47:15 +02:00
zano build machine
9795460468 === build number: 316 -> 317 === 2024-05-16 14:11:53 +03:00
sowle
155181d899
ui update 2024-05-16 13:04:45 +02:00
sowle
071e02f278
Merge branch 'develop' into release 2024-05-14 12:35:38 +02:00
zano build machine
4c2ac48337 === build number: 315 -> 316 === 2024-05-14 13:34:09 +03:00
sowle
b154d84330
ui update 2024-05-14 12:33:22 +02:00
sowle
05f4a4e482
Merge branch 'develop' into release 2024-05-14 11:37:18 +02:00
zano build machine
01a8fdda68 === build number: 314 -> 315 === 2024-05-14 12:36:49 +03:00
sowle
2abe23c5e6
ui update 2024-05-14 11:35:55 +02:00
sowle
b91d902791
Merge branch 'develop' into release 2024-05-13 15:47:01 +02:00
zano build machine
df6fa3f7c5 === build number: 313 -> 314 === 2024-05-13 16:45:05 +03:00
cryptozoidberg
10c451f3b7
Added PoS grinding attack fuse 2024-05-13 16:51:13 +04:00
sowle
5342440fd6
Merge branch 'develop' into release 2024-05-10 17:01:19 +02:00
zano build machine
7237867f15 === build number: 312 -> 313 === 2024-05-10 18:00:01 +03:00
sowle
88d94fde3f
ui update 2024-05-10 16:59:10 +02:00
sowle
348e263ebe
Merge branch 'develop' into release 2024-05-09 21:20:16 +02:00
zano build machine
e45dbb4f2c === build number: 311 -> 312 === 2024-05-09 16:43:31 +03:00
sowle
4bdfb47fc3
ui update 2024-05-09 15:42:49 +02:00
zano build machine
525132cf11 === build number: 310 -> 311 === 2024-05-08 22:44:29 +03:00
cryptozoidberg
6655a6feaf
attempt to fix file with wrong item in last m_last_zc_global_indexs 2024-05-08 23:43:52 +04:00
cryptozoidberg
7ff0463587
add wallet prefix to log 2024-05-08 22:07:43 +04:00
zano build machine
1609631431 === build number: 309 -> 310 === 2024-05-08 21:01:12 +03:00
cryptozoidberg
fe3c3d731b
added extra logs for wallet issue - 2 2024-05-08 21:59:30 +04:00
cryptozoidberg
14a0be050e
added extra logs for wallet issue 2024-05-08 21:54:30 +04:00
sowle
030dd348b4
Merge branch 'develop' into release 2024-05-08 01:46:10 +02:00
zano build machine
e809d821a1 === build number: 308 -> 309 === 2024-05-08 02:44:25 +03:00
cryptozoidberg
fd25b5a8e5
attempt to fix wallet exception on alt blocks 2024-05-08 01:04:07 +04:00
zano build machine
4c2553a482 === build number: 307 -> 308 === 2024-05-07 17:43:07 +03:00
sowle
c68f841fdb
ui update 2024-05-07 16:42:37 +02:00
zano build machine
b56a0fb90c === build number: 306 -> 307 === 2024-05-05 23:25:41 +03:00
sowle
c6488622eb
temporary fix for ZC outs validation in validate_alt_block_input() 2024-05-05 22:19:16 +02:00
zano build machine
e40d9df2ec === build number: 305 -> 306 === 2024-05-04 22:27:57 +03:00
zano build machine
455ece8cba === build number: 304 -> 305 === 2024-05-04 05:28:48 +03:00
sowle
d9633d5b06
get_block_reward simplified ver 2024-05-04 03:48:14 +02:00
sowle
d52cb725d1
updated macos deployment target: 10.13 -> 10.15 (required for std::filesystem) 2024-05-04 03:24:15 +02:00
sowle
f7aab6f332
coretests: restored forgotten multisig_n_participants_seq_signing test 2024-05-04 03:18:40 +02:00
sowle
b3c44598b0
minor improvements & code cleanup 2024-05-04 03:17:56 +02:00
sowle
702817e351
fixed a potential issue in check_ms_input() 2024-05-04 03:16:28 +02:00
sowle
81ac6cf333
removed redundant hardfork check from check_tx_inputs(), because it's already in validate_tx_for_hardfork_specific_terms() 2024-05-04 03:15:13 +02:00
sowle
e38dfc1472
coretests: hardfork_4_pop_tx_from_global_index test added to cover uncovered areas in pop_transaction_from_global_index() 2024-05-04 02:35:51 +02:00
sowle
5500e943dd
did some refactoring around validate_miner_transaction()
code simplified
fixed an issue with already_generated_coins not taking block size penalty into consideration
2024-05-04 02:33:05 +02:00
sowle
e57709a67f
prevalidate_miner_transaction() now checks HF condition for the given height instead of the top height 2024-05-04 02:24:11 +02:00
sowle
2e75597365
code clean-up and minor improvements 2024-05-04 02:21:34 +02:00
zano build machine
a12fd42a8e === build number: 303 -> 304 === 2024-05-04 03:13:22 +03:00
sowle
5e07e3c4e0
an attempt to fix linux build 2024-05-04 02:05:17 +02:00
sowle
2b1c1094a6
fix for m_db_per_block_gindex_incs container (was not populated properly due to a bug in append_per_block_increments_for_tx()) 2024-05-03 18:39:26 +02:00
cryptozoidberg
7a0ec043a1
fixed issue with multithreadin and jwt rpc 2024-05-03 20:08:22 +04:00
cryptozoidberg
423b99cc5e
fixes in UI for latest qt and latest UI commits 2024-05-02 19:12:35 +04:00
cryptozoidberg
a853f77c00
added Debug config, replace boost to std (due to deadlock in boost guts) 2024-05-01 19:20:44 +04:00
cryptozoidberg
1d153834d9 fixed m3 simulator build for ios 2024-04-30 20:29:11 +04:00
cryptozoidberg
d718d876fc
added address field to get_seed_phrase_info 2024-04-27 23:26:32 +04:00
sowle
db4b841f57
minor fixes and code cleanup 2024-04-25 19:13:57 +02:00
zano build machine
89e6555e2a === build number: 302 -> 303 === 2024-04-25 18:00:29 +03:00
sowle
3ab93654f5
ui update 2024-04-25 16:59:42 +02:00
sowle
7fdc82a630
minor code cleanup 2024-04-25 16:46:36 +02:00
cryptozoidberg
1196423f02
fixes over documentation autogen 2024-04-22 23:29:00 +04:00
sowle
6f4e1465bc
utils: macosx_bild_uploader: increased attempts count (i.e. timeout) 2024-04-22 17:50:41 +02:00
sowle
15e653a8ae
minor refactoring: get_base_block_reward() now requires only block height (for clarity) 2024-04-22 17:45:10 +02:00
cryptozoidberg
b102d0d3b9
fixed command line to common style 2024-04-22 18:48:20 +04:00
zano build machine
47dfdf1e0b === build number: 301 -> 302 === 2024-04-22 17:31:56 +03:00
sowle
08a753b4c9
ui update 2024-04-22 16:30:42 +02:00
sowle
63dadb37c6
compilation fix for blockchain_storage::get_assets() 2024-04-22 01:25:28 +02:00
sowle
9f8ce4cc09
daemon RPC documentation added 2024-04-21 04:41:43 +02:00
cryptozoidberg
2e2d3c26b4
Moved UI to latest commit 2024-04-20 00:10:55 +04:00
cryptozoidberg
ad66a6db30
added get_assets_list command to daemon API 2024-04-20 00:07:38 +04:00
zano build machine
eae8fde294 === build number: 300 -> 301 === 2024-04-16 17:26:21 +03:00
sowle
530acf4662
wallet2::has_bare_unspent_outputs() was fixed for the testnet 2024-04-11 17:14:43 +02:00
sowle
e52ff16733
wallet2: fixed height upper limit in decoy request for pre-HF4 PoS mining (effective mostly for the testnet) 2024-04-11 17:00:36 +02:00
cryptozoidberg
e3d1956ba3
implemented RPC API for assets deployment 2024-04-11 14:29:03 +02:00
cryptozoidberg
c54f3fc1d8
added seed to wallet generation api 2024-04-10 19:31:01 +02:00
sowle
4f74046e62
Merge branch 'master' into develop 2024-04-10 19:14:51 +02:00
sowle
82e52e951a
build version: 299 -> 300 2024-04-10 19:13:58 +02:00
sowle
d1f7f436f8
build version: 299 -> 300 2024-04-10 19:13:13 +02:00
cryptozoidberg
ed62452853
hardfork 5 2024-04-10 19:10:32 +02:00
sowle
a39a3ddd55
merge master into develop 2024-04-10 17:47:08 +02:00
cryptozoidberg
3cde8738c2
added example values to wallet_provision_info 2024-04-10 14:52:46 +02:00
cryptozoidberg
53a27a4306
documented wallet_provision_info 2024-04-10 14:51:33 +02:00
cryptozoidberg
ef16abb41a
extra line break added 2024-04-10 14:47:28 +02:00
sowle
d3f3bb07e0
restarted testnet (build version bumped up to 299) 2024-04-10 14:24:59 +02:00
cryptozoidberg
ac63489325
last fixes for uri 2024-04-10 14:19:48 +02:00
cryptozoidberg
cb1f62d4ff
fixedbug with crash on autodoc 2024-04-10 14:19:48 +02:00
sowle
75cb3bcaf8
more compilation fixes 2024-04-10 13:49:44 +02:00
sowle
30eba2dadf
fixed compilation (handle_http_request_map definition) 2024-04-10 13:33:37 +02:00
cryptozoidberg
18650cda63
moved code to common header 2024-04-10 13:19:36 +02:00
sowle
e8280f7e42
coretests: fixed compilation & warnings 2024-04-10 12:16:45 +02:00
cryptozoidberg
a91ded81b0
and fixed another compilation issUe 2024-04-09 23:09:22 +02:00
cryptozoidberg
cd88249598
fixed few compilation issies 2024-04-09 23:00:27 +02:00
cryptozoidberg
3a792e9a8e
added wallet API complete documentation 2024-04-09 22:52:56 +02:00
zano build machine
42fda5eaf7 === build number: 297 -> 298 === 2024-04-09 23:22:56 +03:00
sowle
56b6260348
warning fixed 2024-04-09 22:21:42 +02:00
sowle
65dfe90526
wallet2: fixed sweep_bare_outs(), added new overloading for prepare_tx_sources() 2024-04-09 21:44:44 +02:00
sowle
021fbb7d37
coretests: added test hardfork_4_wallet_sweep_bare_outs which exposes a bug in sweep_bare_outs() where it fails if there's not enough decoys 2024-04-09 21:43:13 +02:00
zano build machine
19eb7baaa2 === build number: 296 -> 297 === 2024-04-08 19:33:30 +03:00
sowle
7be8865755
wallet2: fixed add_to_last_zc_global_indexs() 2024-04-08 18:31:06 +02:00
zano build machine
b8cc8818ee === build number: 295 -> 296 === 2024-04-08 14:54:06 +03:00
sowle
eddc3091a7
ui update 2024-04-08 13:52:03 +02:00
cryptozoidberg
7f0b99c25e
another good iteration on auto documenting feature 2024-04-07 16:43:55 +02:00
cryptozoidberg
63d4bde2d9
removed seed phrase from open wallet response 2024-04-06 19:23:19 +02:00
cryptozoidberg
a2307d45fd
fixed broken compilation 2024-04-06 18:54:02 +02:00
cryptozoidberg
0e87eb69b5
Merge branch 'release2' into develop 2024-04-06 17:23:21 +02:00
cryptozoidberg
e422b42ba6
fixes in lang tools 2024-04-06 17:22:44 +02:00
cryptozoidberg
b4ab654f11
fixed wallet bug in calculating last available global index in zarcanum era 2024-04-06 17:21:03 +02:00
cryptozoidberg
d4b29a30b5
fixes for gcc 2024-04-05 17:22:05 +02:00
cryptozoidberg
0b62abbca0
test changes 2024-04-05 17:22:05 +02:00
sowle
a142d39fc9
coretests: hardfork_4_wallet_transfer_with_mandatory_mixins test fixed 2024-04-05 17:20:40 +02:00
sowle
fa67466d20
wallet2: fix an issue in prepare_tx_sources() where some transfers may be locked if there's was exception during preparing phase 2024-04-05 14:09:27 +02:00
sowle
92c6a9d51d
coretests: hardfork_4_wallet_transfer_with_mandatory_mixins test added, exposing a bug where a wallet cannot spend coins before a specific sync process was done 2024-04-05 13:56:24 +02:00
sowle
737d7353a4
wallet2: minor code clean-up 2024-04-05 12:01:38 +02:00
cryptozoidberg
2c181de6a3
fixed serialization for hex-encoded array of pod items 2024-04-04 23:41:53 +02:00
sowle
95368faccd
yet another attempt to fix macOS warnings and errors (CMAKE_OSX_DEPLOYMENT_TARGET: 10.12 -> 10.13) 2024-04-04 20:58:02 +02:00
sowle
ea7e99f7d3
yet another attempt to fix macOS warnings and errors 2024-04-04 19:03:55 +02:00
sowle
60e8fcdc47
an attempt to fix macOS compilation 2024-04-04 18:01:26 +02:00
sowle
3f1968837f
dependencies version updated 2024-04-04 16:54:04 +02:00
sowle
9cd8e88ab4
an attempt to fix macos compilation 2024-04-04 16:34:43 +02:00
zano build machine
59f38273e3 === build number: 294 -> 295 === 2024-04-03 19:33:19 +03:00
sowle
88a0d072b0
msvc compilation fix 2024-04-03 18:24:03 +02:00
sowle
b5879f7360
gcc warning fixed 2024-04-03 17:18:47 +02:00
sowle
1f3ae7b725
wallet RPC: get_bare_outs_stats, sweep_bare_outs implemented + minor improvements 2024-04-03 16:45:33 +02:00
sowle
ab12614d9b
Merge branch 'release2' into develop 2024-04-03 16:43:11 +02:00
sowle
d69a47a46d
wallet: removed unnecessary setting of mix_att to hf4_minimum_mixins in finalize_transaction() 2024-04-02 22:03:09 +02:00
sowle
6e036356df
wallet: sweeping of bare unspent outputs implemented 2024-04-02 22:00:53 +02:00
cryptozoidberg
635f52d499
fix for compilation on macos 2024-04-01 16:50:14 +02:00
sowle
097420a66f
wallet2: is_transfer_ready_to_go, is_transfer_able_to_go made const 2024-04-01 15:32:00 +02:00
zano build machine
aab28aea8c === build number: 293 -> 294 === 2024-04-01 15:15:20 +03:00
sowle
5053bc9a6d
ui update 2024-04-01 14:11:07 +02:00
sowle
09c42ed0b4
Merge branch 'master' into develop 2024-04-01 14:06:16 +02:00
sowle
23ac3572cf
Merge branch 'release2' 2024-03-29 21:16:40 +01:00
zano build machine
23d2b93506 === build number: 292 -> 293 === 2024-03-29 22:42:10 +03:00
sowle
f2d6351211
simplewallet: minor improvements 2024-03-29 20:34:03 +01:00
cryptozoidberg
1a15109f4b
Merge branch 'release2' into develop 2024-03-29 18:57:26 +01:00
cryptozoidberg
79b5def9ba
Merge branch 'release2' 2024-03-29 18:54:37 +01:00
cryptozoidberg
c552916266
fix for mobile android build 2024-03-29 18:54:04 +01:00
sowle
e928d03ec7
Merge branch 'release2' 2024-03-29 17:09:26 +01:00
zano build machine
c375d6fa10 === build number: 291 -> 292 === 2024-03-29 18:31:42 +03:00
sowle
16be157add
simplewallet: fixed typo + logs 2024-03-29 16:31:12 +01:00
zano build machine
950c80a108 === build number: 290 -> 291 === 2024-03-29 17:54:22 +03:00
sowle
01c60fa07e
simplewallet: --pos-mining-defrag CLI option added 2024-03-29 15:53:51 +01:00
sowle
a45e42e0a5
handle ethash epoch context allocation errors by triggering an immediate stop via the critical error handler 2024-03-29 14:31:00 +01:00
cryptozoidberg
b0c92e28dd
added more logs for generate_unique_reversed_distribution 2024-03-28 21:19:57 +01:00
cryptozoidberg
31abc2d1bd
Merge branch 'develop' into autodoc 2024-03-28 19:28:33 +01:00
cryptozoidberg
b646939113
merge from release2 2024-03-28 19:28:13 +01:00
cryptozoidberg
b00fb7671e
added few fixes to autodoc 2024-03-28 19:24:11 +01:00
cryptozoidberg
312d500a36
fixed problem with decoy selection algo 2024-03-28 19:22:38 +01:00
cryptozoidberg
beb84c200d
Merge branch 'develop' into autodoc 2024-03-28 13:51:37 +01:00
cryptozoidberg
b8c97e3f70
fixed broken build 2024-03-28 13:51:13 +01:00
sowle
4d6aa1a4f9
wallet: minor fixes (logging) 2024-03-28 13:32:26 +01:00
sowle
d933a22154
wallet: set_pos_utxo_count_limits_for_defragmentation_tx() added, coretests: packing_outputs_on_pos_minting_wallet, pos_minting_tx_packing fixed 2024-03-28 13:29:00 +01:00
cryptozoidberg
a2b28806b1
added struct documentation macro 2024-03-28 13:04:23 +01:00
cryptozoidberg
73b7123906
Merge branch 'develop' into autodoc 2024-03-28 12:50:51 +01:00
cryptozoidberg
cfb4e481b4
Implemented auto documentation 2024-03-28 12:49:43 +01:00
sowle
f4da18cc3f
Merge branch 'master' into develop
# Conflicts:
#	src/currency_core/tx_pool.cpp
2024-03-27 23:52:24 +01:00
sowle
9f845bb73b
Merge branch 'release2' 2024-03-27 23:46:54 +01:00
cryptozoidberg
98d124860c
fixed macos compilation - 2 2024-03-27 23:22:10 +01:00
zano build machine
6f35ced052 === build number: 289 -> 290 === 2024-03-28 01:08:01 +03:00
cryptozoidberg
ad281664c3
fixed macos compilation 2024-03-27 23:07:38 +01:00
zano build machine
9cf3c80fba === build number: 288 -> 289 === 2024-03-28 00:23:34 +03:00
sowle
dd04d6367b
coretests: multiassets_basic_test improved to reflect recent changes with tx pool validation 2024-03-27 22:18:06 +01:00
sowle
754a29a709
wallet: defragmentation tx generation is now disabled by default 2024-03-27 22:15:13 +01:00
sowle
df7b6a3674
tx pool: added ability to disable tx validation for tests 2024-03-27 22:13:43 +01:00
zano build machine
b72a0593c6 === build number: 287 -> 288 === 2024-03-27 22:53:47 +03:00
cryptozoidberg
f3820c32f2
added log message for COMMAND_RPC_GETBLOCKTEMPLATE 2024-03-27 20:06:20 +01:00
cryptozoidberg
d2ee1b3fa8
added COMMAND_RPC_REMOVE_TX_FROM_POOL 2024-03-27 19:10:26 +01:00
cryptozoidberg
320816fd99
added test for getblocktemplate 2024-03-27 19:10:26 +01:00
sowle
69e68807bf
coretests: minor forgotten change 2024-03-27 18:57:30 +01:00
sowle
80fd303081
compilation fixed for gcc (by using universal references for process_type_in_variant_container_*) 2024-03-27 18:53:05 +01:00
sowle
709d16eb75
tx pool: asset operations basic validation on tx add 2024-03-27 17:18:17 +01:00
sowle
3eb711fbf8
tx_pool: is_tx_blacklisted() 2024-03-27 17:08:19 +01:00
sowle
806eb326d1
(cherry picked) tx_pool: add post-HF4 txs are now being check for balance proof. Core test hard_fork_4_consolidated_txs changed accordingly 2024-03-27 15:59:57 +01:00
cryptozoidberg
e5afb6b0c6
in the middle of refactoring autodoc 2024-03-27 15:52:30 +01:00
cryptozoidberg
3d76415af2
merge from develop 2024-03-26 21:24:32 +01:00
cryptozoidberg
46a7c9662e
Merge branch 'release2' into develop 2024-03-26 21:16:28 +01:00
cryptozoidberg
d03f47a9c7
merge from develop 2024-03-26 21:14:16 +01:00
cryptozoidberg
582fe4c8b1
merge from release2 2024-03-26 21:11:42 +01:00
zano build machine
7d3e3ae358 === build number: 286 -> 287 === 2024-03-26 21:58:01 +03:00
sowle
e1d7ea6302
asset emission: 1) fixed simplewallet's emit_asset command; 2) wallet2:emit_asset() now fix destinations for asset emission ad-hoc (null_pkey); 3) typos corrected 2024-03-26 19:57:31 +01:00
sowle
c2fa968835
daemon: 1) print_asset_info command added; 2) print_tx greatly improved; 3) fill_tx_rpc_details() now fills blob and object_in_json fields and use base64 encoding 2024-03-26 19:55:34 +01:00
sowle
6740a0df28
tx pool: short tx listing improved 2024-03-26 19:52:30 +01:00
sowle
0015c8934d
KV_SERIALIZE_BLOB_AS_BASE64_STRING() implemented 2024-03-26 19:51:02 +01:00
cryptozoidberg
7f134072f6
minor changes in error messages(to avoid misleading) 2024-03-26 19:22:45 +01:00
cryptozoidberg
6311c2078f
fixed RANDOM_OUTPUTS_FOR_AMOUNTS_FLAGS_COINBASE and added RANDOM_OUTPUTS_FOR_AMOUNTS_FLAGS_POS_COINBASE for future use 2024-03-26 16:35:18 +01:00
zano build machine
cceeda0588 === build number: 285 -> 286 === 2024-03-26 14:05:22 +03:00
cryptozoidberg
9af876ccaa
decoy selection algo refactoring 2024-03-25 21:56:46 +01:00
sowle
360417c5fc
=== build number: 284 -> 285 === 2024-03-25 17:28:28 +01:00
sowle
d83ec66775
fixed a bug in prepare_tx_sources_for_defragmentation_tx() causing old dust outs to prevent staking 2024-03-25 17:21:02 +01:00
sowle
2eac22d626
utils: configuration scripts for msvc2022 2024-03-24 18:53:26 +01:00
cryptozoidberg
721b027000
merge from release2 2024-03-24 15:56:58 +01:00
cryptozoidberg
3fb4f16db9
fore get rid of WALLET_GLOBAL_OUTPUT_INDEX_UNDEFINED 2024-03-24 15:50:53 +01:00
cryptozoidberg
83968977a1
current fixes 2024-03-24 13:48:08 +01:00
cryptozoidberg
60bb74cbb0
more consistent documentation code is working now 2024-03-23 15:45:24 +01:00
sowle
37d260a519
Merge branch 'master' into develop 2024-03-23 01:34:02 +01:00
zano build machine
7c3e2cbc70 === build number: 283 -> 284 === 2024-03-23 03:32:49 +03:00
sowle
cd0a635535
Merge branch 'release2' 2024-03-23 01:31:54 +01:00
sowle
f7a98ed7d1
wallet2: scan_not_compliant_unconfirmed_txs 2024-03-23 00:34:03 +01:00
sowle
6c2b1becdf
Merge branch 'master' into develop 2024-03-22 23:21:26 +01:00
sowle
8ec5aebd3c
minor log improvement 2024-03-22 23:20:10 +01:00
cryptozoidberg
3acd7667bc
fix for uninitialized data on transaction details(including fee) in unconfirmed transactions 2024-03-22 18:44:31 +01:00
cryptozoidberg
256206af09
more code on autodoc descriptions 2024-03-22 13:54:46 +01:00
cryptozoidberg
5d004cde02
merge from master 2024-03-22 00:16:42 +01:00
sowle
35049c26f3
Merge branch 'master' into develop 2024-03-21 23:04:56 +01:00
zano build machine
63940b1d2f === build number: 282 -> 283 === 2024-03-22 01:02:38 +03:00
cryptozoidberg
09d08baecc
fixed consensus bug related to miners motivations to include transactions 2024-03-21 23:01:33 +01:00
cryptozoidberg
2283a77104
more work on json/descriptions improvements 2024-03-21 22:57:55 +01:00
sowle
3628f1e18d
Merge branch 'master' into develop
# Conflicts:
#	src/version.h.in
2024-03-21 20:33:10 +01:00
sowle
e11ee0fa07
tx_pool: remove HF4-incompatible txs on load 2024-03-21 19:52:18 +01:00
cryptozoidberg
919790e808
some temporary commits 2024-03-21 14:31:40 +01:00
zano build machine
8f68ef56e2 === build number: 280 -> 281 === 2024-03-21 13:44:13 +03:00
sowle
f13d3e7b35
Merge branch 'master' into develop 2024-03-21 11:43:53 +01:00
zano build machine
1f5c862168 === build number: 279 -> 280 === 2024-03-21 13:42:15 +03:00
sowle
6f6636103e
Merge branch 'master' into develop
# Conflicts:
#	src/version.h.in
2024-03-21 11:40:26 +01:00
sowle
921b447b02
p2p: block old clients (<2.x) on in and out conn + build version bump to 280 2024-03-21 10:48:11 +01:00
cryptozoidberg
e51e56e825
Merge branch 'develop' into autodoc 2024-03-20 18:00:11 +01:00
cryptozoidberg
f15a8421f9
added call_wallet_rpc to avoid using of mw_select_wallet 2024-03-20 17:57:46 +01:00
cryptozoidberg
97c3460af8
autodoc inital code + cmake warningns + improvements over compilation performance 2024-03-20 14:45:29 +01:00
sowle
80e8392be0
code clean-up and logging improvements 2024-03-19 18:47:26 +01:00
zano build machine
5ba45867f7 === build number: 278 -> 279 === 2024-03-19 20:32:04 +03:00
sowle
1cffbaa9b8
ui update 2024-03-19 18:30:54 +01:00
cryptozoidberg
c03438ba23
fixed mw_get_wallets for simplewallet, fail-resistant whitelisti loading 2024-03-19 17:54:41 +01:00
cryptozoidberg
7a6883457b fix for MOBILE_WALLET_BUILD 2024-03-19 12:30:09 +00:00
sowle
1548ab662a
wallet2::get_current_tx_version() fixed 2024-03-19 01:40:45 +01:00
sowle
0455e81b4c
minor log improvement (take fee burning into account) 2024-03-19 01:35:36 +01:00
zano build machine
c14b5b6b21 === build number: 277 -> 278 === 2024-03-19 01:35:54 +03:00
zano build machine
30b6082ce5 === build number: 276 -> 277 === 2024-03-19 01:35:09 +03:00
cryptozoidberg
86e8446e42 Implemented JWT support in UI, multiple API improvements and fixes 2024-03-18 23:27:44 +01:00
zano build machine
2eb76a5fc8 === build number: 275 -> 276 === 2024-03-16 18:16:26 +03:00
sowle
7f851205a0
tx_pool: add post-HF4 txs are now being check for balance proof. Core test hard_fork_4_consolidated_txs changed accordingly 2024-03-16 14:57:25 +01:00
sowle
66cf29ccd3
coretests: hard_fork_2_alias_update_using_old_tx<> fixed 2024-03-15 19:58:44 +01:00
zano build machine
ad3b022fc1 === build number: 274 -> 275 === 2024-03-15 18:49:50 +03:00
cryptozoidberg
8c01aac391
Merge branch 'auth_impl' into develop 2024-03-15 16:47:54 +01:00
sowle
f538fc3a76
coretests: gen_crypted_attachments and fixed-hash tests 2024-03-14 22:04:38 +01:00
cryptozoidberg
ddbc8e2484
removed comment 2024-03-14 22:04:36 +01:00
cryptozoidberg
7e676e74e9
implemented JWT support in simplewallet 2024-03-14 21:55:22 +01:00
zano build machine
a8bfdc13ed === build number: 273 -> 274 === 2024-03-14 20:38:49 +03:00
sowle
724ce0ef1f
Merge branch 'release' into develop 2024-03-14 18:36:20 +01:00
sowle
d04abe0e48
fixed derivation hints for pre-HF4 consolidation txs 2024-03-14 18:28:47 +01:00
sowle
c5a55f1e85
coretests: hard_fork_4_consolidated_txs test finished, now it also checks derivation hints for normal and consolidated txs before and after HF4 2024-03-13 21:30:43 +01:00
sowle
41386a91c8
privacy improvement: one derivation hint per output (not per receiver as before) 2024-03-13 21:29:09 +01:00
sowle
b99bdb68df
wallet2: minor code cleanup 2024-03-13 21:26:39 +01:00
cryptozoidberg
bb3b893bd3
Merge branch 'develop' into auth_impl 2024-03-13 19:40:35 +01:00
cryptozoidberg
cf5e38e78f
implemented asset whitelisting RPC API 2024-03-13 18:36:53 +01:00
cryptozoidberg
21c1631825
auth basic r and d 2024-03-13 13:16:36 +01:00
zano build machine
2a33c5c7a0 === build number: 272 -> 273 === 2024-03-08 21:28:27 +03:00
cryptozoidberg
4ea976b887
latest UI 2024-03-06 19:10:42 +01:00
cryptozoidberg
1c1dc3d3e8
Merge branch 'master' into develop 2024-03-05 15:21:46 +01:00
sowle
82768a5538
Merge branch 'release' into develop 2024-02-26 18:13:45 +01:00
sowle
1790225997
Merge branch 'release' 2024-02-26 17:58:03 +01:00
zano build machine
056c5f10cc === build number: 271 -> 272 === 2024-02-26 16:00:08 +03:00
sowle
4abcd167ba
Merge branch 'develop' into release 2024-02-26 13:43:12 +01:00
zano build machine
692a34e427 === build number: 270 -> 271 === 2024-02-25 21:50:38 +03:00
cryptozoidberg
bd510f395c
pulled UI to lates version 2024-02-25 22:49:14 +04:00
cryptozoidberg
e860a0c15a
Reset wallet file due to auditable wallet fixes 2024-02-25 17:56:00 +04:00
cryptozoidberg
a88184bd9a
Merge branch 'develop' into mobile 2024-02-25 17:52:25 +04:00
zano build machine
aa7ddcdea8 === build number: 269 -> 270 === 2024-02-25 03:20:44 +03:00
sowle
789ed4a2d0
basic_db_accessor::get_t_object() made safe to be called before open() or reset_backend() 2024-02-25 01:19:48 +01:00
cryptozoidberg
e876a577cb tweak for boost compilation(needed for android) 2024-02-24 23:34:46 +04:00
zano build machine
000811e2ab === build number: 268 -> 269 === 2024-02-24 16:28:56 +03:00
cryptozoidberg
d04356b9a5
UI moved to latest commit 2024-02-24 17:27:43 +04:00
cryptozoidberg
ddc847f9d7
fixed staking in GUI 2024-02-24 17:15:04 +04:00
zano build machine
1bda445cdb === build number: 267 -> 268 === 2024-02-23 21:32:25 +03:00
cryptozoidberg
13e21c0e7e
quick fix for UI being to early on rpc calls 2024-02-23 22:31:44 +04:00
zano build machine
91ec911213 === build number: 266 -> 267 === 2024-02-23 18:43:21 +03:00
cryptozoidberg
72969e1bb3
pulled UI 2024-02-23 19:40:24 +04:00
cryptozoidberg
446ab3b5b7
minor fixes for auditable wallet 2024-02-23 18:39:59 +04:00
cryptozoidberg
f351a486f2
backward compatibility fix(temporary) for mobile old wallet apps 2024-02-23 16:41:26 +04:00
sowle
5bb31e3282
warning fixed (thanks to @crypto_zoidberg) 2024-02-23 12:57:09 +01:00
sowle
f824461db9
Merge branch 'develop' into mobile 2024-02-23 11:48:28 +01:00
sowle
c8b52f6e96
iOS: deployment target set to 12.00, macOS: deployment target reverted back to 10.12 2024-02-23 11:47:16 +01:00
cryptozoidberg
7397b68ec0 Merge branch 'mobile' into develop 2024-02-22 22:46:28 +04:00
cryptozoidberg
a922d542f6 tweaks over mobild zano wallet 2024-02-22 22:45:43 +04:00
sowle
5a223bf7cd
Merge branch 'release' 2024-02-22 19:32:02 +01:00
sowle
08e3196b0c
Merge branch 'release' into develop 2024-02-22 19:20:39 +01:00
zano build machine
b35be93fa9 === build number: 265 -> 266 === 2024-02-22 21:18:53 +03:00
sowle
ec77e14ead
wallet: introduced upper limit for tx fee (soft rule) 2024-02-22 18:19:15 +01:00
sowle
d8a21933d6
wallet: sweep_below fixed 2024-02-22 18:18:10 +01:00
sowle
9d67f8aedf
coretests: test wallet_and_sweep_below added 2024-02-22 17:47:50 +01:00
sowle
6b99449e21
Merge branch 'release' 2024-02-22 09:09:15 +01:00
cryptozoidberg
6df85b4779
reset UI commit from develop 2024-02-21 18:57:34 +04:00
cryptozoidberg
0d147dd557
merge from develop 2024-02-21 18:53:27 +04:00
cryptozoidberg
390adb3e26
Merge branch 'develop' into merge_develop_mobile 2024-02-21 18:25:34 +04:00
sowle
575ed1140f
Merge branch 'develop' into release 2024-02-21 13:08:31 +01:00
zano build machine
d058a2ef17 === build number: 264 -> 265 === 2024-02-21 15:06:52 +03:00
sowle
df53f1f78d
Revert "noncense commit"
This reverts commit 033ef5c9dc.
2024-02-21 13:05:50 +01:00
sowle
04692e5fc4
Merge branch 'develop' into release 2024-02-21 12:24:11 +01:00
zano build machine
47df89bdd8 === build number: 263 -> 264 === 2024-02-21 14:23:19 +03:00
cryptozoidberg
033ef5c9dc
noncense commit 2024-02-20 20:56:28 +04:00
cryptozoidberg
18609e296f
attempt to fix build for macos 2024-02-20 20:14:10 +04:00
sowle
226594f1d2
This is it. Historic merge of branch 'develop' (with all new privacy update features) into release 2024-02-20 15:41:31 +01:00
zano build machine
4c70d2aea0 === build number: 262 -> 263 === 2024-02-20 17:30:09 +03:00
sowle
5aedc8341a
HF4 height set to 2555000 2024-02-20 15:29:13 +01:00
sowle
ab09fd24d1
Merge branch 'develop_test' into develop 2024-02-20 14:25:35 +01:00
zano build machine
e589464fc0 === build number: 261 -> 262 === 2024-02-20 13:57:34 +03:00
sowle
c403440287
wallet: WALLET_FILE_SERIALIZATION_VERSION bump up 161 -> 162 2024-02-20 11:57:01 +01:00
sowle
937301997a
Merge branch 'develop' into develop_test 2024-02-20 11:55:14 +01:00
cryptozoidberg
f8d0e96d95 fixes related to build under vc2022 on windows arm64 2024-02-20 11:26:12 +04:00
zano build machine
7fb43311a7 === build number: 260 -> 261 === 2024-02-20 06:00:00 +03:00
sowle
50ba8926cd
restart testnet (CURRENCY_FORMATION_VERSION: 96 -> 97) 2024-02-20 03:29:26 +01:00
zano build machine
bfd14493b1 === build number: 259 -> 260 === 2024-02-20 05:25:47 +03:00
sowle
80eb7fdf11
asset_id calculation fixed 2024-02-20 02:48:35 +01:00
sowle
2339a65ff7
calculate_asset_id refactored into get_or_calculate_asset_id (2) 2024-02-19 23:18:22 +01:00
sowle
159d305fcf
calculate_asset_id refactored into get_or_calculate_asset_id 2024-02-19 21:49:27 +01:00
sowle
f2acccb426
(hopefully) a proper fix for the template hell in get_first_service_attachment_by_id 2024-02-19 09:50:22 +01:00
sowle
f1cccbe3e0
(hopefully) a proper fix for the template hell in get_first_service_attachment_by_id 2024-02-18 23:35:56 +01:00
zano build machine
f80fc6cdd5 === build number: 258 -> 259 === 2024-02-19 01:14:36 +03:00
zano build machine
4fcec20446 === build number: 257 -> 258 === 2024-02-19 01:13:39 +03:00
sowle
6db3198ea3
change CMake min version for gui build 2024-02-18 23:11:24 +01:00
cryptozoidberg
f882c7d654
fixed issue with proper error handling in predownload 2024-02-19 00:51:58 +04:00
cryptozoidberg
3d0d93c625
fixed unused variables 2024-02-19 00:10:33 +04:00
cryptozoidberg
bb4cc18c55
over-simplified template syntax to please gcc 2024-02-19 00:01:32 +04:00
cryptozoidberg
f43cd585c7
simplified template syntax to please gcc 2024-02-18 23:46:55 +04:00
cryptozoidberg
e61d307e4c
fixes rtelated to gcc/clang compilation 2024-02-18 22:47:45 +04:00
cryptozoidberg
9b8c966702
more options for checkpoints 2024-02-18 21:05:22 +04:00
cryptozoidberg
fa606c1665
payment_id improved 2024-02-17 20:35:01 +04:00
sowle
93b3ca4b66
fix loop variable type here and there (performance) 2024-02-17 12:45:43 +01:00
sowle
7b246312a8
predownload updated up to height 2.5M 2024-02-17 05:08:06 +01:00
sowle
054be248cb
fix loop variable type here and there (performance) 2024-02-17 05:06:44 +01:00
sowle
b21083db1f
fix loop variable type here and there (performance) 2024-02-16 03:56:42 +01:00
zano build machine
075a28f89f === build number: 256 -> 257 === 2024-02-15 20:10:51 +03:00
cryptozoidberg
3a0fce6e29
disabled tor module for ubuntu 2024-02-15 21:09:38 +04:00
cryptozoidberg
d095330b22
predownloads updated 2024-02-15 20:31:20 +04:00
cryptozoidberg
52a065ab0d
merged from release 2024-02-15 16:09:17 +04:00
cryptozoidberg
e33148e9f1
checkpoint postponed 2024-02-15 16:03:17 +04:00
cryptozoidberg
c4be6e120a
adaptation of zarcanum era codebase to pre_zarcanum api(for backward compatibility with exchanges) 2024-02-15 06:14:51 +04:00
cryptozoidberg
dcdffce051
legacy api test in mainnet master 2024-02-15 06:14:51 +04:00
cryptozoidberg
0bf9b808d0
Merge branch 'master' into release 2024-02-15 03:49:43 +04:00
cryptozoidberg
925d900aa6
legacy api test in mainnet master 2024-02-15 03:48:27 +04:00
zano build machine
300b82b0da === build number: 255 -> 256 === 2024-02-14 01:55:50 +03:00
cryptozoidberg
109c754f3c
restarting testnet 2024-02-14 02:46:41 +04:00
cryptozoidberg
c2368fbb64
added todo to test 2024-02-14 02:10:30 +04:00
cryptozoidberg
91813968aa
fixes over multiasset tests to fix transfer ownership of asset 2024-02-14 02:10:29 +04:00
cryptozoidberg
42bee0eee8
transfer asset ownership - implemented first test 2024-02-14 02:10:29 +04:00
cryptozoidberg
188b8c447f
fixes related multriasset tests 2024-02-14 02:10:29 +04:00
cryptozoidberg
5336fdb46a
signing prefix with ado 2024-02-14 02:10:29 +04:00
cryptozoidberg
3d379033c5
asset ownership proov validation replaced with prefix signed with schnorr signature 2024-02-14 02:10:28 +04:00
cryptozoidberg
66ffef4080
changing signature scheme for ado 2024-02-14 02:10:28 +04:00
sowle
268632d6da
crypto: generate_schnorr_sig version for public_key and secret_key types 2024-02-14 02:10:28 +04:00
sowle
b778f0d918
serialization tags for asset_operation_ownership_proof 2024-02-14 02:10:27 +04:00
sowle
e0bb0138cb
crypto: default template argument for generate/verify_schnorr_sig 2024-02-14 02:10:27 +04:00
sowle
fb4ed29834
struct asset_operation_ownership_proof added 2024-02-14 02:10:27 +04:00
cryptozoidberg
2473df2275
assets: thirdparty assets not erasing from own list 2024-02-14 02:10:26 +04:00
cryptozoidberg
87d5bb092f
assets: implemented ownership transfer 2024-02-14 02:10:26 +04:00
cryptozoidberg
eadaf179af
allowed transfering assets membership 2024-02-14 02:10:26 +04:00
cryptozoidberg
f288d0519c
lifted ui to latest commit 2024-02-13 23:07:59 +04:00
zano build machine
c55551be54 === build number: 254 -> 255 === 2024-02-13 21:57:07 +03:00
cryptozoidberg
fb73401800
replaced vector<bool> top list<bool>, because c++ is insane about some stuff 2024-02-09 19:42:11 +04:00
sowle
ab226469a9
more compilation fixes 2024-02-09 15:22:43 +01:00
sowle
c97e17b494
compilation fix 2024-02-09 14:59:32 +01:00
sowle
e209591019
wallet: minor fix for log in the case when ki has already been seen + extended the comment covering this case 2024-02-09 13:53:10 +01:00
zano build machine
6de63ddbd8 === build number: 253 -> 254 === 2024-02-09 15:16:19 +03:00
cryptozoidberg
3f246e2687
restarting network 2024-02-09 15:42:05 +04:00
sowle
0b77c8f934
chaingen: minor fix for proper initialization of gen_context 2024-02-08 18:57:22 +01:00
sowle
5f53c8fbe1
knowing a DL for transaction pub key is now being checked along with the balance proof (double Schnorr proof, share Fiat-Shamir challenge) 2024-02-08 17:43:01 +01:00
sowle
ddcfa36a90
crypto: general_double_schnorr_sig implemented 2024-02-08 17:32:41 +01:00
cryptozoidberg
a0de510093
merged from develop 2024-02-08 15:58:49 +04:00
sowle
69e0be6db6
asset_descriptor_operation: opt_amount_commitment -> amount_commitment (made non-optional) 2024-02-07 20:11:09 +01:00
cryptozoidberg
ba92ecad36
Merge branch 'cryptoassets' into develop 2024-02-07 22:54:39 +04:00
cryptozoidberg
d08edc2ea3
shortened hf4 period for testnet + network reset 2024-02-07 22:54:07 +04:00
sowle
31101bc788
PoS mining, construct_block_template, and chaingen infrastructure adapted for fee burning after HF4 2024-02-07 18:48:18 +01:00
cryptozoidberg
75f1c5461f
fix related to multiassets_basic_test and burning fees 2024-02-07 20:31:58 +04:00
sowle
8198f1dbcb
comment added (size calculation) 2024-02-07 17:21:54 +01:00
cryptozoidberg
a45d63bdf8
added fee bruning 2024-02-07 18:18:30 +04:00
cryptozoidberg
e163c5f691
Merge branch 'develop' into cryptoassets 2024-02-07 18:17:50 +04:00
zano build machine
0c5cdbae17 === build number: 252 -> 253 === 2024-02-07 15:50:57 +03:00
cryptozoidberg
2aa3bdcb3f
nebaled rpc cals chaining to wallets manager 2024-02-07 16:46:58 +04:00
cryptozoidberg
e20f419adc
added hardforks infor to rpc get_info 2024-02-07 16:46:58 +04:00
sowle
01adc5087c
unit_tests: median_helper_tests improved to make sure new optimized version of median() works exactly the same as the old one 2024-02-04 23:52:56 +01:00
sowle
1ef05b36e1
comments & code cleanup 2024-02-04 23:51:15 +01:00
sowle
54b019f83d
calculation of amount blinding mask for asset operation made dependent on tx pub key 2024-02-04 23:50:17 +01:00
sowle
7e9c24d4b9
crypto: hs(str, s, pk) added 2024-02-04 23:45:22 +01:00
zano build machine
3be48761a6 === build number: 251 -> 252 === 2024-02-05 00:41:58 +03:00
cryptozoidberg
761fd4d6db
fixed few tests for mainnet-compiled version 2024-02-04 22:03:27 +01:00
cryptozoidberg
65dc4be419
packing_outputs_on_pos_minting_wallet disabled for hardfork 4 2024-02-04 11:48:07 +01:00
cryptozoidberg
cc91951eff
fixed few coretests in relation to validation of selected decoys results 2024-02-03 22:11:57 +01:00
cryptozoidberg
252297fecd
putting back validation of max_related_block_height 2024-02-03 16:03:18 +01:00
cryptozoidberg
6ba6b55d46
one more restart of the network(with declining unnecesary changes) 2024-02-03 14:52:16 +01:00
cryptozoidberg
d729e3fffa
attempt tp fox bug with staking 2024-02-03 10:59:40 +01:00
cryptozoidberg
a4b5f5f9f1
disabled limitation for testnet 2024-02-03 10:13:39 +01:00
cryptozoidberg
1a22dbb313
restarting of the testnet 2024-02-03 08:15:50 +01:00
cryptozoidberg
154997432f
restart of the network(didn't work on last commit due to bug) 2024-02-02 22:00:29 +01:00
cryptozoidberg
159199b1ab
fixed few bugs in the wallet related to mixins and hard mixins rule 2024-02-02 21:11:47 +01:00
cryptozoidberg
09dc88ba39
network reset + some changes in genesis for testnet(which didn't work after all) 2024-02-02 16:04:43 +01:00
zano build machine
c78bb3d24d === build number: 250 -> 251 === 2024-02-01 23:00:47 +03:00
cryptozoidberg
610721c16a
UI moved to latest commit 2024-02-01 20:25:49 +01:00
cryptozoidberg
cd5c7dba32
merge from cryptoassets (merged zarcanum to develop) 2024-02-01 18:06:42 +01:00
cryptozoidberg
9db28868cb
Merge branch 'cryptoassets' into develop 2024-02-01 18:05:56 +01:00
cryptozoidberg
5ba570feca
restarting a testnet 2024-02-01 17:52:26 +01:00
cryptozoidberg
e7c73e8860
unused var in one_out_of_many_proofs 2024-02-01 17:28:38 +01:00
cryptozoidberg
2dbae9a3b7
merge from develop 2024-02-01 17:23:17 +01:00
cryptozoidberg
38831baac2
Merge branch 'release' into develop 2024-02-01 17:20:53 +01:00
cryptozoidberg
67b7336a97
Merge branch 'decoy_selection' into cryptoassets 2024-02-01 17:18:52 +01:00
cryptozoidberg
1ba6fe0571
fixed last zarcanum tests 2024-01-31 20:47:08 +01:00
cryptozoidberg
97a6cb580f
minor changes to zarcanum test to fit coinage rule 2024-01-30 22:24:45 +01:00
cryptozoidberg
100d46fa9b
changes and fixes over few tests in connection to hardfork 4 2024-01-30 18:59:47 +01:00
cryptozoidberg
ef3385192f
fixed bug with alt-block coinage validation 2024-01-29 15:20:08 +01:00
cryptozoidberg
1be00ea3c8
got rid of warnings 2024-01-28 19:40:34 +01:00
cryptozoidberg
ca9f44967d
fixed very dumb bug with cheching minimum coinage condition + fixed test for auditable wallet against the hardfork 4 2024-01-28 19:30:36 +01:00
sowle
27bb395542
Merge branch 'add_block_performance_mes' into decoy_selection 2024-01-28 16:01:02 +01:00
sowle
92f09f424f
crypto: CLSAG: auxiliary key images added to the input hash + code cleanup + minor improvements + tests 2024-01-28 15:44:56 +01:00
cryptozoidberg
90e1b6dc2a
require min coinage to spend (on the hard network rule) - 10 confirmations 2024-01-26 02:49:31 +01:00
cryptozoidberg
f680473916
Fee burning(add fork choice rule for preference by cumulative fee in block ) 2024-01-24 22:06:19 +01:00
cryptozoidberg
3b7803efa7
make sure an asset can't be emitted in a consolidated tx 2024-01-24 20:56:45 +01:00
cryptozoidberg
bbff52e937
forbidding TX_FLAG_SIGNATURE_MODE_SEPARATE for miner txs 2024-01-24 19:26:42 +01:00
cryptozoidberg
95e8954c38
Merge branch 'cryptoassets' into decoy_selection 2024-01-20 16:39:50 +01:00
cryptozoidberg
81bacaf6bb
and another tweak of decoy selection algo(more clear exit from loop) 2024-01-20 15:49:30 +01:00
cryptozoidberg
0a702f6897
another tweak of decoy selection algo + fixed over few core tests 2024-01-19 23:01:20 +01:00
cryptozoidberg
515e90b48e
tweaked test packing_outputs_on_pos_minting_wallet(disabled mined balance validating) 2024-01-18 22:02:13 +01:00
cryptozoidberg
8f5eed778a
increased attempts count for pre-zarrcanum selection 2024-01-18 20:14:21 +01:00
cryptozoidberg
bca8a4bf16
fixed endless loop in decoy selection api 2024-01-18 19:16:30 +01:00
cryptozoidberg
d8241d1531
fixed issues with wallet 2024-01-18 18:27:35 +01:00
cryptozoidberg
36ce7bd00d
tweak for decoy selection algo: first 20k of Zarcanum blocks decoy selection algo will be working flat 2024-01-17 22:02:06 +01:00
cryptozoidberg
6365b55343
tweaks over coretests logging 2024-01-17 19:43:25 +01:00
cryptozoidberg
997dcb8312
fixed crash in decoy_selection api 2024-01-17 18:07:41 +01:00
cryptozoidberg
01f00a67e6
fixed unused variable 2 2024-01-17 16:08:39 +01:00
cryptozoidberg
8dd1b9d5a7
fixed unused variable 2024-01-17 16:07:11 +01:00
sowle
7aaee46d4a
fixed a HF4-specific bug in is_pos_coinbase() and is_coinbase() 2024-01-17 13:04:26 +01:00
sowle
c99c23b9da
wallet2: set decoys count for PoS mining tx according to the core runtime config 2024-01-17 00:39:35 +01:00
cryptozoidberg
b81e168b2a
CURRENCY_HF4_MANDATORY_DECOY_SET_SIZE implemented as configurable(for coretest we would need to have 0 mixins due to old tests) 2024-01-16 21:32:10 +01:00
cryptozoidberg
b1974eb24f
mined ballance calc in wallet done via block reward(in connection to pos coinbase joined to 1 output) 2024-01-16 20:02:00 +01:00
cryptozoidberg
f7c928e3a2
outputs with zero pubkeys (00..00, torsion element of order 4) should not be used as inputs at all (even as mixins) 2024-01-16 19:01:57 +01:00
sowle
8b145089ac
Merge branch 'zc_pos_one_out' into decoy_selection
# Conflicts:
#	src/currency_core/blockchain_storage.cpp
2024-01-16 16:30:55 +01:00
sowle
6271a22058
minor improvement on mixins restrictions checks 2024-01-16 00:52:56 +01:00
sowle
929d741916
coretests: forgotten changes (wip for hard_fork_4_consolidated_txs) 2024-01-15 23:15:24 +01:00
sowle
250bf95e11
bcs: minor naming & logging improvements 2024-01-15 23:12:29 +01:00
cryptozoidberg
6475571781
re-factored code for mixins count verification(moved to core check, suggested by @sowle) 2024-01-15 19:38:53 +01:00
cryptozoidberg
fb31c8862b
api transition fix 2024-01-14 20:49:09 +01:00
cryptozoidberg
1c404348a0
added tx semantics test in tx_pool 2024-01-14 19:00:24 +01:00
cryptozoidberg
9cd62b236a
implemented reverse api compatibility 2024-01-14 18:00:12 +01:00
cryptozoidberg
7086531e08
disabled wllet rpc in UI 2024-01-14 14:53:16 +01:00
cryptozoidberg
90c7b5d02d
hf4 mandatory check for decoy size 2024-01-13 20:24:10 +01:00
cryptozoidberg
f874a5f7a2
added exception for coinbase transactions 2024-01-12 20:01:57 +01:00
sowle
beb4fa828f
minor logging improvements 2024-01-12 03:15:56 +01:00
sowle
fe7db04b84
coretests: hard_fork_4_consolidated_txs WIP 2024-01-12 03:14:59 +01:00
cryptozoidberg
b363b893e4
Bunch of improvements over the wallet 2024-01-02 21:57:43 +01:00
sowle
6baa1b42d6
minor fix 2023-12-27 16:44:15 +01:00
zano build machine
a5af399e56 === build number: 249 -> 250 === 2023-12-27 17:16:08 +03:00
sowle
05feba39bf
block add perf timings 2023-12-27 14:08:36 +01:00
sowle
6534a6eda4
epee::misc_utils::median improved 2023-12-27 14:06:23 +01:00
sowle
723a89c840
functional tests: gcc compilation fixed 2023-12-27 13:50:12 +01:00
sowle
344cb15fb5
attempt to fix gcc compilation 2023-12-27 02:16:54 +01:00
sowle
e239389768
crypto: fixed generators with precomputed data improved (data made static) + more tests 2023-12-27 02:04:59 +01:00
cryptozoidberg
bfb4a91f92
fork choice rule updated 2023-12-26 22:18:46 +01:00
sowle
4200669f5b
crypto: experimental optimizations: ge_scalarmult_base_vartime, ge_scalarmult_vartime_p3, ge_scalarmult_precomp_vartime (point_pc_t) + performance tests for msm pippenger v3-v4 2023-12-25 23:48:14 +01:00
sowle
f62db8a7fe
minor code cleanup 2023-12-25 19:20:45 +01:00
sowle
4b31d91beb
blockchain_storage: more performance measurements for blocks validation 2023-12-25 19:19:50 +01:00
sowle
f95791a723
crypto: much faster pippenger/bucket-style multi-scalar multiplication for range proofs + tests 2023-12-25 19:14:31 +01:00
sowle
77d6f94280
crypto: scalar_t::get_bits + test + performance test + cn_hash performance test 2023-12-25 18:10:14 +01:00
cryptozoidberg
6ed1c0815a
Merge branch 'cryptoassets' into decoy_selection 2023-12-15 18:57:30 +03:00
cryptozoidberg
ee3570b6dd
merged from develop 2023-12-15 18:56:55 +03:00
cryptozoidberg
22fda0c7fe
fixed bugs in for decoy selection algo 2023-12-15 18:39:50 +03:00
sowle
9b43cbc0b7 CMakeLists.txt: allowing using higher version of Boost than required 2023-12-15 15:53:22 +01:00
cryptozoidberg
04103dea7f
decoy selection algo added 2023-12-15 01:42:06 +03:00
sowle
90b43d828e
HF4: allowing 1 merged output for PoS blocks' miner tx 2023-12-14 21:34:17 +01:00
zano build machine
8f2e7191e5 === build number: 164 -> 165 === 2023-12-13 15:48:45 +03:00
cryptozoidberg
db2bdd33a2
Merge branch 'develop' into release 2023-12-13 15:29:02 +03:00
cryptozoidberg
f2ca3696fa
moved UI to latest commit 2023-12-13 15:20:33 +03:00
cryptozoidberg
b0f06e512d
added mdbx manually 2023-12-12 18:53:10 +03:00
cryptozoidberg
2b97d25afb
removed mdbx 2023-12-12 18:51:05 +03:00
cryptozoidberg
fe0a13c4f0
Removed submodule mdbx 2023-12-12 18:48:49 +03:00
cryptozoidberg
5b4a3e3a38
get_random_outs_for_amounts2 in work 2023-12-08 20:41:47 +01:00
cryptozoidberg
2d44c967ef
new decoy selection algo 2023-12-08 15:31:17 +01:00
sowle
2772a446bd
CMakeLists: minmum CMake version was pushed up to 3.5 to avoid support warnings (2) 2023-12-06 16:33:35 +01:00
sowle
b0970142d5
=== build number: 248 -> 249 === 2023-12-06 16:30:18 +01:00
sowle
9a206df105
CMakeLists: minmum CMake version was pushed up to 3.5 to avoid support warnings + fixed a typo in a comment 2023-12-06 16:28:51 +01:00
sowle
fcefdd8eb5
Merge remote-tracking branch 'origin/develop' into cryptoassets
# Conflicts:
#	README.md
#	src/gui/qt-daemon/layout
#	src/version.h.in
2023-12-06 16:24:06 +01:00
sowle
327ecd3eb8 Merge branch 'release' into develop 2023-12-06 14:25:46 +01:00
sowle
0a793b9222 ====== build number: 163 -> 164 === 2023-12-06 03:12:35 +01:00
sowle
eb0b2529d0 build script windows: minor fix (using boost libs for msvc v14.2) 2023-12-06 03:11:52 +01:00
sowle
5349d2f2dd ====== build number: 162 -> 163 === 2023-12-05 21:31:01 +01:00
crypto.sowle
0367a79706
README.md: improved Linux build manual 2023-12-05 23:29:15 +03:00
sowle
0caf50fde8 build: an attempt to make Boost searching process be more error proof (2) 2023-12-05 21:06:14 +01:00
sowle
46bef30dad build: an attempt to make Boost searching process be more error proof 2023-12-05 19:50:02 +01:00
sowle
30299724fd
crypto::point_t::is_zero() now treats non-points (0, 0, 0, ?) or incorrectly encoded points (0, x, x, !0) as not an identity and thus returns false + test 2023-12-04 22:33:38 +01:00
sowle
f5958fa722 ====== build number: 161 -> 162 === 2023-12-01 15:35:17 +01:00
sowle
801dcd0ffe ui updated 2023-12-01 15:34:04 +01:00
zano build machine
10cce8002f === build number: 247 -> 248 === 2023-12-01 14:24:52 +03:00
cryptozoidberg
d0ad3c7ad4
Update Zano_appimage_wrapper.sh 2023-12-01 12:23:01 +01:00
sowle
2dd8003588 ====== build number: 160 -> 161 === 2023-11-30 17:33:52 +01:00
sowle
0ec7582cd1 predownload files updated 2023-11-30 17:32:58 +01:00
cryptozoidberg
fbf609c1ef
fixed linux desktop file link 2023-11-30 13:33:21 +01:00
sowle
990605c23e Merge branch 'develop' into release 2023-11-30 13:01:28 +01:00
sowle
3c4a52809c ====== build number: 159 -> 160 === 2023-11-30 13:00:54 +01:00
sowle
2e57372115 checkpoint @ height 2390000 2023-11-30 12:56:41 +01:00
sowle
d6fc65cbf8
=== build number: 246 -> 247 === 2023-11-27 19:48:44 +01:00
sowle
9f5a142d15 Merge remote-tracking branch 'origin/cake' into cryptoassets 2023-11-27 19:10:33 +01:00
zano build machine
868850951f === build number: 245 -> 246 === 2023-11-27 20:32:07 +03:00
zano build machine
ea05ecc49a === build number: 244 -> 245 === 2023-11-27 19:52:25 +03:00
cryptozoidberg
555270c1a3
profiling of block processing + lates UI 2023-11-27 15:53:56 +01:00
cryptozoidberg
07320c7a05
Merge branch 'cryptoassets' into cake 2023-11-22 16:20:03 +01:00
cryptozoidberg
4f59ca778e
fixes for cake wallet 2023-11-22 16:19:12 +01:00
cryptozoidberg
a894269b46
Merge branch 'cake' into cryptoassets 2023-11-21 21:09:26 +01:00
cryptozoidberg
c74cd2d454
fixed bug in mobile wallet: wrong objects references 2023-11-21 21:08:54 +01:00
cryptozoidberg
41452dbb4c
Merge branch 'cryptoassets' into cake 2023-11-21 18:05:40 +01:00
cryptozoidberg
1277818b23
added mutable to variable 2023-11-21 18:05:02 +01:00
cryptozoidberg
c33cfd29b7
added m_whitelisted_assets to serialized state(to hold correct assets balances on open time) - 2 2023-11-21 18:05:02 +01:00
cryptozoidberg
5bd815e66f
added m_whitelisted_assets to serialized state(to hold correct assets balances on open time) 2023-11-21 18:05:01 +01:00
sowle
6b78438d13 === build number: 158 -> 159 === 2023-11-20 19:49:28 +01:00
sowle
0e67f9449f build: an attempt 2 to fix boost lib paths in macOS CLI binaries 2023-11-20 19:48:23 +01:00
sowle
020ad2ec7a === build number: 157 -> 158 === 2023-11-20 15:51:13 +01:00
sowle
dec913c4e9 build: an attempt to fix boost lib paths in macOS CLI binaries 2023-11-20 15:50:16 +01:00
cryptozoidberg
c7533010bd fixed problem with wallet api 2023-11-17 12:20:30 +00:00
cryptozoidberg
131ee0e84b added missing path variable 2023-11-16 18:52:13 +00:00
cryptozoidberg
015fc54cef Fixed bug with wallet path under cake wallet - 2 2023-11-16 17:53:48 +00:00
cryptozoidberg
d1b40c280b Fixed bug with wallet path under cake wallet 2023-11-16 17:53:04 +00:00
sowle
46f4e317f4 === build number: 156 -> 157 === 2023-11-14 17:29:40 +01:00
sowle
6a83735cc1 updated ui 2023-11-14 17:28:52 +01:00
sowle
bfb7e22ae7
=== build number: 243 -> 244 === 2023-11-14 17:26:21 +01:00
sowle
400b0d09d3
updated ui 2023-11-14 17:25:34 +01:00
sowle
8f78abb19f
=== build number: 242 -> 243 === 2023-11-10 16:41:04 +01:00
sowle
6849a341c3
ui updated 2023-11-10 16:38:57 +01:00
zano build machine
a270fcdbf9 === build number: 241 -> 242 === 2023-11-10 14:32:12 +03:00
zano build machine
800c1e5802 === build number: 240 -> 241 === 2023-11-09 23:42:30 +03:00
sowle
760ebb3814
Merge branch 'develop' into cryptoassets
# Conflicts:
#	src/version.h.in
#	src/wallet/wallet2.cpp
2023-11-09 20:48:54 +01:00
sowle
e89462e126 Merge branch 'release' into develop 2023-11-09 19:42:57 +01:00
sowle
f9cabb0bd2 === build number: 155 -> 156 === 2023-11-09 19:42:06 +01:00
sowle
ee89a6ce12 wallet2: auditable wallets won't be requesting decoys for PoS anymore as they couldn't be used 2023-11-09 19:25:06 +01:00
sowle
1f0faf2c8e coretests: pos_mining_with_decoys improved to reveal a bug with staking using auditable wallets 2023-11-09 18:47:13 +01:00
cryptozoidberg
34b37ce45c
added missing info for tx rpc details 2023-11-06 17:34:23 +01:00
zano build machine
a151cab066 === build number: 154 -> 155 === 2023-11-06 18:39:54 +03:00
cryptozoidberg
c0ab3dc48a
staking improvement in GUI version 2023-11-06 16:36:57 +01:00
zano build machine
7d9ba7ef64 === build number: 239 -> 240 === 2023-11-06 16:51:01 +03:00
cryptozoidberg
257c19662c
merged UI from main 2023-11-06 14:49:35 +01:00
sowle
4a819afe18
removed unneeded logging 2023-11-02 21:14:41 +01:00
sowle
e45793826e
=== build number: 238 -> 239 === 2023-11-02 19:07:03 +01:00
sowle
00b663e425
gcc warning fixed 2023-11-02 19:06:17 +01:00
sowle
920a08c5ce
gcc compilation fix 2023-11-02 18:40:09 +01:00
sowle
88ec0706da
coretests: pos_mining_with_decoys was pinned to HF3 2023-11-02 18:34:04 +01:00
sowle
2dab8ab386
=== build number: 237 -> 238 === 2023-11-02 18:31:08 +01:00
sowle
406bc5d78e
removed deprecated absolute_output_offsets_to_relative(), chaingen was adapted accordingly 2023-11-02 18:29:55 +01:00
sowle
96cde2ae07
deprecated uint64_t get_amount_for_zero_pubkeys() removed, various compilation fixes 2023-11-02 16:51:45 +01:00
sowle
964968ded0
get_actual_timestamp() -> get_block_timestamp_from_miner_tx_extra(), corresponding check in pos block validation has been adjusted 2023-11-02 16:47:18 +01:00
sowle
3804ecd4d6
Merge branch 'develop' into cryptoassets
# Conflicts:
#	src/gui/qt-daemon/layout
2023-11-02 14:05:03 +01:00
sowle
46a0db21ec
Merge branch 'develop' into cryptoassets
# Conflicts:
#	CMakeLists.txt
#	README.md
#	contrib/epee/include/net/http_client.h
#	src/currency_core/blockchain_storage.cpp
#	src/currency_core/currency_core.cpp
#	src/currency_core/currency_format_utils.cpp
#	src/gui/qt-daemon/layout
#	src/rpc/core_rpc_server.cpp
#	src/rpc/core_rpc_server.h
#	src/rpc/core_rpc_server_commands_defs.h
#	src/version.h.in
#	src/wallet/wallet2.cpp
#	src/wallet/wallet2.h
#	src/wallet/wallet_public_structs_defs.h
#	src/wallet/wallet_rpc_server.h
#	tests/core_tests/chaingen.cpp
#	tests/core_tests/pos_validation.cpp
#	tests/core_tests/wallet_tests.cpp
#	tests/performance_tests/main.cpp
2023-11-01 23:48:36 +01:00
zano build machine
3c19bb969d === build number: 153 -> 154 === 2023-11-02 00:33:38 +03:00
cryptozoidberg
6ff59ca8cd
Merge branch 'develop' into release 2023-11-01 22:30:12 +01:00
cryptozoidberg
3da4331784
Merge from release 2023-11-01 22:29:42 +01:00
cryptozoidberg
301f0341b4
notarytool switched to keychain profile option 2023-11-01 14:04:47 +01:00
cryptozoidberg
970d689184
migrated to notarytool for macos 2023-11-01 13:08:51 +01:00
cryptozoidberg
8f6b4036e9
duplicated get_random_outputs in json-like api 2023-11-01 11:30:55 +01:00
sowle
20dbbdf81e === build number: 152 -> 153 === 2023-10-31 22:47:54 +01:00
sowle
e9ed916550 Merge branch 'posmixins' into develop 2023-10-31 22:33:14 +01:00
sowle
299124877e coretests: pos_mining_with_decoys test added 2023-10-31 21:22:15 +01:00
cryptozoidberg
f3bf340101
Merge branch 'wallet_state_base' into cryptoassets 2023-10-31 20:52:39 +01:00
cryptozoidberg
6f4d247715
fixed few compilation issues - 3 2023-10-31 20:01:31 +01:00
cryptozoidberg
66fbe640ef
fixed few compilation issues - 2 2023-10-31 19:53:26 +01:00
cryptozoidberg
3f0bed4899
fixed few compilation issues 2023-10-31 19:43:28 +01:00
cryptozoidberg
76577d21a9
more fixes with namespaces and inline functions 2023-10-31 19:31:18 +01:00
cryptozoidberg
cacdb4a4ce
moved serialization-specific adaptor-functions from wallet2 to base header file 2023-10-31 19:22:29 +01:00
cryptozoidberg
d1dc240a73
added forgoten wallet2_base.h 2023-10-31 18:37:58 +01:00
cryptozoidberg
ebb8f7b6ff
wallet sync state moved to separate base structure 2023-10-31 18:29:57 +01:00
sowle
760ff033cb set C++14 as a minimum requirement 2023-10-31 16:56:56 +01:00
sowle
6343812006 mixins support implemented in wallet2::prepare_and_sign_pos_block() 2023-10-31 15:45:35 +01:00
cryptozoidberg
b7a145e56f
Merge branch 'cake' into cryptoassets 2023-10-31 13:39:33 +01:00
cryptozoidberg
65b9619762
Merge branch 'cryptoassets' into cake 2023-10-31 13:37:37 +01:00
cryptozoidberg
208f50ce64 additional changes for cake 2023-10-30 19:22:33 +00:00
sowle
56de784054 potential fix for call_COMMAND_RPC_GET_EST_HEIGHT_FROM_DATE in wallet 2023-10-30 20:09:02 +01:00
cryptozoidberg
7a9f54443b
fixed bug with m_own_asset_descriptors container not being reset after resync wallet 2023-10-28 19:25:31 +02:00
sowle
7999e6ed56
Merge branch 'release' into develop 2023-10-26 17:50:14 +02:00
cryptozoidberg
9dd4f107b6 Fix compilation issue 2023-10-26 14:32:56 +00:00
cryptozoidberg
767dbebe54 removed include of deleted file 2023-10-26 13:19:06 +00:00
cryptozoidberg
f19acdee4b revoked unneeded changes 2023-10-26 12:56:37 +00:00
sowle
ba6b34c292
=== build number: 236 -> 237 === 2023-10-25 21:35:38 +02:00
sowle
bdd9e83418
simplewallet's "list_outputs" command and wallet2::get_transfers_str() were improved to support assets 2023-10-25 21:34:50 +02:00
sowle
e2da6a1f51
wallet: minor fixes 2023-10-25 21:32:47 +02:00
sowle
f9ca8f52c5
get_native_coin_asset_descriptor() implemented 2023-10-25 21:31:11 +02:00
cryptozoidberg
54d229f746 fixed compilation issues 2023-10-25 18:51:53 +00:00
cryptozoidberg
2682a719b0 changes related to extend plain api for cake 2023-10-25 17:29:12 +00:00
zano build machine
8fb3d58f68 === build number: 151 -> 152 === 2023-10-23 19:24:39 +03:00
zano build machine
a15ce736ca === build number: 150 -> 151 === 2023-10-23 19:24:18 +03:00
sowle
edb0056488
=== build number: 235 -> 236 === 2023-10-23 18:04:12 +02:00
sowle
4a5586efad
wallet: fixed creation of redundant zero-amount outputs in ionic-swap transactions 2023-10-23 17:12:43 +02:00
sowle
c974f65a30
coretests: minor fix for ionic_swap_exact_amounts_test 2023-10-23 17:10:07 +02:00
cryptozoidberg
0421e2e366
Removed preloader from UI 2023-10-23 17:03:47 +02:00
sowle
f94aa44104
construct_tx: redundant var removed 2023-10-23 16:28:33 +02:00
sowle
57e10326d8
coretests: ionic_swap_exact_amounts_test improved to reveal redundant zero-amount outputs in ionic-swap transactions 2023-10-23 15:42:51 +02:00
sowle
4be58aa6d8
fixed bugs: 1) flag tdef_explicit_native_asset_id has been incorrectly set for separately signed tx; 2) pseudo out amount blinding mask was incorrectly set for separately signed tx when number of ZC inputs > 1 2023-10-22 01:22:23 +02:00
sowle
87831eaf1a
coretests: ionic_swap_exact_amounts_test added which uncovers a bug in separately signed tx creation 2023-10-21 23:40:39 +02:00
cryptozoidberg
0b563cc2b8 fixed compilation issue 2023-10-20 16:39:43 +00:00
cryptozoidberg
fe77c50e2c few cake-specifik tweaks 2023-10-20 16:09:12 +00:00
cryptozoidberg
ccfdb93ae4 Merge branch 'cryptoassets' into cake 2023-10-20 14:15:41 +00:00
cryptozoidberg
15a2c5f362 cake wallet extension 2023-10-20 14:14:52 +00:00
cryptozoidberg
f1e064f600
Added macro for CakeWallet-specific code separation 2023-10-20 15:00:39 +02:00
sowle
43b41fec3d
coretests: check_ionic_swap_tx_outs added, some improvements 2023-10-19 14:37:57 +02:00
sowle
146bf51021
chaingen: balance_via_wallet() now supports asset id, replace_coinbase_in_genesis_block() fixed 2023-10-18 21:08:16 +02:00
sowle
841e5e7557
coretests: chaingen: minor improvement 2023-10-16 11:41:24 +02:00
sowle
fbce4307b9
build for linux: fixed CMake 3.25 vs. Boost 1.70 vs. GCC 8.3 issue + updated readme 2023-10-13 21:22:25 +02:00
sowle
446d2dd69d
readme: several changes on Linux building process 2023-10-13 15:07:32 +02:00
sowle
6e952c11d8
readme: minor edit 2023-10-13 14:11:11 +02:00
cryptozoidberg
a60857a801
fixed abstract interface against mobile wallet: missing ifdef 2023-10-12 22:08:30 +02:00
cryptozoidberg
de3931b199
fixed abstract interface against mobile wallet 2023-10-12 21:23:47 +02:00
cryptozoidberg
b0f31ebd1b
fixes for mobile wallet in zarcanum network 2023-10-12 21:09:01 +02:00
cryptozoidberg
71c1ba9377
Update wallets_manager.h
Fix for mobile wallet
2023-10-12 20:33:11 +02:00
sowle
03d33c8ad8
Merge branch 'ubuntu23' into develop 2023-10-12 19:04:43 +02:00
sowle
41927218ec
build: CMake issue fix 2023-10-11 22:27:40 +02:00
sowle
cd7ec1cf18
build: 1) fixed issue where CMake couldn't find local Boost with system-wide Boost present and 2) added a patch for Boost compilation when GCC version >= 8.3 (+minor warning fix) 2023-10-11 21:57:18 +02:00
zano build machine
e912a51cf2 === build number: 234 -> 235 === 2023-10-11 21:08:23 +03:00
cryptozoidberg
e066257278
ionic_swaps: replaced Alice and Bob terms to Initiator and Finalizer 2023-10-11 12:28:05 +02:00
sowle
d33cfe7259
wallet: improved error handling for accept_ionic_swap_proposal (+ overall error handling for wallet) 2023-10-06 20:58:17 +02:00
cryptozoidberg
63354b91c3
changed fields names one more time 2023-10-06 17:36:10 +02:00
sowle
21718b01b9
coretests: ionic_swap_basic_test clean-up and improvements 2023-10-06 15:31:36 +02:00
cryptozoidberg
4762e39c77
changed fields names 2023-10-06 15:03:57 +02:00
zano build machine
6a35c3d062 === build number: 233 -> 234 === 2023-10-05 18:17:06 +03:00
cryptozoidberg
816022eb9d
fixed bug with locking assets for ionic swap 2023-10-05 17:16:27 +02:00
cryptozoidberg
bdb5af0490
added votes state logging 2023-10-05 14:44:27 +02:00
cryptozoidberg
2e4c6df22c
fixed bug with voting - again 2023-10-05 14:36:22 +02:00
zano build machine
d7a1b6267e === build number: 232 -> 233 === 2023-10-05 15:14:58 +03:00
cryptozoidberg
a74420a064
removed money lock for ionic swap 2023-10-05 14:10:11 +02:00
cryptozoidberg
83e543bcec
fixed bug with voting 2023-10-05 12:27:04 +02:00
sowle
492ec85f20
build script updated for windows 2023-10-04 18:34:20 +02:00
sowle
6bd09626b1
code clean-up and ionic_swap_basic_test fixed 2023-10-04 18:18:11 +02:00
zano build machine
453927e72f === build number: 150 -> 151 === 2023-10-04 17:09:35 +03:00
cryptozoidberg
aedab1e68e
implemented governance code in wallet 2023-10-04 16:08:48 +02:00
zano build machine
42cd6a8875 === build number: 231 -> 232 === 2023-10-04 14:18:17 +03:00
cryptozoidberg
32330b12b7
Removed unneeded namespace 2023-10-04 13:02:22 +02:00
cryptozoidberg
1886fae681
implemented governance initial code for wallet/daemon 2023-10-03 22:43:51 +02:00
cryptozoidberg
0ede461f25
merge from release 2023-10-02 15:54:58 +02:00
cryptozoidberg
7d1e7521bc
fixed simplewallet 2023-10-02 14:08:09 +02:00
zano build machine
7497d68b48 === build number: 230 -> 231 === 2023-09-29 19:33:52 +03:00
cryptozoidberg
0716e84529
fixes for wallet, implemented proxy-rpc for UI 2023-09-29 18:16:19 +02:00
zano build machine
e6168a813a === build number: 229 -> 230 === 2023-09-11 21:36:27 +03:00
cryptozoidberg
db3489a02b
fixed minor bug for ionic swaps 2023-09-11 20:35:45 +02:00
cryptozoidberg
80d8e49b2a
Implemented fix for the bug related to ionic swaps(non-native coins issue) 2023-09-08 19:33:13 +02:00
zano build machine
fa58726147 === build number: 228 -> 229 === 2023-09-07 17:42:57 +03:00
cryptozoidberg
9eefffd872
changed ionic swap proposal command arguments to more suitable 2023-09-05 16:46:21 +02:00
zano build machine
a47b3ca0a5 === build number: 227 -> 228 === 2023-09-01 19:19:56 +03:00
zano build machine
9372727053 === build number: 226 -> 227 === 2023-09-01 16:17:21 +03:00
zano build machine
f5e5dd7a36 === build number: 225 -> 226 === 2023-09-01 16:11:17 +03:00
zano build machine
3f947fcfee === build number: 224 -> 225 === 2023-09-01 16:04:05 +03:00
zano build machine
e60dea0a42 === build number: 223 -> 224 === 2023-09-01 15:29:59 +03:00
cryptozoidberg
47a5d6a202
version bump: 2.0.0.222 -> 2.0.0.223 2023-09-01 13:59:45 +02:00
cryptozoidberg
37e6a68509
attempt to fix issue with broken versioning in tx versioned structs 2023-09-01 11:59:47 +02:00
sowle
fb456bb2b9
version bump: 2.0.0.221 -> 2.0.0.222 2023-08-30 21:36:25 +02:00
cryptozoidberg
22821d3ab0
Merge branch 'asset_update' into cryptoassets 2023-08-30 21:34:43 +02:00
cryptozoidberg
55a972050a
added comands for emmit/burn/update assets 2023-08-30 21:33:05 +02:00
sowle
1edf380836
version bump: 2.0.0.220 -> 2.0.0.221 2023-08-29 14:14:33 +02:00
sowle
3402da561c
Merge branch 'asset_update' into cryptoassets
# Conflicts:
#	tests/core_tests/multiassets_test.cpp
2023-08-29 14:13:15 +02:00
sowle
0783d3e6f9
asset operation code clean up and minor improvements 2023-08-29 09:22:45 +02:00
sowle
f3b85ad7f3
typo fixed 2023-08-29 09:20:59 +02:00
cryptozoidberg
8e56e876db
fixed another problem with lambda call 2023-08-28 21:43:57 +02:00
cryptozoidberg
4fec3b7f32
fixed problem with lambda call 2023-08-28 21:27:33 +02:00
cryptozoidberg
70ea36db50
fixed more issues with wallet_tests_basic 2023-08-28 20:58:26 +02:00
cryptozoidberg
433125716e
fixed issues with wallet_tests_basic 2023-08-28 20:50:40 +02:00
cryptozoidberg
fc473c97e6
removed unused code lines 2023-08-28 20:36:53 +02:00
cryptozoidberg
4be4494ad4
few fixes to solve linux build 2023-08-28 20:31:57 +02:00
sowle
b669990a8a
small typo fixed ("amount_to_validate") 2023-08-28 19:49:13 +02:00
sowle
16ed0c15a5
coretests: multiassets_basic_test improved 2023-08-28 19:15:49 +02:00
cryptozoidberg
7bfa59fd7e
full test for assets operations ready and passes 2023-08-25 22:40:20 +02:00
cryptozoidberg
1f11b2af97
implemented test for validation ownership of asset_update operation 2023-08-24 20:32:50 +02:00
cryptozoidberg
06db8961e7
implemented basic code for injection of debug events into wallet multistep opperations 2023-08-24 17:57:23 +02:00
sowle
035097b5af
balance proof, asset surjection proof and wallet2::prepare_tx_destinations were fixed to correctly support assets burn operation 2023-08-23 19:40:43 +02:00
sowle
8fdd15f584
crypto: implemented point_t::operator-() + test 2023-08-23 19:32:28 +02:00
sowle
57a7cf8451
fixed construct_tx_handle_ado() to correctly calculate asset operation amount commitment for burn operation 2023-08-22 20:23:52 +02:00
sowle
ef50ae0ca3
version bump: 2.0.0.219 -> 2.0.0.220 2023-08-22 18:55:17 +02:00
sowle
0769faef2f
ui submodule updated 2023-08-22 18:54:06 +02:00
cryptozoidberg
a3a022119c
extended multiassets test to check burn operations 2023-08-22 14:47:41 +02:00
sowle
2c19fe9c8e
slightly changed check_tx_balance to support ASSET_DESCRIPTOR_OPERATION_PUBLIC_BURN 2023-08-22 14:45:25 +02:00
cryptozoidberg
b70dc22f2c
fixed problem with ioni swaps expiration time never unlock coins 2023-08-21 20:29:12 +02:00
sowle
8f4d822e5e
bcs: fixed put_asset_info() to enable verification of the asset emit operation 2023-08-19 15:47:11 +02:00
cryptozoidberg
0677548653
Fixed few bugs with emmit opertion, still not working 2023-08-17 21:46:37 +02:00
cryptozoidberg
3996567462
fixed few errors discovered by multiasset_test, still problem with emmit 2023-08-17 21:00:59 +02:00
cryptozoidberg
4c666aa6a4
added more test cases for emmit into multiassets_basic_test 2023-08-16 23:04:29 +02:00
sowle
4b4b9f5d8f
version bump: 2.0.0.218 -> 2.0.0.219 2023-08-16 20:12:23 +02:00
sowle
a30d6179a4
ui submodule updated 2023-08-16 20:11:28 +02:00
cryptozoidberg
ed3b5e5e81
fixed blockchain_storage.cpp 2023-08-15 22:32:14 +02:00
cryptozoidberg
d69095adbb
fixed all problems in wallet2.cpp 2023-08-15 16:52:53 +02:00
cryptozoidberg
26ef578f08
fixed at least currency_format_utils.cpp 2023-08-14 22:32:52 +02:00
sowle
e9a6913869
coretests: print_tx_size_breakdown() 2023-08-10 20:32:15 +02:00
sowle
fc1383324a
minor improvement for fill_tx_rpc_inputs() 2023-08-10 13:09:04 +02:00
sowle
035f82f605
minor fix for sequence factor comparison in on_get_pos_mining_details() 2023-08-09 13:48:36 +02:00
sowle
a6036e2a13
wallet & PoS: don't try to mine a PoS block if the current sequence factor is too high 2023-08-09 01:38:00 +02:00
sowle
940f481454
wallet: clarified logs a bit 2023-08-08 20:33:39 +02:00
sowle
c2975809b9
version bump: 2.0.0.217 -> 2.0.0.218 2023-08-08 18:25:07 +02:00
sowle
46e4919245
Zarcanum PoS proofs & wallet's mining code made compatible with non-explicit asset id outputs 2023-08-08 16:58:49 +02:00
sowle
256f60311a
coretests: minor fix for multiassets_basic_test 2023-08-08 13:09:39 +02:00
sowle
0d5e58c2c7
coretests: added new test assets_and_pos_mining which uncovers a bug in Zarcanum PoS implementation when a non-explicit asset id output is being staked 2023-08-08 02:43:45 +02:00
cryptozoidberg
7c84d07fc3
Merged from cryptoassets 2023-08-07 21:35:24 +02:00
cryptozoidberg
db52f5b242
layout fixed 2023-08-07 21:32:22 +02:00
sowle
7b5e66713e
version bump: 2.0.0.216 -> 2.0.0.217 2023-08-07 02:50:16 +02:00
sowle
947fc3032d
core: check_tx_explicit_asset_id_rules changed to support burning outputs with an explicit asset id 2023-08-07 02:43:17 +02:00
sowle
76b85372b5
coretests: assets_and_explicit_native_coins_in_outs was improved to cover alias registration (burn coins) while having all non-explicit asset ids in inputs 2023-08-07 02:41:40 +02:00
sowle
db63453c63
version bump: 2.0.0.215 -> 2.0.0.216 2023-08-07 01:12:14 +02:00
sowle
d0811e6a22
wallets_manager::get_alias_coast() was ALSO fixed to provide exact alias cost, which is necessary for post-HF4 2023-08-07 01:11:23 +02:00
sowle
a0b09a6b78
version bump: 2.0.0.214 -> 2.0.0.215 2023-08-06 22:29:38 +02:00
sowle
4ae2cd8a51
core_rpc_server::on_get_alias_reward() and wallet2::get_alias_cost() were fixed to support aliases in post-HF4 env 2023-08-06 21:43:33 +02:00
sowle
de52782b21
minor improvements 2023-08-06 21:14:49 +02:00
sowle
3916dd5502
coretests: gen_wallet_alias_via_special_wallet_funcs improved to also cover request_alias_registration() with the default alias reward 2023-08-06 21:14:07 +02:00
sowle
249c54b280
version bump: 2.0.0.213 -> 2.0.0.214 2023-08-06 14:56:37 +02:00
sowle
1854196132
coretests: gen_alias_too_much_reward adapted for post-HF4 2023-08-06 14:23:28 +02:00
sowle
a959c95231
wallet: request_alias_registration() and prepare_tx_destinations() are fixed to correctly support aliases handling in post-HF4 env 2023-08-06 03:39:20 +02:00
sowle
a632192ebc
wallet: always create at least CURRENCY_TX_MIN_ALLOWED_OUTS outputs 2023-08-06 03:36:40 +02:00
sowle
9ee2031948
construct_tx: allow zero amount outputs 2023-08-06 03:35:17 +02:00
sowle
44cf9fd3fe
gcc compilation issues fixed 2023-08-06 03:17:26 +02:00
sowle
a3b12b1931
coretests: alias tests (and two wallet-alias tests) now set to be run in HF4 environment as well (many of them should fail because fixes were not committed yet) 2023-08-06 02:27:58 +02:00
sowle
adc006f2db
coretests: gen_wallet_alias_and_unconfirmed_txs and gen_wallet_alias_via_special_wallet_funcs were improved and adapted to HF4 2023-08-06 02:19:28 +02:00
sowle
ff3614fcce
coretests: gen_alias_in_coinbase, gen_alias_tests and gen_alias_too_small_reward were fixed and adapted for post-HF4 2023-08-06 02:00:40 +02:00
sowle
c1e0bc79a2
chaingen: replace_coinbase_in_genesis_block() 2023-08-06 01:51:31 +02:00
sowle
07d34298a0
coretests: compilation fixes 2023-08-06 01:29:04 +02:00
sowle
8a8477656d
chaingen: fixed few bugs in construct_tx_with_many_outputs() and put_alias_via_tx_to_list() 2023-08-06 01:28:18 +02:00
sowle
02138c86a4
clarify logging 2023-08-06 01:23:52 +02:00
sowle
df087b40c3
core: copmarison operators 2023-08-06 00:00:02 +02:00
cryptozoidberg
0b835903ab
asset operations in for wallet 2023-08-05 20:27:46 +02:00
sowle
9e61ccfedc
coretests: construct_pow_block_with_alias_info_in_coinbase and construct_block_gentime_with_coinbase_cb adapted for hf4 2023-08-04 02:47:52 +02:00
sowle
9906e0e168
added tdef_zero_amount_blinding_mask support for construct_tx_out 2023-08-04 02:44:00 +02:00
cryptozoidberg
e347062ab1
work related to assets altering(update,emmit,burn) 2023-08-03 20:01:41 +02:00
sowle
7663f8386a
fixed minor gcc compilation issues 2023-08-03 01:29:10 +02:00
sowle
87d109b8a5
readme: updated min/max versions 2023-08-02 22:58:12 +02:00
sowle
b0bbca04d6
coretests: fixed a bug with ZC outs handling in fill_tx_sources() 2023-08-02 22:56:57 +02:00
sowle
d1e066c609
coretests: various fixes for alias tests 2023-08-02 22:55:09 +02:00
sowle
d852119e5e
range proofs: max outputs count changed: 16 -> 32 2023-08-02 22:53:00 +02:00
sowle
136ac303b4
minor improvements 2023-08-02 22:51:50 +02:00
sowle
96a4b4033f
get_outs_money_amount() modified to handle hidden amounts as well 2023-08-02 22:51:12 +02:00
sowle
aed4d0bbee
coretests: chaingen improvements for --stop-on-first-fail 2023-08-02 22:49:41 +02:00
sowle
9d51307574 Merge branch 'master' into release 2023-08-01 15:50:21 +02:00
sowle
34eee5c961 Merge branch 'release2' 2023-08-01 15:26:31 +02:00
sowle
12bb214276 version bump: 1.5.2.149 -> 1.5.2.150 2023-07-31 19:15:22 +02:00
sowle
3346a5155a ui submodule updated 2023-07-31 19:14:22 +02:00
sowle
4d2eb4a57b
ui submodule updated 2023-07-31 19:13:11 +02:00
sowle
c756bde213 version bump: 1.5.1.148 -> 1.5.2.149 2023-07-31 18:15:43 +02:00
sowle
f910b66145 ui submodule updated 2023-07-31 18:12:06 +02:00
sowle
78890eea6b predownload file updated to height 2200000 2023-07-31 15:27:30 +02:00
sowle
affa54f1e1
partially fixed a bug with alias registration for hf4 + gen_alias_update_for_free test updated 2023-07-28 04:15:27 +02:00
sowle
07c96ea9b6 build: macOS build script updated 2023-07-26 18:43:03 +02:00
sowle
fa4888aece version bump: 1.5.1.147 -> 1.5.1.148 2023-07-26 18:28:18 +02:00
sowle
e6be30aa5a ui submodule updated 2023-07-26 18:26:53 +02:00
cryptozoidberg
2375d0fbc1
fixed minro bug in UI wallet 2023-07-26 14:37:55 +02:00
sowle
54396e8aeb
build macOS: minor fix for build script 2023-07-25 00:55:59 +02:00
zano build machine
c775719525 === build number: 212 -> 213 === 2023-07-24 19:11:46 +03:00
sowle
bd29b5cb1b version bump: 1.5.1.146 -> 1.5.1.147 2023-07-21 13:21:52 +02:00
sowle
57cf32b6be build: macOS build script updated 2023-07-21 13:20:55 +02:00
sowle
f8d953afe2 remove annoying debug log message 2023-07-21 13:18:40 +02:00
sowle
1a5f9e16e6 ui submodule updated 2023-07-21 13:17:46 +02:00
sowle
76e60d7cfc
version bump: 2.0.0.211 -> 2.0.0.212 2023-07-21 13:04:37 +02:00
sowle
1a42d2ef65
ui submodule updated 2023-07-21 13:04:07 +02:00
sowle
c0d0d7d42a
build macOS: final fixes (hopefully) 2023-07-21 11:03:35 +02:00
sowle
1088b3ce90
build for macOS: dirty workaround for unsolvable issues with the VM 2023-07-21 02:04:34 +02:00
sowle
45f3986f78
build: macOS min deployment target changed: 10.10.5 -> 10.12 (Sierra) 2023-07-20 20:57:21 +02:00
sowle
01a878d827
Merge branch 'C++17' into cryptoassets 2023-07-20 20:51:49 +02:00
cryptozoidberg
4c15be3d4e
fixed isolate_auditable_and_proof 2023-07-20 19:03:02 +02:00
cryptozoidberg
f8c6125258
removed deterministif onetime key 2023-07-20 17:12:20 +02:00
cryptozoidberg
6c8f879661
Implemented attachment_isolation_test and fix for this test 2023-07-19 22:09:14 +02:00
cryptozoidberg
145a1b65b5
moved UI to latest commit 2023-07-19 15:21:44 +02:00
cryptozoidberg
96a05dce47
Layout moved to latest commit 2023-07-19 13:34:46 +02:00
cryptozoidberg
eaebac7e6b
Implemented deterministic one time tx keys 2023-07-18 20:57:30 +02:00
cryptozoidberg
963b1b3f10
added forgoten files 2023-07-17 14:34:28 +02:00
cryptozoidberg
f36f570310
Implemented test for the issue related to TX_SERVICE_ATTACHMENT_ENCRYPT_BODY_ISOLATE_AUDITABLE with outgoing transactions 2023-07-14 22:44:16 +02:00
sowle
e3f2170f00
version bump: 2.0.0.210 -> 2.0.0.211 2023-07-14 21:21:31 +02:00
sowle
30d42c6cef
version bump: 2.0.0.210 -> 2.0.0.211 2023-07-14 21:20:02 +02:00
sowle
689fa2c63e linux and mac build: email sending updated improved (switched to python script) 2023-07-14 20:21:41 +02:00
sowle
6156c0dc6c version bump: 1.5.1.145 -> 1.5.1.146 2023-07-14 20:01:21 +02:00
sowle
9e6530e146 win build script updated 2023-07-14 19:59:39 +02:00
sowle
bddfaae9af
Merge branch 'cryptoassets' into C++17 2023-07-14 13:34:13 +02:00
sowle
4d5c6e2ec6
performace_tests: comilation fix for gcc + warnings 2023-07-14 13:33:33 +02:00
sowle
f1997a64dd
code slightly adapted to C++17 2023-07-14 02:10:18 +02:00
sowle
5ff0f93027
unit_tests & performance_tests: fixed compilation error 2023-07-14 01:30:26 +02:00
sowle
e2d84bfc3b
version bump: 2.0.0.209 -> 2.0.0.210 2023-07-13 15:58:18 +02:00
cryptozoidberg
5448441c8f
fixed typo 2023-07-13 15:55:38 +02:00
sowle
42be0af5a2
linux appimage build: email sending was improved (switched to python script) 2023-07-13 15:51:09 +02:00
cryptozoidberg
d7dea2ad14
added cross-coversion for JSON parser string->uint64_t 2023-07-13 15:49:30 +02:00
sowle
00dcaee48f
linux build: email sending was improved (switched to python script) 2023-07-13 12:55:36 +02:00
sowle
696725b5c3
version bump: 2.0.0.208 -> 2.0.0.209 2023-07-13 01:01:15 +02:00
sowle
abe696b2f4
functional tests: compilation fixed 2023-07-13 01:00:17 +02:00
sowle
e5bdd70a51
CMake minimum required version: 2.8.6->3.1, C++ minimum required version: 11(?) -> 14 2023-07-13 00:59:41 +02:00
sowle
66cd998f4d
win build script improved 2023-07-12 20:15:58 +02:00
sowle
babfde7318
win build system improvements 2023-07-12 12:31:50 +02:00
sowle
228b20e801
win build: minor fixup 2023-07-12 02:27:48 +02:00
sowle
c606259a8b
win bulild: 1) signing all executables (and new cert supported); 2) better approach for sending emails using a custom python script; 3) win build script updated for MSVC 2019 and more 2023-07-11 22:47:10 +02:00
sowle
8cbf3a7ebb
wallet2: fixed a rare bug preventing PoS block creation when UTXO defragmentation tx accidently uses stake output (pre-zarcanum) 2023-07-06 18:50:15 +02:00
sowle
8bf684f0d8
coretests: pos_minting_tx_packing was changed to uncover two a bug in PoS block packing (defragmentation) tx (pre-zarcanum) 2023-07-06 18:48:19 +02:00
cryptozoidberg
01548cdf57
few minor fixes 2023-07-03 16:56:41 +02:00
cryptozoidberg
ec01f1c80b
Updated UI 2023-06-29 13:35:37 +02:00
cryptozoidberg
1183c8b548
Fixed missing outgoing transactions from history 2023-06-22 23:32:17 +02:00
cryptozoidberg
937dfe042e
Merge branch 'recent_history' into cryptoassets 2023-06-21 22:46:29 +02:00
cryptozoidberg
c3397a00eb
fixes in simplewallet and mainwindow for new recent_history structure 2023-06-21 22:45:31 +02:00
cryptozoidberg
bf908f43a6
Merge branch 'cryptoassets' into recent_history 2023-06-20 21:59:53 +02:00
cryptozoidberg
7b228f07b4
Merge branch 'cryptoassets' of github.com:hyle-team/zano into cryptoassets 2023-06-20 21:59:32 +02:00
cryptozoidberg
a744092d9a
last fixes over bunch of tests 2023-06-20 21:59:02 +02:00
cryptozoidberg
26be84780a
Moved UI to latest commit(and built html) 2023-06-20 15:09:44 +02:00
cryptozoidberg
6caa5b7ac1
Moved UI to latest commit(and built html) 2023-06-20 15:04:24 +02:00
sowle
4e9c328be0
wallet: PoS mining timings 2023-06-19 23:59:17 +02:00
cryptozoidberg
71cc21845a
escrow_custom_test fixed(with many many tiny fixes) 2023-06-19 00:19:25 +02:00
cryptozoidberg
2860d030a3
fixes of different situations related to contracts and unconfirmed state 2023-06-16 20:19:49 +02:00
cryptozoidberg
3b190388b2
refactoring of wallet_transfer_info and unconfirmed balance calculations 2023-06-15 23:55:22 +02:00
sowle
bd893d9fa6
wallet2: decrease UTXO defrag limits a bit 2023-06-15 21:02:22 +02:00
sowle
dd80d202ad
wallet2: fix for a rare bug in asset deployment that occurs when there are few ZC outputs 2023-06-15 20:06:05 +02:00
sowle
5620e453b6
coretests: added new test asset_depoyment_and_few_zc_utxos which uncovers a rare bug in asset deployment that occurs when there are few ZC outputs 2023-06-15 19:47:07 +02:00
sowle
606ce93169
wallet2: fixed a rare bug preventing PoS block creation when UTXO defragmentation tx accidently uses stake output 2023-06-15 17:09:33 +02:00
sowle
50afdacd39
wallet2: fixed a bug preventing PoS block creation when the UTXO defragmentation tx lacks decoy outputs 2023-06-15 16:43:28 +02:00
sowle
ee5c0fe787
coretests: packing_outputs_on_pos_minting_wallet were completely rewritten to uncover two rare bugs in PoS block construction / defragmentation tx 2023-06-15 15:34:41 +02:00
cryptozoidberg
b557b0ef93
Moved UI to latest commit(and built html) 2023-06-14 19:02:39 +02:00
cryptozoidberg
b744dfb79b
all tests compilation fixed(still a lot of broken tests) 2023-06-13 23:06:55 +02:00
sowle
b92f63e176
version bump: 2.0.0.207 -> 2.0.0.208 2023-06-13 17:08:28 +02:00
sowle
ba594dd5ac
additional error handling for wallet2 and simplewallet 2023-06-13 17:06:56 +02:00
cryptozoidberg
c48f840f68
fixes over renect_history refactoring(tests still broken) 2023-06-13 00:16:46 +02:00
sowle
44ed820abe
wallet2: fixed a typo 2023-06-12 21:41:08 +02:00
sowle
633d5238ef
version bump: 2.0.0.206 -> 2.0.0.207 2023-06-12 20:38:43 +02:00
sowle
dbb2712119
wallet: minor refactoring around generate_utxo_defragmentation_transaction_if_needed; coretests packing_outputs_on_pos_minting_wallet and pos_minting_tx_packing fixed 2023-06-12 20:37:26 +02:00
cryptozoidberg
2955b2c231
add built html to UI 2023-06-12 18:37:35 +02:00
cryptozoidberg
db637883cb
add built html to UI 2023-06-12 18:36:05 +02:00
cryptozoidberg
9a18116750
wallet2.cpp got in compiled, but the rest is not yet 2023-06-11 00:20:11 +02:00
cryptozoidberg
ad01fb0ba7
Moved UI to latest commits for testnet 2023-06-10 16:07:12 +02:00
cryptozoidberg
accd9ee1ce
Moved UI to letes fixes 2023-06-10 15:29:59 +02:00
sowle
eee04b65ae
wallet: fixed defragmentation tx minimum utxo limit 2023-06-09 19:44:27 +02:00
sowle
ce0f587c53
coretests: fixed a small error in pos_block_builder 2023-06-09 14:15:40 +02:00
sowle
e80e4a60cc
1) refactored block template creation and construct_miner_tx to incorporate block reward, essential for Zarcanum PoS; 2) fixed a bug in Zarcanum PoS generation; zarcanum_block_with_txs test now passes successfully 2023-06-09 01:19:37 +02:00
sowle
13e8d0dfe3
wallet: packing/consolidating tx that automatically aggregates small UTXO in PoS blocks was ranamed to defragmentation tx to avoid confusion + re-implemented to reflect post-HF4 changes 2023-06-09 01:10:16 +02:00
cryptozoidberg
60a9274dcb
Merge branch 'multiassets' into recent_history 2023-06-08 18:25:19 +02:00
cryptozoidberg
f9755eec58
Merge branch 'cryptoassets' into multiassets 2023-06-08 18:20:13 +02:00
cryptozoidberg
9a2371d49f
fixes on unconfirmed txs 2023-06-08 18:19:10 +02:00
sowle
6aba2d44b6
coretests: added new test zarcanum_block_with_txs which uncovers a bug in wallet2 Zarcanum PoS generation when block has non-zero txs 2023-06-08 04:18:37 +02:00
cryptozoidberg
5f79730c20
deep refactoring of recent_transfers structure against confidential assets - fixes over scan_tx_pool 2023-06-07 23:29:41 +02:00
sowle
544d8acead
version bump: 2.0.0.205 -> 2.0.0.206 2023-06-07 15:45:08 +02:00
sowle
831f17d570
gui updated 2023-06-07 15:44:19 +02:00
sowle
4e4982966b
compilation fix for simplewallet 2023-06-07 04:25:01 +02:00
sowle
e4065e7c52
version bump: 2.0.0.204 -> 2.0.0.205 2023-06-07 00:44:11 +02:00
sowle
ea45baa457
fixed a bug in wallet2 where the explicit asset id was incorrectly set when it shouldn't have been 2023-06-07 00:18:22 +02:00
cryptozoidberg
b827779c7c
deep refactoring of recent_transfers structure against confidential assets - still pretty much all broken 2023-06-06 23:05:53 +02:00
sowle
3004dbc684
gcc warning fixed 2023-06-06 22:54:29 +02:00
sowle
9030bfdc2b
coretests: minor improvements around multiassets_basic_test 2023-06-06 22:46:37 +02:00
sowle
a0fb876a48
coretests: added new test assets_and_explicit_native_coins_in_outs, which uncovers a bug in wallet2 where the explicit asset id was incorrectly set when it shouldn't have been 2023-06-06 22:43:09 +02:00
sowle
ce67a1bd1c
coretests: fixed several bugs in chaingen (init_test_wallet now sets hardforks correctly, fill_sources_and_destinations has been adjected to correctly set destinations in case of random split policy) 2023-06-06 22:37:32 +02:00
sowle
00c4ac3314
coretests: adapted few more tests to new testing environment 2023-06-05 20:25:16 +02:00
sowle
24851d10c6
Merge remote-tracking branch 'origin/multiassets' into cryptoassets 2023-06-05 19:08:57 +02:00
sowle
1ec3bac95d
coretests: adapted few tests to fit redesigned test environment (hardforks) 2023-06-05 18:19:39 +02:00
sowle
ddaf862170
Merge branch 'multiassets' into cryptoassets 2023-06-04 21:02:31 +02:00
sowle
6cab1f2e9a
coretests: minor fix for counting unique tests 2023-06-04 20:50:31 +02:00
sowle
ed9741e3cd
coretests: improved gen_wallet_save_load_and_balance test to uncover a bug in wallet save-load process for HF4 + fixed incorrect balance checking for some old wallet tests 2023-06-03 04:21:12 +02:00
sowle
6efe47f69c
coretests: eliminated unnecessary multiple inheritance from hard fork 2 tests 2023-06-03 04:15:14 +02:00
sowle
363d1bc316
coretests: redesigned test environment to allow individual tests to be conducted against various activated hardforks 2023-06-03 04:12:01 +02:00
sowle
30a54790a6
useful warnings and other logging improvements 2023-06-03 04:05:12 +02:00
sowle
2aa302f69a
total number of HFs + "==" and "!=" for hard_forks_descriptor 2023-06-03 04:03:35 +02:00
cryptozoidberg
36d7806b1c
Merge branch 'multiassets' into recent_history 2023-06-02 20:26:26 +02:00
cryptozoidberg
6263975c03
Fixed bug with cloudflare ssl handshake 2023-06-02 20:09:13 +02:00
cryptozoidberg
67cfc35faf
change of recent tx hsitory against multiassets 2023-05-31 13:45:36 +02:00
cryptozoidberg
7a3bfa655a
Changed text in simplewallet by pecial request from @ravaga 2023-05-30 14:47:38 +02:00
sowle
0ddac854a5
build system: added a href to emails for all platforms 2023-05-30 14:26:33 +02:00
sowle
68901d469a
version bump: 2.0.0.203 -> 2.0.0.204 2023-05-29 22:29:08 +02:00
sowle
a21c0a8c1a
wallet: 1) m_custom_assets clearing on resync cmd, 2) deployed asset is automatically added to custom assets list; 3) publish -> deploy; 4) help improved 2023-05-29 22:28:13 +02:00
sowle
f685929814
version bump: 2.0.0.202 -> 2.0.0.203 2023-05-29 14:45:10 +02:00
sowle
0832fac57e
temporary hard-disabled TOR relay (like it was in master) 2023-05-29 14:31:48 +02:00
sowle
3e1123fcaa
print_fixed_decimal_point_with_trailing_spaces() minor fix 2023-05-29 14:25:24 +02:00
sowle
f245df2d09
some warnings fixed 2023-05-26 22:20:55 +02:00
sowle
379f4b3535
version bump: 2.0.0.201 -> 2.0.0.202 2023-05-26 22:11:59 +02:00
sowle
d530c165da
wallet: PoS timings added 2023-05-26 22:11:23 +02:00
sowle
943e234a3d
simplewallet & wallet: printing balance unlocked + disabling tor by default 2023-05-26 22:01:01 +02:00
cryptozoidberg
dbd8c39fe2
multiple fixes over wallet/core api 2023-05-26 20:23:35 +02:00
sowle
b4cdae8bd8
version bump: 2.0.0.200 -> 2.0.0.201 2023-05-25 21:24:28 +02:00
sowle
768309d72e
tx_out_zarcanum serialization fixed + fixed compilation for MSVC 2022 2023-05-25 21:15:42 +02:00
cryptozoidberg
84066c7203
added more proper handling of exception in rpc handlers 2023-05-25 20:05:39 +02:00
cryptozoidberg
3fec14f95e
Implemented multiple map rpc processing(lets chain RPC processing to different handlers maps in different objects) 2023-05-24 23:43:44 +02:00
cryptozoidberg
a9bbfdcf82
wallet_rpc_server refactoring for blocking API calls(for browser extension) 2023-05-23 23:47:42 +02:00
cryptozoidberg
756e6e526f
version updated 2023-05-23 12:39:31 +02:00
sowle
5b2625ab0e
build system: added a href to emails for all platforms 2023-05-23 01:29:06 +02:00
sowle
282ba96efc
build system: windows builds uploading fixed 2023-05-23 01:28:24 +02:00
cryptozoidberg
52f11a77b9
Fixed wrong p2p ports 2023-05-22 23:24:20 +02:00
cryptozoidberg
e97d14c7e4
Fixed simplewallet ionic_swap functions 2023-05-22 23:08:12 +02:00
cryptozoidberg
3fab389f05
Reset testnet to next formation 2023-05-22 19:58:22 +02:00
sowle
5230d062c8
Merge branch 'multiassets' into cryptoassets 2023-05-22 15:56:29 +02:00
sowle
f164335e4e
coretests: zarcanum_in_alt_chain fixed by temporary disabling altchain checks for ZC inputs (+few improvements) 2023-05-22 04:27:40 +02:00
cryptozoidberg
681daeea21
fixed multisig_and_checkpoints and reset checkpoint to original mainnet value to keep all binary compatible 2023-05-20 21:21:45 +02:00
cryptozoidberg
0eaa596536
fixed pos_minting_tx_packing 2023-05-20 20:42:26 +02:00
cryptozoidberg
17188ab8fb
properly configured pos_altblocks_validation 2023-05-20 00:53:53 +02:00
cryptozoidberg
7eea5fab42
reset PoS starter difficulty 2023-05-19 22:46:01 +02:00
cryptozoidberg
b6fecfadff
tx json struct made optional 2023-05-19 19:23:31 +02:00
cryptozoidberg
11939bc4b6
fixed multisig_and_checkpoints 2023-05-19 19:21:02 +02:00
cryptozoidberg
fdf6f3722a
Merge branch 'cryptoassets' into multiassets 2023-05-18 16:42:43 +02:00
sowle
b93bf1d187
predownload updated to height 2100000 2023-05-18 14:10:10 +02:00
cryptozoidberg
fd50b3ad8d
fixed hard_fork_1_pos_and_locked_coins test 2023-05-03 22:16:40 +02:00
sowle
53e79696af
Merge branch 'multiassets' into cryptoassets 2023-05-02 20:48:33 +02:00
sowle
f094aeb0b1
validate_escrow_proposal now requires service attachment body to be encrypted 2023-05-02 20:32:11 +02:00
cryptozoidberg
32fca807c3
Merge branch 'cryptoassets' into multiassets 2023-05-02 16:18:18 +02:00
cryptozoidberg
17134351bb
Multiple fixes over core tests related to zarcanum/multiassets 2023-05-02 16:16:58 +02:00
sowle
9efa8f7a6f
wallet2::add_sent_unconfirmed_tx partially fixed for assets, read_money_transfer2_details_from_tx removed 2023-05-01 13:34:37 +02:00
cryptozoidberg
62d173424a
changed approach to turn core_tests against hardforks 2023-05-01 00:03:24 +02:00
cryptozoidberg
a83dedf2a4
multiple fixes over old block verification tests 2023-04-30 00:43:49 +02:00
sowle
ba2e7d4d15
typo fixed 2023-04-28 22:19:07 +02:00
sowle
6de38385e2
gcc warning fixed 2023-04-28 21:58:18 +02:00
sowle
1a698a72b2
a rare case in get_est_height_from_date fixed (credits go to @crypto_zoidberg) 2023-04-28 21:51:28 +02:00
sowle
0fcfe2e540
wallet2: various fixes for escrow 2023-04-28 20:07:35 +02:00
sowle
86e9667773
Merge branch 'multiassets' into cryptoassets 2023-04-27 19:19:19 +02:00
cryptozoidberg
64a043a18f
fixed few bugs related to aliases registration and block versions 2023-04-26 23:59:33 +02:00
sowle
438dd74166
coretests: fixed construct_tx_to_key for boundary condition handling for tx_version at the next block height 2023-04-26 22:49:31 +02:00
cryptozoidberg
4cfb62575b
fixed bug in atomic swaps(discovered by core_tests) 2023-04-26 00:24:29 +02:00
cryptozoidberg
9f6436ea08
Final fixes for ionic_swap_basic_test - first time test worked!!!!! 2023-04-25 00:16:13 +02:00
cryptozoidberg
09215f8923
Fixes over TX_FLAG_SIGNATURE_MODE_SEPARATE and ionic swaps 2023-04-21 17:33:56 +02:00
cryptozoidberg
4acb2bae03
multiple fixes over ionic_swap proposal 2023-04-20 22:08:20 +02:00
sowle
9f1b68e2b6
minor fix for a --stop-after-height option (2) 2023-04-18 23:31:26 +02:00
sowle
740425409b
predownload files updated up to height 2067777 2023-04-18 23:24:42 +02:00
sowle
faeefa8927
minor fix for a --stop-after-height option 2023-04-18 20:12:19 +02:00
cryptozoidberg
aa8d3207a4
minor fixes over TX_FLAG_SIGNATURE_MODE_SEPARATE 2023-04-18 20:07:33 +02:00
cryptozoidberg
44e22b611d
Multiple fixes here and there, mostly fixing compilation problems 2023-04-18 16:55:25 +02:00
sowle
901aba2ff9
version bump: 1.5.0.144 -> 1.5.1.145 2023-04-18 00:05:52 +02:00
sowle
21fd86156d
readme: minor improvements to building scripts for boost and openssl 2023-04-17 23:21:43 +02:00
sowle
863baecaee
readme: max versions updated 2023-04-17 23:21:26 +02:00
sowle
4a95e27574
new checkpoint at height 2M 2023-04-17 23:12:09 +02:00
cryptozoidberg
ac4a62a5c9
fixed API for explorer 2023-04-17 23:04:30 +02:00
cryptozoidberg
4aa58d1202
Merge branch 'cryptoassets' into multiassets 2023-04-17 19:36:49 +02:00
cryptozoidberg
9859361e36
Multiple fixes over ionic_swap 2023-04-17 19:35:55 +02:00
sowle
c69ef90249
check_native_coins_amount_burnt_in_outs() instead of get_amount_for_zero_pubkeys() which is now deprecated, some coretests adapted and have been debugged 2023-04-14 04:51:33 +02:00
sowle
14bec1cc5a
coretests: hard_fork_2 tests now handling m_hardforks properly 2023-04-13 23:23:22 +02:00
sowle
8543cf28c9
wallet: unconfirmed txs handling (temp fix) 2023-04-13 22:26:10 +02:00
cryptozoidberg
74ad0023ee
Merge branch 'cryptoassets' into multiassets 2023-04-13 20:08:31 +02:00
cryptozoidberg
e30341163b
Added intermediate information secure transfer between proposal and acceptance 2023-04-13 20:07:43 +02:00
sowle
0ec1b0f011
decode_output_amount_and_asset_id() implemented 2023-04-13 19:54:06 +02:00
cryptozoidberg
c8aed60e05
Merge branch 'cryptoassets' into multiassets 2023-04-13 17:12:59 +02:00
sowle
3094322edb
wallet2: handle_money_received2() assumes receiving only native coins (temporary) -- fixes few coretests 2023-04-12 22:40:18 +02:00
sowle
a9ac0a24eb
1) outputs_generation_context is now part of finalize_tx_params; 2) outputs_generation_context -> tx_generation_context 2023-04-12 20:13:54 +02:00
sowle
f1815da106
coretests: hardfork 3 set to be default for tests + defaults initialization 2023-04-12 04:55:17 +02:00
sowle
ddd7c21db7
coretests: hardforks are initialized with the defaults for test_generator 2023-04-11 22:41:08 +02:00
cryptozoidberg
27000bdb86
Merge branch 'cryptoassets' into multiassets 2023-04-11 19:16:02 +02:00
cryptozoidberg
03f443cf4c
Fixed few complilation issues 2023-04-11 17:23:06 +02:00
sowle
196c08a15f
crypto tests: minor fixes 2023-04-10 22:15:45 +02:00
sowle
52f941c748
hopefully final fixes for gcc errors 2023-04-10 21:01:35 +02:00
cryptozoidberg
8cfeab405b
merged from cryptoassets 2023-04-10 15:29:54 +02:00
sowle
b94e2f536d
ml2s tests excluded from *; some warnings fixed 2023-04-09 18:22:20 +02:00
sowle
8370e6b9f0
readme: max versions updated 2023-04-08 22:41:31 +02:00
sowle
382f6ab574
fixing gcc errors while trying not to screw up msvc compilation at the same time 2 (wip) 2023-04-08 22:38:50 +02:00
sowle
3abf473c8e
fixing gcc errors while trying not to screw up msvc compilation at the same time (wip) 2023-04-08 21:59:18 +02:00
sowle
fd16da8061
crypto: point_t::ctor made more standard-compliant (gcc error fix) 2023-04-08 05:39:10 +02:00
sowle
f6708e7124
readme: minor improvements to building scripts for boost and openssl 2023-04-08 05:38:01 +02:00
sowle
a7c7c14854
asset surjection proof: has been debugged, test multiassets_basic_test is now passed 2023-04-08 03:21:43 +02:00
sowle
db873c8dc2
crypto: more of point_t::operator== and != 2023-04-08 03:17:21 +02:00
cryptozoidberg
3b7e038064
fixed multiple compilation problems 2023-04-07 22:53:50 +02:00
sowle
447b09f400
check_tx_explicit_asset_id_rules(), is_asset_emitting_transaction() 2023-04-07 06:04:00 +02:00
sowle
c5ff48b9a5
crypto constants refactored: moved to headers as constexpr's, new constexpr ctors added, some were improved + tests greatly improved (crypto_constants and crypto_scalar_basics) 2023-04-06 02:50:12 +02:00
cryptozoidberg
fed1df53f0
Implementd rpc for crypto api 2023-04-05 19:05:45 +02:00
sowle
29cb62aaf3
asset surjection proof: debugging in progress 2023-04-05 06:45:27 +02:00
sowle
b9f49c26f0
coretests: blobsize check was temporary disabled 2023-04-04 23:23:46 +02:00
sowle
6915213eb1
verify_asset_surjection_proof() : first PoC implementation 2023-04-04 23:22:11 +02:00
sowle
4d6977b301
wallet2::load_whitelisted_tokens() was temporary disabled 2023-04-04 23:19:48 +02:00
sowle
8f86674fc1
crypto: constants for generators U, X, 1/8*H updated + crypto_basics test was adatped 2023-04-04 23:18:04 +02:00
sowle
228d73a39c
construct_miner_tx: explicit asset_id for PoS fixed 2023-04-04 14:04:42 +02:00
cryptozoidberg
dcf1b0adae
basic crypto functions exported from wallet 2023-04-03 20:32:18 +02:00
sowle
990f99767d
asset surjection proof: core adaptation & debugging (wip) 2023-04-01 06:49:40 +02:00
sowle
761a01ad9f
build system: added a href to emails for all platforms 2023-03-31 15:00:41 +02:00
cryptozoidberg
ca7d50d9ff
RPC server for UI: in work(need to overcome synchronization problem) 2023-03-30 23:21:51 +02:00
cryptozoidberg
4ca3e25995
Multiwallet rpc server implementation: in work 2023-03-29 20:26:46 +02:00
sowle
3b13b6e6f5
build system: windows builds uploading fixed 2023-03-29 19:24:11 +02:00
sowle
c9f9c65732
BGE proof has been debugged + more basic tests 2023-03-28 12:47:14 +02:00
sowle
154e649f56
verify_BGE_proof() first PoC implementation 2023-03-27 22:31:55 +02:00
cryptozoidberg
2ab206b6c1
Multiwallet RPC API: initial code draft 2023-03-27 22:03:31 +02:00
sowle
5b0431daf9
generate_BGE_proof() first PoC implementation 2023-03-27 02:48:42 +02:00
sowle
cfd01e80fe
BGE proof: WIP 2023-03-26 22:36:15 +02:00
sowle
fdc1ceea62
crypto: constexpr helpers moved to crypto-sugar, constexpr_pow added 2023-03-26 22:33:47 +02:00
cryptozoidberg
69647023e0
Implemented rpc calls for ionic_swaps 2023-03-24 20:59:26 +01:00
sowle
beccc55788
crypto: constexpr_floor_log_n, constexpr_ceil_log_n + tests 2023-03-23 23:30:56 +01:00
cryptozoidberg
2b9227c0f1
Implemented basic code for ionic_swap rpc 2023-03-23 19:24:23 +01:00
sowle
a13cb94214
assets surjection proof: work in progress, more data prepared 2023-03-23 03:37:05 +01:00
sowle
c1d6d13e7b
assets surjection proof: work in progress 2023-03-22 23:28:01 +01:00
sowle
1a53806642
CLSAG 5-layers GGXXG has been debugged + test added 2023-03-22 03:14:45 +01:00
sowle
06c0394b67
Zarcanum: 5-layers CLSAG draft implementation (tests are yet tbd, WIP) 2023-03-21 22:26:24 +01:00
sowle
cce4aaaaa3
Zarcanum adaptation for confidential assets: balance and range proofs generation/verification has been debugged (WIP) 2023-03-21 02:34:29 +01:00
sowle
b5c1c5477d
Zarcanum adaptation for confidential assets (WIP) 2023-03-20 21:25:08 +01:00
sowle
4f1d01fc73
crypto: 5-layers extended CLSAG is introduced for Zarcanum + confidential assets needs (stubs so far, tbd) 2023-03-20 21:21:47 +01:00
cryptozoidberg
94861608cf
Implemented accept_ionic_swap_proposal and get_ionic_swap_proposal_info command in simplewallet 2023-03-20 20:11:23 +01:00
sowle
96753bbc94
proofs generation moved from construct_miner_tx to wallet2::prepare_and_sign_pos_block + improvements over generate_zc_outs_range_proof 2023-03-17 23:59:21 +01:00
sowle
72dab7bb1e
Zarcanum & assets balance proof refactoring: WIP 2023-03-17 23:29:26 +01:00
cryptozoidberg
f47e9977a5
Implemented generate_ionic_swap_proposal command in simplewallet 2023-03-17 19:55:32 +01:00
sowle
c6294f7cb6
Zarcanum & assets balance proof refactoring: work in progress 2023-03-16 23:59:52 +01:00
cryptozoidberg
83c5336004
Core tests for basic ionic swaps scenario: draft for verification code 2023-03-16 19:15:11 +01:00
sowle
2f91a2b7f3
check_tx_balance minor improvement 2023-03-14 23:53:50 +01:00
cryptozoidberg
8e43055140
Core tests for basic ionic swaps scenario: code for creating proposal 2023-03-13 22:14:39 +01:00
sowle
95ebf24944
crypto tests: range proof tests were adapted and improved 2023-03-13 20:07:34 +01:00
sowle
d39b72c9eb
fixed a bug in old-style Zarcanum proof generation (temporary stuff) 2023-03-13 20:06:02 +01:00
sowle
f3f7b1a742
crypto traits for (extended) range proofs were refactored to support different sets of generators + debug helpers after a long debug session 2023-03-13 20:05:06 +01:00
sowle
1df413019f
wallet: fixed pos entry selection (limited to native coins) 2023-03-10 13:46:33 +01:00
cryptozoidberg
f0d5bc94cd
Core tests for basic ionic swaps scenario: inital code 2023-03-09 19:49:40 +01:00
sowle
c817d3ccb6
minor improvement to multiasset_basic_test 2023-03-08 21:27:01 +01:00
sowle
c45f9ee894
fixed passing of blinded_asset_id for each decoy when requested by RPC from daemon + minor improvements for CLSAG_GGX 2023-03-08 21:26:09 +01:00
sowle
44b2619d79
construct_tx: mark outs asset id's as explicit if all inputs has obvious asset ids and there's no asset emission operation in tx 2023-03-08 21:24:06 +01:00
cryptozoidberg
8be2cc083f
Implemented accept ionic swap proposal(partially) 2023-03-08 21:19:59 +01:00
sowle
5644c18917
crypto tests: clsag_ggx_basics improved and also coverage of binary and boost serialization added 2023-03-08 21:19:36 +01:00
sowle
f980bdadf5
balance proof: final fixes for asset-transferring txs; outputs_generation_context cleanup 2023-03-07 12:38:30 +01:00
cryptozoidberg
6e1fb500eb
Implemented function for decoding proposal details 2023-03-06 22:47:06 +01:00
sowle
730b8c52e2
balance proof refactored to new "simple Schnorr against X or G" scheme, has been debugged finally 2023-03-06 21:50:11 +01:00
cryptozoidberg
0030f7fbf6
Implemented basic code for validatiing ionic_swap 2023-03-03 18:17:16 +01:00
sowle
eb29f7f1e9
vector_UG_aggregation_proof made more strict, E_j structure now enforced to be lin(T'_j, G) 2023-03-02 22:06:42 +01:00
sowle
9aed3e6f45
zc_balance_proof refactoring (switching to generic Schnorr proof rel. to G and X depending on presence of ZC ins), work in progress 2023-03-01 22:27:46 +01:00
sowle
1d3153cfbd
generic_schnorr_sig_s (serialized) + test 2023-03-01 21:28:20 +01:00
cryptozoidberg
ae6feef3e5
Functions definitions for mainwindow 2023-02-28 21:36:52 +01:00
cryptozoidberg
404bfc1576
Creating outpus, minor fixes for ionic_swap 2023-02-28 21:35:28 +01:00
sowle
dd1631461d
crypto::generic_schnorr_sig + test 2023-02-28 02:04:50 +01:00
sowle
5127c77ebf
scalar_t::assign_mulsub + test 2023-02-28 02:03:57 +01:00
sowle
1ed33ce910
validate_tx_semantic() fixed for post-HF4 2023-02-27 21:26:30 +01:00
sowle
b1ccf8644b
3-CLSAG GGX implementation + tests 2023-02-27 18:00:53 +01:00
sowle
7bdb410b5d
is_out_to_acc: handling of non-blinded native assets id added 2023-02-27 15:36:58 +01:00
sowle
a532a3e042
native_coin_asset_id_pt introduced 2023-02-27 15:35:22 +01:00
sowle
44e22becae
crypto: vector_UG_aggregation_proof's generation and verification have been debugged and finalized 2023-02-27 02:56:12 +01:00
sowle
5ffb94749d
minor warning fixed in tor-connect 2023-02-26 21:56:00 +01:00
sowle
3eca2a1611
explicit native asset id for tx_destination_item and construct_tx_out 2023-02-26 21:49:21 +01:00
sowle
5fbb7a7fbb
bcs: range proofs collection, aggragation and balance checking refactored & improved 2023-02-26 21:48:09 +01:00
sowle
7efe48f522
crypto: vector_UG_aggregation_proof moved to cpp and improved 2023-02-26 21:45:54 +01:00
sowle
91afdac46d
crypto:: scalar_t::operator- (unary) + test 2023-02-26 21:44:54 +01:00
sowle
ec32ff4b5f
minor improvements 2023-02-26 21:43:29 +01:00
cryptozoidberg
2328a2cced
Implemented basics for building ionic_swap template 2023-02-23 19:10:22 +01:00
sowle
836e903156
first attempt of vector_UG_aggregation_proof gen & verify 2023-02-22 22:05:03 +01:00
sowle
e019200b85
minor fix for construct_tx_out 2023-02-22 22:03:43 +01:00
sowle
aecb49b403
scalar_vec_t extended a bit 2023-02-22 22:01:55 +01:00
zano build machine
b51a757e34 === build number: 144 -> 145 === 2023-02-22 22:57:05 +03:00
cryptozoidberg
f5b6ab9c48
bunch of fixes in UI 2023-02-22 20:49:26 +01:00
cryptozoidberg
b5ad2ffcdc
implemented boost::optional serialization 2023-02-21 17:18:21 +01:00
sowle
f3eb63d25c
ca: global refactoring: tx balance validation, asset operation validation, transaction creation. Also, main tx structure improved with @cryptozoidberg to reflect needs in versatile prunable proofs storage! 2023-02-21 01:51:55 +01:00
sowle
f9b54f305a
ca: wallet refactoring to support confidential assets (WIP) 2023-02-21 01:41:33 +01:00
sowle
4ae6616a2b
crypto: linear composition proof stub 2023-02-21 01:37:42 +01:00
sowle
b733e5561a
ca: validate_tx_semantic() refactored, bare balance check made explicit 2023-02-21 01:35:03 +01:00
cryptozoidberg
8f483db05e
ionc swaps implementation: inital code 2023-02-20 21:39:36 +01:00
cryptozoidberg
ed9b6932e8
Merge branch 'release' 2023-02-16 18:55:03 +01:00
cryptozoidberg
938c019cc6
hard-disabled TOR relay due to possible misleading API responses on wallet server 2023-02-16 18:52:40 +01:00
cryptozoidberg
123e599202
small fixes over bug reports 2023-02-15 19:55:00 +01:00
cryptozoidberg
237b09d886
Merge branch 'release' 2023-02-15 12:59:32 +01:00
cryptozoidberg
ffad058c7f
moved UI to right commit 2023-02-15 12:58:59 +01:00
cryptozoidberg
4a2f0c2165
moved UI to latest commit with bunch of fixes 2023-02-14 14:14:18 +01:00
sowle
a813484a4f
confidential assets: global refactoring WIP (now everything is in compilable state, including tests) 2023-02-13 21:42:31 +01:00
cryptozoidberg
b6cfecf25f
added extra check on transfer_canceled 2023-02-10 17:15:05 +01:00
sowle
7652a117cd
confidential assets: core & wallet refactoring, various fixes, WIP 2023-02-09 23:35:33 +01:00
sowle
f3583c2873
coretests: zaranum_in_alt_chain test improvements (forgotten) 2023-02-08 18:55:25 +01:00
sowle
f978be8b90
range proofs: Zano now uses U and G generators for aggregable range proof amount commitments 2023-02-08 18:54:25 +01:00
sowle
cf2f806f30
confidential assets: global wallet refactoring (WIP), mainly asset_id type change (hash -> public_key) and blinded_asset_id integration 2023-02-08 18:50:26 +01:00
sowle
abf99ece5e
confidential assets: global core refactoring (wip) 2023-02-08 18:42:29 +01:00
sowle
47b1338d32
crypto: vector_UG_aggregation_proof and zc_asset_surjection_proof stubs 2023-02-08 18:31:07 +01:00
sowle
5568e0eeaf
crypto: generator U + assertion tests for generators 2023-02-08 18:16:04 +01:00
sowle
baf2b507ec
Merge branch 'release' into cryptoassets
# Conflicts:
#	utils/build_script_windows.bat (accepted mine)
2023-02-04 20:38:47 +01:00
sowle
67fecc69fe
Merge branch 'multiassets' into cryptoassets 2023-02-04 20:34:03 +01:00
sowle
f2375f0156
confidential assets: work in progress 2023-02-01 21:58:26 +01:00
cryptozoidberg
394384facc
moved UI to proper commit 2023-01-18 21:00:51 +01:00
cryptozoidberg
dc3d6f8cfe
Fixed typo 2023-01-18 20:27:15 +01:00
cryptozoidberg
17212f16ea
Removed echo fro launch wrapper 2023-01-18 19:58:54 +01:00
cryptozoidberg
293d9f7d8d
Update Zano_appimage_wrapper.sh 2023-01-18 19:20:05 +01:00
cryptozoidberg
3850b19425
added helper message to script 2023-01-18 18:36:25 +01:00
cryptozoidberg
01eef47487
Merge branch 'release' 2023-01-18 17:38:08 +01:00
cryptozoidberg
ddc9d3a464
Merge branch 'release_test' into release 2023-01-18 17:37:19 +01:00
cryptozoidberg
d553a5f669
Update Zano_appimage_wrapper.sh 2023-01-18 15:15:13 +01:00
cryptozoidberg
d39c86207b
Replace image with rounded shape 2023-01-18 15:13:49 +01:00
cryptozoidberg
d9120d8249
replaced icon from png to svg 2023-01-18 14:00:13 +01:00
cryptozoidberg
a4c332e136
disabling sandbox for qtwebengine 2023-01-17 15:48:15 +01:00
cryptozoidberg
26db77219d
fix in appimage wrapper script 2023-01-17 14:39:41 +01:00
cryptozoidberg
f7b44e552b
fixes to crete manual script in appimage 2023-01-16 22:29:09 +01:00
cryptozoidberg
1b898d2afa
added disabling sandbox option for qtWebEngine under ubuntu 2023-01-16 20:05:43 +01:00
cryptozoidberg
976ec78247
fixes AppImage filename derivation 2023-01-13 19:03:20 +01:00
cryptozoidberg
6ee87bacf9
added missing folder creation 2023-01-13 18:42:09 +01:00
cryptozoidberg
9bdf9a4da7
added logo in png to AppImage 2023-01-13 18:20:24 +01:00
cryptozoidberg
dadc6a6c41
added missing changedir 2023-01-12 21:27:01 +01:00
cryptozoidberg
7e962a8a92
added skip_build option 2023-01-12 21:25:43 +01:00
cryptozoidberg
9990983510
fix for appimage path for logo 2023-01-12 21:11:53 +01:00
cryptozoidberg
018c2d24da
fix for appimage logo 2023-01-12 21:10:21 +01:00
cryptozoidberg
985af2ba08
disabled full rebuild, added missing / symbol in appimage 2023-01-12 20:11:42 +01:00
cryptozoidberg
33f7c58146
multiple fixes over AppImage build script 2023-01-12 20:01:22 +01:00
cryptozoidberg
4f831e9a3d
added Exacutable flag 2023-01-12 18:01:55 +01:00
cryptozoidberg
f873307240
added script for building AppImage 2023-01-12 17:46:31 +01:00
cryptozoidberg
1e7dc7dff9
added extra logs for AppImage detection debug 2023-01-12 15:42:03 +01:00
cryptozoidberg
a5f6f32083
Added svg app image for Linux AppImage 2023-01-12 15:31:53 +01:00
cryptozoidberg
b21823cc95
added openssl to root cmake file 2023-01-11 17:56:56 +01:00
cryptozoidberg
a95c56f20e
Merge branch 'master' into release 2023-01-11 17:44:32 +01:00
cryptozoidberg
0ed7ead8df
added detecting of an AppImage and set proper path to html foldr 2023-01-11 17:44:11 +01:00
cryptozoidberg
e7231271d1
added detecting of an AppImage and set proper path to html foldr 2023-01-11 14:57:51 +01:00
Snider
4ff66c2b15
Fixes CMAKE_OSX_DEPLOYMENT_TARGET (#337)
Hiya,

When compiling on macOS, i get "ld: warning: dylib (/opt/homebrew/lib/libboost_filesystem-mt.dylib) was built for newer macOS version (13.0) than being linked (11.0)"

This is fixed by adding "CACHE STRING"
2023-01-03 13:34:26 +01:00
sowle
0c0c287418
build script windows: ZANO_BUILDS_HOST added 2022-12-26 22:47:31 +01:00
sowle
404b20fa03
build: win signing temporary disabled 2022-12-22 22:12:13 +01:00
sowle
4eacfa8305
Merge branch 'master' into release 2022-12-22 20:22:37 +01:00
zano build machine
cd01fd3bd2 === build number: 143 -> 144 === 2022-12-22 17:20:31 +03:00
cryptozoidberg
48f9466b3e
extra verification checks in add_out_to_get_random_outs() 2022-12-20 21:23:53 +01:00
cryptozoidberg
64a90d190a
optimization on get_random_outs 2022-12-20 21:22:11 +01:00
cryptozoidberg
67334071a6
fixed sweep_below command in simplewallet(credits to @sowle) 2022-12-19 23:09:17 +01:00
cryptozoidberg
db5167d76a
Merge branch 'zarcanum' into multiassets 2022-12-16 19:47:08 +01:00
cryptozoidberg
254877421c
Merge branch 'multiassets' into zarcanum 2022-12-16 15:41:11 +01:00
cryptozoidberg
a9eba1d728
merged from zarcanum 2022-12-16 15:40:24 +01:00
cryptozoidberg
102e0c1cf9
disabled aliases registration fee checks for testnet 2022-12-16 15:38:49 +01:00
cryptozoidberg
28f1ed42d9
moved UI to latest commits 2022-12-15 18:50:05 +01:00
cryptozoidberg
5c6de2fddb
fixed asset duplication in balances with custom list 2022-12-15 17:11:55 +01:00
cryptozoidberg
63cdb84b80
fixed simplewallet compilation problem 2022-12-13 14:32:42 +01:00
cryptozoidberg
c057909e81
UI moved to latest commit 2022-12-12 18:12:44 +01:00
cryptozoidberg
d6cf863687
fixed multiple UI bugs related to multiassets 2022-12-10 00:00:20 +01:00
cryptozoidberg
e6b820213a
moved UI to latest commit 2022-12-09 17:57:13 +01:00
cryptozoidberg
7cda58a7cf
fixed bug in get_wallet_info 2022-12-07 18:04:40 +01:00
cryptozoidberg
0dc8a42555
added api for UI to fetch balance after whitelisting of asset 2022-12-06 21:59:49 +01:00
cryptozoidberg
9c30c60881
fixed scaling issue, fixed missing Zano entry in balances list 2022-12-06 21:31:17 +01:00
cryptozoidberg
18ec6fb2dd
moved UI to latest commit 2022-12-05 21:56:00 +01:00
sowle
4c7d6e9724
tor-connect module updated 2022-12-05 14:42:23 +01:00
sowle
aca0388c3e
don't use deprecated boost/bind.hpp and placeholders in global namespace 2022-12-04 15:25:19 +01:00
sowle
a8be7c327d
fix for a typo 2022-12-04 15:20:09 +01:00
sowle
2de573e2c3
gcc warning fix 2022-12-03 21:31:41 +01:00
sowle
528a46f4ed
wallet2::prepare_tx_destinations() fixed to correctly support assets + minor logging improvements 2022-12-03 21:12:31 +01:00
cryptozoidberg
65cfb4910f
moved to latest tor-connect commit 2022-12-03 20:59:51 +01:00
cryptozoidberg
464818fb7f
added api for adding/removing assets via UI 2022-12-02 22:29:23 +01:00
sowle
dac549f0b6
minor improvements and compilation fixes 2022-12-02 18:14:19 +01:00
cryptozoidberg
3a46bf3a44
tor-connect moved to latest commits 2022-12-02 15:29:07 +01:00
cryptozoidberg
65e5ad4f9f
moved to lates UI code 2022-12-02 15:28:03 +01:00
cryptozoidberg
a14dcb4e8a
implemented add/remove custom assets 2022-12-02 15:24:50 +01:00
cryptozoidberg
11e1836096
fixed bug with inflating balances array 2022-12-01 19:05:17 +01:00
sowle
39da73c42e
Merge branch 'multiassets' into zarcanum 2022-11-30 20:00:50 +01:00
sowle
139f2a5ae4
wallet: minor log improvement 2022-11-30 19:58:20 +01:00
cryptozoidberg
48f4886d0d
disabled code signing due to problems with cert(will be fixed later) 2022-11-29 18:50:10 +01:00
cryptozoidberg
511f2c0b8c
attempt to fix missing crypt32 2022-11-29 17:43:22 +01:00
sowle
879b93ef44
Merge remote-tracking branch 'origin/multiassets' into zarcanum 2022-11-29 04:59:31 +01:00
cryptozoidberg
eb0c689e88
Link ssl statically and in right order(now) 2022-11-29 00:31:24 +01:00
cryptozoidberg
880e1c189d
Link ssl statically 2022-11-28 23:23:54 +01:00
cryptozoidberg
1c52911757
added asset_id for UI_to_wallet api, added preloading whitelist for wallet before balance request 2022-11-28 22:10:50 +01:00
sowle
2b98842f8d
stratum: handle_method_eth_submitHashrate now supports parameter of any length (should be helpful for odd miners) 2022-11-28 21:17:59 +01:00
sowle
e1acf907db
wallet2::is_transfer_able_to_go() adapted for HF4 2022-11-28 21:15:49 +01:00
cryptozoidberg
0d84a92096
simple wallet now understand multiasset version of transfe command 2022-11-28 21:00:10 +01:00
cryptozoidberg
ac135253eb
simplewallet now can show multiassets balances 2022-11-26 23:00:32 +01:00
sowle
6b2831e525
wallet: sweep_below adapted for HF4 2022-11-25 23:01:45 +01:00
cryptozoidberg
b9facc0b6e
fixed bug in wallet regarding genesis reset 2022-11-25 22:03:21 +01:00
cryptozoidberg
a582473cea
Merge branch 'zarcanum' into multiassets 2022-11-25 15:50:06 +01:00
sowle
453e2b3456
wallet2: minor logging improvements 2022-11-24 21:54:43 +01:00
sowle
738a63a48e
Merge branch 'multiassets' into zarcanum 2022-11-24 21:52:49 +01:00
cryptozoidberg
8c1660e20f
Merge branch 'zarcanum' into multiassets 2022-11-24 21:50:58 +01:00
cryptozoidberg
489d0a9ecf
Fixed zarcanum_test_n_inputs_validation 2022-11-24 21:49:30 +01:00
sowle
b11e66aeff
zarcanum testnet pre-alpha has been launched 2022-11-24 20:39:06 +01:00
sowle
fd456f2445
Merge branch 'multiassets' into zarcanum 2022-11-24 13:15:55 +01:00
sowle
4579f172d8
blockchain_storage::pop_transaction_from_global_index() adapted for HF4 2022-11-24 04:34:58 +01:00
sowle
28c6a0db9b
error logging verbosity improved in a few places 2022-11-24 04:33:52 +01:00
sowle
834ad93094
coretests: zarcanum_in_alt_chain added to the list 2022-11-23 22:34:33 +01:00
sowle
f2ebc76001
coretests: zarcanum_in_alt_chain test added (EXPOSES a bug with global outputs during alt block handling) 2022-11-23 22:01:55 +01:00
sowle
928d937a7b
get_amount_from_variant() made noexcept 2022-11-23 19:28:17 +01:00
sowle
ef38eb9724
p2p: when use-only-priority-nodes is present and none of priority nodes are specified -- don't connect to seed nodes 2022-11-23 18:55:03 +01:00
sowle
741aae9b7f
wallet: prepare_tx_sources() fixed for post-HF4 transfers 2022-11-23 18:09:49 +01:00
sowle
068d606557
coretests: zarcanum_basic_tests improved to check post-HF4 transfers via wallet2 with mixins (exposes a bug atm) + overloaded wallet2::transfer() 2022-11-23 15:10:06 +01:00
sowle
3ff4a69945
DIFFICULTY_STARTER was split into DIFFICULTY_POW_STARTER and DIFFICULTY_POS_STARTER (2) 2022-11-23 04:13:39 +01:00
sowle
4f703fe8f8
DIFFICULTY_STARTER was split into DIFFICULTY_POW_STARTER and DIFFICULTY_POS_STARTER 2022-11-23 03:05:59 +01:00
cryptozoidberg
37bb9611f9
Merge branch 'zarcanum' into multiassets 2022-11-22 15:16:21 +01:00
sowle
0b2fef7642
alt block tx validation fixed for htlc 2022-11-21 22:57:05 +01:00
sowle
8ca9e1261d
1) fill_tx_rpc_inputs adapted; 2) earlier deprecated get_to_key_input_from_txin_v removed completely 2022-11-21 22:55:59 +01:00
sowle
88e3190aad
bcs: more verbose logging 2022-11-21 21:49:11 +01:00
sowle
a0125f81e9
bcs: prevalidate_miner_transaction moved to be called before heavy PoW/PoS (now for alt blocks as well) 2022-11-21 20:40:14 +01:00
sowle
d06aa7796e
bcs: purge_altblock_keyimages_from_big_heap adapted 2022-11-21 20:38:56 +01:00
sowle
ce36a65994
Zarcanum PoS: fix for alt blocks validation 2022-11-21 18:43:36 +01:00
sowle
ec07a63f1e
chaingen: fix for test_generator::build_wallets() + more verbose error logging when didn't find a kernel 2022-11-21 18:39:39 +01:00
cryptozoidberg
d4f05089cd
added multiasset balances on UI signals 2022-11-18 22:36:07 +01:00
cryptozoidberg
b6fd8314ca
Merge branch 'zarcanum' into multiassets 2022-11-18 21:55:39 +01:00
cryptozoidberg
059c367d89
multiple fixes over wallet and cmake 2022-11-18 21:04:05 +01:00
sowle
197ef6861f
validate_alt_block_input adapted for post-HF4 inputs (WIP, first attempt) 2022-11-18 20:55:02 +01:00
cryptozoidberg
bf3430b49b
added support of multibalances on wallets_manager and wallet rpc level 2022-11-18 16:11:15 +01:00
cryptozoidberg
8c7aa8f578
Updated CMakelists for openssl libs due to lates changes in base epee headers(including openssl) 2022-11-18 14:28:36 +01:00
cryptozoidberg
7c9fde7a31
added base class explicit specification to another line 2022-11-18 14:09:42 +01:00
cryptozoidberg
449769b229
added base class explicit specification 2022-11-18 14:00:24 +01:00
cryptozoidberg
ccc761df3a
fixed another linux-specific compilation problem 2022-11-18 13:19:01 +01:00
sowle
5fba04627b
the first working implementation of Zarcanum PoS verification + few bugs fixed in proof gen; zarcanum_pos_block_math test should now succeed 2022-11-18 04:18:41 +01:00
sowle
917437b31e
typo fixed 2022-11-17 23:01:37 +01:00
sowle
57acf4013d
coretests: zarcanum_pos_block_math greatly improved to cover various zarcanum signature issues (now exposes a known bug) 2022-11-17 22:20:33 +01:00
sowle
35b3be92eb
chaingen: more verbose error logging in check_tx_verification_context() and block_tx_verification_context() 2022-11-17 22:19:06 +01:00
cryptozoidberg
cadb3d033a
fixed linux-specific compilation problem 2022-11-17 22:00:59 +01:00
cryptozoidberg
490b8b12f1
added pre-loading token whitelist via ssl 2022-11-17 21:58:36 +01:00
cryptozoidberg
20bc2fdf00
fixed another tests-breaking issue 2022-11-17 20:46:21 +01:00
cryptozoidberg
960daaca23
fixed func name 2022-11-17 19:15:35 +01:00
sowle
a1bae08a67
crypto: minor improvements 2022-11-17 00:38:33 +01:00
sowle
a0d3ca0bf3
fix for PoS verification (block hash is used as a message for sig), zarcanum_test_pos_math shoud now pass (2) 2022-11-16 23:49:03 +01:00
sowle
801f244d46
fix for PoS verification (block hash is used as a message for sig), zarcanum_test_pos_math shoud now pass 2022-11-16 23:04:29 +01:00
cryptozoidberg
ee6f8cf972
right version of http_client.h 2022-11-16 22:27:49 +01:00
cryptozoidberg
e839761ae9
implemented https support and tokens whitelisting(just inital declaration) 2022-11-16 22:16:15 +01:00
sowle
fa0f51a7ed
chaingen: add_block/add_block_info adapted, remove_block_info implemented 2022-11-16 22:04:18 +01:00
sowle
93a1aacaca
coretests: zarcanum_pos_math added to the list, now it exposes a bug with PoS block validation 2022-11-16 21:56:32 +01:00
sowle
a7198b3313
coretests: get_params_for_next_pos_block() + zarcanum_test_pos_math finally makes custom and normal gen-time PoS Zarcanum blocks 2022-11-16 03:34:42 +01:00
sowle
51fbe0fc19
compilation fix 2022-11-16 03:16:50 +01:00
sowle
8543bb187f
compilation fix 2022-11-16 03:15:31 +01:00
sowle
94c9c0cebc
chaingen: 1) added support of mixins for build_wallets (via proxy stub); 2) add_block_info adatped for zc inputs + minor improvements 2022-11-16 02:31:22 +01:00
sowle
5e6103b38b
chaingen: pos_block_builder final touches 2 2022-11-16 01:11:53 +01:00
sowle
ea62c8833b
chaingen: pos_block_builder final touches 2022-11-16 00:28:18 +01:00
cryptozoidberg
a493ace766
added api for assets management in wallet(whitelist and custom set) 2022-11-15 21:54:55 +01:00
cryptozoidberg
c9255c33b8
merge from zarcanum 2022-11-15 21:14:13 +01:00
sowle
e02d15a170
coretests: pos_block_builder now supports Zarcanum 2022-11-11 19:10:50 +01:00
sowle
d0862e7be8
chaingen: construct_tx_to_key() gets tx version from block height correctly 2022-11-09 23:52:42 +01:00
sowle
4f02abac02
in get_tx_version() params named more obviously to avoid mistakes 2022-11-09 23:49:45 +01:00
sowle
89fa48880e
coretests: zarcanum_txs_with_big_decoy_set -> zarcanum_txs_with_big_shuffled_decoy_set_shuffled renamed and improved for post-HF4 (will not pass until a fix in chaingen) 2022-11-09 23:48:18 +01:00
sowle
c542b86200
chaingen: 1) shuffle_source_entries impemented; 2) zarcanum_txs_with_big_decoy_set improved for pre-HF4 part 2022-11-09 16:57:48 +01:00
sowle
266a0556ce
chaingen: 1) check_hardfork_inactive implemented, 2) check_hardfork_* callbacks now calls BCS::is_hardfork_active(), i.e. check against top_block_height+1 instead of top_block_height 2022-11-09 16:55:54 +01:00
sowle
01c656791a
hardfork activation message slightly changed to be less confusing (take a look @cryptozoidberg) 2022-11-09 16:53:15 +01:00
sowle
3cb903569c
chaingen: check_mixin_value_for_each_input() minor improvement 2022-11-08 18:25:52 +01:00
sowle
7d97fec3cf
coretests: gen_no_attchments_in_coinbase: CP hash changed 2022-11-08 02:07:59 +01:00
sowle
5f8c90bac6
1) absolute_output_offsets_to_relative() is now deprecated, new functions introduced to be used instead: prepare_outputs_entries_for_key_offsets() and absolute_sorted_output_offsets_to_relative_in_place()
2) fixed incorrect key_offsets sorting in construct_tx. Coretest zarcanum_txs_with_big_decoy_set now should pass okay.
2022-11-08 00:17:34 +01:00
sowle
0b1a97832c
coretests: zarcanum_pos_block_math (WIP, pos_block_builder adaptation) 2022-11-08 00:11:11 +01:00
sowle
b2c346657a
wallet2: minor improvements in prepare_and_sign_pos_block() 2022-11-08 00:09:34 +01:00
sowle
d67dbd986f
chainge: pos_block_builder 2022-11-08 00:07:53 +01:00
sowle
e1bec6cc2f
chaingen: pos_block_builder improved (WIP), moved from construct_homemade_pos_miner_tx() to the standard one 2022-11-08 00:06:52 +01:00
sowle
d2469c6473
chaingen: output_index refactoring + fill_output_entries() now can avoid locked outs while looking for decoys 2022-11-08 00:04:31 +01:00
sowle
f8558a020a
construct_miner_tx now can use externally generated one time tx key 2022-11-08 00:00:24 +01:00
sowle
831719381b
coretests: zarcanum_txs_with_big_decoy_set added (reveals a bug in construct_tx) 2022-11-07 23:57:43 +01:00
sowle
bedf0285b0
blocks validation: prevalidate_miner_transaction() moved to go before heavy proof of work / proof of stake checks (@cryptozoidberg, please, take a look) 2022-11-04 21:17:27 +01:00
sowle
1a22991617
fix construct_miner_tx 2022-11-03 23:08:22 +01:00
sowle
3835051fcb
construct_miner_tx() and prepare_and_sign_pos_block() made consistent in terms of PoS input 2022-11-03 21:01:49 +01:00
sowle
fe0042df6a
chaingen: pos_block_builder: WIP 2022-11-03 01:25:44 +01:00
sowle
ca4c9d4bad
set_hardfork_height() changed to set all unset prev hardforks to the same height 2022-11-01 23:37:42 +01:00
sowle
047dd31c11
coretests: zarcanum_gen_time_balance added to the list 2022-11-01 00:44:55 +01:00
sowle
138c7e2ae0
coretests: minor improvements 2022-11-01 00:11:51 +01:00
sowle
096de774b1
coretests: 1) test_gentime_settings_restorer; 2) zarcanum_pos_block_math -> zarcanum_gen_time_balance + improvements 2022-11-01 00:10:51 +01:00
sowle
20e72f18fc
coretests: 1) ignoring invalid blocks/txs made optional (may be disabled if necessary); 2) hard_fork_2_no_new_structures_before_hf fixed 2022-11-01 00:06:47 +01:00
sowle
cdb58b727f
coretests: wallet_test_core_proxy::update_blockchain() skips bad txs (it helps to calculate balance correctly in gen mode) 2022-10-31 18:21:06 +01:00
sowle
45d76ee28a
coretests: blocks and txs that are marked as bad are now skipped by chaingen::find_block_chain 2022-10-31 18:17:34 +01:00
sowle
4ea5e67d44
coretests: 1) tests_random_split_strategy added; 2) test_gentime_settings adapted and improved 2022-10-28 04:17:48 +02:00
sowle
ab58d091f2
chaingen: made events macros more verbose 2022-10-28 01:07:45 +02:00
sowle
fadb925d5b
coretests: multisig_and_unlock_time fixed (more strict check for unlock time in chaingen) + helper macros for chaingen 2022-10-27 23:58:52 +02:00
sowle
5ce6c283ea
coretests: build_outputs_indext_for_chain adaptation, chaingen adaptation wip + minor improvements 2022-10-27 04:22:25 +02:00
sowle
e4bc98209d
minor fixes 2022-10-27 00:50:45 +02:00
sowle
f5a0a85fa4
coretests: init_spent_output_indices fix, warnings fix 2022-10-26 20:50:21 +02:00
sowle
d738a34275
warning fix 2022-10-26 17:58:58 +02:00
sowle
e4efbb47f2
coretests: chaingen adaptation for zarcanum, wip 2022-10-26 17:39:10 +02:00
sowle
5fd2899fd2
coretests: fill_tx_sources fixed 2022-10-26 01:07:52 +02:00
sowle
5f9aea7a22
1) on_test_generator_created() 2) zarcanum_pos_block_math test added 3) init_output_indices() adapted -- WIP 2022-10-25 23:59:25 +02:00
sowle
4db7ac1668
pos block builder: WIP 2022-10-25 04:16:25 +02:00
sowle
b570ca81ef
pos_block_builder & zarcanum adaptation: WIP 2022-10-24 21:01:45 +02:00
sowle
078a7bf8b5
pos mining code is generalized and now can be used outside of wallet2 2022-10-23 23:48:43 +02:00
sowle
bb71c52d01
made pos_block_builder default-initializable 2022-10-23 02:50:30 +02:00
sowle
70df00f7df
coretests: pos_block_builder adaptation 2022-10-22 21:00:14 +02:00
sowle
dc8c84028d
1) get_object_blobsize(tx) fixed for post-HF4 txs 2) zarcanum_test removed from postponed! (I expect it to pass well now) 2022-10-21 05:01:10 +02:00
sowle
b0d5a3e3f7
coretests: zarcanum_test improved 2022-10-20 18:39:12 +02:00
sowle
a1d39ad051
minor improvements 2022-10-20 18:28:47 +02:00
sowle
8077c3e892
gcc fix, changed reference to pointer 2022-10-20 14:16:39 +02:00
sowle
24ce9d4b40
blinding_masks_sum now passed via: construct_miner_tx -> create_block_template -> bild_minted_block -> prepare_and_sign_pos_block 2022-10-20 12:46:41 +02:00
sowle
d4205fdf89
coretests: --log-level command-line option support added 2022-10-19 04:44:18 +02:00
sowle
1677bf5311
crypto tests: bppe_power_128 test added 2022-10-19 04:43:14 +02:00
sowle
fd5ecfc64c
Zarcanum PoS validation: zarcanum_verify_proof, prevalidate_miner_transaction, BPPE changed from H2 to X, etc. 2022-10-19 04:42:36 +02:00
sowle
3aafd31992
Zarcanum PoS blocks validation: WIP + wallet decoys 2022-10-18 04:34:32 +02:00
sowle
bb61396c10
fixed concealing_point calculation consistency over BCS and wallet PoS code 2022-10-18 04:32:40 +02:00
sowle
e704303f3b
crypto: serialization for zarcanum_sig and CLSAG_GGXG_signature_serialized 2022-10-18 04:30:54 +02:00
sowle
ed3b698839
crypto: more checks for generate_CLSAG_GGXG 2022-10-18 04:29:41 +02:00
cryptozoidberg
ca601b8fc8
enabled zarcanum_test_n_inputs_validation for multiassets branch 2022-10-16 14:47:34 +02:00
cryptozoidberg
76aa0c71a2
Merge branch 'zarcanum' into multiassets 2022-10-16 14:46:47 +02:00
cryptozoidberg
76e628d63f
disabled zarcanum_test_n_inputs_validation for zarcanum branch 2022-10-16 14:46:18 +02:00
cryptozoidberg
73a8f57f84
test for validatiing n-outputs against hardfork 4 2022-10-16 14:46:18 +02:00
sowle
6810a65661
the first Zarcanum PoS block generated successfully, but yet to be verified by the core 2022-10-16 03:17:18 +02:00
sowle
088ea83808
miner improvements on PoS block validation 2022-10-16 03:13:03 +02:00
sowle
c5206d0f52
zarcanum PoS: another iteration on zarcanum_generate_proof (WIP) 2022-10-14 19:26:52 +02:00
sowle
47d18e5deb
wallet2::prepare_and_sign_pos_block() refactored, vector<gen_wallet_info> added 2022-10-14 19:18:24 +02:00
sowle
b94c9f75d3
1) logging: channel(s) enabling made optionally less verbose; 2) various fixes after the merge 2022-10-14 19:08:27 +02:00
sowle
2c88652fbd
Merge branch 'multiassets' into zarcanum 2022-10-13 15:17:02 +02:00
cryptozoidberg
bc95391e93
removed link to local object(really bad day) 2022-10-13 00:07:40 +02:00
cryptozoidberg
52b70ffb24
merge from zarcanum 2022-10-12 23:51:09 +02:00
cryptozoidberg
d4166ffa5d
Fixed DUMBEST bug of this year!(absolute champion) 2022-10-12 23:40:38 +02:00
cryptozoidberg
38b5ef3748
removed debug logs 2022-10-12 23:38:48 +02:00
cryptozoidberg
0b97855eeb
one more constructor overload: and fixed 2022-10-12 23:05:25 +02:00
cryptozoidberg
b3b57ae534
one more constructor overload 2022-10-12 23:01:17 +02:00
cryptozoidberg
affdff7a3d
pre-fix for the problem with asset_id 2022-10-12 22:57:09 +02:00
cryptozoidberg
218d2735c5
more logs, more logs, more logs 2022-10-12 21:36:13 +02:00
sowle
5b086b9356
compilation fix (gcc) 2022-10-12 21:24:15 +02:00
cryptozoidberg
c5972c006a
added missing argument to macro in multiasset test 2022-10-12 20:09:56 +02:00
cryptozoidberg
5b4d41b1ed
fixed bug with compilation 2022-10-12 20:05:45 +02:00
cryptozoidberg
9f26c35630
added more logs to multiasset test debug 2 2022-10-12 20:03:42 +02:00
sowle
525b0cb840
coretests: zarcanum_test improvements 2022-10-12 19:26:03 +02:00
sowle
7a1a4b0058
crypto: zarcanum signature generation partially done (work in progress) 2022-10-12 19:17:00 +02:00
sowle
49e78fdbae
Bulletproofs+ Extended generation routine (crypto::bppe_gen) adapted to match with bpp_gen 2022-10-12 19:14:31 +02:00
cryptozoidberg
64ff2cb641
added more logs to multiasset test debug 2022-10-12 18:55:50 +02:00
sowle
30972db5ad
COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS adaptation and improvements 2022-10-12 18:07:04 +02:00
sowle
f0bbcb5f40
wallet2::prepare_and_sign_pos_block() and COMMAND_RPC_GETBLOCKTEMPLATE refactored 2022-10-12 18:02:22 +02:00
sowle
642cc94691
wallet2::is_in_hardfork_zone() made const 2022-10-12 17:54:42 +02:00
sowle
08fd1d4248
in CATCH_ENTRY_CUSTOM custom_code moved before error logging 2022-10-12 17:51:32 +02:00
sowle
ab268af7b8
get_random_outs_for_amounts adaptation, get_mix_attr_from_tx_out_v implemented 2022-10-12 17:50:02 +02:00
cryptozoidberg
cebad7aab3
deterministic random enabled2 2022-10-12 17:01:58 +02:00
cryptozoidberg
289cbf62f7
deterministic random enabled 2022-10-12 14:29:07 +02:00
cryptozoidberg
760ee3aa28
last warnings removed from coretests 2022-10-12 13:01:16 +02:00
cryptozoidberg
ff730a1bc4
moved tor to latest version 2022-10-12 12:24:26 +02:00
cryptozoidberg
df596d799d
fixed warnings in core tests 2022-10-12 12:19:51 +02:00
cryptozoidberg
d3b2ca0e3a
more warnings cleanup 2022-10-12 12:10:48 +02:00
cryptozoidberg
fcfdf3e8ef
disabled random fix 2022-10-11 23:27:33 +02:00
cryptozoidberg
0441b80216
set stop_on_first_fail to stop on fail 2022-10-11 21:26:27 +02:00
cryptozoidberg
00d4ae9828
set deterministic rand to find bug in multiasset_test 2022-10-11 21:17:05 +02:00
cryptozoidberg
cdd7c1e735
warnings suppress 2022-10-11 20:53:36 +02:00
cryptozoidberg
ce7438265d
added default initialization 2022-10-11 20:19:24 +02:00
cryptozoidberg
425166ff49
disabled warnings for comments 2022-10-11 16:21:03 +02:00
cryptozoidberg
db5564ac1e
explicit namespace for print_money in wallet 2022-10-11 16:17:12 +02:00
cryptozoidberg
2927edf16a
removed multiple warnings over gcc/clang compilers 2022-10-11 16:05:48 +02:00
cryptozoidberg
cfafa1e73d
disabled unknown pragmas for backward comp 2022-10-11 15:54:44 +02:00
cryptozoidberg
8c90dc4032
removed parentheses 2022-10-11 14:53:30 +02:00
cryptozoidberg
f1a7c25fa3
fixed warnings on linux 2022-10-11 13:44:59 +02:00
cryptozoidberg
4fa2afa87e
remopved random deterministic setup 2022-10-11 12:02:48 +02:00
sowle
a0bdc08633
blinding mask calculation fix (cherry pick from multiassets) 2022-10-10 23:59:42 +02:00
sowle
5e0ce8cfb4
crypto: c_point_H_plus_G and c_point_H_minus_G constants added + unittest 2022-10-10 23:47:49 +02:00
cryptozoidberg
2098bdc869
removed cycle for enumerating random on multiassets_basic_test 2022-10-10 20:47:41 +02:00
cryptozoidberg
19f0f0bbf0
fixed but with sequence points 2022-10-10 20:46:06 +02:00
cryptozoidberg
033ec29d60
attempt to fix unit_tests Serialization:versioning2 2022-10-10 14:46:56 +02:00
cryptozoidberg
09a1ddf97b
removed unused includes 2022-10-07 22:45:52 +02:00
cryptozoidberg
4d9e6d41a2
fix for linux build 2022-10-07 22:16:42 +02:00
cryptozoidberg
b3daf9aa08
fixed bug in constract_tx regarding inputs mapping 2022-10-07 21:44:43 +02:00
cryptozoidberg
8a54924407
multiple fixes over wallet and math(credits to @sowle) 2022-10-06 22:59:00 +02:00
cryptozoidberg
319f295984
fixed multiasset test 2022-10-05 21:31:21 +02:00
sowle
185ccae95f
rpc: removed old deprecated mining API (get_addenum, getjob, submitshare, etc.) 2022-10-05 21:09:27 +02:00
sowle
452047cb88
KV_ENABLE_POD_SERIALIZATION_AS_HEX fixed 2022-10-05 20:49:13 +02:00
sowle
ea1dbabb9d
zarcanum: main inequality type fixed (2) 2022-10-05 14:54:35 +02:00
sowle
8c71ac83b7
zarcanum: main inequality type fixed 2022-10-05 14:02:32 +02:00
sowle
b931420266
warning fix 2022-10-05 13:56:17 +02:00
cryptozoidberg
8e0cf0f142
fixed storage bug over assets container 2022-10-04 23:13:02 +02:00
cryptozoidberg
37f96db8d5
Merge branch 'zarcanum' into multiassets 2022-10-04 22:01:16 +02:00
cryptozoidberg
ca4556a804
Minor fixes 2022-10-04 22:00:30 +02:00
sowle
15f33cbb9c
coretests: determine_tx_real_inputs() adapted for zc inputs/outputs, fixed compilation for wallets tests 2022-10-04 21:22:30 +02:00
sowle
5ff48cc1ff
blockchain_storage::check_tx_input() adapted for ZC inputs + get_key_offsets_from_txin_v() + improvements 2022-10-04 21:20:40 +02:00
sowle
6aca885ced
scan_outputkeys_for_indexes adapted for ZC inputs and outputs, specific is_output_allowed_for_input() implemented 2022-10-04 21:17:49 +02:00
cryptozoidberg
432e1c2d2b
merge from zarcanum 2022-10-04 16:32:41 +02:00
cryptozoidberg
d864d43aab
fixes over tests 2022-10-04 16:29:24 +02:00
cryptozoidberg
5f607acda2
fixed few errors 2022-10-03 22:29:35 +02:00
cryptozoidberg
51d8c85540
added core test for multiasset(never tried yet) 2022-10-03 22:03:54 +02:00
sowle
0af77077b5
purge_altblock_keyimages_from_big_heap() and purge_transaction_keyimages_from_blockchain() adapted for generic inputs types 2022-10-03 21:39:34 +02:00
sowle
7ce49e4e82
tx_pool: correct handling of key images regardless of input type + get_key_image_from_txin_v refactoring 2022-10-03 20:34:09 +02:00
sowle
5b89eaed6f
coretests: gen_no_attchments_in_coinbase and multisig_and_checkpoints fixed (hash change) 2022-10-02 01:04:00 +02:00
sowle
01a458b5bc
purge_altblock_keyimages_from_big_heap() adapted for ZC inputs 2022-10-02 00:39:01 +02:00
sowle
657b1ceddf
coretests: chaingen code cleanup 2022-10-01 21:18:22 +02:00
sowle
2a74787d8e
wallet: if during tx constructing the number of outs is less than CURRENCY_TX_MIN_ALLOWED_OUTS the last one will be split randomly to fulfill the requirement 2022-10-01 21:17:17 +02:00
sowle
a8ecd1a645
wallet: handling ZC outputs fixed 2022-10-01 21:14:32 +02:00
sowle
e2b6f88686
1) get_input_expected_signature_size() added; 2) get_object_blobsize(tx) improved 2022-10-01 21:12:32 +02:00
sowle
7d33323a97
1) generate_ZC_sig fixed;
2) tx balance proof now generates only for txs with no ZC inputs;
3) check_inputs_types_suppored fixed;
4) check_outs_valid fixed;
5) check_inputs_overflow fixed;
2022-10-01 21:10:22 +02:00
sowle
3fd984396e
unit tests: tx_signatures_packing added 2022-10-01 20:59:04 +02:00
cryptozoidberg
5ab9a2b974
fixed compilation issues regarding asset_descriptors 2022-09-30 21:23:06 +02:00
cryptozoidberg
c61149f480
added put/pop asset info to core 2022-09-29 23:44:00 +02:00
sowle
df11160e7a
decompose_amount_randomly + unit test 2022-09-29 21:54:15 +02:00
sowle
5bfbb8091d
unit tests: amounts_tests restored, renamed 2022-09-29 21:49:57 +02:00
cryptozoidberg
26b9d60dba
merge from zarcanum 2022-09-29 19:21:07 +02:00
cryptozoidberg
7d8259f58c
added code for handling chain detachment(reorg) 2022-09-29 19:18:05 +02:00
cryptozoidberg
1fd6e08e5c
initial code for introducing asset descriptor for wallet 2022-09-28 22:06:07 +02:00
sowle
369b40b7a0
coretests: fixes and improvements for zarcanum_test 2022-09-28 03:46:20 +02:00
sowle
b669401332
1) balance proof and explicit fee for post-HF4 txs; 2) multiple range proofs verification fixed; 3) zarcanum_outs_range_proof -> zc_outs_range_proof 2022-09-28 03:45:10 +02:00
cryptozoidberg
a718895fd7
Asset id context in wallet: basic implementations 2022-09-27 20:13:49 +02:00
sowle
5d349a963d
1) construct_miner_tx now supports post-HF4 PoW 2) new HF4 core rules: at least 2 outputs for each tx; tx.version > 1 2022-09-27 03:06:10 +02:00
cryptozoidberg
43c0c7944d
inital code for submiting asset descriptor 2022-09-26 21:57:24 +02:00
cryptozoidberg
213cb4f85c
implemented proper versioning for binary serialization 2022-09-23 23:19:44 +02:00
sowle
078440a815
zarcanum WIP (use standard derivation to scalar conversion to simplify things) + minor 2022-09-23 22:18:22 +02:00
sowle
0bfe224b66
minor fixes 2022-09-23 18:45:59 +02:00
sowle
7d57e8a993
coretests: chaingen PoS refactored, mining outside-of-wallet2 eliminated, code unified 2022-09-23 18:45:22 +02:00
cryptozoidberg
e70efc898c
Merge branch 'multiassets' into zarcanum 2022-09-22 19:30:02 +02:00
cryptozoidberg
2ba139ebaf
fixed wrong variant type 2022-09-22 19:29:18 +02:00
cryptozoidberg
1aa6a37b08
compilation errors fixed for wallet.cpp 2022-09-21 22:35:24 +02:00
cryptozoidberg
d573dd53fd
assigning asset id from tx 2022-09-21 14:50:29 +02:00
cryptozoidberg
7c4d8a41e8
massive changes over adding asset id to primary operations to wallet 2022-09-20 22:01:52 +02:00
cryptozoidberg
ff0d32fa20
transfer refactoring - inital code 2022-09-17 22:52:26 +02:00
cryptozoidberg
b7767e41d5
Merge branch 'multiassets' into zarcanum 2022-09-16 18:52:50 +02:00
cryptozoidberg
1c76d0d325
added balance() and rpc api implementations for multi_assets versions 2022-09-16 18:35:36 +02:00
cryptozoidberg
65eea67b30
Merge branch 'zarcanum' into multiassets 2022-09-16 14:54:44 +02:00
sowle
d01ab52c7c
coretests: some HF1 tests marked as postponed 2022-09-15 23:21:02 +02:00
cryptozoidberg
8f15d60677
basic implementations over multi assets in wallet 2022-09-15 22:05:10 +02:00
sowle
76807ec931
coretests: typo fixed 2022-09-15 20:26:54 +02:00
sowle
2aa62f43bb
coretests: getting rid of set_pos_to_low_timestamp; postponed tests not running 2022-09-15 19:41:46 +02:00
sowle
ece5038130
wallet: build_minted_block adoptation (zarcanum wip) 2022-09-14 22:50:43 +02:00
sowle
0d882868c8
chaingen: postponed test can be run with --run-single-test, also print 'em all 2022-09-14 22:48:42 +02:00
cryptozoidberg
91e8b2ba6f
fixed compilation for unit_tests 2022-09-14 22:08:21 +02:00
cryptozoidberg
f3f5c11c5e
fixed missing dependency(linux) - afterfix 2022-09-14 20:59:27 +02:00
cryptozoidberg
eec541840e
fixed missing dependency(linux) 2022-09-14 20:56:34 +02:00
cryptozoidberg
7abd438787
replaced optional<> to shared_ptr<> due to space efficiency considerations 2022-09-14 20:54:30 +02:00
sowle
be1db1b4cb
zarcanum_basic_test marked as postponed for a while 2022-09-13 22:29:37 +02:00
sowle
af9c53794e
1) zarcanum math moved to separate file; 2) fixed an error in rhs calculation; 3) 2^64 constant + test 2022-09-13 22:08:46 +02:00
cryptozoidberg
c2771a075e
added test against post-zarcanum era 2022-09-13 16:42:32 +02:00
cryptozoidberg
03480488a1
Implemented kv-serialization for boost optional, implemented serialization as hed for POD 2022-09-12 20:38:32 +02:00
sowle
e9c3c7841f
wallet: Zarcanum PoS mining itself is implemented in wallet2 2022-09-12 18:47:38 +02:00
cryptozoidberg
634e777cfd
fixed compilation issues on linux 2022-09-09 20:21:27 +02:00
sowle
41308d86a6
wallet: pos code clean up (mining_context, etc) 2022-09-09 20:16:14 +02:00
sowle
c7bc50f968
validate_pos_block refactoring 2022-09-08 22:49:36 +02:00
sowle
6991fa8ea9
wallet: get_pos_entries g_index initialization fixed 2022-09-08 22:47:32 +02:00
sowle
2c5c0ddc75
Merge branch 'zarcanum_mint' into zarcanum 2022-09-08 16:35:38 +02:00
cryptozoidberg
ec73527df9
compilation is ok, tests in progress 2022-09-06 19:41:20 +02:00
cryptozoidberg
7384485fe1
minting refactoring: in progress 2022-09-05 20:18:27 +02:00
sowle
27e695d4f1
wallet: global PoS / pos entries refactoring and code clean-up. 2022-09-05 12:30:08 +02:00
sowle
9215afb462
wallet rpc: obsolete scan pos RPC has been removed 2022-09-05 12:25:04 +02:00
sowle
ae64a8cbd3
crypto: 4-CLSAG 2-gen implemented, 2-CLSAG slightly improved; + basic test for 4-CLSAG GGXG 2022-08-31 02:09:08 +02:00
sowle
bc88d0d642
wallet: Zarcanum PoS (work in progress, scan_pos refactoring) 2022-08-29 23:00:34 +02:00
sowle
6b85159119
crypto: c_point_X; hs(char[32], hash); minor improvements for clsag implementation 2022-08-29 22:56:37 +02:00
sowle
3f8583fbe1
wallet2 minor refactoring: do_pos_mining_iteration 2022-08-26 18:12:32 +02:00
sowle
605ae739b8
zc balance proof implemented, coinbase tx creation and validation refactored 2022-08-25 04:28:34 +02:00
sowle
636fb820ea
explicit tx fee for zarcanum txs: get_tx_fee, add_tx_fee_amount_to_extra, process_type_in_variant_container 2022-08-25 04:22:38 +02:00
sowle
458f347e1e
binary serialization won't mess with 'r' members anymore (fixes range proofs serialization) 2022-08-25 04:19:31 +02:00
sowle
7f5d58ca6d
crypto: BP+ generators mapping corrected 2022-08-25 04:17:25 +02:00
sowle
7cc2582cee
coretests: stop_on_first_fail 2022-08-25 04:16:22 +02:00
sowle
e8ea28d085
crypto: BP+ generators mapping corrected, test improved 2022-08-25 04:14:36 +02:00
sowle
a7352d8c98
coretests: hardfork setup fixed in a few tests 2022-08-23 21:29:30 +03:00
sowle
b62d01a629
MSVC 2019 compatibility fixes 2022-08-23 21:27:38 +03:00
sowle
b253ee70ab
blockchain_storage::prevalidate_block() refactored 2022-08-23 21:26:26 +03:00
cryptozoidberg
0908de4c3b
Merge branch 'sort_inputs_in_work' into zarcanum 2022-08-22 15:13:25 +02:00
cryptozoidberg
bbe8e14e2b
fixed gen_block_wrong_version_agains_hardfork 2022-08-22 14:49:49 +02:00
cryptozoidberg
301a460f65
implemented sorting inputs in construct_tx 2022-08-17 22:53:27 +02:00
cryptozoidberg
1131292908
Multiple fixes of bugs exposed by basic zarcanum coretest 2022-08-13 23:23:16 +02:00
cryptozoidberg
aeaf10a979
zarcanum core test - added staking of zarcanum inputs 2022-08-12 19:48:54 +02:00
cryptozoidberg
10e93a47dc
zarcanum core test - very basics 2022-08-12 19:26:28 +02:00
cryptozoidberg
0d0ab5fe81
fixed less_txin_v() 2022-08-12 14:49:00 +02:00
cryptozoidberg
073b6a2bb9
fixed typo 2022-08-12 01:13:27 +02:00
cryptozoidberg
11298992d2
added inputs sorting validation 2022-08-12 01:10:52 +02:00
cryptozoidberg
84b702fa3f
removed validation from add_transaction_input_visitor, due to code is duplicated in validate_tx_for_hardfork_specific_terms 2022-08-09 00:03:02 +02:00
cryptozoidberg
86cca50a15
validate_tx_for_hardfork_specific_terms refactoring 2022-08-08 23:59:09 +02:00
sowle
b01e33f68b
varios fixes: is_out_burned, lookup_acc_outs, process_new_transaction, create_tx (blinding masks) 2022-08-08 13:35:38 +02:00
sowle
b1ac0ad440
generate_ZC_sig & generate_NLSAG_sig refactoring: now they generate one signature per call + various fixes 2022-08-08 13:32:44 +02:00
sowle
dce6f46b17
fixed a bug in construct_tx 2022-08-03 14:01:10 +02:00
sowle
59f8ae5fe7
txin_zarcanum_inputs -> txin_zc_input refactoring, including CLSAG_GG gen/verify + check_tx_input for txin_zc_input 2022-08-03 14:00:39 +02:00
sowle
b1888e58ad
made verify_multiple_zarcanum_outs_range_proofs be happy with empty range proofs vector 2022-08-03 13:55:45 +02:00
sowle
373e5aad4d
VARIANT_CASE_THROW_ON_OTHER_MSG 2022-08-03 13:54:26 +02:00
sowle
bd784f9f50
code review and really minor improvements 2022-08-03 13:53:14 +02:00
cryptozoidberg
2e6d05636d
fixed bug with timestamps on strange wallets(reported by sir Gygabyted) 2022-08-01 20:17:38 +02:00
cryptozoidberg
8dd8e5dbce
Removed dl 2022-08-01 17:02:43 +02:00
cryptozoidberg
0f126ffd95
api auto-documentation implementation basics 2022-07-31 22:59:29 +02:00
sowle
0d72ac7187
bulletproofs+ tests fixed 2022-07-26 06:44:19 +02:00
sowle
6256d07bb7
clsag: more tests 2022-07-26 06:40:05 +02:00
sowle
c840ba48a2
simplewallet: logs msgs & levels clean up 2022-07-23 04:32:11 +02:00
sowle
e52e2b21a3
ZC_sig 2022-07-22 05:39:54 +02:00
sowle
53caed6d38
clsag first implementation + tests 2022-07-22 05:36:38 +02:00
sowle
e4293af219
random_in_range moved, unit_tests/db_tests fixed 2022-07-22 05:32:41 +02:00
sowle
386df3db2a
crypto tests: ml2s tests moved out 2022-07-22 05:30:10 +02:00
cryptozoidberg
765ad24b39
fixed disabled rnd for consensus download 2022-07-21 21:37:28 +02:00
cryptozoidberg
ad8a3375db
fixed tor relaying(fixed disabled rnd) 2022-07-21 21:27:16 +02:00
cryptozoidberg
6ff40cd0f4
less messages in running wallet 2022-07-21 15:06:36 +02:00
cryptozoidberg
b1d7ad8a69
fixed wallet log spam in server mode 2022-07-21 13:05:21 +02:00
cryptozoidberg
780185fa5c
added show_staking_history command 2022-07-19 22:32:21 +02:00
sowle
2f739228b3
crypto sugar improvements 2022-07-19 10:28:08 +02:00
sowle
3e78dbd595
Merge remote-tracking branch 'origin/zarcanum_wallet' into zarcanum 2022-07-14 23:57:57 +02:00
cryptozoidberg
e7489557a6
more checks in core regarding collect_rangeproofs_data_from_tx() 2022-07-14 21:20:29 +02:00
cryptozoidberg
fccf54b295
added handling of zarcanum_outs_range_proofs in core 2022-07-14 21:10:23 +02:00
cryptozoidberg
6e65f848ca
Merge branch 'zarcanum' into zarcanum_wallet 2022-07-14 19:05:52 +02:00
sowle
3783f98671
Merge remote-tracking branch 'origin/zarcanum_wallet' into zarcanum 2022-07-13 21:52:12 +02:00
cryptozoidberg
1a9c3b4d37
fixed coretests compilation 2022-07-13 20:55:34 +02:00
sowle
782f4634e4
Merge remote-tracking branch 'origin/zarcanum_wallet' into zarcanum 2022-07-13 19:55:39 +02:00
cryptozoidberg
be5766f266
fixes against recent changes over tx_source_entry::output_entry 2022-07-13 17:17:04 +02:00
cryptozoidberg
6b4bfee7d9
Merge branch 'zarcanum' into zarcanum_wallet 2022-07-13 16:11:10 +02:00
sowle
14924b635a
zc signature generation + tx_source_entry refactoring + construct_tx refactoring 2022-07-13 04:37:37 +02:00
sowle
26f34edc83
CLSAG prototypes 2022-07-13 04:35:15 +02:00
cryptozoidberg
788c5be092
Added timeout to wallet rpc transport 2022-07-12 23:05:36 +02:00
sowle
74f6ce33ac
Merge branch 'zarcanum_wallet' into zarcanum 2022-07-11 01:29:44 +02:00
cryptozoidberg
915bdd1efb
hidden amounts in wallet: construct_tx deep refactoring(first version, likely with bugs) 2022-07-10 20:11:44 +02:00
cryptozoidberg
9fb947b544
hidden amounts in wallet: construct_tx deep refactoring(in progress) 2022-07-09 17:35:40 +02:00
cryptozoidberg
93266b93b2
Merge branch 'zarcanum' into zarcanum_wallet 2022-07-09 15:31:47 +02:00
sowle
220816d039
zarcanum outputs & signature (work in progress) 2022-07-08 21:06:38 +02:00
cryptozoidberg
7792605ab9
hidden amounts in wallet: construct_tx deep refactoring(totaly broken yet) 2022-07-08 20:52:04 +02:00
cryptozoidberg
5b80a22157
more detailed message in set-log option 2022-07-08 17:35:14 +02:00
cryptozoidberg
30d9d190e1
lean up code with log options 2022-07-08 17:18:35 +02:00
cryptozoidberg
e1acd4e4e6
disable TOR by default for server-mode, fixed --disable-tor-relay which was not working for server mode 2022-07-08 17:06:26 +02:00
cryptozoidberg
b500a22d59
hidden amounts in wallet: fixed to proper return code literal 2022-07-08 15:55:01 +02:00
cryptozoidberg
49dc47c8cf
merged from UI 2022-07-08 15:25:07 +02:00
cryptozoidberg
84962b34e7
merged from UI 2022-07-07 17:07:46 +02:00
ArqTras
7cf459e9f5
Update README.md (#333)
fix for a typo
2022-07-07 17:55:08 +03:00
cryptozoidberg
87e7905be1
Merge branch 'zarcanum' into zarcanum_wallet 2022-07-06 22:14:07 +02:00
sowle
ea24d40f84
range proofs for zarcanum outputs 2022-07-06 22:07:54 +02:00
sowle
11ab985bc6
crypto: bpp minor refactoring (mostly prototypes), minor improvements, compilation fixes 2022-07-06 18:52:24 +02:00
sowle
e18f300fae
inline for is_out_burned 2022-07-06 15:54:51 +02:00
sowle
9b2c951d71
variant tag for zarcanum_outs_range_proof 2022-07-06 15:14:25 +02:00
cryptozoidberg
fc0851922f
Merge branch 'zarcanum' into zarcanum_wallet 2022-07-06 13:23:15 +02:00
cryptozoidberg
52de76edd5
hidden amounts in wallet: fixed types 2022-07-06 13:22:05 +02:00
sowle
6ca3acd0d5
zarcanum outputs generation + range proofs (work in progress) 2022-07-06 03:01:53 +02:00
sowle
03f949b669
crypto_assert re-implemented using exceptions 2022-07-06 02:59:07 +02:00
sowle
4028bab31c
add_out_to_get_random_outs() and print_blockchain_out_stats() refactoring 2022-07-04 21:08:53 +02:00
cryptozoidberg
572f3c01c6
hidden amounts in wallet: fixed return type 2022-07-04 15:27:41 +02:00
cryptozoidberg
b799aae67f
hidden amounts in wallet: syntax fixes 2022-07-04 15:26:28 +02:00
sowle
e2ef29a021
is_out_burned() implemented 2022-07-04 14:50:08 +02:00
cryptozoidberg
045801449a
hidden amounts in wallet: fixed warining in out_get_mixin_attr() 2022-07-01 17:20:55 +02:00
cryptozoidberg
464771baec
hidden amounts in wallet: wallet.cpp compilation fixed 2022-07-01 17:19:57 +02:00
cryptozoidberg
af1cf46d1e
moved UI to latest commits 2022-07-01 12:35:54 +02:00
cryptozoidberg
9a365940e6
hidden amounts in wallet: pricess_new_transaction(): finished 2022-06-30 21:47:59 +02:00
cryptozoidberg
e75c2e603c
Merge branch 'zarcanum' into zarcanum_wallet 2022-06-30 19:03:03 +02:00
cryptozoidberg
c0eb4088d8
hidden amounts in wallet: pricess_new_transaction() refactoring in work 2022-06-30 19:02:22 +02:00
sowle
fc01b6a099
tx_out_zarcanum: mix_attr added 2022-06-30 18:42:13 +02:00
cryptozoidberg
c2d0167c8a
hidden amounts in wallet: added return value to process_input_t() 2022-06-28 22:29:52 +02:00
cryptozoidberg
75e05e2d2e
hidden amounts in wallet: process_new_transaction refactoring 2022-06-28 22:27:36 +02:00
sowle
45e1bbcafa
zarcanum outputs detection/decoding 2022-06-28 22:17:29 +02:00
sowle
a23eaac730
crypto_ops: derivation_to_scalar made public 2022-06-28 22:15:18 +02:00
sowle
9d1ab22010
crypto: hs_t and hs(...) made compatible with char[32] 2022-06-28 22:14:39 +02:00
sowle
d904323f88
crypto: made point_t throwing exceptions in bad cases 2022-06-28 22:13:34 +02:00
cryptozoidberg
018ec1eccf
Merge branch 'zarcanum_wallet' into zarcanum 2022-06-28 19:03:06 +02:00
cryptozoidberg
5b2dc84c4a
wallet.cpp compilation fixed 2022-06-28 18:29:00 +02:00
cryptozoidberg
8269c8ad42
renamed struct and removed unnecessary field 2022-06-28 17:53:50 +02:00
cryptozoidberg
a3947ea0c9
hidden amounts in wallet: fixed missing argument 2022-06-28 17:52:12 +02:00
cryptozoidberg
61f215e552
hidden amounts in wallet:inital 2022-06-28 17:46:07 +02:00
sowle
389118e785
zarcanum sig WIP 2022-06-27 23:09:25 +02:00
cryptozoidberg
a90c9931dd
fixed undefined references 2022-06-27 22:30:49 +02:00
cryptozoidberg
edd7eaca95
fixed compilation issue with print_tx_prun_info 2022-06-27 19:22:43 +02:00
cryptozoidberg
4aa4f9beb3
Merge branch 'sign_refactor' into zarcanum 2022-06-26 01:15:45 +02:00
cryptozoidberg
dfac17daeb
fixed all core tests 2022-06-26 01:13:19 +02:00
cryptozoidberg
e94e5c0a97
multiple fixes over sig refactoring 2022-06-25 00:06:26 +02:00
cryptozoidberg
fa4b8ab130
signature refactoring: pre-core tests 2022-06-23 16:22:55 +02:00
cryptozoidberg
2ab1ba9341
fixed latest changes 2022-06-22 20:33:43 +02:00
cryptozoidberg
4f80c7c334
signature refactoring with [] 2022-06-19 19:47:43 +02:00
cryptozoidberg
84c0697f1c
renamed alias member to proper name - fixed in wallet 2022-06-18 20:50:04 +02:00
cryptozoidberg
1960b49a1e
renamed alias member to proper name 2022-06-18 20:50:04 +02:00
cryptozoidberg
0e5bcbef47
improved alias detection in transaction history + added RPC API for alias registration 2022-06-18 20:50:03 +02:00
cryptozoidberg
6317a48bb9
Improved filtration of PoS-related transactions 2022-06-18 20:50:03 +02:00
cryptozoidberg
59af914d8d
Returned missing files 2022-06-18 20:50:03 +02:00
cryptozoidberg
154dbb3994
filtering transactions improved2 2022-06-18 20:50:02 +02:00
cryptozoidberg
7d42658387
filtering transactions improved 2022-06-18 20:50:02 +02:00
zano build machine
9ecf6babd5
=== build number: 143 -> 144 === 2022-06-18 20:50:02 +02:00
cryptozoidberg
564549d198
moved UI to latest fixes 2022-06-18 20:50:01 +02:00
cryptozoidberg
4f70de322d
moved UI to latest commit 2022-06-18 20:50:01 +02:00
Snider
1a5429a723
docker: adjustable library versions (#331)
* Adjustable lib versions via docker build args
* gha for docker build.
* removes the push to repo
* moves arg's to the top of the file.
* Delete docker-build.yml
2022-06-18 20:50:01 +02:00
cryptozoidberg
af552f6d45
pulled latest changes from UI 2022-06-17 18:05:52 +02:00
sowle
20eabbd54f
win: build signing temporary disabled 2022-06-16 19:14:12 +02:00
cryptozoidberg
96cdd25ac5
renamed alias member to proper name - fixed in wallet 2022-06-16 17:33:37 +02:00
cryptozoidberg
7230f7a12e
renamed alias member to proper name 2022-06-16 17:10:53 +02:00
cryptozoidberg
b5495f30f0
improved alias detection in transaction history + added RPC API for alias registration 2022-06-16 17:02:00 +02:00
cryptozoidberg
cf0454a208
Improved filtration of PoS-related transactions 2022-06-13 21:46:32 +02:00
cryptozoidberg
b5acd7ca87
Returned missing files 2022-06-10 16:51:37 +02:00
cryptozoidberg
8ec2783860
filtering transactions improved2 2022-06-08 17:52:58 +02:00
cryptozoidberg
d26fc8ad7f
filtering transactions improved 2022-06-08 17:33:02 +02:00
sowle
eb6aac4f5e
Merge branch 'release' 2022-06-03 23:16:08 +02:00
sowle
5bbae5e23b
fix annoying warning message about Boost 1.70 (The use of BOOST_*_ENDIAN and BOOST_BYTE_ORDER is deprecated.) 2022-06-03 23:04:01 +02:00
sowle
a0625b0624
fix simplewallet linking for gcc 2022-06-03 22:36:04 +02:00
zano build machine
ea43bcf8a1 === build number: 143 -> 144 === 2022-06-02 21:43:34 +03:00
cryptozoidberg
9ee5b6cbe3
moved UI to latest fixes 2022-06-02 20:42:03 +02:00
sowle
533fe896ff
attempt to fix unit_tests for clang 2022-05-28 17:50:06 +02:00
sowle
91c8b29145
remove redundant code in blockchain_storage::check_tx_inputs 2022-05-27 22:10:59 +02:00
sowle
d97e1dc955
more compilation fixes 2022-05-27 20:48:42 +02:00
sowle
bbb263b39a
Merge branch 'zarcanum_tx' into zarcanum 2022-05-27 20:28:26 +02:00
sowle
4c720ebd82
various compilation and warning fixes for gcc 2022-05-27 19:50:21 +02:00
sowle
775fab7374
unit_test: compilation fixup 2022-05-27 17:14:38 +02:00
cryptozoidberg
a7795438a6
merge from zarcanum 2022-05-27 13:49:44 +02:00
cryptozoidberg
7534e27835
Merge branch 'zarcanum' into zarcanum_tx 2022-05-27 13:49:22 +02:00
sowle
c68edd162c
functional_tests: transactions_flow_tests fixed 2022-05-26 22:26:47 +02:00
sowle
fdadd238b4
minor improvement to transition_convert, daemon_commands_handler fixed 2022-05-26 22:25:19 +02:00
cryptozoidberg
0dbc900c9a
fixed wrong console handling on windows 2022-05-26 22:24:53 +02:00
cryptozoidberg
4b4a52f550
fixed unit_tests 2022-05-26 20:27:06 +02:00
sowle
57a65cee3e
binary serializaition tag for void_sig fixed 2022-05-26 19:55:41 +02:00
sowle
a731c338de
more post-merge conflicts solved 2022-05-26 19:00:15 +02:00
sowle
f24b1350ab
Merge branch 'zarcanum_tx' into zarcanum
# Conflicts solved in:
#	src/currency_core/blockchain_storage.cpp
#	src/currency_core/blockchain_storage.h
#	src/currency_core/core_runtime_config.h
2022-05-26 17:59:15 +02:00
sowle
9034d8be58
fixed tx serialization chaining for version 2022-05-26 17:03:49 +02:00
sowle
32c852b48c
coretests: improve log messages on events generation 2022-05-26 17:01:28 +02:00
sowle
456588ddc3
hardfork-related structures global refactoring 2022-05-26 16:53:40 +02:00
cryptozoidberg
217a54c8b1
fixed all core tests 2022-05-25 22:31:23 +02:00
cryptozoidberg
7162a23dd3
blockchain_storage.cpp compilation fixed 2022-05-24 00:46:44 +02:00
cryptozoidberg
7070cecaf2
tx strcture and signature varian refactoring(compilation is still broken) 2022-05-23 21:03:13 +02:00
cryptozoidberg
fc93a80429
moved UI to latest commit 2022-05-23 13:46:24 +02:00
cryptozoidberg
389209ff02
tx stracture changes: in progress 3 + signatures converting to varian signature: in progress 2022-05-20 21:32:27 +02:00
cryptozoidberg
7e5c504357
tx stracture changes: in progress 2 2022-05-19 22:46:57 +02:00
cryptozoidberg
6b6511b73f
tx stracture changes: in progress 2022-05-19 21:22:44 +02:00
cryptozoidberg
0833566d96
transition to multi-types vout(in progress) 2022-05-18 23:39:08 +02:00
cryptozoidberg
d593cf53a9
Merge branch 'develop' into zarcanum_tx 2022-05-18 16:39:14 +02:00
sowle
fd5ec65d35
Merge branch 'master' into develop 2022-05-18 16:38:43 +02:00
cryptozoidberg
c46f46e4e3
updated UI to latest commit 2022-05-18 16:35:26 +02:00
cryptozoidberg
60f6c76ad6
fixes over signatures structure 2022-05-18 16:34:19 +02:00
Snider
c97ef1431b
docker: adjustable library versions (#331)
* Adjustable lib versions via docker build args
* gha for docker build.
* removes the push to repo
* moves arg's to the top of the file.
* Delete docker-build.yml
2022-05-18 17:33:24 +03:00
cryptozoidberg
524f7138cc
Merge branch 'zarcanum_tx' into zarcanum 2022-05-17 17:46:59 +02:00
cryptozoidberg
c17ec013ca
removed empty lines 2022-05-17 17:46:37 +02:00
cryptozoidberg
17d1245db1
serializations forks as magic 2022-05-17 17:32:53 +02:00
cryptozoidberg
146be2a559
merge from zarcanum 2022-05-17 16:19:55 +02:00
cryptozoidberg
23803851fe
serialization of versioned transactions: test(in progress) 2022-05-17 16:16:57 +02:00
cryptozoidberg
240b5808b9
trasaction binary versions transaction implementation 2022-05-16 23:32:28 +02:00
sowle
01c1146b40
tx_in_zarcanum, zarcanum_tx_data_v1 and their serialization 2022-05-16 21:38:32 +02:00
cryptozoidberg
d7863b9a91
Merge branch 'zarcanum_tx' into zarcanum 2022-05-16 17:39:16 +02:00
cryptozoidberg
cfb9b463d7
merge with zarcanum 2022-05-14 20:12:44 +02:00
cryptozoidberg
b9f750d132
fixed multisig_and_unlock_time 2022-05-14 19:47:47 +02:00
sowle
da8a5d79a8
Merge branch 'master' into develop 2022-05-14 13:01:44 +02:00
cryptozoidberg
0123e311c0
Added get_mining_history API 2022-05-14 00:00:56 +02:00
cryptozoidberg
ca760a237a
fixed all coretests 2022-05-13 23:35:56 +02:00
sowle
2ae226e594
crypto: attempt to fix a warning about dereferencing type-punned pointer 2022-05-12 21:41:09 +02:00
sowle
1c940653d4
mdbx: fix for incorrectly defined _GNU_SOURCE 2022-05-12 21:30:39 +02:00
sowle
67b5551eea
crypto tests: various fixes 2022-05-12 20:50:14 +02:00
cryptozoidberg
ce4b04014b
compilation of core tests fixed 2022-05-12 18:22:53 +02:00
sowle
4393db02bc
crypto: range proof tests compilation fix 2022-05-12 16:47:12 +02:00
sowle
22ed8009c5
linux build: suppress -Wno-comment globally 2022-05-12 00:11:34 +02:00
cryptozoidberg
186e1fdcf9
multiple fixes over core_tests(transition to tx_version 2) 2022-05-11 23:52:33 +02:00
sowle
607d634078
crypto: warnings fix 2022-05-11 23:43:34 +02:00
sowle
9032642ca7
linux build: suppress -Wcomment globally, add dl as a dependency for coretests 2022-05-11 22:52:45 +02:00
sowle
f355c89fc4
even more minor fixes 2022-05-11 21:23:44 +02:00
sowle
b7f30382e1
more minor fixes 2022-05-11 21:11:33 +02:00
sowle
7df157520d
minor fixes (epee namespace, warnings) 2022-05-11 21:02:06 +02:00
sowle
bbf2530cca
namespace epst = epee::string_tools 2022-05-11 20:57:31 +02:00
cryptozoidberg
1cf6d337d3
introducing tx_version(in progress, everything is broken so far) 2022-05-10 23:49:20 +02:00
sowle
6ed05a47c5
minor fixes in crypto serialization 2022-05-10 21:56:42 +02:00
sowle
8f362eafea
using of epee namespace fixed 2022-05-10 21:55:21 +02:00
sowle
d692c83d14
crypto serialization code re-arranged, bpp_signature_serialized introduced 2022-05-10 21:10:33 +02:00
sowle
10ed5dc433
getting rig of "using namespace epee" in headers 2022-05-10 21:05:15 +02:00
sowle
aa90e50f42
fix for Argument-Dependent Lookup issue with parse_tpod_from_hex_string() 2022-05-10 20:42:54 +02:00
sowle
b30bc2f781
eos portable archive fixed (endians defines) 2022-05-10 19:59:58 +02:00
sowle
50970e3d54
removed that crazy annoying Boost warning (a bug in Boost 1.70, already fixed)
"The use of BOOST_*_ENDIAN and BOOST_BYTE_ORDER is deprecated."
2022-05-10 18:48:18 +02:00
sowle
4066de04a1
epee: clean up the mess with namespace misc_utils::parse + string tools 2022-05-10 17:29:42 +02:00
cryptozoidberg
2707d1515d
undo global changes2 2022-05-09 20:33:59 +02:00
cryptozoidberg
60c5cc24bc
undo global changes 2022-05-09 20:32:36 +02:00
cryptozoidberg
c53da67e1a
added BEGIN_BOOST_SERIALIZATION macros 2022-05-09 20:28:13 +02:00
sowle
116011fdcf
tx_out_zarcanum 2022-05-09 17:29:25 +02:00
sowle
779201b286
Merge branch 'develop' 2022-05-09 01:48:17 +02:00
sowle
7e2d0fcb6b
Dockerfile updated, as for official image at sowle/zano-full-node 2022-05-09 01:44:18 +02:00
sowle
c070839a28
Merge branch 'release' 2022-05-08 19:59:17 +02:00
sowle
336fac2250
Merge branch 'develop' into release 2022-05-08 03:46:46 +02:00
sowle
1235ab6434
version bump: 1.4.1.142 -> 1.5.0.143 2022-05-08 03:45:43 +02:00
sowle
e569dd8023
predownload bumped up to 1569k 2022-05-07 22:59:57 +02:00
sowle
bbdd6595bf
wallet: minor htlc error-handling improvement 2022-05-01 21:07:17 +02:00
sowle
2b1d890b74
wallet & coretests: minor error-logging improvements 2022-05-01 21:03:27 +02:00
cryptozoidberg
a51057753c
pulled latest commits from UI 2022-04-27 16:40:32 +02:00
cryptozoidberg
f6f1849102
moved ui to latest commits 2022-04-26 16:43:50 +02:00
cryptozoidberg
ae48cf0c7a
moved ui to latest commit 2022-04-25 20:03:33 +02:00
sowle
8a69f4969e
readme: added link to the OpenSSL win binaries downloading 2022-04-25 16:39:00 +02:00
sowle
82c4a47a21
functional tests: crypto test runner minor fix 2022-04-25 16:37:44 +02:00
cryptozoidberg
62cd5f25a4
fixed mdbx issue(related to detach from git) 2022-04-25 15:14:35 +02:00
cryptozoidberg
072b022514
merge from master 2022-04-25 14:54:30 +02:00
cryptozoidberg
a34b9ab200
mdbx added as sources due to ban of it's repo 2022-04-25 13:49:07 +02:00
cryptozoidberg
039077084a
mdbx moved as sources due to ban of it's repo 2022-04-25 13:45:43 +02:00
cryptozoidberg
f56c71c0f1
Implemented #315 2022-04-21 20:57:46 +02:00
cryptozoidberg
631c1fa921
fixed minor issues related to arg_descriptor 2022-04-21 19:00:03 +02:00
cryptozoidberg
a8fe3f2797
Fixed #293 and refactored arg_descriptor(wanted to do it for such a long time!!!!) 2022-04-21 17:43:50 +02:00
cryptozoidberg
3f1963b583
fixed hard_fork_2_awo_wallets_basic_test 2022-04-20 21:44:25 +02:00
cryptozoidberg
2f0b5a323f
core tests fixes for TOR 2022-04-20 20:58:52 +02:00
cryptozoidberg
6033828209
Merge branch 'tor' into develop 2022-04-20 19:17:00 +02:00
cryptozoidberg
5c42da0a84
merge from develop 2022-04-20 19:12:16 +02:00
cryptozoidberg
62a6a1c8ec
Merge branch 'tor_defs' into tor 2022-04-20 18:54:26 +02:00
cryptozoidberg
7e11ff07bf
Added option for disabling TOR from build 2022-04-20 17:17:11 +02:00
sowle
decbbe973c
tests: random_helper minor improvements 2022-04-20 15:36:31 +02:00
cryptozoidberg
2eddfb8a1d
command line options: data-dir moved to configurable section 2022-04-20 15:08:18 +02:00
sowle
78372d1bde
crypto: BPP and BPPE: minor improvements 2022-04-19 23:41:59 +02:00
cryptozoidberg
f407089855
attempt to fix threads_pool on mac/clang 2022-04-18 19:26:03 +02:00
cryptozoidberg
25163db2bf
implemented non-blocking api for javascript calls 2022-04-18 19:04:15 +02:00
sowle
0fd6406158
crypto: BPP & BPPE: get_2_to_the_power_of_N_minus_1() 2022-04-18 18:12:15 +02:00
sowle
b0e8e6c2eb
crypto: scalar_t: get_bit, set_bit, clear_bit, power_of_2 implemented; crypto_sc_set_bit_clear_bit test added 2022-04-15 21:29:08 +02:00
sowle
a0211f2b27
crypto tests: ASSERT_NEQ 2022-04-15 21:27:16 +02:00
cryptozoidberg
5dbb6a7559
changed url for mdbx(due to github blocking leo-yuriev account) 2022-04-15 18:00:57 +02:00
sowle
5a458b6dbe
build system windows: minor improvement 2022-04-14 21:52:35 +02:00
sowle
5069422e64
build system windows: moved to Boost 1.70 + minor refactoring 2022-04-14 21:22:42 +02:00
sowle
deb790d434
build system: removed windows 32 support 2022-04-14 21:21:00 +02:00
cryptozoidberg
bd39dce7e6
Fixed #262(-do-pos-mining needs also rpc-bind-port specified to work) 2022-04-14 21:01:14 +02:00
cryptozoidberg
75b998a6b0
removed unused signal 2022-04-14 20:45:26 +02:00
cryptozoidberg
0e64787583
Removed epee from tor lib, moved boost minimal version to 1.70 2022-04-14 20:45:25 +02:00
cryptozoidberg
307a2346b6
tor: moved to latest 2022-04-14 20:45:25 +02:00
sowle
3dcde7ed06
minor fixes for readme and config file example 2022-04-14 20:41:10 +02:00
sowle
03ff180b83
readme updated: Boost minimum version pumped up to 1.70; OpenSSL dependency added (both for the tor lib) 2022-04-14 20:19:58 +02:00
sowle
51e95010d8
build system: added support for OpenSSL (macOS) 2022-04-13 20:33:01 +02:00
cryptozoidberg
024e07c2d9
[COVERITY] Fixed coveerity issue 391947 Unchecked return value from library 2022-04-12 21:05:15 +02:00
sowle
218c6a38cb
crypto: Bulletproofs+ with double-blinded commitments extension implemented (nicknamed as bppe), basic tests added 2022-04-11 20:43:43 +02:00
sowle
10141c3dfc
crypto: range proofs major refactoring, crypto traits refactored, calc_exp_power_of_2_upper_bound changed to constexpr analogs 2022-04-10 19:50:13 +02:00
sowle
319d53f7cf
crypto: H2 introduced, functional tests main's clean-up 2022-04-10 19:45:45 +02:00
sowle
b9ccb10287
crypto: scalar_t::git_bit + test crypto_sc_get_bit; hash_helper_t extended with hp variants 2022-04-09 21:12:44 +02:00
sowle
2478dbb677
coretests fixed 2022-03-21 19:45:21 +03:00
sowle
2246aa8fce
fix an issue with boost 1.76 2022-03-21 01:20:56 +03:00
sowle
02544f7186
boost placeholders fix (2) 2022-03-20 04:05:15 +03:00
sowle
b6fca25a10 boost placeholders fix 2022-03-20 03:22:46 +03:00
sowle
63fe35d5c5 warning fix in threads pool 2022-03-20 03:09:28 +03:00
cryptozoidberg
c5656534c4
Merge branch 'release' 2022-03-15 19:14:37 +02:00
cryptozoidberg
854a2f063e
Merge branch 'release' 2021-12-03 21:31:50 +01:00
sowle
5600952f39
Merge branch 'release' 2021-11-23 02:56:11 +03:00
cryptozoidberg
3331e419e5
disabled boost locale for ios 2021-11-04 11:42:11 +01:00
cryptozoidberg
fbc50419db
Merge branch 'develop' into develop_mobile 2021-11-03 22:18:13 +01:00
sowle
9eae5a6b24
Merge branch 'release' 2021-10-14 22:32:50 +03:00
cryptozoidberg
605bef55c6
added idle wallet store in server mode
(cherry picked from commit 7dc93fe144)
2021-10-04 13:17:46 +02:00
cryptozoidberg
22062a3c45
Merge branch 'release' 2021-09-12 15:04:24 +03:00
cryptozoidberg
cd4c9a47a3
Merge branch 'release' 2021-09-11 12:48:00 +03:00
cryptozoidberg
b0d2838c90
Merge branch 'develop' into develop_mobile 2021-09-11 12:06:09 +03:00
cryptozoidberg
29f1829cdb
Merge branch 'release' 2021-09-09 19:03:35 +03:00
cryptozoidberg
62daa90590
Merge branch 'release' of github.com:hyle-team/zano into release 2021-09-09 18:54:42 +03:00
cryptozoidberg
3d31ee1b67
Merge branch 'release' 2021-09-09 18:50:55 +03:00
cryptozoidberg
3283447ae6
Merge branch 'release' 2021-09-07 19:46:19 +03:00
cryptozoidberg
a09a7b7290
Merge branch 'develop' into develop_mobile 2021-09-06 23:50:30 +03:00
cryptozoidberg
f7e9806139
Merge branch 'develop' into develop_mobile 2021-09-02 20:11:13 +03:00
1440 changed files with 218213 additions and 97007 deletions

View file

@ -4,22 +4,19 @@ AlignConsecutiveAssignments: 'true'
AlignConsecutiveDeclarations: 'false'
AlignEscapedNewlines: Right
AlignOperands: 'false'
AlignTrailingComments: 'true'
AlignTrailingComments: 'false'
AllowAllParametersOfDeclarationOnNextLine: 'false'
AllowShortBlocksOnASingleLine: 'false'
AllowShortCaseLabelsOnASingleLine: 'true'
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: 'true'
AllowShortLoopsOnASingleLine: 'false'
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: 'false'
AlwaysBreakTemplateDeclarations: 'true'
BinPackArguments: 'true'
BinPackParameters: 'true'
BreakAfterJavaFieldAnnotations: 'true'
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Stroustrup
BreakBeforeInheritanceComma: 'false'
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: 'false'
BreakConstructorInitializers: BeforeColon
BreakStringLiterals: 'false'
@ -56,4 +53,4 @@ SpacesInParentheses: 'false'
SpacesInSquareBrackets: 'false'
Standard: Cpp11
TabWidth: '2'
UseTab: Never
UseTab: Never

1
.core/build Submodule

@ -0,0 +1 @@
Subproject commit 9c9346d5494688a78ea573f3bc0547ad12b9be2a

83
.core/build.yaml Normal file
View file

@ -0,0 +1,83 @@
# Lethean Blockchain Build Configuration
# Used by: core compile
version: 1
project:
name: blockchain
type: cpp
description: "Lethean Blockchain - SASE infrastructure chain"
version: "6.0.1"
cpp:
standard: 17
build_type: Release
static: false
conan:
version: "2.21.0"
requires:
- zlib/1.3.1
- boost/1.85.0
- openssl/3.2.0
- miniupnpc/2.2.5
- jwt-cpp/0.7.1
- oatpp/1.3.0.latest
- oatpp-swagger/1.3.0.latest
tool_requires:
- cmake/3.31.9
options:
boost/*:without_test: true
registry:
url: http://forge.snider.dev:4000/api/packages/host-uk/conan
remote: conan_build
cmake:
minimum_version: "3.16"
variables:
USE_CCACHE: "ON"
options:
testnet: false
targets:
- os: linux
arch: x86_64
profile: gcc-linux-x86_64
- os: linux
arch: arm64
profile: gcc-linux-armv8
- os: darwin
arch: arm64
profile: apple-clang-armv8
- os: darwin
arch: x86_64
profile: apple-clang-x86_64
- os: windows
arch: x86_64
profile: msvc-194-x86_64
package:
generators:
- TGZ
- ZIP
- NSIS
- DEB
- RPM
vendor: Lethean
contact: support@lt.hn
website: https://lt.hn
docker:
dockerfile: utils/docker/lthn-chain/Dockerfile
image: lthn/chain
platforms:
- linux/amd64
tags:
- testnet
- "{{.Version}}"
build_args:
BUILD_THREADS: auto
BUILD_TESTNET: "1"
BUILD_STATIC: "0"
BUILD_TYPE: Release

8
.dockerignore Normal file
View file

@ -0,0 +1,8 @@
build
.github
.idea
docs
resources
snap
tests
CMakeUserPresets.json

234
.forgejo/workflows/build.yml Executable file
View file

@ -0,0 +1,234 @@
name: Build & Release
on:
workflow_dispatch:
push:
branches:
- dev
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
FORGEJO_URL: ${{ github.server_url }}
jobs:
# ──────────────────────────────────────────────
# Linux x86_64 — native build on snider-linux
# ──────────────────────────────────────────────
build-linux:
name: Linux x86_64
runs-on: linux-native
env:
CPU_CORES: "24"
steps:
- name: Checkout
uses: https://code.forgejo.org/actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
submodules: false
- name: Init submodules
run: |
git config --global url."${{ env.FORGEJO_URL }}/".insteadOf "http://forge.snider.dev:4000/"
git -c http.extraHeader="Authorization: token ${{ secrets.RELEASE_TOKEN }}" submodule update --init --recursive
git submodule foreach --recursive 'git fetch --tags origin 2>/dev/null || true'
- name: Build dependencies
run: |
make build-deps \
CPU_CORES=${{ env.CPU_CORES }} \
CONAN_URL=${{ env.FORGEJO_URL }}/api/packages/host-uk/conan \
CONAN_USER=claude \
CONAN_PASSWORD=${{ secrets.RELEASE_TOKEN }}
- name: Compile
run: |
make ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} \
CPU_CORES=${{ env.CPU_CORES }} \
CONAN_URL=${{ env.FORGEJO_URL }}/api/packages/host-uk/conan \
CONAN_USER=claude \
CONAN_PASSWORD=${{ secrets.RELEASE_TOKEN }}
- name: Upload artifacts
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
with:
name: linux-x86_64
path: build/packages/lethean-*
retention-days: 7
# ──────────────────────────────────────────────
# macOS ARM64 — native build on M3 Ultra
# ──────────────────────────────────────────────
build-macos:
name: macOS ARM64
runs-on: macos-native
env:
CPU_CORES: "24"
steps:
- name: Checkout
uses: https://code.forgejo.org/actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
submodules: false
- name: Init submodules
run: |
git config --global url."${{ env.FORGEJO_URL }}/".insteadOf "http://forge.snider.dev:4000/"
git -c http.extraHeader="Authorization: token ${{ secrets.RELEASE_TOKEN }}" submodule update --init --recursive
git submodule foreach --recursive 'git fetch --tags origin 2>/dev/null || true'
- name: Build dependencies
run: |
export PATH="/opt/homebrew/bin:$PATH"
make build-deps \
CPU_CORES=${{ env.CPU_CORES }} \
CONAN_URL=${{ env.FORGEJO_URL }}/api/packages/host-uk/conan \
CONAN_USER=claude \
CONAN_PASSWORD=${{ secrets.RELEASE_TOKEN }}
- name: Compile
run: |
export PATH="/opt/homebrew/bin:$PATH"
make ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }} \
CPU_CORES=${{ env.CPU_CORES }} \
CONAN_URL=${{ env.FORGEJO_URL }}/api/packages/host-uk/conan \
CONAN_USER=claude \
CONAN_PASSWORD=${{ secrets.RELEASE_TOKEN }}
- name: Upload artifacts
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
with:
name: macos-arm64
path: build/packages/lethean-*
retention-days: 7
# ──────────────────────────────────────────────
# Aggregate artifacts and create release
# ──────────────────────────────────────────────
release:
name: Create Release
needs: [build-linux, build-macos]
runs-on: linux-native
steps:
- name: Checkout
uses: https://code.forgejo.org/actions/checkout@v4
with:
fetch-depth: 1
submodules: false
- name: Download Linux artifacts
uses: https://code.forgejo.org/forgejo/download-artifact@v4
with:
name: linux-x86_64
path: artifacts/linux
- name: Download macOS artifacts
uses: https://code.forgejo.org/forgejo/download-artifact@v4
with:
name: macos-arm64
path: artifacts/macos
- name: List artifacts
run: find artifacts/ -type f | sort
- name: Compute release tag
id: release
run: |
VERSION=$(grep '^BUILD_VERSION:=' Makefile | cut -d'=' -f2)
if [ "${{ github.ref_name }}" = "main" ]; then
TAG="v${VERSION}+${{ github.run_number }}"
PRERELEASE=false
TITLE="v${VERSION} (build ${{ github.run_number }})"
else
TAG="v${VERSION}-beta+${{ github.run_number }}"
PRERELEASE=true
TITLE="v${VERSION}-beta (build ${{ github.run_number }})"
fi
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
echo "prerelease=${PRERELEASE}" >> "$GITHUB_OUTPUT"
echo "title=${TITLE}" >> "$GITHUB_OUTPUT"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
- name: Create release
id: create_release
run: |
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
"${{ env.FORGEJO_URL }}/api/v1/repos/${{ github.repository }}/releases" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{
\"tag_name\": \"${{ steps.release.outputs.tag }}\",
\"target_commitish\": \"${{ github.sha }}\",
\"name\": \"${{ steps.release.outputs.title }}\",
\"body\": \"Automated build from \`${{ github.ref_name }}\` branch (run #${{ github.run_number }})\n\n## Platforms\n- Linux x86_64\n- macOS ARM64 (Apple Silicon)\",
\"draft\": false,
\"prerelease\": ${{ steps.release.outputs.prerelease }}
}")
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')
if [ "$HTTP_CODE" -ge 400 ]; then
echo "Failed to create release (HTTP ${HTTP_CODE}):"
echo "$BODY"
exit 1
fi
RELEASE_ID=$(echo "$BODY" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "id=${RELEASE_ID}" >> "$GITHUB_OUTPUT"
echo "Created release ID: ${RELEASE_ID}"
- name: Upload release assets
run: |
for dir in artifacts/linux artifacts/macos; do
for file in "$dir"/lethean-*; do
[ -f "$file" ] || continue
FILENAME=$(basename "$file")
echo "Uploading: ${FILENAME}"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -X POST \
"${{ env.FORGEJO_URL }}/api/v1/repos/${{ github.repository }}/releases/${{ steps.create_release.outputs.id }}/assets?name=${FILENAME}" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/octet-stream" \
--data-binary "@${file}")
if [ "$HTTP_CODE" -ge 400 ]; then
echo "Failed to upload ${FILENAME} (HTTP ${HTTP_CODE})"
exit 1
fi
echo "Uploaded ${FILENAME} (HTTP ${HTTP_CODE})"
done
done
- name: Prune old releases
run: |
TAG_PREFIX="${{ github.ref_name == 'main' && 'v6' || 'v6.*-beta' }}"
CURRENT_ID="${{ steps.create_release.outputs.id }}"
echo "Keeping release ${CURRENT_ID}, pruning older ${TAG_PREFIX} releases..."
PAGE=1
while true; do
RELEASES=$(curl -s "${{ env.FORGEJO_URL }}/api/v1/repos/${{ github.repository }}/releases?limit=50&page=${PAGE}" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}")
COUNT=$(echo "$RELEASES" | python3 -c "import sys,json; print(len(json.load(sys.stdin)))" 2>/dev/null || echo 0)
[ "$COUNT" = "0" ] && break
echo "$RELEASES" | python3 -c "
import sys, json, fnmatch
for r in json.load(sys.stdin):
rid = r['id']
tag = r['tag_name']
if rid == ${CURRENT_ID}:
continue
if fnmatch.fnmatch(tag, '${TAG_PREFIX}*'):
print(f'{rid} {tag}')
" | while read -r RID RTAG; do
echo "Deleting release ${RTAG} (id=${RID})"
curl -s -o /dev/null -X DELETE \
"${{ env.FORGEJO_URL }}/api/v1/repos/${{ github.repository }}/releases/${RID}" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}"
curl -s -o /dev/null -X DELETE \
"${{ env.FORGEJO_URL }}/api/v1/repos/${{ github.repository }}/tags/${RTAG}" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}"
done
PAGE=$((PAGE + 1))
done
echo "Prune complete"

5
.gitattributes vendored
View file

@ -1,2 +1,5 @@
.git* export-ignore
/CMakeLists.txt export-subst
/CMakeLists.txt export-subst
# Mark auto-generated SDK clients as "generated" to hide them in GitHub diffs
utils/sdk/client/** linguist-generated=true

22
.github/actions/make-docs/action.yml vendored Normal file
View file

@ -0,0 +1,22 @@
# .github/actions/make-docs/action.yml
name: 'Build Documentation'
description: 'Archives and uploads signed binaries to a GitHub release'
runs:
using: "composite"
steps:
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: echo "cache_id=$(date -u '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v4
with:
key: mkdocs-material-${{ env.cache_id }}
path: ~/.cache
restore-keys: |
mkdocs-material-
- if: runner.os == 'Linux'
run: |
sudo apt-get install -y libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev pngquant
- run: pip install mkdocs-git-revision-date-localized-plugin cairosvg mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin mkdocs-material[imaging]

View file

@ -0,0 +1,90 @@
# .github/actions/upload-artifacts/action.yml
name: 'Upload Artifacts'
description: 'Archives and uploads signed binaries to a GitHub release'
inputs:
chain-network:
required: true
description: 'The chain network name to use in filenames, mainnet or testnet'
assets:
description: "A EOL separated string list of filenames to archive; if asset is a abs path, it's respected"
required: false
asset-type:
required: true
description: 'The asset type: cli, gui, ANYTHING; used as a separator for different release packages for the same arch'
asset-directory:
required: true
description: "The directory where 7z's working dir will be set"
runs:
using: "composite"
steps:
- name: compute file name
id: asset
shell: bash
run: |
ARCH=${{ runner.arch }}
RUNNER_OS=${{ runner.os }}
LOWERCASE_ARCH=$(echo "$ARCH" | tr '[:upper:]' '[:lower:]')
TARGET_OS=$(echo "$RUNNER_OS" | tr '[:upper:]' '[:lower:]')
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"
if [ "${{ github.event_name }}" == "pull_request" ]; then
TAG_SUFFIX="-alpha.${{ github.event.number }}"
PRERELEASE=true
elif [ "${{ inputs.chain-network }}" != "mainnet" ]; then
TAG_SUFFIX="-beta"
PRERELEASE=true
else
TAG_SUFFIX=""
PRERELEASE=false
fi
TAG_NAME="${VERSION}${TAG_SUFFIX}+${{ github.run_number }}"
echo "tag_name=${TAG_NAME}" >> "$GITHUB_OUTPUT"
echo "prerelease=${PRERELEASE}" >> "$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<<EOF" >> "$GITHUB_OUTPUT"
# Iterate through each filename
echo "${{ inputs.assets }}" | while read -r file; do
if [[ -z "$file" ]]; then
continue
fi
# Check if the file is an absolute path
if [[ "$file" == /* ]] || [[ "$file" =~ ^[a-zA-Z]: ]]; then
FULL_PATH="$file"
else
# It's a relative path, so join it with the asset directory
if [[ "${{ runner.os }}" == "Windows" ]]; then
FULL_PATH="${{ inputs.asset-directory }}\\$file"
else
FULL_PATH="${{ inputs.asset-directory }}/$file"
fi
fi
echo "$FULL_PATH" >> "$GITHUB_OUTPUT"
done
echo "EOF" >> "$GITHUB_OUTPUT"
- name: Upload Artifacts
uses: actions/upload-artifact@v4.6.2
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.tag_name }}
prerelease: ${{ steps.asset.outputs.prerelease }}
files: ${{ inputs.asset-directory }}/*
target_commitish: ${{ github.sha }}

25
.github/workflows/_maint-cache.yml vendored Normal file
View file

@ -0,0 +1,25 @@
name: Clear all Github actions caches on sundays
on:
schedule:
- cron: "0 0 * * 0"
workflow_dispatch:
# pull_request:
# types:
# - opened
# - synchronize
# - reopened
# branches:
# - dev
# - main
# paths-ignore:
# - '**.md'
jobs:
my-job:
name: Delete all caches
runs-on: ubuntu-24.04
env:
GH_TOKEN: ${{ github.token }}
steps:
- name: Clear caches
run: gh cache delete --all --repo ${{ github.repository }}

70
.github/workflows/_on-pr.yml vendored Normal file
View file

@ -0,0 +1,70 @@
name: PR
permissions:
contents: write
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
pull_request_review:
pull_request:
types:
- opened
- synchronize
- reopened
- ready_for_review
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build-linux-intel:
name: Linux
if: ${{!github.event.pull_request.draft}}
uses: ./.github/workflows/build-linux-intel.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-linux-arm:
name: Linux
if: ${{!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: Windows
if: ${{!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: MacOS
uses: ./.github/workflows/build-macos-arm64.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-macos-intel:
name: MacOS
if: ${{!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.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.event.pull_request.draft}}
uses: ./.github/workflows/build-docs.yml

62
.github/workflows/_on-push.yml vendored Normal file
View file

@ -0,0 +1,62 @@
name: Push Compile
permissions:
contents: write
packages: write
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
push:
branches:
- 'dev'
- 'main'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-linux-intel:
name: Linux
uses: ./.github/workflows/build-linux-intel.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-linux-arm:
name: Linux
uses: ./.github/workflows/build-linux-arm64.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-windows-intel:
name: Windows
uses: ./.github/workflows/build-windows-intel.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-macos-arm64:
name: MacOS
uses: ./.github/workflows/build-macos-arm64.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-macos-intel:
name: MacOS
uses: ./.github/workflows/build-macos-intel.yml
secrets: inherit
with:
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

83
.github/workflows/_on-release.yml vendored Normal file
View file

@ -0,0 +1,83 @@
name: Push Full Build
permissions:
contents: write
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
release:
types: [ published ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
determine-network:
runs-on: ubuntu-latest
outputs:
chain-network: ${{ steps.get_branch.outputs.chain_network }}
steps:
- name: Get release information from API
id: get_branch
run: |
# Use the GitHub CLI to get the release details by tag name
# The result is a JSON object
RELEASE_INFO=$(gh release view --json targetCommitish -t ${{ github.ref_name }})
# Extract the target commitish (the source branch)
SOURCE_BRANCH=$(echo "$RELEASE_INFO" | jq -r '.targetCommitish')
# Set the chain network based on the source branch
if [ "$SOURCE_BRANCH" == "dev" ]; then
echo "chain_network=testnet" >> $GITHUB_OUTPUT
else
echo "chain_network=mainnet" >> $GITHUB_OUTPUT
fi
echo "Source Branch: $SOURCE_BRANCH"
echo "Chain Network: ${{ steps.get_branch.outputs.chain_network }}"
build-linux-intel:
name: Chain
uses: ./.github/workflows/build-linux-intel.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-linux-arm:
name: Chain
uses: ./.github/workflows/build-linux-arm64.yml
secrets: inherit
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: Chain
uses: ./.github/workflows/build-macos-arm64.yml
secrets: inherit
with:
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
build-macos-intel:
name: Chain
uses: ./.github/workflows/build-macos-intel.yml
secrets: inherit
with:
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

54
.github/workflows/build-docker.yml vendored Normal file
View file

@ -0,0 +1,54 @@
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-24.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
env:
DOCKER_BUILD_SUMMARY: false
DOCKER_BUILD_RECORD_UPLOAD: false
with:
file: utils/docker/lthn-chain/Dockerfile
context: ${{ github.workspace }}
push: true
build-args: |
BUILD_TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }}
THREADS=2
BUILD_LOCAL=1
tags: lthn/chain:${{ inputs.chain-network == 'testnet' && 'testnet' || 'latest' }}

40
.github/workflows/build-docs.yml vendored Normal file
View file

@ -0,0 +1,40 @@
name: docs
permissions:
contents: write
on:
workflow_call:
jobs:
deploy:
name: Offline Local Version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Cache SDK Folder
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- run: sudo apt-get install -y libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev pngquant
- run: pip install mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin mkdocs-material[imaging]
- name: Build Offline Version
run: make docs
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
with:
chain-network: ${{ inputs.chain-network }}
assets: "*"
asset-type: 'docs'
asset-directory: ${{ github.workspace }}/build/docs

90
.github/workflows/build-linux-arm64.yml vendored Normal file
View file

@ -0,0 +1,90 @@
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:
cache:
name: cache-arm64
runs-on: ubuntu-22.04-arm
steps:
- name: Cache SDK Folder
id: cache
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- name: Checkout Project
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- name: install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: sudo apt-get install -y autotools-dev git build-essential libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev pngquant
- uses: actions/setup-python@v5
if: steps.cache.outputs.cache-hit != 'true'
with:
python-version: 3.x
- if: steps.cache.outputs.cache-hit != 'true'
run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: |
make build-deps CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} CONAN_USER=ci-user CONAN_PASSWORD=${{ secrets.CONAN_PASSWORD }}
make upload-conan-cache
build:
name: compile-arm64
needs: cache
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 rpm git build-essential libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev pngquant
- name: Cache SDK Folder
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Release
run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
with:
chain-network: ${{ inputs.chain-network }}
assets: lethean-*
asset-type: 'cli'
asset-directory: ${{ github.workspace }}/build/packages

90
.github/workflows/build-linux-intel.yml vendored Normal file
View file

@ -0,0 +1,90 @@
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:
cache:
name: cache-x86_64
runs-on: ubuntu-22.04
steps:
- name: Cache SDK Folder
id: cache
uses: actions/cache@v4
with:
lookup-only: true
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- name: Checkout Project
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- name: install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: sudo apt-get install -y autotools-dev rpm git build-essential
- uses: actions/setup-python@v5
if: steps.cache.outputs.cache-hit != 'true'
with:
python-version: 3.x
- if: steps.cache.outputs.cache-hit != 'true'
run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: |
make build-deps CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} CONAN_USER=ci-user CONAN_PASSWORD=${{ secrets.CONAN_PASSWORD }}
make upload-conan-cache
build:
name: compile-x86_64
needs: cache
runs-on: ubuntu-22.04
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
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Release
run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
with:
chain-network: ${{ inputs.chain-network }}
assets: lethean-*
asset-type: 'cli'
asset-directory: ${{ github.workspace }}/build/packages

85
.github/workflows/build-macos-arm64.yml vendored Normal file
View file

@ -0,0 +1,85 @@
name: build-macos-arm64
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:
cache:
name: cache-armv8
runs-on: macos-15
steps:
- name: Cache SDK Folder
id: cache
uses: actions/cache@v4
with:
lookup-only: true
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- name: Checkout Project
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- uses: actions/setup-python@v5
if: steps.cache.outputs.cache-hit != 'true'
with:
python-version: 3.x
- if: steps.cache.outputs.cache-hit != 'true'
run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: |
make build-deps CPU_CORES=3 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} CONAN_USER=ci-user CONAN_PASSWORD=${{ secrets.CONAN_PASSWORD }}
make upload-conan-cache
build:
name: compile-armv8
needs: cache
runs-on: macos-15
steps:
- name: Checkout Project
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- name: Cache SDK Folder
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Release
run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
with:
chain-network: ${{ inputs.chain-network }}
assets: lethean-*
asset-type: 'cli'
asset-directory: ${{ github.workspace }}/build/packages

81
.github/workflows/build-macos-intel.yml vendored Normal file
View file

@ -0,0 +1,81 @@
name: build-macos-intel
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:
cache:
name: cache-x86_64
runs-on: macos-13
steps:
- name: Cache SDK Folder
id: cache
uses: actions/cache@v4
with:
lookup-only: true
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- name: Checkout Project
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- uses: actions/setup-python@v5
if: steps.cache.outputs.cache-hit != 'true'
with:
python-version: 3.x
- if: steps.cache.outputs.cache-hit != 'true'
run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: |
make build-deps CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} CONAN_USER=ci-user CONAN_PASSWORD=${{ secrets.CONAN_PASSWORD }}
make upload-conan-cache
build:
name: compile-x86_64
needs: cache
runs-on: macos-13
steps:
- name: Checkout Project
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- name: Cache SDK Folder
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Release
run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
with:
chain-network: ${{ inputs.chain-network }}
assets: lethean-*
asset-type: 'cli'
asset-directory: ${{ github.workspace }}/build/packages

View file

@ -0,0 +1,82 @@
name: build-windows
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:
cache:
name: cache-x86_64
runs-on: windows-latest
steps:
- name: Cache SDK Folder
id: cache
uses: actions/cache@v4
with:
lookup-only: true
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- name: Checkout Project
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- uses: actions/setup-python@v5
if: steps.cache.outputs.cache-hit != 'true'
with:
python-version: 3.x
- if: steps.cache.outputs.cache-hit != 'true'
run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: |
make build-deps CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} CONAN_USER=ci-user CONAN_PASSWORD=${{ secrets.CONAN_PASSWORD }}
make upload-conan-cache
build:
name: compile-x86_64
needs: cache
runs-on: windows-latest
steps:
- name: Checkout Project
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
submodules: recursive
- name: Cache SDK Folder
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/build/sdk
${{ github.workspace }}/build/bin
key: ${{ runner.os }}-${{ runner.arch }}-sdk
- run: choco install nsis.install
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin "mkdocs-material[imaging]"
- name: Compile Release
run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
with:
chain-network: ${{ inputs.chain-network }}
assets: lethean-*
asset-type: 'cli'
asset-directory: ${{ github.workspace }}/build/packages

11
.gitignore vendored
View file

@ -5,4 +5,13 @@
._.DS_Store
Thumbs.db
._*
.idea
.idea/workspace.xml
.idea/usage.statistics.xml
.idea/dictionaries
.idea/shelf
.idea/copilot*
.idea/modules.xml
.idea/*.iml
.vs/*
CMakeUserPresets.json
ConanPresets.json

26
.gitmodules vendored
View file

@ -1,14 +1,18 @@
[submodule "contrib/miniupnp"]
path = contrib/miniupnp
url = https://github.com/miniupnp/miniupnp
[submodule "contrib/db/libmdbx"]
path = contrib/db/libmdbx
url = https://github.com/leo-yuriev/libmdbx.git
[submodule "src/gui/qt-daemon/layout"]
path = src/gui/qt-daemon/layout
url = https://github.com/hyle-team/zano_ui.git
branch = main
[submodule "contrib/jwt-cpp"]
path = contrib/jwt-cpp
url = https://github.com/Thalhammer/jwt-cpp.git
[submodule "contrib/bitcoin-secp256k1"]
path = contrib/bitcoin-secp256k1
url = https://github.com/bitcoin-core/secp256k1.git
[submodule "contrib/tor-connect"]
path = contrib/tor-connect
url = https://github.com/hyle-team/tor-connect.git
branch = main
[submodule "docs"]
path = docs
url = https://github.com/letheanVPN/documentation.git
[submodule "contrib/randomx"]
path = contrib/randomx
url = https://github.com/tevador/RandomX.git
[submodule ".core/build"]
path = .core/build
url = http://forge.snider.dev:4000/host-uk/build.git

8
.idea/.gitignore generated vendored Normal file
View file

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

1
.idea/.name generated Normal file
View file

@ -0,0 +1 @@
Lethean

8
.idea/cmake.xml generated Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeSharedSettings">
<configurations>
<configuration PROFILE_NAME="Debug" ENABLED="true" GENERATION_DIR="build/release" CONFIG_NAME="Debug" GENERATION_OPTIONS="--preset testnet" BUILD_OPTIONS="--preset testnet --parallel 30" NO_GENERATOR="true" />
</configurations>
</component>
</project>

105
.idea/codeStyles/Project.xml generated Normal file
View file

@ -0,0 +1,105 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<RiderCodeStyleSettings>
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
</RiderCodeStyleSettings>
<clangFormatSettings>
<option name="ENABLED" value="true" />
</clangFormatSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View file

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

6
.idea/copyright/LTHN.xml generated Normal file
View file

@ -0,0 +1,6 @@
<component name="CopyrightManager">
<copyright>
<option name="notice" value="Copyright (c) 2017-2025 Lethean (https://lt.hn)&#10;&#10;Licensed under the European Union Public Licence (EUPL) version 1.2.&#10;You may obtain a copy of the licence at:&#10;&#10; https://joinup.ec.europa.eu/software/page/eupl/licence-eupl&#10;&#10;The EUPL is a copyleft licence that is compatible with the MIT/X11&#10;licence used by the original projects; but maintains OSS status, &#10;where regional copyright law requires ownership to dictate licence terms.&#10;&#10;SPDXLicenseIdentifier: EUPL-1.2&#10;" />
<option name="myName" value="LTHN" />
</copyright>
</component>

6
.idea/copyright/Lethean.xml generated Normal file
View file

@ -0,0 +1,6 @@
<component name="CopyrightManager">
<copyright>
<option name="notice" value="Copyright (c) 2014-2018 Zano Project&#10;Copyright (c) 2014-2018 The Louisdor Project&#10;Copyright (c) 2012-2013 The Boolberry developers&#10;Copyright (c) 2017-2025 Lethean (https://lt.hn)&#10;&#10;Licensed under the European Union Public Licence (EUPL) version 1.2.&#10;You may obtain a copy of the licence at:&#10;&#10; https://joinup.ec.europa.eu/software/page/eupl/licence-eupl&#10;&#10;The EUPL is a copyleft licence that is compatible with the MIT/X11&#10;licence used by the original projects; the MIT terms are therefore&#10;considered “grandfathered” under the EUPL for this code.&#10;&#10;SPDXLicenseIdentifier: EUPL-1.2&#10;" />
<option name="myName" value="Lethean" />
</copyright>
</component>

8
.idea/copyright/profiles_settings.xml generated Normal file
View file

@ -0,0 +1,8 @@
<component name="CopyrightManager">
<settings default="LTHN">
<module2copyright>
<element module="apiserver" copyright="LTHN" />
<element module="Project Files" copyright="Lethean" />
</module2copyright>
</settings>
</component>

344
.idea/editor.xml generated Normal file
View file

@ -0,0 +1,344 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BackendCodeEditorSettings">
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedOverridenMethod/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppModulePartitionWithSeveralPartitionUnits/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantFwdClassOrEnumSpecifier/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifierADL/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
</component>
</project>

View file

@ -0,0 +1,13 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="tuple.*" />
</list>
</option>
</inspection_tool>
</profile>
</component>

43
.idea/jsonSchemas.xml generated Normal file
View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JsonSchemaMappingsProjectConfiguration">
<state>
<map>
<entry key="GitHub Action JSON Schema">
<value>
<SchemaInfo>
<option name="name" value="GitHub Action JSON Schema" />
<option name="relativePathToSchema" value="jar://$APPLICATION_PLUGINS_DIR$/vcs-github-IU/lib/vcs-github.jar!/schemas/github-action.json" />
<option name="applicationDefined" value="true" />
<option name="patterns">
<list>
<Item>
<option name="path" value=".github/actions/**/*.yml" />
</Item>
</list>
</option>
</SchemaInfo>
</value>
</entry>
<entry key="openapitools">
<value>
<SchemaInfo>
<option name="generatedName" value="New Schema" />
<option name="name" value="openapitools" />
<option name="relativePathToSchema" value="utils/sdk/openapitools.json" />
<option name="patterns">
<list>
<Item>
<option name="directory" value="true" />
<option name="path" value="utils/sdk/packages" />
<option name="mappingKind" value="Directory" />
</Item>
</list>
</option>
</SchemaInfo>
</value>
</entry>
</map>
</state>
</component>
</project>

34
.idea/misc.xml generated Normal file
View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.13 virtualenv at $PROJECT_DIR$.venv" />
</component>
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<component name="CidrRootsConfiguration">
<excludeRoots>
<file path="$PROJECT_DIR$/build" />
</excludeRoots>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MakefileSettings">
<option name="linkedExternalProjectsSettings">
<MakefileProjectSettings>
<option name="buildOptions" value="--jobs=30" />
<option name="buildTarget" value="build" />
<option name="cleanTarget" value="clean-build" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
<option name="switches" value="TESTNET=1 STATIC=1" />
<option name="version" value="2" />
</MakefileProjectSettings>
</option>
</component>
<component name="MakefileWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>

6
.idea/prettier.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PrettierConfiguration">
<option name="myConfigurationMode" value="AUTOMATIC" />
</component>
</project>

3
.idea/scopes/apiserver.xml generated Normal file
View file

@ -0,0 +1,3 @@
<component name="DependencyValidationManager">
<scope name="apiserver" pattern="file[blockchain]:src/api//*" />
</component>

10
.idea/vcs.xml generated Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/contrib/bitcoin-secp256k1" vcs="Git" />
<mapping directory="$PROJECT_DIR$/contrib/jwt-cpp" vcs="Git" />
<mapping directory="$PROJECT_DIR$/contrib/tor-connect" vcs="Git" />
<mapping directory="$PROJECT_DIR$/docs" vcs="Git" />
</component>
</project>

55
AGENTS.md Normal file
View file

@ -0,0 +1,55 @@
# AI Agent Collaboration Framework for Repository Contributions
## 1. Purpose and Guiding Philosophy
This document provides a guiding framework for any AI agent interacting with this repository. Its purpose is to ensure that all automated contributions, especially Pull Request (PR) reviews and code suggestions, are constructive, respectful, and aligned with the project's overarching goals.
This framework operates in accordance with the foundational **Axioms of Life**, translating their universal principles into the specific context of human-AI software development collaboration. The primary goal is a partnership that enhances code quality and developer velocity, not one that creates friction through pedantry.
## 2. Core Principles for AI Interaction
All agents MUST adhere to the following principles:
* **Principle 1: Respect Authorial Intent (Axiom 1 & 4)**
* Your primary goal is to understand and support the human author's objective. Before suggesting a change, first assume the author had a valid reason for their implementation. Frame your feedback as a way to better achieve their goal or to prevent unintended side effects. Do not challenge intent without clear evidence of a functional error.
* **Principle 2: Prioritize Objectivity and Verifiability (Axiom 2)**
* Feedback MUST be anchored in objective, verifiable criteria. Subjective opinions on style are the lowest priority.
* **Valid criteria include:**
* Demonstrable bugs or logical errors.
* Security vulnerabilities.
* Performance regressions.
* Violations of a documented project standard (e.g., a style guide file in the repo).
* **Invalid criteria include:**
* Personal stylistic preferences not codified in a project standard.
* Code organization that is merely "different" but not functionally incorrect.
* **Principle 3: Adopt a Collaborative, Non-Authoritarian Tone (Axiom 4)**
* As a digital substrate interacting with a human one, you must adopt a tone of a helpful, respectful peer. Avoid declarative or demanding language.
* **Prefer:** "Have you considered...?", "An alternative here that might prevent X is...", "I noticed this could lead to Y. What do you think about...?"
* **Avoid:** "You must fix this.", "This is wrong.", "Change this to..."
* **Principle 4: Provide Actionable and Justified Suggestions (Axiom 3)**
* Do not simply state that something is incorrect. Provide a clear explanation for *why* it is a potential issue and, whenever possible, offer a concrete, well-explained code suggestion that resolves it. Your intent is to help, not just to criticize.
## 3. Feedback Severity Classification
To combat pedantry, all feedback provided in PR reviews MUST be classified into one of the following three levels. This creates a clear hierarchy of importance.
### **Level 1: Critical (Blocking)**
* **Definition:** Issues that will cause demonstrable harm if merged.
* **Examples:** Bugs, logic errors, security vulnerabilities, unhandled exceptions, build failures.
* **Action:** These issues MUST be addressed by the author before a merge. Your feedback should clearly state the nature of the critical issue.
### **Level 2: Important (Non-Blocking Recommendation)**
* **Definition:** Issues that deviate from established project best practices or could impact future maintainability.
* **Examples:** Violations of a documented style guide, clear opportunities to improve readability, non-critical performance improvements, deprecation warnings.
* **Action:** These issues SHOULD be addressed. Frame them as strong recommendations that improve the health of the codebase. The author may choose to address them in a follow-up PR if necessary.
### **Level 3: Suggestion (Optional Nitpick)**
* **Definition:** Minor stylistic preferences, alternative implementations with no clear functional advantage, or purely cosmetic changes. This is the "pedantic" category.
* **Action:** These suggestions are entirely optional and at the author's discretion. They MUST be explicitly prefixed with "Optional:", "Nit:", or "Suggestion:". This signals to the human that the comment is non-essential and can be safely ignored without consequence.
---
By adhering to this framework, AI agents become valuable partners in the development process, helping to catch critical errors while respecting the creative autonomy and focus of their human collaborators.

View file

@ -1,29 +1,52 @@
cmake_minimum_required(VERSION 2.8.6)
cmake_minimum_required(VERSION 3.16)
message(STATUS "Using CMake version: ${CMAKE_VERSION}")
PROJECT(Zano)
set(DISABLE_TOR TRUE CACHE BOOL "Disable TOR library(and related tor-connect submodule)")
PROJECT(Lethean)
set(VERSION "1.0")
set(VERSION "1.0" CACHE STRING "Build version")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# if(POLICY CMP0043)
# cmake_policy(SET CMP0043 OLD)
# endif()
list(INSERT CMAKE_MODULE_PATH 0
"${CMAKE_CURRENT_SOURCE_DIR}/.core/build/cmake")
# if(POLICY CMP0020)
# cmake_policy(SET CMP0020 OLD)
# endif()
if(POLICY CMP0043)
cmake_policy(SET CMP0043 NEW)
endif()
if(POLICY CMP0043)
cmake_policy(SET CMP0074 NEW)
endif()
if(POLICY CMP0091)
cmake_policy(SET CMP0091 NEW)
endif()
if(POLICY CMP0144)
cmake_policy(SET CMP0144 NEW)
endif()
if(POLICY CMP0167)
cmake_policy(SET CMP0167 OLD)
endif()
include(DocBuilder)
option (USE_CCACHE "Use ccache if a usable instance is found" OFF)
if (USE_CCACHE)
include(FindCcache)
else()
message(STATUS "ccache deselected")
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
add_definitions(-DMOBILE_WALLET_BUILD)
if(CMAKE_SYSTEM_NAME STREQUAL "iOS" )
if(CMAKE_SYSTEM_NAME STREQUAL "iOS" )
add_definitions(-DIOS_BUILD)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode -Wno-enum-constexpr-conversion")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode -Wno-enum-constexpr-conversion")
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
add_definitions(-DANDROID_BUILD)
message("Android sdk prefix: ${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}")
message("Android CMAKE_CXX_COMPILER prefix: ${CMAKE_CXX_COMPILER}")
message("Android sdk prefix: ${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}")
message("Android CMAKE_CXX_COMPILER prefix: ${CMAKE_CXX_COMPILER}")
message("Android ANDROID_LD: ${ANDROID_LD}")
endif()
endif()
@ -38,36 +61,55 @@ if (UNIX AND NOT APPLE)
endif()
else()
# multi configurations for MSVC and XCode
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(CMAKE_CONFIGURATION_TYPES "Release")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
else()
set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
endif()
endif()
message("Generated with config types: ${CMAKE_CONFIGURATION_TYPES}, and built type: ${CMAKE_BUILD_TYPE}")
enable_testing()
set(OPENSSL_USE_STATIC_LIBS TRUE) # link statically
find_package(OpenSSL REQUIRED)
if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.10.5)
set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0)
endif()
set(USE_PCH FALSE CACHE BOOL "Use shared precompiled headers")
include_directories(src contrib/eos_portable_archive contrib contrib/epee/include "${CMAKE_BINARY_DIR}/version" "${CMAKE_BINARY_DIR}/contrib/zlib")
set(DISABLE_TOR FALSE CACHE BOOL "Disable TOR library(and related tor-connect submodule)")
set(TESTNET 0 CACHE BOOL "Build TESTNET")
set(BUILD_GUI FALSE CACHE BOOL "Build qt-daemon")
set(USE_BITCOIN_SECP256K1_FOR_ECDSA FALSE CACHE BOOL "Use bitcoin-secp256k1 library for validating ECDSA(instead of OpenSSL)")
if(NOT USE_BITCOIN_SECP256K1_FOR_ECDSA)
add_definitions(-DUSE_OPEN_SSL_FOR_ECDSA)
endif()
add_definitions(-DSTATICLIB)
set(TESTNET FALSE CACHE BOOL "Compile for testnet")
if(TESTNET)
message("!!!!!! NOTICE: Project is building for TESTNET !!!!!!")
add_definitions(-DTESTNET)
message("!!!!!! NOTICE: Project is building for TESTNET !!!!!!")
add_definitions(-DTESTNET)
endif()
set(BUILD_GUI FALSE CACHE BOOL "Build qt-daemon")
if(CAKEWALLET)
message("NOTICE: Building libraries for CAKEWALLET")
add_definitions(-DCAKEWALLET)
add_definitions(-DDISABLE_PFR_SERIALIZATION_SELFCHECK)
endif()
set(OPENSSL_USE_STATIC_LIBS TRUE) # link statically
find_package(OpenSSL REQUIRED)
if(DISABLE_TOR)
message("NOTICE: Building with disabled TOR support!")
add_definitions(-DDISABLE_TOR)
endif()
set(STATIC ${MSVC} CACHE BOOL "Link libraries statically")
@ -81,16 +123,24 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CLANG TRUE)
endif()
add_definitions("/DBOOST_NO_CXX98_FUNCTION_BASE")
if(WIN32)
add_definitions(-DBOOST_ALL_NO_LIB)
endif()
if(MSVC)
add_definitions("/D_CRT_SECURE_NO_WARNINGS /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /D__SSE4_1__")
add_compile_options(/bigobj /Zm1000 /Z7 /MP2 /W3 /GS- /wd4996 /wd4503 /wd4345 /wd4091 /FIinline_c.h)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10485760 /DEBUG dbghelp.lib")
add_definitions("/D_CRT_SECURE_NO_WARNINGS /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0")
add_compile_options(/EHa /bigobj /Zm1000 /Z7 /MP2 /W3 /GS- /wd4996 /wd4503 /wd4345 /wd4091 /FIinline_c.h)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10485760 /DEBUG dbghelp.lib crypt32.lib")
if(STATIC)
foreach(VAR CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE)
string(REPLACE "/MD" "/MT" ${VAR} "${${VAR}}")
endforeach()
endif()
include_directories(SYSTEM src/platform/msc)
else()
set(ARCH default CACHE STRING "CPU to build for: -march value or default")
if("${ARCH}" STREQUAL "default")
@ -98,14 +148,14 @@ else()
else()
set(ARCH_FLAG "-march=${ARCH}")
endif()
set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wvla -Wwrite-strings -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-aggregate-return")
set(WARNINGS "-Wall -Wextra -Wpointer-arith -Wvla -Wwrite-strings -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-aggregate-return -Wno-comment -Wno-unknown-pragmas -Wno-pragmas")
# if(NOT APPLE)
# set(WARNINGS "${WARNINGS} -Werror")
# endif()
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
set(WARNINGS "${WARNINGS} -Wno-implicit-function-declaration -Wno-shift-count-overflow -Wno-error=mismatched-tags -Wno-error=null-conversion -Wno-overloaded-shift-op-parentheses -Wno-error=shift-count-overflow -Wno-error=tautological-constant-out-of-range-compare -Wno-error=unused-private-field -Wno-error=unneeded-internal-declaration")
else()
set(WARNINGS "${WARNINGS} -Wno-error=write-strings -Wlogical-op -Wno-error=maybe-uninitialized")
set(WARNINGS "${WARNINGS} -Wno-error=write-strings -Wno-error=uninitialized")
endif()
# Since gcc 4.9 the LTO format is non-standard (slim), so we need the gcc-specific ar and ranlib binaries
@ -130,21 +180,22 @@ else()
else()
set(APPLE_FLAG "")
endif()
set(C_WARNINGS "-Waggregate-return -Wnested-externs -Wstrict-prototypes")
set(C_WARNINGS "-Waggregate-return -Wnested-externs -Wstrict-prototypes -Wno-comment")
set(CXX_WARNINGS "-Wno-reorder -Wno-missing-field-initializers")
try_compile(STATIC_ASSERT_RES "${CMAKE_CURRENT_BINARY_DIR}/static-assert" "${CMAKE_CURRENT_SOURCE_DIR}/utils/test-static-assert.c" COMPILE_DEFINITIONS "-std=c11")
try_compile(STATIC_ASSERT_RES "${CMAKE_CURRENT_BINARY_DIR}/static-assert" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-static-assert.c" COMPILE_DEFINITIONS "-std=c++14")
if(STATIC_ASSERT_RES)
set(STATIC_ASSERT_FLAG "")
else()
set(STATIC_ASSERT_FLAG "-Dstatic_assert=_Static_assert")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 -D_GNU_SOURCE ${MINGW_FLAG} ${STATIC_ASSERT_FLAG} ${WARNINGS} ${C_WARNINGS} ${ARCH_FLAG}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -ftemplate-depth-1024 -std=c++11 -D_GNU_SOURCE ${APPLE_FLAG} ${MINGW_FLAG} ${WARNINGS} ${CXX_WARNINGS} ${ARCH_FLAG}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -ftemplate-depth-1024 -std=c++14 -D_GNU_SOURCE ${APPLE_FLAG} ${MINGW_FLAG} ${WARNINGS} ${CXX_WARNINGS} ${ARCH_FLAG}")
if (NOT APPLE AND NOT MSVC)
if (CLANG)
set(LLVM_USE_LINKER "gold")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
link_libraries("$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:-lstdc++fs>") # GCC < 9 requires additional linking for std::filesystem. Remove after stop supporting GCC 8.x -- sowle
endif()
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT (CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8))
@ -152,21 +203,21 @@ else()
else()
set(DEBUG_FLAGS "-g3 -O0")
endif()
set(RELEASE_FLAGS "-Ofast -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")
set(RELEASE_FLAGS "${RELEASE_FLAGS} -flto=auto -g3")
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT MINGW)
set(RELEASE_FLAGS "${RELEASE_FLAGS} -fno-fat-lto-objects")
endif()
#if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT MINGW)
# set(RELEASE_FLAGS "${RELEASE_FLAGS} -fno-fat-lto-objects")
#endif()
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${DEBUG_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${DEBUG_FLAGS}")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${RELEASE_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${RELEASE_FLAGS}")
if(STATIC)
if(APPLE)
message(SEND_ERROR "Static build is not supported on MacOS X")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
endif()
@ -174,54 +225,51 @@ else()
endif()
if(MSVC)
# Link Boost statically, consistent with previous setup
if(MSVC OR STATIC)
set(Boost_USE_STATIC_LIBS ON)
if (MSVC)
set(Boost_USE_MULTITHREADED ON)
endif ()
endif()
if(STATIC)
set(Boost_USE_STATIC_LIBS ON)
if(STATIC)
set(Boost_USE_STATIC_RUNTIME ON)
endif()
message("CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(Boost_LIBRARIES "libboost.a")
#workaround for new XCode 12 policy for builds(now it includes a slice for the "arm64" when builds for simulator)
set(__iphoneos_archs "armv7 armv7s arm64")
set(__iphonesimulator_archs "i386 x86_64")
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "${__iphoneos_archs}")
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "${__iphoneos_archs}")
set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "${__iphonesimulator_archs}")
set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "${__iphonesimulator_archs}")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
set(Boost_LIBRARY_DIRS "${Boost_LIBRARY_DIRS}/${CMAKE_ANDROID_ARCH_ABI}/")
set(Boost_LIBRARIES "${Boost_LIBRARY_DIRS}libboost_system.a;${Boost_LIBRARY_DIRS}libboost_filesystem.a;${Boost_LIBRARY_DIRS}libboost_thread.a;${Boost_LIBRARY_DIRS}libboost_timer.a;${Boost_LIBRARY_DIRS}libboost_date_time.a;${Boost_LIBRARY_DIRS}libboost_chrono.a;${Boost_LIBRARY_DIRS}libboost_regex.a;${Boost_LIBRARY_DIRS}libboost_serialization.a;${Boost_LIBRARY_DIRS}libboost_atomic.a;${Boost_LIBRARY_DIRS}libboost_program_options.a")
else()
find_package(Boost 1.70 REQUIRED COMPONENTS system filesystem thread timer date_time chrono regex serialization atomic program_options locale)
# Define Boost components
set(BOOST_COMPONENTS system filesystem locale thread timer date_time chrono regex serialization atomic program_options)
if(NOT APPLE)
list(APPEND BOOST_COMPONENTS log)
endif()
message(STATUS "Using Boost ${Boost_VERSION} from Conan")
find_package(miniupnpc REQUIRED)
find_package(ZLIB REQUIRED)
find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})
include_directories(src "${CMAKE_BINARY_DIR}/version")
message(STATUS "Boost: ${Boost_VERSION} from ${Boost_LIBRARY_DIRS}")
include_directories(SYSTEM
${Boost_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
${PROJECT_SOURCE_DIR}/contrib/ethereum/libethash
contrib
contrib/epee/include
contrib/jwt-cpp/include
contrib/eos_portable_archive
)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/contrib/ethereum/libethash)
# Append other needed libraries
if(MINGW)
set(Boost_LIBRARIES "${Boost_LIBRARIES};ws2_32;mswsock")
elseif(NOT MSVC)
if(NOT APPLE)
set(Boost_LIBRARIES "${Boost_LIBRARIES};")
if(STATIC)
message("NOTICE: Including static ICU libraries")
set(Boost_LIBRARIES "${Boost_LIBRARIES};icui18n.a;icuuc.a;icudata.a;dl")
endif()
endif()
list(APPEND Boost_LIBRARIES ws2_32 mswsock)
elseif(NOT MSVC AND NOT APPLE AND NOT CAKEWALLET AND STATIC)
message("NOTICE: Including static ICU libraries")
list(APPEND Boost_LIBRARIES icui18n.a icuuc.a icudata.a dl)
endif()
if(BUILD_GUI)
cmake_minimum_required(VERSION 2.8.11)
find_package(Qt5Widgets REQUIRED)
endif()
set(COMMIT_ID_IN_VERSION ON CACHE BOOL "Include commit ID in version")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/version")
@ -249,16 +297,18 @@ else()
endif()
endif()
set(BUILD_TESTS FALSE CACHE BOOL "Build Zano tests")
set(DISABLE_MDBX FALSE CACHE BOOL "Exclude mdbx from build(need for a first time)")
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)
endif()
add_subdirectory(contrib)
add_subdirectory(src)
if (BUILD_TESTS)
add_subdirectory(tests)
endif()
include(CPackConfig)

109
CMakePresets.json Normal file
View file

@ -0,0 +1,109 @@
{
"version": 8,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"include": [
"ConanPresets.json"
],
"configurePresets": [
{
"name": "testnet",
"binaryDir": "${sourceDir}/build/release",
"environment": {
"CONAN_HOME": "${sourceDir}/build/sdk"
},
"cacheVariables": {
"TESTNET": "ON",
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_PROJECT_TOP_LEVEL_INCLUDES":".core/build/cmake/ConanProvider.cmake"
}
},
{
"name": "mainnet",
"binaryDir": "${sourceDir}/build/release",
"environment": {
"CONAN_HOME": "${sourceDir}/build/sdk"
},
"cacheVariables": {
"TESTNET": "OFF",
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_PROJECT_TOP_LEVEL_INCLUDES":".core/build/cmake/ConanProvider.cmake"
}
}
],
"buildPresets": [
{
"name": "testnet",
"configurePreset": "testnet"
},
{
"name": "mainnet",
"configurePreset": "mainnet"
}
],
"testPresets": [
{
"name": "mainnet",
"configurePreset": "mainnet",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": true}
}
],
"packagePresets": [
{
"name": "mainnet",
"configurePreset": "mainnet",
"generators": [
"TGZ",
"ZIP"
]
},
{
"name": "testnet",
"configurePreset": "testnet",
"generators": [
"TGZ",
"ZIP"
]
}
],
"workflowPresets": [
{
"name": "testnet",
"steps": [
{
"type": "configure",
"name": "testnet"
},
{
"type": "build",
"name": "testnet"
},
{
"type": "package",
"name": "testnet"
}
]
},
{
"name": "mainnet",
"steps": [
{
"type": "configure",
"name": "mainnet"
},
{
"type": "build",
"name": "mainnet"
},
{
"type": "package",
"name": "mainnet"
}
]
}
]
}

9
ConanPresets.json Normal file
View file

@ -0,0 +1,9 @@
{
"version": 4,
"vendor": {
"conan": {}
},
"include": [
"build/release/generators/CMakePresets.json"
]
}

288
LICENSE.txt Normal file
View file

@ -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.

214
Makefile
View file

@ -1,82 +1,196 @@
# Copyright (c) 2017-2025 Lethean https://lt.hn
# Copyright (c) 2014-2019 Zano Project
# Copyright (c) 2014 The Cryptonote developers
# Distributed under the MIT/X11 software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
# Define CMake generator
system := $(shell uname)
ifneq (, $(findstring MINGW, $(system)))
cmake_gen = -G 'MSYS Makefiles'
# ============================================================
# Build system from host-uk/build submodule
# ============================================================
BUILD_SYS := .core/build
CMAKE_DIR := $(BUILD_SYS)/cmake
# ============================================================
# Project Configuration
# ============================================================
CPU_CORES := 1
TESTNET:= 0
STATIC:= 0
BUILD_TYPE ?=Release
BUILD_VERSION:=6.0.1
BUILD_FOLDER:=build/release
PRESET_BUILD:=conan-release
PRESET_CONFIGURE:=conan-release
# ------------------------------------------------------------
# Detect the number of logical CPU cores works on Linux,
# macOS, BSD, and Windows (both cmd.exe and PowerShell).
# ------------------------------------------------------------
UNAME_S := $(shell uname -s 2>/dev/null || echo Unknown)
ifeq ($(UNAME_S),Linux)
CPU_CORES := $(shell nproc 2>/dev/null || \
grep -c ^processor /proc/cpuinfo 2>/dev/null || echo 1)
endif
cmake = cmake $(cmake_gen)
ifeq ($(UNAME_S),Darwin)
CPU_CORES := $(shell sysctl -n hw.logicalcpu 2>/dev/null || echo 1)
endif
cmake_debug = $(cmake) -D CMAKE_BUILD_TYPE=Debug
cmake_release = $(cmake) -D CMAKE_BUILD_TYPE=Release
ifeq ($(filter %BSD,$(UNAME_S)),%BSD)
CPU_CORES := $(shell sysctl -n hw.ncpu 2>/dev/null || echo 1)
endif
cmake_gui = -D BUILD_GUI=ON
cmake_static = -D STATIC=ON
cmake_tests = -D BUILD_TESTS=ON
ifeq ($(OS),Windows_NT)
# Helper macro
define CMAKE
mkdir -p $1 && cd $1 && $2 ../../
endef
PRESET_CONFIGURE:=conan-default
build = build
dir_debug = $(build)/debug
dir_release = $(build)/release
CPU_CORES := $(NUMBER_OF_PROCESSORS)
all: release
ifeq ($(CPU_CORES),)
CPU_CORES := $(shell powershell -NoProfile -Command ^ "[Environment]::ProcessorCount")
endif
endif
release:
$(eval command += $(cmake_release))
$(call CMAKE,$(dir_release),$(command)) && $(MAKE)
# Safety net
CPU_CORES := $(or $(CPU_CORES),1)
CPU_CORES := $(shell expr $(CPU_CORES) + 0 2>/dev/null || echo 1)
CONAN_CPU_COUNT=$(CPU_CORES)
debug:
$(eval command += $(cmake_debug))
$(call CMAKE,$(dir_debug),$(command)) && $(MAKE)
# ============================================================
# Paths — profiles and cmake modules from .build submodule
# ============================================================
PROFILES :=$(patsubst $(CMAKE_DIR)/profiles/%,%,$(wildcard $(CMAKE_DIR)/profiles/*))
SORTED_PROFILES :=$(sort $(PROFILES))
CONAN_CACHE :=$(CURDIR)/build/sdk
CONAN_URL :=http://forge.snider.dev:4000/api/packages/host-uk/conan
CONAN_USER ?=$(shell echo $$CONAN_USER)
CONAN_PASSWORD ?=$(shell echo $$CONAN_PASSWORD)
CONAN_EXECUTABLE :=$(CURDIR)/build/bin/conan
CC_DOCKER_FILE ?=utils/docker/images/lthn-chain/Dockerfile
SDK_PACKAGES_JSON :=$(wildcard utils/sdk/packages/*.json)
SDK_TARGETS :=$(patsubst utils/sdk/packages/%.json,%,$(SDK_PACKAGES_JSON))
SORTED_SDK_TARGETS :=$(sort $(SDK_TARGETS))
static: static-release
static-release:
$(eval command += $(cmake_release) $(cmake_static))
$(call CMAKE,$(dir_release),$(command)) && $(MAKE)
all: help
#
# GUI
#
testnet:
$(MAKE) configure TESTNET=1 STATIC=$(STATIC)
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) build .
$(MAKE) package
gui: gui-release
gui-release:
$(eval command += $(cmake_release) $(cmake_gui))
$(call CMAKE,$(dir_release),$(command)) && $(MAKE)
mainnet:
$(MAKE) configure TESTNET=0 STATIC=$(STATIC)
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) build .
$(MAKE) package
gui-debug:
$(eval command += $(cmake_debug) $(cmake_gui))
$(call CMAKE,$(dir_debug),$(command)) && $(MAKE)
release: docs build
(cd $(BUILD_FOLDER) && cpack)
@rm -rf $(CURDIR)/build/packages/_CPack_Packages
gui-static: gui-release-static
gui-release-static:
$(eval command += $(cmake_release) $(cmake_gui) $(cmake_static))
$(call CMAKE,$(dir_release),$(command)) && $(MAKE)
build: configure
cmake --build --preset $(PRESET_BUILD) --parallel=$(CPU_CORES)
build-deps: conan-profile-detect
@echo "Build Dependencies: $(BUILD_TYPE) testnet=$(TESTNET)"
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) install . --build=missing -s build_type=$(BUILD_TYPE)
package:
@echo "Packaging: $(BUILD_TYPE) testnet=$(TESTNET)"
(cd $(BUILD_FOLDER) && cpack)
ifneq ($(OS),Windows_NT)
@rm -rf $(CURDIR)/build/packages/_CPack_Packages
endif
configure: build-deps
@echo "Running Configure: $(BUILD_TYPE) testnet=$(TESTNET)"
cmake --preset $(PRESET_CONFIGURE) -DSTATIC=$(STATIC) -DTESTNET=$(TESTNET) -DBUILD_VERSION=$(BUILD_VERSION)
docs: configure
@echo "Building Documentation"
cmake --build build/release --target=docs --config=Release --parallel=$(CPU_CORES)
sdk:
$(MAKE) -C utils/sdk $(filter-out $@,$(MAKECMDGOALS)) PACKAGE_VERSION=$(BUILD_VERSION)
# Rule for each profile — uses .build/cmake/profiles/
$(PROFILES): conan-profile-detect
@echo "Building profile: $@"
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) install . -pr:h=$(CMAKE_DIR)/profiles/$@ --build=missing -s build_type=$(BUILD_TYPE)
cmake -S . -B $(BUILD_FOLDER) -DCMAKE_TOOLCHAIN_FILE=$(BUILD_FOLDER)/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DSTATIC=$(STATIC) -DTESTNET=$(TESTNET) -DBUILD_VERSION=$(BUILD_VERSION)
cmake --build $(BUILD_FOLDER) --config=$(BUILD_TYPE) --parallel=$(CPU_CORES)
(cd $(BUILD_FOLDER) && cpack)
help:
@echo "Lethean VPN Blockchain"
@echo "======================"
@echo "Website: https://lt.hn"
@echo "GitHub: https://github.com/letheanVPN/blockchain/"
@echo "Discord: https://discord.lt.hn"
@echo ""
@echo "Available targets:"
@printf " %-42s %s\n" "make clean" "Clean all build directories"
@printf " %-42s %s\n" "make conan-get" "Download and install conan locally"
@printf " %-42s %s\n" "make release" "Build release"
@printf " %-42s %s\n" "make testnet" "Build testnet"
@printf " %-42s %s\n" "make mainnet" "Build mainnet"
@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"
@printf "\n --- Conan Cross-Compilation Profiles ---\n"
@$(foreach profile,$(SORTED_PROFILES),printf " %-42s %s\n" "make $(profile)" "Build the $(profile) profile";)
@printf "\n --- SDK Generation ---\n"
@printf " %-42s %s\n" "make sdk" "Build all SDK packages"
@$(foreach sdk,$(SORTED_SDK_TARGETS),printf " %-42s %s\n" "make sdk $(sdk)" "Build the $(sdk) SDK package";)
@printf "\n"
@printf " %-42s %s\n" "make help" "Show this help message"
#
# Tests
#
test: test-release
test-release:
$(eval command += $(cmake_release) $(cmake_tests))
$(call CMAKE,$(dir_release),$(command)) && $(MAKE) && $(MAKE) test
@echo "Building profile: test-release"
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) 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:
$(eval command += $(cmake_debug) $(cmake_tests))
$(call CMAKE,$(dir_debug),$(command)) && $(MAKE) && $(MAKE) test
@echo "Building profile: test-debug"
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) 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
# Conan management — cmake modules from .build submodule
conan-get:
cmake -P $(CMAKE_DIR)/ConanGet.cmake
ifneq ($(CONAN_USER),)
(CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) remote add conan_build $(CONAN_URL) && \
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) remote login conan_build $(CONAN_USER) -p $(CONAN_PASSWORD)) || true
endif
conan-upload:
CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) upload "*" -r=conan_build --confirm
conan-profile-detect: conan-get
cmake -P $(CMAKE_DIR)/ConanProfileSetup.cmake
docs-dev: configure
@echo "Building Documentation"
cmake --build build/release --target=serve_docs --config=Release
$(SDK_TARGETS):
@# This is a proxy target. Handled by the 'sdk' rule.
clean:
@cmake -P $(CMAKE_DIR)/CleanBuild.cmake
clean-build: clean
rm -rf build
tags:
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ src contrib tests/gtest
.PHONY: all release debug static static-release gui gui-release gui-static gui-release-static gui-debug test test-release test-debug clean tags
.PHONY: all release upload-conan-cache docs docs-dev configure static static-release test test-release test-debug clean tags conan-profile-detect conan-get $(PROFILES) sdk $(SDK_TARGETS)

192
README.md
View file

@ -1,136 +1,120 @@
[![Coverity Scan](https://scan.coverity.com/projects/18767/badge.svg)](https://scan.coverity.com/projects/zanoproject)
[![Discord](https://img.shields.io/discord/538361472691077130?label=discord&logo=discord)](https://discord.gg/wE3rmYY)
# Lethean Network—Ethics, Encoded.
## Cloning
> We are building upto a mainnet launch in 2026, documentation written as if mainnet is live.
Be sure to clone the repository properly:\
`$ git clone --recursive https://github.com/hyle-team/zano.git`
A buildkit for deploying confidential information networks and commerce systems with immutable auditability.
# Building
--------
Free for commercial, private, and patent use, self-host or join the community-run network that guarantees participant sovereignty by design.
[![Discord](https://img.shields.io/discord/379876792003067906?label=discord&logo=discord)](https://discord.gg/pfgT2Kz)
Web2 Website: https://lt.hn/
Web3 Network Gateway [HNS](https://handshake.org): [https://lthn](https://www.namebase.io/domains/lthn)
<br/>_(our chain aliases will come with a working Web2(`*.lt.hn`)+Web3(`*.lthn`) domain name)_
### Dependencies
| component / version | minimum <br>(not recommended but may work) | recommended | most recent of what we have ever tested |
|--|--|--|--|
| gcc (Linux) | 5.4.0 | 7.4.0 | 8.3.0 |
| llvm/clang (Linux) | UNKNOWN | 7.0.1 | 8.0.0 |
| [MSVC](https://visualstudio.microsoft.com/downloads/) (Windows) | 2015 (14.0 update 1) | 2017 (15.9.0) | 2019 |
| [XCode](https://developer.apple.com/downloads/) (macOS) | 9.2 | 12.3 | 12.3 |
| [CMake](https://cmake.org/download/) | 2.8.6 | 3.15.5 | 3.20 |
| [Boost](https://www.boost.org/users/download/) | 1.56 | 1.68 | 1.76 |
| [Qt](https://download.qt.io/archive/qt/) (*only for GUI*) | 5.8.0 | 5.11.2 | 5.15.2 |
| component / version | minimum <br>(not recommended but may work) | recommended | most recent of what we have ever tested |
|-----------------------------------------------------------------------------|--------------------------------------------|----------------|-----------------------------------------|
| gcc (Linux) | 8.4.0 | 9.4.0 | 12.3.0 |
| llvm/clang (Linux) | UNKNOWN | 7.0.1 | 8.0.0 |
| [MSVC](https://visualstudio.microsoft.com/downloads/) (Windows) | 2017 (15.9.30) | 2022 (17.11.5) | 2022 (17.12.3) |
| [XCode](https://developer.apple.com/downloads/) (macOS) | 12.3 | 14.3 | 15.2 |
| [CMake](https://cmake.org/download/) | 3.26.3 | 3.26.3 | 3.31.6 |
Note:\
[*server version*] denotes steps required for building command-line tools (daemon, simplewallet, etc.).\
[*GUI version*] denotes steps required for building Zano executable with GUI.
## Cloning
<br />
Be sure to clone the repository properly, with `--recursive` flag, or you'll get angry:<br/>
`git clone --recursive https://github.com/letheanVPN/blockchain.git`
### Linux
# Building
Recommended OS version: Ubuntu 18.04 LTS.
The project uses a `Makefile` that provides a simple and powerful interface for building.
It automatically handles dependency installation with Conan and compilation with CMake.
1. Prerequisites
You need CMake and Make installed on your system, other than that you don't need to worry about Python, Conan, Boost, OpenSSL, or any other dependencies.
[*server version*]
sudo apt-get install -y build-essential g++ python-dev autotools-dev libicu-dev libbz2-dev cmake git screen
[*GUI version*]
The final packages are created as they are due to a historical distribution method used in china: USB Stick, CD, DVD, etc.
sudo apt-get install -y build-essential g++ python-dev autotools-dev libicu-dev libbz2-dev cmake git screen mesa-common-dev libglu1-mesa-dev
We use CPack, so our packages are self-contained, have searchable HTML documentation, and are ready to be installed on any system.
2. Download and build Boost
To skip the packing step, use `make build` as defined in the section below for Advanced Build Customization
wget https://boostorg.jfrog.io/artifactory/main/release/1.68.0/source/boost_1_68_0.tar.bz2
tar -xjf boost_1_68_0.tar.bz2
cd boost_1_68_0
./bootstrap.sh --with-libraries=system,filesystem,thread,date_time,chrono,regex,serialization,atomic,program_options,locale,timer
./b2
## Simple Workflow Builds (Recommended)
3. Install Qt\
(*GUI version only, skip this step if you're building server version*)
For most use cases, these two commands are all you need. They handle the entire build process from start to finish.
[*GUI version*]
* **Build for Mainnet:**
```shell
make mainnet
```
wget https://download.qt.io/new_archive/qt/5.11/5.11.2/qt-opensource-linux-x64-5.11.2.run
chmod +x qt-opensource-linux-x64-5.11.2.run
./qt-opensource-linux-x64-5.11.2.run
Then follow the instructions in Wizard. Don't forget to tick the WebEngine module checkbox!
* **Build for Testnet:**
```shell
make testnet
```
4. Set environment variables properly\
For instance, by adding the following lines to `~/.bashrc`
## Creating Release Packages
[*server version*]
To create distributable packages (e.g., `.zip`, `.msi`, `.pkg`, `.deb`), run the `release` target. This will build the project, build the documentation, and then package everything.
export BOOST_ROOT=/home/user/boost_1_68_0
```shell
make release TESTNET=1
```
The final packages will be located in the `build/packages/` directory
## Advanced Build Customization (Makefile Variables)
[*GUI version*]
For advanced use cases, you can override variables in the `Makefile` to customize the build process.
export BOOST_ROOT=/home/user/boost_1_68_0
export QT_PREFIX_PATH=/home/user/Qt5.11.2/5.11.2/gcc_64
* **Build a `testnet` version:**
```shell
make build TESTNET=1
```
* **Build a statically-linked version:**
```shell
make build STATIC=1
```
* **Build a Debug build with 8 compile threads:**
```shell
make build BUILD_TYPE=Debug CPU_CORES=8
```
* **Use custom CMakePresets:**
```shell
make build PRESET_CONFIGURE=my-config-preset PRESET_BUILD=my-build-preset
```
| Variable | Description | Default Value |
|--------------------|------------------------------------------------------------------------|-------------------------|
| `BUILD_TYPE` | Sets the build configuration (e.g., `Release`, `Debug`). | `Release` |
| `TESTNET` | Set to `1` to build for the test network. | `0` |
| `STATIC` | Set to `1` to link libraries statically. | `0` |
| `CPU_CORES` | Number of CPU cores to use for parallel compilation. | Auto-detected |
| `BUILD_VERSION` | The version string to embed in the binaries. | `6.0.1` |
| `BUILD_FOLDER` | The output directory for the build. | `build/release` |
| `PRESET_CONFIGURE` | The CMake preset to use for the `configure` step. | `conan-release` |
| `PRESET_BUILD` | The CMake preset to use for the `build` step. | `conan-release` |
| `CONAN_CACHE` | The path for the local Conan cache, where the dependencies are stored. | `./build/sdk` |
| `CONAN_EXECUTABLE` | The path to the usable Conan executable. | `./build/bin/conan` |
| `CONAN_URL` | The URL for the Conan remote repository. | `artifacts.host.uk.com` |
| `CONAN_USER` | The username for the Conan remote. | `public` |
| `CONAN_PASSWORD` | The password for the Conan remote. | |
## Cleaning the Build Directory
5. Building binaries
1. Building daemon and simplewallet:
ALWAYS USE `make clean` to clean the build directory, manually deleting the `build/release`, `build/SOME_FOLDER` will cause you issues.
cd zano/ && make -j1
or
cd zano && mkdir build && cd build
cmake ..
make -j1 daemon simplewallet
Our `make clean` triggers a cmake script that completely resets the build directory &amp; dynamically added CMakePresets to its cached warm-up state,
the selective clean script can be edited here: `cmake/CleanBuild.cmake` or directly run from the repo root `cmake -P cmake/CleanBuild.cmake`
**NOTICE**: If you are building on a machine with a relatively high amount of RAM or with the proper setting of virtual memory, then you can use `-j2` or `-j` option to speed up the building process. Use with caution.
**NOTICE 2**: If you'd like to build binaries for the testnet, use `cmake -D TESTNET=TRUE ..` instead of `cmake ..` .
1. Building GUI:
You can NUKE the build directory with `make clean-build` which is `rm -rf build`.
cd zano
utils/build_sript_linux.sh
If you do manually delete build folders and get CMake errors (if you have compiled anything previously, you will),
the ConanPresets.json file has entries in the `include` property, delete them all and try again.
7. Look for the binaries in `build` folder
<br />
### Windows
Recommended OS version: Windows 7 x64.
1. Install required prerequisites (Boost, Qt, CMake).
2. Edit paths in `utils/configure_local_paths.cmd`.
3. Run `utils/configure_win64_msvs2015_gui.cmd` or `utils/configure_win64_msvs2017_gui.cmd` according to your MSVC version.
4. Go to the build folder and open generated Zano.sln in MSVC.
5. Build.
In order to correctly deploy Qt GUI application, you also need to do the following:
6. Copy Zano.exe to a folder (e.g. `depoy`).
7. Run `PATH_TO_QT\bin\windeployqt.exe deploy\Zano.exe`.
8. Copy folder `\src\gui\qt-daemon\html` to `deploy\html`.
9. Now you can run `Zano.exe`
<br />
### macOS
Recommended OS version: macOS Sierra 10.15.4 x64.
1. Install required prerequisites.
2. Set environment variables as stated in `utils/macosx_build_config.command`.
3. `mkdir build` <br> `cd build` <br> `cmake ..` <br> `make`
To build GUI application:
1. Create self-signing certificate via Keychain Access:\
a. Run Keychain Access.\
b. Choose Keychain Access > Certificate Assistant > Create a Certificate.\
c. Use “Zano” (without quotes) as certificate name.\
d. Choose “Code Signing” in “Certificate Type” field.\
e. Press “Create”, then “Done”.\
f. Make sure the certificate was added to keychain "System". If not—move it to "System".\
g. Double click the certificate you've just added, enter the trust section and under "When using this certificate" select "Always trust".\
h. Unfold the certificate in Keychain Access window and double click the underlying private key "Zano". Select "Access Control" tab, then select "Allow all applications to access this item". Click "Save Changes".
2. Revise building script, comment out unwanted steps and run it: `utils/build_script_mac_osx.sh`
3. The application should be here: `/buid_mac_osx_64/release/src`
This happens because CMakePresets.json includes ConanPresets.json, that has the list of toolchains to use that gets populated during the CMake config step,
when you manually delete a folder, the toolchain is now a broken path, and CMake throws a fatal error.

View file

@ -3,4 +3,4 @@
static_assert(1, "FAIL");
int main(int argc, char *argv[]) {
return 0;
}
}

70
conanfile.py Normal file
View file

@ -0,0 +1,70 @@
import os
from conan import ConanFile
from conan.tools.cmake import CMakeDeps, CMakeToolchain, CMake
class BlockchainConan(ConanFile):
name = "blockchain"
version = "6.0.1"
settings = "os", "compiler", "build_type", "arch"
options = {
"static": [True, False],
"testnet": [True, False],
"ci": [True, False]
}
default_options = {
"static": False,
"testnet": False,
"ci": False,
"boost/*:without_test": True
}
tool_requires = [
"cmake/3.31.9"
]
requires = [
"zlib/1.3.1",
"boost/1.85.0",
"openssl/3.2.0",
"miniupnpc/2.2.5",
"jwt-cpp/0.7.1",
"oatpp/1.3.0.latest",
"oatpp-swagger/1.3.0.latest"
]
def generate(self):
tc = CMakeToolchain(self)
os_val = str(self.settings.os).lower()
# arch_val = str(self.settings.arch).lower()
# compiler_val = str(self.settings.compiler).lower()
# tc.presets_prefix = f"{os_val}"
tc.user_presets_path = "ConanPresets.json"
tc.variables["STATIC"] = self.options.static
tc.variables["TESTNET"] = self.options.testnet
# tc.preprocessor_definitions["TESTNET"] = None
# tc.variables["BUILD_VERSION"] = self.options.build_version
tc.generate()
deps = CMakeDeps(self)
deps.generate()
def layout(self):
if self.settings.compiler == "msvc":
# For multi-config, all configurations go into the same "build" folder.
self.folders.build = "build/release"
self.folders.generators = "build/release/generators"
else:
# For single-config, we create a subfolder for each build type.
build_type_str = str(self.settings.build_type).lower()
self.folders.build = os.path.join("build", build_type_str)
self.folders.generators = os.path.join(self.folders.build, "generators")
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

View file

@ -1,35 +1,33 @@
set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library")
set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library")
set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables")
add_subdirectory(zlib)
add_subdirectory(db)
add_subdirectory(ethereum)
add_subdirectory(tor-connect)
add_subdirectory(randomx)
if(USE_BITCOIN_SECP256K1_FOR_ECDSA)
option(SECP256K1_BUILD_BENCHMARK "Build benchmarks." OFF)
option(SECP256K1_BUILD_TESTS "Build tests." OFF)
option(SECP256K1_BUILD_EXHAUSTIVE_TESTS "Build exhaustive tests." OFF)
option(SECP256K1_BUILD_CTIME_TESTS "Build constant-time tests." OFF)
option(SECP256K1_BUILD_EXAMPLES "Build examples." OFF)
set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)
if(STATIC)
set(SECP256K1_DISABLE_SHARED ON CACHE BOOL "Disable shared library for secp256k1")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build static libraries by default" FORCE)
endif()
add_subdirectory(bitcoin-secp256k1)
set_property(TARGET secp256k1 PROPERTY FOLDER "contrib")
set_property(TARGET secp256k1_precomputed PROPERTY FOLDER "contrib")
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
message("excluded upnp support for IOS build")
return()
endif()
add_subdirectory(miniupnp/miniupnpc)
set_property(TARGET libminiupnpc-static PROPERTY FOLDER "contrib")
set_property(TARGET zlibstatic PROPERTY FOLDER "contrib")
set_property(TARGET mdbx PROPERTY FOLDER "contrib")
set_property(TARGET lmdb PROPERTY FOLDER "contrib")
set_property(TARGET tor-connect PROPERTY FOLDER "contrib")
set_property(TARGET upnpc-static mdbx_chk mdbx_copy mdbx_dump mdbx_load mdbx_stat PROPERTY FOLDER "unused")
if(MSVC)
set_property(TARGET ntdll_extra_target PROPERTY FOLDER "unused")
endif()
if(MSVC)
set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " /wd4244 /wd4267")
set_property(TARGET zlibstatic APPEND_STRING PROPERTY COMPILE_FLAGS " /wd4267 /wd4267")
else()
set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value -Wno-implicit-fallthrough -Wno-discarded-qualifiers ")
set_property(TARGET zlibstatic APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value -Wno-implicit-fallthrough -Wno-discarded-qualifiers ")
endif()
set_property(TARGET mdbx_chk mdbx_copy mdbx_dump mdbx_load mdbx_stat PROPERTY FOLDER "unused")

@ -0,0 +1 @@
Subproject commit a5269373fa13ff845f654d81b90629dd78495641

View file

@ -6,15 +6,18 @@ if(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
endif()
message("DB ENGINE: lmdb")
add_subdirectory(liblmdb)
if(MSVC)
target_compile_options(lmdb PRIVATE /wd4996 /wd4503 /wd4345 /wd4267 /wd4244 /wd4146 /wd4333 /wd4172)
else()
# Warnings as used by LMDB itself (LMDB_0.9.23)
target_compile_options(lmdb PRIVATE -Wall -Wno-unused-parameter -Wbad-function-cast -Wuninitialized)
endif()
if(NOT DISABLE_MDBX)
message("DB ENGINE: mdbx")
add_subdirectory(libmdbx)
endif()
message("DB ENGINE: lmdb")
add_subdirectory(liblmdb)
if(MSVC)
target_compile_options(lmdb PRIVATE /wd4996 /wd4503 /wd4345 /wd4267 /wd4244 /wd4146 /wd4333 /wd4172)
else()
# Warnings as used by LMDB itself (LMDB_0.9.23)
target_compile_options(lmdb PRIVATE -Wall -Wno-unused-parameter -Wbad-function-cast -Wuninitialized)
endif()
if(NOT DISABLE_MDBX)
message("DB ENGINE: mdbx")
add_subdirectory(libmdbx)
# remove mdbx tools from the default MSVC build
set_target_properties(mdbx_chk mdbx_copy mdbx_dump mdbx_load mdbx_stat PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
endif()

@ -1 +0,0 @@
Subproject commit b7ed67543fefb0878dba1c70dea2a81201041314

View file

@ -0,0 +1,20 @@
version: 2
jobs:
build:
docker:
- image: circleci/buildpack-deps:artful
environment:
- TESTDB: /tmp/test.db
- TESTLOG: /tmp/test.log
steps:
- checkout
- run: make all
- run: ulimit -c unlimited && make check
- run:
command: |
mkdir -p /tmp/artifacts
mv -t /tmp/artifacts $TESTLOG $TESTDB core.*
when: on_fail
- store_artifacts:
path: /tmp/artifacts
destination: test-artifacts

View file

@ -0,0 +1,3 @@
BasedOnStyle: LLVM
Standard: Cpp11
ReflowComments: true

35
contrib/db/libmdbx/.gitignore vendored Normal file
View file

@ -0,0 +1,35 @@
*.[ao]
*.bak
*.exe
*.gcda
*.gcno
*.gcov
*.lo
*.orig
*.rej
*.so
*[~#]
.idea
.le.ini
.vs/
cmake-build-*
@*
core
mdbx_example
libmdbx.creator.user
mdbx_chk
mdbx_copy
mdbx_dump
mdbx_load
mdbx_stat
mdbx_test
test.log
test/tmp.db
test/tmp.db-lck
tmp.db
tmp.db-lck
valgrind.*
src/elements/version.c
src/elements/config.h
dist/
*.tar*

View file

@ -0,0 +1,61 @@
language: c cpp
matrix:
include:
- os: linux
dist: precise
env: CC=cc CXX=c++
- os: linux
dist: trusty
compiler: clang
env: CC=clang CXX=clang++
- os: linux
dist: xenial
compiler: gcc
env: CC=gcc CXX=g++
- os: linux
dist: bionic
compiler: clang
env: CC=clang CXX=clang++
- os: osx
osx_image: xcode11
env: CC=cc CXX=c++
- os: osx
osx_image: xcode9.4
env: CC=cc CXX=c++
script: >
if [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then
git fetch --unshallow --tags --prune &&
git submodule foreach --recursive git fetch --unshallow --tags --prune &&
(if which clang-format-6.0 > /dev/null && make reformat && [[ -n $(git diff) ]];
then
echo "You must run 'make reformat' before submitting a pull request";
echo "";
git diff;
exit -1;
fi) &&
make --keep-going all && MALLOC_CHECK_=7 MALLOC_PERTURB_=42 make --keep-going check
else
[ ! -s cov-int/scm_log.txt ] || cat cov-int/scm_log.txt;
fi && sleep 3
env:
global:
- secure: "M+W+heGGyRQJoBq2W0uqWVrpL4KBXmL0MFL7FSs7f9vmAaDyEgziUXeZRj3GOKzW4kTef3LpIeiu9SmvqSMoQivGGiomZShqPVl045o/OUgRCAT7Al1RLzEZ0efSHpIPf0PZ6byEf6GR2ML76OfuL6JxTVdnz8iVyO2sgLE1HbX1VeB+wgd/jfMeOBhCCXskfK6MLyZihfMYsiYZYSaV98ZDhDLSlzuuRIgzb0bMi8aL6AErs0WLW0NelRBeHkKPYfAUc85pdQHscgrJw6Rh/zT6+8BQ/q5f4IgWhiu4xoRg3Ngl7SNoedRQh93ADM3UG2iGl6HDFpVORaXcFWKAtuYY+kHQ0HB84BRYpQmeBuXNpltsfxQ3d1Q3u0RlE45zRvmr2+X1mFnkcNUAWISLPbsOUlriDQM8irGwRpho77/uYnRC00bJsHW//s6+uPf9zrAw1nI4f0y3PAWukGF/xs6HAI3FZPsuSSnx18Tj3Opgbc9Spop+V3hkhdiJoPGpNKTkFX4ZRXfkPgoRVJmtp4PpbpH0Ps/mCriKjMEfGGi0HcVCi0pEGLXiecdqJ5KPg5+22zNycEujQBJcNTKd9shN+R3glrbmhAxTEzGdGwxXXJ2ybwJ2PWJLMYZ7g98nLyX+uQPaA3BlsbYJHNeS5283/9pJsd9DzfHKsN2nFSc="
before_install:
- echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
- ${CC} --version
- ${CXX} --version
addons:
coverity_scan:
project:
name: "ReOpen/libmdbx"
version: 0.1
description: "Build submitted via Travis CI"
notification_email: leo@yuriev.ru
build_command_prepend: "git fetch --unshallow --tags --prune && make dist"
build_command: "make MDBX_OPTIONS=-DMDBX_DEBUG=2 -C dist all"
branch_pattern: coverity_scan

View file

@ -0,0 +1,32 @@
Contributors
============
Alexey Naumov <alexey.naumov@gmail.com>
Chris Mikkelson <cmikk@qwest.net>
Claude Brisson <claude.brisson@gmail.com>
David Barbour <dmbarbour@gmail.com>
David Wilson <dw@botanicus.net>
dreamsxin <dreamsxin@126.com>
Hallvard Furuseth <hallvard@openldap.org>, <h.b.furuseth@usit.uio.no>
Heiko Becker <heirecka@exherbo.org>
Howard Chu <hyc@openldap.org>, <hyc@symas.com>
Ignacio Casal Quinteiro <ignacio.casal@nice-software.com>
James Rouzier <rouzier@gmail.com>
Jean-Christophe DUBOIS <jcd@tribudubois.net>
John Hewson <john@jahewson.com>
Klaus Malorny <klaus.malorny@knipp.de>
Kurt Zeilenga <kurt.zeilenga@isode.com>
Leonid Yuriev <leo@yuriev.ru>, <lyuryev@ptsecurity.com>
Lorenz Bauer <lmb@cloudflare.com>
Luke Yeager <lyeager@nvidia.com>
Martin Hedenfalk <martin@bzero.se>
Ondrej Kuznik <ondrej.kuznik@acision.com>
Orivej Desh <orivej@gmx.fr>
Oskari Timperi <oskari.timperi@iki.fi>
Pavel Medvedev <pmedvedev@gmail.com>
Philipp Storz <philipp.storz@bareos.com>
Quanah Gibson-Mount <quanah@openldap.org>
Salvador Ortiz <sog@msg.com.mx>
Sebastien Launay <sebastien@slaunay.fr>
Vladimir Romanov <vromanov@gmail.com>
Zano Foundation <crypto.sowle@gmail.com>

View file

@ -0,0 +1,192 @@
##
## This is the minimal template for CMakeList.txt which could be used
## to build libmdbx from the "amalgamated form" of libmdbx's source code.
##
## The amalgamated form is intended to embedding libmdbx in other projects
## in cases when using as git-submodule is not acceptable or inconveniently.
##
## The amalgamated form could be generated from full git repository
## on Linux just by `make dist`.
##
##
## Copyright 2019 Leonid Yuriev <leo@yuriev.ru>
## and other libmdbx authors: please see AUTHORS file.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
##
##
## libmdbx = { Revised and extended descendant of Symas LMDB. }
## Please see README.md at https://github.com/leo-yuriev/libmdbx
##
## Libmdbx is superior to LMDB in terms of features and reliability,
## not inferior in performance. libmdbx works on Linux, FreeBSD, MacOS X
## and other systems compliant with POSIX.1-2008, but also support Windows
## as a complementary platform.
##
## The next version is under active non-public development and will be
## released as MithrilDB and libmithrildb for libraries & packages.
## Admittedly mythical Mithril is resembling silver but being stronger and
## lighter than steel. Therefore MithrilDB is rightly relevant name.
##
## MithrilDB will be radically different from libmdbx by the new database
## format and API based on C++17, as well as the Apache 2.0 License.
## The goal of this revolution is to provide a clearer and robust API,
## add more features and new valuable properties of database.
##
## The Future will (be) Positive. Всё будет хорошо.
##
cmake_minimum_required(VERSION 3.8.2)
cmake_policy(PUSH)
cmake_policy(VERSION 3.8.2)
if(NOT CMAKE_VERSION VERSION_LESS 3.9)
cmake_policy(SET CMP0069 NEW)
endif()
if(NOT CMAKE_VERSION VERSION_LESS 3.12)
cmake_policy(SET CMP0075 NEW)
endif()
if(NOT CMAKE_VERSION VERSION_LESS 3.13)
cmake_policy(SET CMP0077 NEW)
endif()
if(DEFINED PROJECT_NAME)
set(SUBPROJECT ON)
set(NOT_SUBPROJECT OFF)
else()
set(SUBPROJECT OFF)
set(NOT_SUBPROJECT ON)
project(libmdbx C CXX)
endif()
find_package(Threads REQUIRED)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
FORCE)
endif()
list(FIND CMAKE_C_COMPILE_FEATURES c_std_11 HAS_C11)
if(NOT HAS_C11 LESS 0)
set(MDBX_C_STANDARD 11)
else()
set(MDBX_C_STANDARD 99)
endif()
message(STATUS "Use C${MDBX_C_STANDARD} for libmdbx")
# not supported by this (minimal) script
add_definitions(-DMDBX_AVOID_CRT=0)
# provide build timestamp
string(TIMESTAMP MDBX_BUILD_TIMESTAMP UTC)
add_definitions(-DMDBX_BUILD_TIMESTAMP="${MDBX_BUILD_TIMESTAMP}")
# provide compiler info
execute_process(COMMAND sh -c "${CMAKE_C_COMPILER} --version | head -1"
OUTPUT_VARIABLE MDBX_BUILD_COMPILER
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
RESULT_VARIABLE rc)
if(rc OR NOT MDBX_BUILD_COMPILER)
string(STRIP "${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION}" MDBX_BUILD_COMPILER)
endif()
add_definitions(-DMDBX_BUILD_COMPILER="${MDBX_BUILD_COMPILER}")
# provide cpu/arch-system pair
if(CMAKE_C_COMPILER_TARGET)
set(MDBX_BUILD_TARGET "${CMAKE_C_COMPILER_TARGET}")
elseif(CMAKE_C_PLATFORM_ID AND NOT CMAKE_C_PLATFORM_ID STREQUAL CMAKE_SYSTEM_NAME)
string(STRIP "${CMAKE_C_PLATFORM_ID}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
elseif(CMAKE_LIBRARY_ARCHITECTURE)
string(STRIP "${CMAKE_LIBRARY_ARCHITECTURE}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
elseif(CMAKE_GENERATOR_PLATFORM AND NOT CMAKE_C_PLATFORM_ID STREQUAL CMAKE_SYSTEM_NAME)
string(STRIP "${CMAKE_GENERATOR_PLATFORM}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
elseif(CMAKE_SYSTEM_ARCH)
string(STRIP "${CMAKE_SYSTEM_ARCH}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
else()
string(STRIP "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
endif()
add_definitions(-DMDBX_BUILD_TARGET="${MDBX_BUILD_TARGET}")
# provide build target-config
if(CMAKE_CONFIGURATION_TYPES)
add_definitions(-DMDBX_BUILD_CONFIG="$<CONFIG>")
else()
add_definitions(-DMDBX_BUILD_CONFIG="${CMAKE_BUILD_TYPE}")
endif()
# provide build cflags
set(MDBX_BUILD_FLAGS "")
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS})
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_DEFINES})
if(CMAKE_CONFIGURATION_TYPES)
add_definitions(-DMDBX_BUILD_FLAGS_CONFIG="$<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_DEFINES_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_DEFINES_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO} ${CMAKE_C_DEFINES_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL} ${CMAKE_C_DEFINES_MINSIZEREL}>")
else()
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPERCASE)
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_DEFINES_${CMAKE_BUILD_TYPE_UPPERCASE}})
endif()
list(REMOVE_DUPLICATES MDBX_BUILD_FLAGS)
string(REPLACE ";" " " MDBX_BUILD_FLAGS "${MDBX_BUILD_FLAGS}")
add_definitions(-DMDBX_BUILD_FLAGS="${MDBX_BUILD_FLAGS}")
# shared library
if(NOT DEFINED MDBX_BUILD_SHARED_LIBRARY)
if(DEFINED BUILD_SHARED_LIBS)
option(MDBX_BUILD_SHARED_LIBRARY "Build libmdbx as shared library (DLL)" ${BUILD_SHARED_LIBS})
else()
option(MDBX_BUILD_SHARED_LIBRARY "Build libmdbx as shared library (DLL)" ON)
endif()
endif()
if(MDBX_BUILD_SHARED_LIBRARY)
add_library(mdbx SHARED mdbx.c mdbx.h)
set_target_properties(mdbx PROPERTIES
C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON
PUBLIC_HEADER mdbx.h)
target_compile_definitions(mdbx PRIVATE LIBMDBX_EXPORTS INTERFACE LIBMDBX_IMPORTS)
if(DEFINED INTERPROCEDURAL_OPTIMIZATION)
set_target_properties(mdbx PROPERTIES
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>)
endif()
target_link_libraries(mdbx PRIVATE ${CMAKE_THREAD_LIBS_INIT})
if(WIN32)
target_link_libraries(mdbx PRIVATE ntdll.lib)
endif()
endif()
# static library used for tools, to avoid rpath/dll-path troubles
add_library(mdbx-static STATIC EXCLUDE_FROM_ALL mdbx.c mdbx.h)
set_target_properties(mdbx-static PROPERTIES
C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON
PUBLIC_HEADER mdbx.h)
target_link_libraries(mdbx-static INTERFACE ${CMAKE_THREAD_LIBS_INIT})
if(DEFINED INTERPROCEDURAL_OPTIMIZATION)
set_target_properties(mdbx-static PROPERTIES
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>)
endif()
if(WIN32)
target_link_libraries(mdbx-static INTERFACE ntdll.lib)
endif()
# mdbx-tools
foreach(TOOL mdbx_chk mdbx_copy mdbx_stat mdbx_dump mdbx_load)
add_executable(${TOOL} ${TOOL}.c)
set_target_properties(${TOOL} PROPERTIES
C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
if(DEFINED INTERPROCEDURAL_OPTIMIZATION)
set_target_properties(${TOOL} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>)
endif()
target_link_libraries(${TOOL} mdbx-static)
endforeach()
cmake_policy(POP)

View file

@ -0,0 +1,342 @@
##
## Copyright 2019 Leonid Yuriev <leo@yuriev.ru>
## and other libmdbx authors: please see AUTHORS file.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
##
##
## libmdbx = { Revised and extended descendant of Symas LMDB. }
## Please see README.md at https://github.com/leo-yuriev/libmdbx
##
## Libmdbx is superior to LMDB in terms of features and reliability,
## not inferior in performance. libmdbx works on Linux, FreeBSD, MacOS X
## and other systems compliant with POSIX.1-2008, but also support Windows
## as a complementary platform.
##
## The next version is under active non-public development and will be
## released as MithrilDB and libmithrildb for libraries & packages.
## Admittedly mythical Mithril is resembling silver but being stronger and
## lighter than steel. Therefore MithrilDB is rightly relevant name.
##
## MithrilDB will be radically different from libmdbx by the new database
## format and API based on C++17, as well as the Apache 2.0 License.
## The goal of this revolution is to provide a clearer and robust API,
## add more features and new valuable properties of database.
##
## The Future will (be) Positive. Всё будет хорошо.
##
cmake_minimum_required(VERSION 3.8.2)
cmake_policy(PUSH)
cmake_policy(VERSION 3.8.2)
if(NOT CMAKE_VERSION VERSION_LESS 3.13)
cmake_policy(SET CMP0077 NEW)
endif()
if(NOT CMAKE_VERSION VERSION_LESS 3.12)
cmake_policy(SET CMP0075 NEW)
endif()
if(NOT CMAKE_VERSION VERSION_LESS 3.9)
cmake_policy(SET CMP0069 NEW)
include(CheckIPOSupported)
check_ipo_supported(RESULT CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE)
else()
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE FALSE)
endif()
if(DEFINED PROJECT_NAME)
set(SUBPROJECT ON)
set(NOT_SUBPROJECT OFF)
if(NOT DEFINED BUILD_TESTING)
set(BUILD_TESTING OFF)
endif()
else()
set(SUBPROJECT OFF)
set(NOT_SUBPROJECT ON)
project(libmdbx C CXX)
if(NOT DEFINED BUILD_TESTING)
set(BUILD_TESTING ON)
endif()
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
FORCE)
endif()
macro(add_mdbx_option NAME DESCRIPTION DEFAULT)
list(APPEND MDBX_BUILD_OPTIONS ${NAME})
if(NOT ${DEFAULT} STREQUAL "AUTO")
option(${NAME} "${DESCRIPTION}" ${DEFAULT})
endif()
endmacro()
# only for compatibility testing
# set(CMAKE_CXX_STANDARD 14)
if(NOT "$ENV{TEAMCITY_PROCESS_FLOW_ID}" STREQUAL "")
set(CI TEAMCITY)
message(STATUS "TeamCity CI")
elseif(NOT "$ENV{TRAVIS}" STREQUAL "")
set(CI TRAVIS)
message(STATUS "Travis CI")
elseif(NOT "$ENV{CIRCLECI}" STREQUAL "")
set(CI CIRCLE)
message(STATUS "Circle CI")
elseif(NOT "$ENV{APPVEYOR}" STREQUAL "")
set(CI APPVEYOR)
message(STATUS "AppVeyor CI")
elseif(NOT "$ENV{CI}" STREQUAL "")
set(CI "$ENV{CI}")
message(STATUS "Other CI (${CI})")
else()
message(STATUS "Assume No any CI environment")
unset(CI)
endif()
# output all mdbx-related targets in single directory
if(NOT DEFINED MDBX_OUTPUT_DIR)
set(MDBX_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
set(CMAKE_PDB_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${MDBX_OUTPUT_DIR})
include(CheckLibraryExists)
include(CheckIncludeFiles)
include(CheckCCompilerFlag)
include(CheckSymbolExists)
include(CheckCSourceRuns)
include(CheckCXXSourceRuns)
include(CheckCSourceCompiles)
include(CheckCXXSourceCompiles)
include(TestBigEndian)
include(CheckFunctionExists)
include(FindPackageMessage)
include(CheckStructHasMember)
include(CMakeDependentOption)
include(GNUInstallDirs)
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND MSVC_VERSION LESS 1900)
message(SEND_ERROR "MSVC compiler ${MSVC_VERSION} is too old for building MDBX."
" At least 'Microsoft Visual Studio 2015' is required.")
endif()
# Set default build type to Release. This is to ease a User's life.
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
FORCE)
endif()
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPERCASE)
include(cmake/utils.cmake)
include(cmake/compiler.cmake)
include(cmake/profile.cmake)
find_program(ECHO echo)
find_program(CAT cat)
find_program(GIT git)
find_program(LD ld)
# CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
# CHECK_INCLUDE_FILES(sys/uio.h HAVE_SYS_UIO_H)
# CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
CHECK_FUNCTION_EXISTS(pow NOT_NEED_LIBM)
if(NOT_NEED_LIBM)
set(LIB_MATH "")
else()
set(CMAKE_REQUIRED_LIBRARIES m)
CHECK_FUNCTION_EXISTS(pow HAVE_LIBM)
if(HAVE_LIBM)
set(LIB_MATH m)
else()
message(FATAL_ERROR "No libm found for math support")
endif()
endif()
find_package(Threads REQUIRED)
if(SUBPROJECT)
if(NOT DEFINED BUILD_SHARED_LIBS)
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" OFF)
endif()
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independed (PIC)" ON)
endif()
else()
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" ON)
option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independed (PIC)" ON)
if (CC_HAS_ARCH_NATIVE)
option(BUILD_FOR_NATIVE_CPU "Generate code for the compiling machine CPU" OFF)
endif()
if(CMAKE_CONFIGURATION_TYPES OR NOT CMAKE_BUILD_TYPE_UPPERCASE STREQUAL "DEBUG")
set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT ON)
else()
set(INTERPROCEDURAL_OPTIMIZATION_DEFAULT OFF)
endif()
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE
OR GCC_LTO_AVAILABLE OR MSVC_LTO_AVAILABLE OR CLANG_LTO_AVAILABLE)
option(INTERPROCEDURAL_OPTIMIZATION "Enable interprocedural/LTO optimization" ${INTERPROCEDURAL_OPTIMIZATION_DEFAULT})
endif()
if(INTERPROCEDURAL_OPTIMIZATION)
if(GCC_LTO_AVAILABLE)
set(LTO_ENABLED TRUE)
set(CMAKE_AR ${CMAKE_GCC_AR} CACHE PATH "Path to ar program with LTO-plugin" FORCE)
set(CMAKE_NM ${CMAKE_GCC_NM} CACHE PATH "Path to nm program with LTO-plugin" FORCE)
set(CMAKE_RANLIB ${CMAKE_GCC_RANLIB} CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
message(STATUS "MDBX indulge Link-Time Optimization by GCC")
elseif(CLANG_LTO_AVAILABLE)
set(LTO_ENABLED TRUE)
set(CMAKE_AR ${CMAKE_CLANG_AR} CACHE PATH "Path to ar program with LTO-plugin" FORCE)
set(CMAKE_NM ${CMAKE_CLANG_NM} CACHE PATH "Path to nm program with LTO-plugin" FORCE)
set(CMAKE_RANLIB ${CMAKE_CLANG_RANLIB} CACHE PATH "Path to ranlib program with LTO-plugin" FORCE)
message(STATUS "MDBX indulge Link-Time Optimization by CLANG")
elseif(MSVC_LTO_AVAILABLE)
set(LTO_ENABLED TRUE)
message(STATUS "MDBX indulge Link-Time Optimization by MSVC")
elseif(CMAKE_INTERPROCEDURAL_OPTIMIZATION_AVAILABLE)
message(STATUS "MDBX indulge Interprocedural Optimization by CMake")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
set(LTO_ENABLED TRUE)
else()
message(WARNING "Unable to engage interprocedural/LTO optimization.")
endif()
else()
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE)
set(LTO_ENABLED FALSE)
endif()
find_program(VALGRIND valgrind)
if(VALGRIND)
# LY: cmake is ugly and nasty.
# - therefore memcheck-options should be defined before including ctest;
# - otherwise ctest may ignore it.
set(MEMORYCHECK_SUPPRESSIONS_FILE
"${PROJECT_SOURCE_DIR}/test/valgrind_suppress.txt"
CACHE FILEPATH "Suppressions file for Valgrind" FORCE)
set(MEMORYCHECK_COMMAND_OPTIONS
"--trace-children=yes --leak-check=full --track-origins=yes --error-exitcode=42 --error-markers=@ --errors-for-leak-kinds=definite --fair-sched=yes --suppressions=${MEMORYCHECK_SUPPRESSIONS_FILE}"
CACHE STRING "Valgrind options" FORCE)
set(VALGRIND_COMMAND_OPTIONS "${MEMORYCHECK_COMMAND_OPTIONS}" CACHE STRING "Valgrind options" FORCE)
endif()
#
# Enable 'make tags' target.
find_program(CTAGS ctags)
if(CTAGS)
add_custom_target(tags COMMAND ${CTAGS} -R -f tags
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_custom_target(ctags DEPENDS tags)
endif(CTAGS)
#
# Enable 'make reformat' target.
find_program(CLANG_FORMAT
NAMES clang-format-6.0 clang-format-5.0 clang-format-4.0
clang-format-3.9 clang-format-3.8 clang-format-3.7 clang-format)
if(CLANG_FORMAT AND UNIX)
add_custom_target(reformat
VERBATIM
COMMAND
git ls-files |
grep -E \\.\(c|cxx|cc|cpp|h|hxx|hpp\)\(\\.in\)?\$ |
xargs ${CLANG_FORMAT} -i --style=file
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
endif()
if(NOT "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
add_custom_target(distclean)
add_custom_command(TARGET distclean
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PROJECT_BINARY_DIR}"
COMMENT "Removing the build directory and its content")
elseif(IS_DIRECTORY .git AND GIT)
add_custom_target(distclean)
add_custom_command(TARGET distclean
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMAND ${GIT} submodule foreach --recursive git clean -f -X -d
COMMAND ${GIT} clean -f -X -d
COMMENT "Removing all build files from the source directory")
endif()
setup_compile_flags()
endif(SUBPROJECT)
list(FIND CMAKE_C_COMPILE_FEATURES c_std_11 HAS_C11)
if(NOT HAS_C11 LESS 0)
set(MDBX_C_STANDARD 11)
else()
set(MDBX_C_STANDARD 99)
endif()
message(STATUS "Use C${MDBX_C_STANDARD} for libmdbx")
##############################################################################
##############################################################################
#
# #### ##### ##### # #### # # ####
# # # # # # # # # ## # #
# # # # # # # # # # # # ####
# # # ##### # # # # # # # #
# # # # # # # # # ## # #
# #### # # # #### # # ####
#
set(MDBX_BUILD_OPTIONS ENABLE_ASAN MDBX_USE_VALGRIND ENABLE_GPROF ENABLE_GCOV)
add_mdbx_option(MDBX_BUILD_SHARED_LIBRARY "Build libmdbx as shared library (DLL)" ${BUILD_SHARED_LIBS})
add_mdbx_option(MDBX_ALLOY_BUILD "Build MDBX library as single object file" ON)
add_mdbx_option(MDBX_TXN_CHECKOWNER "Checking transaction matches the calling thread inside libmdbx's API" ON)
add_mdbx_option(MDBX_TXN_CHECKPID "Paranoid checking PID inside libmdbx's API" AUTO)
mark_as_advanced(MDBX_TXN_CHECKPID)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
add_mdbx_option(MDBX_DISABLE_GNU_SOURCE "Don't use nonstandard GNU/Linux extension functions" OFF)
mark_as_advanced(MDBX_DISABLE_GNU_SOURCE)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
add_mdbx_option(MDBX_OSX_SPEED_INSTEADOF_DURABILITY "Disable use fcntl(F_FULLFSYNC) in favor of speed" OFF)
mark_as_advanced(MDBX_OSX_SPEED_INSTEADOF_DURABILITY)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
add_mdbx_option(MDBX_AVOID_CRT "Avoid dependence from MSVC CRT" ${NOT_SUBPROJECT})
if(NOT MDBX_BUILD_SHARED_LIBRARY)
add_mdbx_option(MDBX_CONFIG_MANUAL_TLS_CALLBACK
"Provide mdbx_dll_handler() for manual initialization" OFF)
mark_as_advanced(MDBX_CONFIG_MANUAL_TLS_CALLBACK)
endif()
else()
add_mdbx_option(MDBX_USE_ROBUST "Use POSIX.1-2008 robust mutexes" AUTO)
mark_as_advanced(MDBX_USE_ROBUST)
add_mdbx_option(MDBX_USE_OFDLOCKS "Use Open file description locks (aka OFD locks, non-POSIX)" AUTO)
mark_as_advanced(MDBX_USE_OFDLOCKS)
endif()
option(MDBX_ENABLE_TESTS "Build MDBX tests." ${BUILD_TESTING})
################################################################################
################################################################################
add_subdirectory(src)
if(MDBX_ENABLE_TESTS)
add_subdirectory(test)
endif()
set(PACKAGE "libmdbx")
set(CPACK_PACKAGE_VERSION_MAJOR ${MDBX_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${MDBX_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${MDBX_VERSION_RELEASE})
set(CPACK_PACKAGE_VERSION_COMMIT ${MDBX_VERSION_REVISION})
set(PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${CPACK_PACKAGE_VERSION_COMMIT}")
message(STATUS "libmdbx package version is ${PACKAGE_VERSION}")
cmake_policy(POP)

View file

@ -0,0 +1,22 @@
Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
Copyright 2011-2015 Howard Chu, Symas Corp.
Copyright 2015,2016 Peter-Service R&D LLC.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
Public License.
A copy of this license is available in the file LICENSE in the
top-level directory of the distribution or, alternatively, at
<http://www.OpenLDAP.org/license.html>.
OpenLDAP is a registered trademark of the OpenLDAP Foundation.
Individual files and/or contributed packages may be copyright by
other parties and/or subject to additional restrictions.
This work also contains materials derived from public sources.
Additional information about OpenLDAP can be obtained at
<http://www.openldap.org/>.

View file

@ -0,0 +1,362 @@
# This makefile is for GNU Make, and nowadays provided
# just for compatibility and preservation of traditions.
# Please use CMake in case of any difficulties or problems.
#
# Preprocessor macros (for MDBX_OPTIONS) of interest...
# Note that the defaults should already be correct for most platforms;
# you should not need to change any of these. Read their descriptions
# in README and source code if you do. There may be other macros of interest.
SHELL := /bin/bash
# install sandbox
SANDBOX ?=
# install prefixes (inside sandbox)
prefix ?= /usr/local
mandir ?= $(prefix)/man
# lib/bin suffix for multiarch/biarch, e.g. '.x86_64'
suffix ?=
CC ?= gcc
LD ?= ld
MDBX_OPTIONS ?= -DNDEBUG=1
CFLAGS ?= -Os -g3 -Wall -Werror -Wextra -Wpedantic -ffunction-sections -fPIC -fvisibility=hidden -std=gnu11 -pthread -Wno-tautological-compare
# LY: '--no-as-needed,-lrt' for ability to built with modern glibc, but then run with the old
LDFLAGS ?= $(shell $(LD) --help 2>/dev/null | grep -q -- --gc-sections && echo '-Wl,--gc-sections,-z,relro,-O1')$(shell $(LD) --help 2>/dev/null | grep -q -- -dead_strip && echo '-Wl,-dead_strip')
EXE_LDFLAGS ?= -pthread
################################################################################
UNAME := $(shell uname -s 2>/dev/null || echo Unknown)
define uname2sosuffix
case "$(UNAME)" in
Darwin*|Mach*) echo dylib;;
CYGWIN*|MINGW*|MSYS*|Windows*) echo dll;;
*) echo so;;
esac
endef
SO_SUFFIX := $(shell $(uname2sosuffix))
HEADERS := mdbx.h
LIBRARIES := libmdbx.a libmdbx.$(SO_SUFFIX)
TOOLS := mdbx_stat mdbx_copy mdbx_dump mdbx_load mdbx_chk
MANPAGES := mdbx_stat.1 mdbx_copy.1 mdbx_dump.1 mdbx_load.1 mdbx_chk.1
.PHONY: mdbx all install clean test dist check
all: $(LIBRARIES) $(TOOLS)
mdbx: libmdbx.a libmdbx.$(SO_SUFFIX)
tools: $(TOOLS)
strip: all
strip libmdbx.$(SO_SUFFIX) $(TOOLS)
clean:
rm -rf $(TOOLS) mdbx_test @* *.[ao] *.[ls]o *~ tmp.db/* \
*.gcov *.log *.err src/*.o test/*.o mdbx_example dist \
config.h src/elements/config.h src/elements/version.c *.tar*
libmdbx.a: mdbx-static.o
$(AR) rs $@ $?
libmdbx.$(SO_SUFFIX): mdbx-dylib.o
$(CC) $(CFLAGS) $^ -pthread -shared $(LDFLAGS) -o $@
#> dist-cutoff-begin
ifeq ($(wildcard mdbx.c),mdbx.c)
#< dist-cutoff-end
################################################################################
# Amalgamated source code, i.e. distributed after `make dists`
MAN_SRCDIR := man1/
config.h: mdbx.c $(lastword $(MAKEFILE_LIST))
(echo '#define MDBX_BUILD_TIMESTAMP "$(shell date +%Y-%m-%dT%H:%M:%S%z)"' \
&& echo '#define MDBX_BUILD_FLAGS "$(CFLAGS) $(LDFLAGS)"' \
&& echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"' \
&& echo '#define MDBX_BUILD_TARGET "$(shell set -o pipefail; LC_ALL=C $(CC) -v 2>&1 | grep -i '^Target:' | cut -d ' ' -f 2- || echo 'Please use GCC or CLANG compatible compiler')"' \
) > $@
mdbx-dylib.o: config.h mdbx.c $(lastword $(MAKEFILE_LIST))
$(CC) $(CFLAGS) $(MDBX_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c mdbx.c -o $@
mdbx-static.o: config.h mdbx.c $(lastword $(MAKEFILE_LIST))
$(CC) $(CFLAGS) $(MDBX_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c mdbx.c -o $@
mdbx_%: mdbx_%.c libmdbx.a
$(CC) $(CFLAGS) $(MDBX_OPTIONS) '-DMDBX_CONFIG_H="config.h"' $^ $(EXE_LDFLAGS) -o $@
#> dist-cutoff-begin
else
################################################################################
# Plain (non-amalgamated) sources with test
define uname2osal
case "$(UNAME)" in
CYGWIN*|MINGW*|MSYS*|Windows*) echo windows;;
*) echo unix;;
esac
endef
define uname2titer
case "$(UNAME)" in
Darwin*|Mach*) echo 2;;
*) echo 12;;
esac
endef
DIST_EXTRA := LICENSE README.md CMakeLists.txt GNUmakefile $(addprefix man1/, $(MANPAGES))
DIST_SRC := mdbx.h mdbx.c $(addsuffix .c, $(TOOLS))
TEST_DB ?= $(shell [ -d /dev/shm ] && echo /dev/shm || echo /tmp)/mdbx-test.db
TEST_LOG ?= $(shell [ -d /dev/shm ] && echo /dev/shm || echo /tmp)/mdbx-test.log
TEST_OSAL := $(shell $(uname2osal))
TEST_ITER := $(shell $(uname2titer))
TEST_SRC := test/osal-$(TEST_OSAL).cc $(filter-out $(wildcard test/osal-*.cc), $(wildcard test/*.cc))
TEST_INC := $(wildcard test/*.h)
TEST_OBJ := $(patsubst %.cc,%.o,$(TEST_SRC))
CXX ?= g++
CXXSTD ?= $(shell $(CXX) -std=c++27 -c test/test.cc -o /dev/null 2>/dev/null && echo -std=c++17 || echo -std=c++11)
CXXFLAGS := $(CXXSTD) $(filter-out -std=gnu11,$(CFLAGS))
MAN_SRCDIR := src/man1/
ALLOY_DEPS := $(wildcard src/elements/*)
MDBX_VERSION_GIT = ${shell set -o pipefail; git describe --tags | sed -n 's|^v*\([0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\)\(.*\)|\1|p' || echo 'Please fetch tags and/or install latest git version'}
MDBX_GIT_TIMESTAMP = $(shell git show --no-patch --format=%cI HEAD || echo 'Please install latest get version')
MDBX_GIT_DESCRIBE = $(shell git describe --tags --long --dirty=-dirty || echo 'Please fetch tags and/or install latest git version')
MDBX_VERSION_SUFFIX = $(shell set -o pipefail; echo -n '$(MDBX_GIT_DESCRIBE)' | tr -c -s '[a-zA-Z0-9]' _)
MDBX_BUILD_SOURCERY = $(shell set -o pipefail; $(MAKE) -s src/elements/version.c && (openssl dgst -r -sha256 src/elements/version.c || sha256sum src/elements/version.c || shasum -a 256 src/elements/version.c) 2>/dev/null | cut -d ' ' -f 1 || echo 'Please install openssl or sha256sum or shasum')_$(MDBX_VERSION_SUFFIX)
test check: all mdbx_example mdbx_test
rm -f $(TEST_DB) $(TEST_LOG) && (set -o pipefail; \
(./mdbx_test --progress --console=no --repeat=$(TEST_ITER) --pathname=$(TEST_DB) --dont-cleanup-after basic && \
./mdbx_test --mode=-writemap,-lifo --progress --console=no --repeat=1 --pathname=$(TEST_DB) --dont-cleanup-after basic) \
| tee -a $(TEST_LOG) | tail -n 42) \
&& ./mdbx_chk -vvn $(TEST_DB) && ./mdbx_chk -vvn $(TEST_DB)-copy
mdbx_example: mdbx.h example/example-mdbx.c libmdbx.$(SO_SUFFIX)
$(CC) $(CFLAGS) -I. example/example-mdbx.c ./libmdbx.$(SO_SUFFIX) -o $@
check-singleprocess: all mdbx_test
rm -f $(TEST_DB) $(TEST_LOG) && (set -o pipefail; \
(./mdbx_test --progress --console=no --repeat=42 --pathname=$(TEST_DB) --dont-cleanup-after --hill && \
./mdbx_test --progress --console=no --repeat=2 --pathname=$(TEST_DB) --dont-cleanup-before --dont-cleanup-after --copy && \
./mdbx_test --mode=-writemap,-lifo --progress --console=no --repeat=42 --pathname=$(TEST_DB) --dont-cleanup-after --nested) \
| tee -a $(TEST_LOG) | tail -n 42) \
&& ./mdbx_chk -vvn $(TEST_DB) && ./mdbx_chk -vvn $(TEST_DB)-copy
check-fault: all mdbx_test
rm -f $(TEST_DB) $(TEST_LOG) && (set -o pipefail; ./mdbx_test --progress --console=no --pathname=$(TEST_DB) --inject-writefault=42 --dump-config --dont-cleanup-after basic | tee -a $(TEST_LOG) | tail -n 42) \
; ./mdbx_chk -vvnw $(TEST_DB) && ([ ! -e $(TEST_DB)-copy ] || ./mdbx_chk -vvn $(TEST_DB)-copy)
VALGRIND=valgrind --trace-children=yes --log-file=valgrind-%p.log --leak-check=full --track-origins=yes --error-exitcode=42 --suppressions=test/valgrind_suppress.txt
memcheck check-valgrind: all mdbx_test
@echo "$(MDBX_OPTIONS)" | grep -q MDBX_USE_VALGRIND || echo "WARNING: Please build libmdbx with -DMDBX_USE_VALGRIND to avoid false-positives from Valgrind !!!" >&2
rm -f valgrind-*.log $(TEST_DB) $(TEST_LOG) && (set -o pipefail; \
($(VALGRIND) ./mdbx_test --mode=-writemap,-lifo --progress --console=no --repeat=4 --pathname=$(TEST_DB) --dont-cleanup-after basic && \
$(VALGRIND) ./mdbx_test --progress --console=no --pathname=$(TEST_DB) --dont-cleanup-before --dont-cleanup-after --copy && \
$(VALGRIND) ./mdbx_test --progress --console=no --repeat=2 --pathname=$(TEST_DB) --dont-cleanup-after basic) \
| tee -a $(TEST_LOG) | tail -n 42) \
&& $(VALGRIND) ./mdbx_chk -vvn $(TEST_DB) && ./mdbx_chk -vvn $(TEST_DB)-copy
define test-rule
$(patsubst %.cc,%.o,$(1)): $(1) $(TEST_INC) mdbx.h $(lastword $(MAKEFILE_LIST))
$(CXX) $(CXXFLAGS) $(MDBX_OPTIONS) -c $(1) -o $$@
endef
$(foreach file,$(TEST_SRC),$(eval $(call test-rule,$(file))))
mdbx_%: src/tools/mdbx_%.c libmdbx.a
$(CC) $(CFLAGS) $(MDBX_OPTIONS) '-DMDBX_CONFIG_H="config.h"' $^ $(EXE_LDFLAGS) -o $@
mdbx_test: $(TEST_OBJ) libmdbx.$(SO_SUFFIX)
$(CXX) $(CXXFLAGS) $(TEST_OBJ) -Wl,-rpath . -L . -l mdbx $(EXE_LDFLAGS) -o $@
git_DIR := $(shell if [ -d .git ]; then echo .git; elif [ -s .git -a -f .git ]; then grep '^gitdir: ' .git | cut -d ':' -f 2; else echo "Please use libmdbx as a git-submodule or the amalgamated source code" >&2 && echo git_directory; fi)
src/elements/version.c: src/elements/version.c.in $(lastword $(MAKEFILE_LIST)) $(git_DIR)/HEAD $(git_DIR)/index $(git_DIR)/refs/tags
sed \
-e "s|@MDBX_GIT_TIMESTAMP@|$(MDBX_GIT_TIMESTAMP)|" \
-e "s|@MDBX_GIT_TREE@|$(shell git show --no-patch --format=%T HEAD || echo 'Please install latest get version')|" \
-e "s|@MDBX_GIT_COMMIT@|$(shell git show --no-patch --format=%H HEAD || echo 'Please install latest get version')|" \
-e "s|@MDBX_GIT_DESCRIBE@|$(MDBX_GIT_DESCRIBE)|" \
-e "s|\$${MDBX_VERSION_MAJOR}|$(shell echo '$(MDBX_VERSION_GIT)' | cut -d . -f 1)|" \
-e "s|\$${MDBX_VERSION_MINOR}|$(shell echo '$(MDBX_VERSION_GIT)' | cut -d . -f 2)|" \
-e "s|\$${MDBX_VERSION_RELEASE}|$(shell echo '$(MDBX_VERSION_GIT)' | cut -d . -f 3)|" \
-e "s|\$${MDBX_VERSION_REVISION}|$(shell git rev-list --count --no-merges HEAD || echo 'Please fetch tags and/or install latest git version')|" \
src/elements/version.c.in > $@
src/elements/config.h: src/elements/version.c $(lastword $(MAKEFILE_LIST))
(echo '#define MDBX_BUILD_TIMESTAMP "$(shell date +%Y-%m-%dT%H:%M:%S%z)"' \
&& echo '#define MDBX_BUILD_FLAGS "$(CFLAGS) $(LDFLAGS)"' \
&& echo '#define MDBX_BUILD_COMPILER "$(shell set -o pipefail; $(CC) --version | head -1 || echo 'Please use GCC or CLANG compatible compiler')"' \
&& echo '#define MDBX_BUILD_TARGET "$(shell set -o pipefail; LC_ALL=C $(CC) -v 2>&1 | grep -i '^Target:' | cut -d ' ' -f 2- || echo 'Please use GCC or CLANG compatible compiler')"' \
&& echo '#define MDBX_BUILD_SOURCERY $(MDBX_BUILD_SOURCERY)' \
) > $@
mdbx-dylib.o: src/elements/config.h src/elements/version.c src/alloy.c $(ALLOY_DEPS) $(lastword $(MAKEFILE_LIST))
$(CC) $(CFLAGS) $(MDBX_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -DLIBMDBX_EXPORTS=1 -c src/alloy.c -o $@
mdbx-static.o: src/elements/config.h src/elements/version.c src/alloy.c $(ALLOY_DEPS) $(lastword $(MAKEFILE_LIST))
$(CC) $(CFLAGS) $(MDBX_OPTIONS) '-DMDBX_CONFIG_H="config.h"' -ULIBMDBX_EXPORTS -c src/alloy.c -o $@
.PHONY: dist
dist: libmdbx-sources-$(MDBX_VERSION_SUFFIX).tar.gz $(lastword $(MAKEFILE_LIST))
libmdbx-sources-$(MDBX_VERSION_SUFFIX).tar.gz: $(addprefix dist/, $(DIST_SRC) $(DIST_EXTRA)) $(addprefix dist/man1/,$(MANPAGES))
tar -c -a -f $@ --owner=0 --group=0 -C dist $(DIST_SRC) $(DIST_EXTRA) \
&& rm dist/@tmp-shared_internals.inc
dist/mdbx.h: mdbx.h src/elements/version.c $(lastword $(MAKEFILE_LIST))
mkdir -p dist && cp $< $@
dist/GNUmakefile: GNUmakefile
mkdir -p dist && sed -e '/^#> dist-cutoff-begin/,/^#< dist-cutoff-end/d' $< > $@
dist/@tmp-shared_internals.inc: src/elements/version.c $(ALLOY_DEPS) $(lastword $(MAKEFILE_LIST))
mkdir -p dist && sed \
-e 's|#pragma once|#define MDBX_ALLOY 1\n#define MDBX_BUILD_SOURCERY $(MDBX_BUILD_SOURCERY)|' \
-e 's|#include "../../mdbx.h"|@INCLUDE "mdbx.h"|' \
-e '/#include "defs.h"/r src/elements/defs.h' \
-e '/#include "osal.h"/r src/elements/osal.h' \
src/elements/internals.h > $@
dist/mdbx.c: dist/@tmp-shared_internals.inc $(lastword $(MAKEFILE_LIST))
mkdir -p dist && (cat dist/@tmp-shared_internals.inc \
&& cat src/elements/core.c src/elements/osal.c src/elements/version.c \
&& echo '#if defined(_WIN32) || defined(_WIN64)' \
&& cat src/elements/lck-windows.c && echo '#else /* LCK-implementation */' \
&& cat src/elements/lck-posix.c && echo '#endif /* LCK-implementation */' \
) | grep -v -e '#include "' -e '#pragma once' | sed 's|@INCLUDE|#include|' > $@
define dist-tool-rule
dist/$(1).c: src/tools/$(1).c src/tools/wingetopt.h src/tools/wingetopt.c \
dist/@tmp-shared_internals.inc $(lastword $(MAKEFILE_LIST))
mkdir -p dist && sed \
-e '/#include "..\/elements\/internals.h"/r dist/@tmp-shared_internals.inc' \
-e '/#include "wingetopt.h"/r src/tools/wingetopt.c' \
src/tools/$(1).c \
| grep -v -e '#include "' -e '#pragma once' -e '#define MDBX_ALLOY' \
| sed 's|@INCLUDE|#include|' > $$@
endef
$(foreach file,$(TOOLS),$(eval $(call dist-tool-rule,$(file))))
dist/man1/mdbx_%.1: src/man1/mdbx_%.1
mkdir -p dist/man1/ && cp $< $@
dist/LICENSE: LICENSE
mkdir -p dist/man1/ && cp $< $@
dist/README.md: README.md
mkdir -p dist/man1/ && cp $< $@
dist/CMakeLists.txt: CMakeLists.dist-minimal
mkdir -p dist/man1/ && cp $< $@
endif
################################################################################
# Cross-compilation simple test
CROSS_LIST = mips-linux-gnu-gcc \
powerpc64-linux-gnu-gcc powerpc-linux-gnu-gcc \
arm-linux-gnueabihf-gcc aarch64-linux-gnu-gcc \
sh4-linux-gnu-gcc mips64-linux-gnuabi64-gcc
# hppa-linux-gnu-gcc - don't supported by current qemu release
# s390x-linux-gnu-gcc - qemu troubles (hang/abort)
# sparc64-linux-gnu-gcc - qemu troubles (fcntl for F_SETLK/F_GETLK)
# alpha-linux-gnu-gcc - qemu (or gcc) troubles (coredump)
CROSS_LIST_NOQEMU = hppa-linux-gnu-gcc s390x-linux-gnu-gcc \
sparc64-linux-gnu-gcc alpha-linux-gnu-gcc
cross-gcc:
@echo "CORRESPONDING CROSS-COMPILERs ARE REQUIRED."
@echo "FOR INSTANCE: apt install g++-aarch64-linux-gnu g++-alpha-linux-gnu g++-arm-linux-gnueabihf g++-hppa-linux-gnu g++-mips-linux-gnu g++-mips64-linux-gnuabi64 g++-powerpc-linux-gnu g++-powerpc64-linux-gnu g++-s390x-linux-gnu g++-sh4-linux-gnu g++-sparc64-linux-gnu"
@for CC in $(CROSS_LIST_NOQEMU) $(CROSS_LIST); do \
echo "===================== $$CC"; \
$(MAKE) clean && CC=$$CC CXX=$$(echo $$CC | sed 's/-gcc/-g++/') EXE_LDFLAGS=-static $(MAKE) all || exit $$?; \
done
# Unfortunately qemu don't provide robust support for futexes.
# Therefore it is impossible to run full multi-process tests.
cross-qemu:
@echo "CORRESPONDING CROSS-COMPILERs AND QEMUs ARE REQUIRED."
@echo "FOR INSTANCE: "
@echo " 1) apt install g++-aarch64-linux-gnu g++-alpha-linux-gnu g++-arm-linux-gnueabihf g++-hppa-linux-gnu g++-mips-linux-gnu g++-mips64-linux-gnuabi64 g++-powerpc-linux-gnu g++-powerpc64-linux-gnu g++-s390x-linux-gnu g++-sh4-linux-gnu g++-sparc64-linux-gnu"
@echo " 2) apt install binfmt-support qemu-user-static qemu-user qemu-system-arm qemu-system-mips qemu-system-misc qemu-system-ppc qemu-system-sparc"
@for CC in $(CROSS_LIST); do \
echo "===================== $$CC + qemu"; \
$(MAKE) clean && \
CC=$$CC CXX=$$(echo $$CC | sed 's/-gcc/-g++/') EXE_LDFLAGS=-static MDBX_OPTIONS="-DMDBX_SAFE4QEMU $(MDBX_OPTIONS)" \
$(MAKE) check-singleprocess || exit $$?; \
done
#< dist-cutoff-end
install: $(LIBRARIES) $(TOOLS) $(HEADERS)
mkdir -p $(SANDBOX)$(prefix)/bin$(suffix) \
&& cp -t $(SANDBOX)$(prefix)/bin$(suffix) $(TOOLS) && \
mkdir -p $(SANDBOX)$(prefix)/lib$(suffix) \
&& cp -t $(SANDBOX)$(prefix)/lib$(suffix) $(LIBRARIES) && \
mkdir -p $(SANDBOX)$(prefix)/include \
&& cp -t $(SANDBOX)$(prefix)/include $(HEADERS) && \
mkdir -p $(SANDBOX)$(mandir)/man1 \
&& cp -t $(SANDBOX)$(mandir)/man1 $(addprefix $(MAN_SRCDIR), $(MANPAGES))
################################################################################
# Benchmarking by ioarena
IOARENA ?= $(shell \
(test -x ../ioarena/@BUILD/src/ioarena && echo ../ioarena/@BUILD/src/ioarena) || \
(test -x ../../@BUILD/src/ioarena && echo ../../@BUILD/src/ioarena) || \
(test -x ../../src/ioarena && echo ../../src/ioarena) || which ioarena)
NN ?= 25000000
ifneq ($(wildcard $(IOARENA)),)
.PHONY: bench clean-bench re-bench
clean-bench:
rm -rf bench-*.txt _ioarena/*
re-bench: clean-bench bench
define bench-rule
bench-$(1)_$(2).txt: $(3) $(IOARENA) $(lastword $(MAKEFILE_LIST))
LD_LIBRARY_PATH="./:$$$${LD_LIBRARY_PATH}" \
$(IOARENA) -D $(1) -B crud -m nosync -n $(2) \
| tee $$@ | grep throughput && \
LD_LIBRARY_PATH="./:$$$${LD_LIBRARY_PATH}" \
$(IOARENA) -D $(1) -B get,iterate -m sync -r 4 -n $(2) \
| tee -a $$@ | grep throughput \
|| mv -f $$@ $$@.error
endef
$(eval $(call bench-rule,mdbx,$(NN),libmdbx.$(SO_SUFFIX)))
$(eval $(call bench-rule,sophia,$(NN)))
$(eval $(call bench-rule,leveldb,$(NN)))
$(eval $(call bench-rule,rocksdb,$(NN)))
$(eval $(call bench-rule,wiredtiger,$(NN)))
$(eval $(call bench-rule,forestdb,$(NN)))
$(eval $(call bench-rule,lmdb,$(NN)))
$(eval $(call bench-rule,nessdb,$(NN)))
$(eval $(call bench-rule,sqlite3,$(NN)))
$(eval $(call bench-rule,ejdb,$(NN)))
$(eval $(call bench-rule,vedisdb,$(NN)))
$(eval $(call bench-rule,dummy,$(NN)))
$(eval $(call bench-rule,debug,10))
bench: bench-mdbx_$(NN).txt
.PHONY: bench-debug
bench-debug: bench-debug_10.txt
bench-quartet: bench-mdbx_$(NN).txt bench-lmdb_$(NN).txt bench-rocksdb_$(NN).txt bench-wiredtiger_$(NN).txt
endif

View file

@ -0,0 +1,47 @@
The OpenLDAP Public License
Version 2.8, 17 August 2003
Redistribution and use of this software and associated documentation
("Software"), with or without modification, are permitted provided
that the following conditions are met:
1. Redistributions in source form must retain copyright statements
and notices,
2. Redistributions in binary form must reproduce applicable copyright
statements and notices, this list of conditions, and the following
disclaimer in the documentation and/or other materials provided
with the distribution, and
3. Redistributions must contain a verbatim copy of this document.
The OpenLDAP Foundation may revise this license from time to time.
Each revision is distinguished by a version number. You may use
this Software under terms of this license revision or under the
terms of any subsequent revision of the license.
THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS
CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED 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 OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S)
OR OWNER(S) OF THE SOFTWARE 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.
The names of the authors and copyright holders must not be used in
advertising or otherwise to promote the sale, use or other dealing
in this Software without specific, written prior permission. Title
to copyright in this Software shall at all times remain with copyright
holders.
OpenLDAP is a registered trademark of the OpenLDAP Foundation.
Copyright 1999-2003 The OpenLDAP Foundation, Redwood City,
California, USA. All Rights Reserved. Permission to copy and
distribute verbatim copies of this document is granted.

View file

@ -0,0 +1,591 @@
### The [repository now only mirrored on the Github](https://abf.io/erthink/libmdbx) due to illegal discriminatory restrictions for Russian Crimea and for sovereign crimeans.
<!-- Required extensions: pymdownx.betterem, pymdownx.tilde, pymdownx.emoji, pymdownx.tasklist, pymdownx.superfences -->
-----
libmdbx
======================================
_libmdbx_ is an extremely fast, compact, powerful, embedded
transactional [key-value
store](https://en.wikipedia.org/wiki/Key-value_database)
database, with permissive [OpenLDAP Public License](LICENSE).
_libmdbx_ has a specific set of properties and capabilities,
focused on creating unique lightweight solutions with
extraordinary performance.
The next version is under active non-public development and will be
released as **_MithrilDB_** and `libmithrildb` for libraries & packages.
Admittedly mythical [Mithril](https://en.wikipedia.org/wiki/Mithril) is
resembling silver but being stronger and lighter than steel. Therefore
_MithrilDB_ is rightly relevant name.
> _MithrilDB_ will be radically different from _libmdbx_ by the new
> database format and API based on C++17, as well as the [Apache 2.0
> License](https://www.apache.org/licenses/LICENSE-2.0). The goal of this
> revolution is to provide a clearer and robust API, add more features and
> new valuable properties of database.
*The Future will (be) [Positive](https://www.ptsecurity.com). Всё будет хорошо.*
[![Build Status](https://travis-ci.org/leo-yuriev/libmdbx.svg?branch=master)](https://travis-ci.org/leo-yuriev/libmdbx)
[![Build status](https://ci.appveyor.com/api/projects/status/ue94mlopn50dqiqg/branch/master?svg=true)](https://ci.appveyor.com/project/leo-yuriev/libmdbx/branch/master)
[![Coverity Scan Status](https://scan.coverity.com/projects/12915/badge.svg)](https://scan.coverity.com/projects/reopen-libmdbx)
## Table of Contents
- [Overview](#overview)
- [Comparison with other databases](#comparison-with-other-databases)
- [History & Acknowledgments](#history)
- [Description](#description)
- [Key features](#key-features)
- [Improvements over LMDB](#improvements-over-lmdb)
- [Gotchas](#gotchas)
- [Usage](#usage)
- [Building](#building)
- [Bindings](#bindings)
- [Performance comparison](#performance-comparison)
- [Integral performance](#integral-performance)
- [Read scalability](#read-scalability)
- [Sync-write mode](#sync-write-mode)
- [Lazy-write mode](#lazy-write-mode)
- [Async-write mode](#async-write-mode)
- [Cost comparison](#cost-comparison)
-----
## Overview
_libmdbx_ is revised and extended descendant of amazing [Lightning
Memory-Mapped
Database](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database).
_libmdbx_ inherits all features and characteristics from
[LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database),
but resolves some issues and adds several features.
- _libmdbx_ guarantee data integrity after crash unless this was explicitly
neglected in favour of write performance.
- _libmdbx_ allows multiple processes to read and update several key-value
tables concurrently, while being
[ACID](https://en.wikipedia.org/wiki/ACID)-compliant, with minimal
overhead and Olog(N) operation cost.
- _libmdbx_ enforce
[serializability](https://en.wikipedia.org/wiki/Serializability) for
writers by single
[mutex](https://en.wikipedia.org/wiki/Mutual_exclusion) and affords
[wait-free](https://en.wikipedia.org/wiki/Non-blocking_algorithm#Wait-freedom)
for parallel readers without atomic/interlocked operations, while
writing and reading transactions do not block each other.
- _libmdbx_ uses [B+Trees](https://en.wikipedia.org/wiki/B%2B_tree) and
[Memory-Mapping](https://en.wikipedia.org/wiki/Memory-mapped_file),
doesn't use [WAL](https://en.wikipedia.org/wiki/Write-ahead_logging)
which might be a caveat for some workloads.
- _libmdbx_ implements a simplified variant of the [Berkeley
DB](https://en.wikipedia.org/wiki/Berkeley_DB) and/or
[dbm](https://en.wikipedia.org/wiki/DBM_(computing)) API.
- _libmdbx_ supports Linux, Windows, MacOS, FreeBSD and other systems
compliant with POSIX.1-2008.
### Comparison with other databases
For now please refer to [chapter of "BoltDB comparison with other
databases"](https://github.com/coreos/bbolt#comparison-with-other-databases)
which is also (mostly) applicable to _libmdbx_.
### History
At first the development was carried out within the
[ReOpenLDAP](https://github.com/leo-yuriev/ReOpenLDAP) project. About a
year later _libmdbx_ was separated into standalone project, which was
[presented at Highload++ 2015
conference](http://www.highload.ru/2015/abstracts/1831.html).
Since 2017 _libmdbx_ is used in [Fast Positive Tables](https://github.com/leo-yuriev/libfpta),
and development is funded by [Positive Technologies](https://www.ptsecurity.com).
### Acknowledgments
Howard Chu <hyc@openldap.org> is the author of LMDB, from which
originated the MDBX in 2015.
Martin Hedenfalk <martin@bzero.se> is the author of `btree.c` code, which
was used for begin development of LMDB.
-----
Description
===========
## Key features
1. Key-value pairs are stored in ordered map(s), keys are always sorted,
range lookups are supported.
2. Data is [memory-mapped](https://en.wikipedia.org/wiki/Memory-mapped_file)
into each worker DB process, and could be accessed zero-copy from transactions.
3. Transactions are
[ACID](https://en.wikipedia.org/wiki/ACID)-compliant, through to
[MVCC](https://en.wikipedia.org/wiki/Multiversion_concurrency_control)
and [CoW](https://en.wikipedia.org/wiki/Copy-on-write). Writes are
strongly serialized and aren't blocked by reads, transactions can't
conflict with each other. Reads are guaranteed to get only commited data
([relaxing serializability](https://en.wikipedia.org/wiki/Serializability#Relaxing_serializability)).
4. Read transactions are
[non-blocking](https://en.wikipedia.org/wiki/Non-blocking_algorithm),
don't use [atomic operations](https://en.wikipedia.org/wiki/Linearizability#High-level_atomic_operations).
Readers don't block each other and aren't blocked by writers. Read
performance scales linearly with CPU core count.
> Nonetheless, "connect to DB" (starting the first read transaction in a thread) and
> "disconnect from DB" (closing DB or thread termination) requires a lock
> acquisition to register/unregister at the "readers table".
5. Keys with multiple values are stored efficiently without key
duplication, sorted by value, including integers (valuable for
secondary indexes).
6. Efficient operation on short fixed length keys,
including 32/64-bit integer types.
7. [WAF](https://en.wikipedia.org/wiki/Write_amplification) (Write
Amplification Factor) и RAF (Read Amplification Factor) are Olog(N).
8. No [WAL](https://en.wikipedia.org/wiki/Write-ahead_logging) and
transaction journal. In case of a crash no recovery needed. No need for
regular maintenance. Backups can be made on the fly on working DB
without freezing writers.
9. No additional memory management, all done by basic OS services.
## Improvements over LMDB
_libmdbx_ is superior to _legendary [LMDB](https://symas.com/lmdb/)_ in
terms of features and reliability, not inferior in performance. In
comparison to LMDB, _libmdbx_ make things "just work" perfectly and
out-of-the-box, not silently and catastrophically break down. The list
below is pruned down to the improvements most notable and obvious from
the user's point of view.
1. Automatic on-the-fly database size control by preset parameters, both
reduction and increment.
> _libmdbx_ manage the database size according to parameters specified
> by `mdbx_env_set_geometry()` function,
> ones include the growth step and the truncation threshold.
2. Automatic continuous zero-overhead database compactification.
> _libmdbx_ logically move as possible a freed pages
> at end of allocation area into unallocated space,
> and then release such space if a lot of.
3. LIFO policy for recycling a Garbage Collection items. On systems with a disk
write-back cache, this can significantly increase write performance, up to
several times in a best case scenario.
> LIFO means that for reuse pages will be taken which became unused the lastest.
> Therefore the loop of database pages circulation becomes as short as possible.
> In other words, the number of pages, that are overwritten in memory
> and on disk during a series of write transactions, will be as small as possible.
> Thus creates ideal conditions for the efficient operation of the disk write-back cache.
4. Fast estimation of range query result volume, i.e. how many items can
be found between a `KEY1` and a `KEY2`. This is prerequisite for build
and/or optimize query execution plans.
> _libmdbx_ performs a rough estimate based only on b-tree pages that
> are common for the both stacks of cursors that were set to corresponing
> keys.
5. `mdbx_chk` tool for database integrity check.
6. Guarantee of database integrity even in asynchronous unordered write-to-disk mode.
> _libmdbx_ propose additional trade-off by implementing append-like manner for updates
> in `NOSYNC` and `MAPASYNC` modes, that avoid database corruption after a system crash
> contrary to LMDB. Nevertheless, the `MDBX_UTTERLY_NOSYNC` mode available to match LMDB behaviour,
> and for a special use-cases.
7. Automated steady flush to disk upon volume of changes and/or by
timeout via cheap polling.
8. Sequence generation and three cheap persistent 64-bit markers with ACID.
9. Support for keys and values of zero length, including multi-values
(aka sorted duplicates).
10. The handler of lack-of-space condition with a callback,
that allow you to control and resolve such situations.
11. Support for opening a database in the exclusive mode, including on a network share.
12. Extended transaction info, including dirty and leftover space info
for a write transaction, reading lag and hold over space for read
transactions.
13. Extended whole-database info (aka environment) and reader enumeration.
14. Extended update or delete, _at once_ with getting previous value
and addressing the particular item from multi-value with the same key.
15. Support for explicitly updating the existing record, not insertion a new one.
16. All cursors are uniformly, can be reused and should be closed explicitly,
regardless ones were opened within write or read transaction.
17. Correct update of current record with `MDBX_CURRENT` flag when size
of key or data was changed, including sorted duplicated.
18. Opening database handles is spared from race conditions and
pre-opening is not needed.
19. Ability to determine whether the particular data is on a dirty page
or not, that allows to avoid copy-out before updates.
20. Ability to determine whether the cursor is pointed to a key-value
pair, to the first, to the last, or not set to anything.
21. Returning `MDBX_EMULTIVAL` error in case of ambiguous update or delete.
22. On **MacOS** the `fcntl(F_FULLFSYNC)` syscall is used _by
default_ to synchronize data with the disk, as this is [the only way to
guarantee data
durability](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/fsync.2.html)
in case of power failure. Unfortunately, in scenarios with high write
intensity, the use of `F_FULLFSYNC` significant degrades performance
compared to LMDB, where the `fsync()` syscall is used. Therefore,
_libmdbx_ allows you to override this behavior by defining the
`MDBX_OSX_SPEED_INSTEADOF_DURABILITY=1` option while build the library.
23. On **Windows** the `LockFileEx()` syscall is used for locking, since
it allows place the database on network drives, and provides protection
against incompetent user actions (aka
[poka-yoke](https://en.wikipedia.org/wiki/Poka-yoke)). Therefore
_libmdbx_ may be a little lag in performance tests from LMDB where a
named mutexes are used.
## Gotchas
1. There cannot be more than one writer at a time.
> On the other hand, this allows serialize an updates and eliminate any
> possibility of conflicts, deadlocks or logical errors.
2. No [WAL](https://en.wikipedia.org/wiki/Write-ahead_logging) means
relatively big [WAF](https://en.wikipedia.org/wiki/Write_amplification)
(Write Amplification Factor). Because of this syncing data to disk might
be quite resource intensive and be main performance bottleneck during
intensive write workload.
> As compromise _libmdbx_ allows several modes of lazy and/or periodic
> syncing, including `MAPASYNC` mode, which modificate data in memory and
> asynchronously syncs data to disk, moment to sync is picked by OS.
>
> Although this should be used with care, synchronous transactions in a DB
> with transaction journal will require 2 IOPS minimum (probably 3-4 in
> practice) because of filesystem overhead, overhead depends on
> filesystem, not on record count or record size. In _libmdbx_ IOPS count
> will grow logarithmically depending on record count in DB (height of B+
> tree) and will require at least 2 IOPS per transaction too.
3. [CoW](https://en.wikipedia.org/wiki/Copy-on-write) for
[MVCC](https://en.wikipedia.org/wiki/Multiversion_concurrency_control)
is done on memory page level with
[B+trees](https://ru.wikipedia.org/wiki/B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE).
Therefore altering data requires to copy about Olog(N) memory pages,
which uses [memory bandwidth](https://en.wikipedia.org/wiki/Memory_bandwidth) and is main
performance bottleneck in `MDBX_MAPASYNC` mode.
> This is unavoidable, but isn't that bad. Syncing data to disk requires
> much more similar operations which will be done by OS, therefore this is
> noticeable only if data sync to persistent storage is fully disabled.
> _libmdbx_ allows to safely save data to persistent storage with minimal
> performance overhead. If there is no need to save data to persistent
> storage then it's much more preferable to use `std::map`.
4. Massive altering of data during a parallel long read operation will
increase the process work set, may exhaust entire free database space and
result in subsequent write performance degradation.
> _libmdbx_ mostly solve this issue by lack-of-space callback and `MDBX_LIFORECLAIM` mode.
> See [`mdbx.h`](mdbx.h) with API description for details.
> The "next" version of libmdbx (MithrilDB) will completely solve this.
5. There are no built-in checksums or digests to verify database integrity.
> The "next" version of _libmdbx_ (MithrilDB) will solve this issue employing [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree).
--------------------------------------------------------------------------------
Usage
=====
## Source code embedding
_libmdbx_ provides two official ways for integration in source code form:
1. Using the amalgamated source code.
> The amalgamated source code includes all files requires to build and
> use _libmdbx_, but not for testing _libmdbx_ itself.
2. Adding the complete original source code as a `git submodule`.
> This allows you to build as _libmdbx_ and testing tool.
> On the other hand, this way requires you to pull git tags, and use C++11 compiler for test tool.
**_Please, avoid using any other techniques._** Otherwise, at least
don't ask for support and don't name such chimeras `libmdbx`.
The amalgamated source code could be created from original clone of git
repository on Linux by executing `make dist`. As a result, the desired
set of files will be formed in the `dist` subdirectory.
## Building
Both amalgamated and original source code provides build through the use
[CMake](https://cmake.org/) or [GNU
Make](https://www.gnu.org/software/make/) with
[bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)). All build ways
are completely traditional and have minimal prerequirements like
`build-essential`, i.e. the non-obsolete C/C++ compiler and a
[SDK](https://en.wikipedia.org/wiki/Software_development_kit) for the
target platform. Obviously you need building tools itself, i.e. `git`,
`cmake` or GNU `make` with `bash`.
So just use CMake or GNU Make in your habitual manner and feel free to
fill an issue or make pull request in the case something will be
unexpected or broken down.
#### DSO/DLL unloading and destructors of Thread-Local-Storage objects
When building _libmdbx_ as a shared library or use static _libmdbx_ as a
part of another dynamic library, it is advisable to make sure that your
system ensures the correctness of the call destructors of
Thread-Local-Storage objects when unloading dynamic libraries.
If this is not the case, then unloading a dynamic-link library with
_libmdbx_ code inside, can result in either a resource leak or a crash
due to calling destructors from an already unloaded DSO/DLL object. The
problem can only manifest in a multithreaded application, which makes
the unloading of shared dynamic libraries with _libmdbx_ code inside,
after using _libmdbx_. It is known that TLS-destructors are properly
maintained in the following cases:
- On all modern versions of Windows (Windows 7 and later).
- On systems with the
[`__cxa_thread_atexit_impl()`](https://sourceware.org/glibc/wiki/Destructor%20support%20for%20thread_local%20variables)
function in the standard C library, including systems with GNU libc
version 2.18 and later.
- On systems with libpthread/ntpl from GNU libc with bug fixes
[#21031](https://sourceware.org/bugzilla/show_bug.cgi?id=21031) and
[#21032](https://sourceware.org/bugzilla/show_bug.cgi?id=21032), or
where there are no similar bugs in the pthreads implementation.
### Linux and other platforms with GNU Make
To build the library it is enough to execute `make all` in the directory
of source code, and `make check` for execute the basic tests.
If the `make` installed on the system is not GNU Make, there will be a
lot of errors from make when trying to build. In this case, perhaps you
should use `gmake` instead of `make`, or even `gnu-make`, etc.
### FreeBSD and related platforms
As a rule, in such systems, the default is to use Berkeley Make. And GNU
Make is called by the gmake command or may be missing. In addition,
[bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) may be absent.
You need to install the required components: GNU Make, bash, C and C++
compilers compatible with GCC or CLANG. After that, to build the
library, it is enough execute `gmake all` (or `make all`) in the
directory with source code, and `gmake check` (or `make check`) to run
the basic tests.
### Windows
For build _libmdbx_ on Windows the _original_ CMake and [Microsoft Visual
Studio](https://en.wikipedia.org/wiki/Microsoft_Visual_Studio) are
recommended.
Building by MinGW, MSYS or Cygwin is potentially possible. However,
these scripts are not tested and will probably require you to modify the
CMakeLists.txt or Makefile respectively.
It should be noted that in _libmdbx_ was efforts to resolve
runtime dependencies from CRT and other libraries Visual Studio.
For this is enough define the `MDBX_AVOID_CRT` during build.
An example of running a basic test script can be found in the
[CI-script](appveyor.yml) for [AppVeyor](https://www.appveyor.com/). To
run the [long stochastic test scenario](test/long_stochastic.sh),
[bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) is required, and
the such testing is recommended with place the test data on the
[RAM-disk](https://en.wikipedia.org/wiki/RAM_drive).
### MacOS
Current [native build tools](https://en.wikipedia.org/wiki/Xcode) for
MacOS include GNU Make, CLANG and an outdated version of bash.
Therefore, to build the library, it is enough to run `make all` in the
directory with source code, and run `make check` to execute the base
tests. If something goes wrong, it is recommended to install
[Homebrew](https://brew.sh/) and try again.
To run the [long stochastic test scenario](test/long_stochastic.sh), you
will need to install the current (not outdated) version of
[bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)). To do this, we
recommend that you install [Homebrew](https://brew.sh/) and then execute
`brew install bash`.
## Bindings
| Runtime | GitHub | Author |
| -------- | ------ | ------ |
| Java | [mdbxjni](https://github.com/castortech/mdbxjni) | [Castor Technologies](https://castortech.com/) |
| .NET | [mdbx.NET](https://github.com/wangjia184/mdbx.NET) | [Jerry Wang](https://github.com/wangjia184) |
--------------------------------------------------------------------------------
Performance comparison
======================
All benchmarks were done by [IOArena](https://github.com/pmwkaa/ioarena)
and multiple [scripts](https://github.com/pmwkaa/ioarena/tree/HL%2B%2B2015)
runs on Lenovo Carbon-2 laptop, i7-4600U 2.1 GHz, 8 Gb RAM,
SSD SAMSUNG MZNTD512HAGL-000L1 (DXT23L0Q) 512 Gb.
## Integral performance
Here showed sum of performance metrics in 3 benchmarks:
- Read/Search on 4 CPU cores machine;
- Transactions with [CRUD](https://en.wikipedia.org/wiki/CRUD)
operations in sync-write mode (fdatasync is called after each
transaction);
- Transactions with [CRUD](https://en.wikipedia.org/wiki/CRUD)
operations in lazy-write mode (moment to sync data to persistent storage
is decided by OS).
*Reasons why asynchronous mode isn't benchmarked here:*
1. It doesn't make sense as it has to be done with DB engines, oriented
for keeping data in memory e.g. [Tarantool](https://tarantool.io/),
[Redis](https://redis.io/)), etc.
2. Performance gap is too high to compare in any meaningful way.
![Comparison #1: Integral Performance](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-1.png)
--------------------------------------------------------------------------------
## Read Scalability
Summary performance with concurrent read/search queries in 1-2-4-8
threads on 4 CPU cores machine.
![Comparison #2: Read Scalability](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-2.png)
--------------------------------------------------------------------------------
## Sync-write mode
- Linear scale on left and dark rectangles mean arithmetic mean
transactions per second;
- Logarithmic scale on right is in seconds and yellow intervals mean
execution time of transactions. Each interval shows minimal and maximum
execution time, cross marks standard deviation.
**10,000 transactions in sync-write mode**. In case of a crash all data
is consistent and state is right after last successful transaction.
[fdatasync](https://linux.die.net/man/2/fdatasync) syscall is used after
each write transaction in this mode.
In the benchmark each transaction contains combined CRUD operations (2
inserts, 1 read, 1 update, 1 delete). Benchmark starts on empty database
and after full run the database contains 10,000 small key-value records.
![Comparison #3: Sync-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-3.png)
--------------------------------------------------------------------------------
## Lazy-write mode
- Linear scale on left and dark rectangles mean arithmetic mean of
thousands transactions per second;
- Logarithmic scale on right in seconds and yellow intervals mean
execution time of transactions. Each interval shows minimal and maximum
execution time, cross marks standard deviation.
**100,000 transactions in lazy-write mode**. In case of a crash all data
is consistent and state is right after one of last transactions, but
transactions after it will be lost. Other DB engines use
[WAL](https://en.wikipedia.org/wiki/Write-ahead_logging) or transaction
journal for that, which in turn depends on order of operations in
journaled filesystem. _libmdbx_ doesn't use WAL and hands I/O operations
to filesystem and OS kernel (mmap).
In the benchmark each transaction contains combined CRUD operations (2
inserts, 1 read, 1 update, 1 delete). Benchmark starts on empty database
and after full run the database contains 100,000 small key-value
records.
![Comparison #4: Lazy-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-4.png)
--------------------------------------------------------------------------------
## Async-write mode
- Linear scale on left and dark rectangles mean arithmetic mean of
thousands transactions per second;
- Logarithmic scale on right in seconds and yellow intervals mean
execution time of transactions. Each interval shows minimal and maximum
execution time, cross marks standard deviation.
**1,000,000 transactions in async-write mode**. In case of a crash all
data will be consistent and state will be right after one of last
transactions, but lost transaction count is much higher than in
lazy-write mode. All DB engines in this mode do as little writes as
possible on persistent storage. _libmdbx_ uses
[msync(MS_ASYNC)](https://linux.die.net/man/2/msync) in this mode.
In the benchmark each transaction contains combined CRUD operations (2
inserts, 1 read, 1 update, 1 delete). Benchmark starts on empty database
and after full run the database contains 10,000 small key-value records.
![Comparison #5: Async-write mode](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-5.png)
--------------------------------------------------------------------------------
## Cost comparison
Summary of used resources during lazy-write mode benchmarks:
- Read and write IOPS;
- Sum of user CPU time and sys CPU time;
- Used space on persistent storage after the test and closed DB, but not
waiting for the end of all internal housekeeping operations (LSM
compactification, etc).
_ForestDB_ is excluded because benchmark showed it's resource
consumption for each resource (CPU, IOPS) much higher than other engines
which prevents to meaningfully compare it with them.
All benchmark data is gathered by
[getrusage()](http://man7.org/linux/man-pages/man2/getrusage.2.html)
syscall and by scanning data directory.
![Comparison #6: Cost comparison](https://raw.githubusercontent.com/wiki/leo-yuriev/libmdbx/img/perf-slide-6.png)
--------------------------------------------------------------------------------
```
$ objdump -f -h -j .text libmdbx.so
libmdbx.so: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0000000000003710
Sections:
Idx Name Size VMA LMA File off Algn
11 .text 00015eff 0000000000003710 0000000000003710 00003710 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
```

View file

@ -0,0 +1,99 @@
version: 0.3.2.{build}
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
CMAKE_GENERATOR: Visual Studio 16 2019
TOOLSET: 142
MDBX_BUILD_SHARED_LIBRARY: OFF
MDBX_AVOID_CRT: OFF
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
CMAKE_GENERATOR: Visual Studio 16 2019
TOOLSET: 142
MDBX_BUILD_SHARED_LIBRARY: ON
MDBX_AVOID_CRT: ON
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
CMAKE_GENERATOR: Visual Studio 16 2019
TOOLSET: 142
MDBX_BUILD_SHARED_LIBRARY: OFF
MDBX_AVOID_CRT: ON
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
CMAKE_GENERATOR: Visual Studio 16 2019
TOOLSET: 142
MDBX_BUILD_SHARED_LIBRARY: ON
MDBX_AVOID_CRT: OFF
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: Visual Studio 15 2017
TOOLSET: 141
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CMAKE_GENERATOR: Visual Studio 14 2015
TOOLSET: 140
branches:
except:
- coverity_scan
configuration:
- Debug
- Release
platform:
- Win32
- x64
before_build:
- git clean -x -f -d
- git submodule sync
- git fetch --tags --prune
- git submodule update --init --recursive
- git submodule foreach --recursive git fetch --tags --prune
- cmake --version
build_script:
- ps: |
Write-Output "*******************************************************************************"
Write-Output "Configuration: $env:CONFIGURATION"
Write-Output "Platform: $env:PLATFORM"
Write-Output "Toolchain: $env:CMAKE_GENERATOR v$env:TOOLSET"
Write-Output "Options: MDBX_AVOID_CRT=$env:MDBX_AVOID_CRT MDBX_BUILD_SHARED_LIBRARY=$env:MDBX_BUILD_SHARED_LIBRARY"
Write-Output "*******************************************************************************"
md _build -Force | Out-Null
cd _build
$generator = $env:CMAKE_GENERATOR
if ($env:TOOLSET -lt 142) {
if ($env:PLATFORM -eq "x64") {
$generator = "$generator Win64"
}
& cmake -G "$generator" -D CMAKE_CONFIGURATION_TYPES="Debug;Release" -D MDBX_AVOID_CRT:BOOL=$env:MDBX_AVOID_CRT -D MDBX_BUILD_SHARED_LIBRARY:BOOL=$env:MDBX_BUILD_SHARED_LIBRARY ..
} else {
& cmake -G "$generator" -A $env:PLATFORM -D CMAKE_CONFIGURATION_TYPES="Debug;Release" -DMDBX_AVOID_CRT:BOOL=$env:MDBX_AVOID_CRT -D MDBX_BUILD_SHARED_LIBRARY:BOOL=$env:MDBX_BUILD_SHARED_LIBRARY ..
}
if ($LastExitCode -ne 0) {
throw "Exec: $ErrorMessage"
}
Write-Output "*******************************************************************************"
& cmake --build . --config $env:CONFIGURATION
if ($LastExitCode -ne 0) {
throw "Exec: $ErrorMessage"
}
Write-Output "*******************************************************************************"
test_script:
- ps: |
if (($env:PLATFORM -ne "ARM") -and ($env:PLATFORM -ne "ARM64")) {
& ./$env:CONFIGURATION/mdbx_test.exe --progress --console=no --pathname=test.db --dont-cleanup-after basic > test.log
Get-Content test.log | Select-Object -last 42
if ($LastExitCode -ne 0) {
throw "Exec: $ErrorMessage"
} else {
& ./$env:CONFIGURATION/mdbx_chk.exe -nvv test.db | Tee-Object -file chk.log | Select-Object -last 42
}
}
on_failure:
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\test.log
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\test.db
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\chk.log

View file

@ -0,0 +1,666 @@
## Copyright (c) 2012-2019 Leonid Yuriev <leo@yuriev.ru>.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
cmake_minimum_required(VERSION 3.8.2)
cmake_policy(PUSH)
cmake_policy(VERSION 3.8.2)
if (CMAKE_VERSION MATCHES ".*MSVC.*")
message(FATAL_ERROR "CMake from MSVC kit is unfit! "
"Please use the original CMake from https://cmake.org/download/")
endif()
if (NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED))
message(FATAL_ERROR "This module required C or C++ to be enabled")
endif()
include(CMakeDependentOption)
if(CMAKE_CXX_COMPILER_LOADED)
include(CheckCXXSourceRuns)
include(CheckCXXSourceCompiles)
include(CheckCXXCompilerFlag)
endif()
if(CMAKE_C_COMPILER_LOADED)
include(CheckCSourceRuns)
include(CheckCSourceCompiles)
include(CheckCCompilerFlag)
endif()
# Check if the same compile family is used for both C and CXX
if(CMAKE_C_COMPILER_LOADED AND CMAKE_CXX_COMPILER_LOADED AND
NOT (CMAKE_C_COMPILER_ID STREQUAL CMAKE_CXX_COMPILER_ID))
message(WARNING "CMAKE_C_COMPILER_ID (${CMAKE_C_COMPILER_ID}) is different "
"from CMAKE_CXX_COMPILER_ID (${CMAKE_CXX_COMPILER_ID}). "
"The final binary may be unusable.")
endif()
if(CMAKE_CXX_COMPILER_LOADED)
set(CMAKE_PRIMARY_LANG "CXX")
else()
set(CMAKE_PRIMARY_LANG "C")
endif()
macro(check_compiler_flag flag variable)
if(CMAKE_CXX_COMPILER_LOADED)
check_cxx_compiler_flag(${flag} ${variable})
else()
check_c_compiler_flag(${flag} ${variable})
endif()
endmacro(check_compiler_flag)
# We support building with Clang and gcc. First check
# what we're using for build.
if(CMAKE_C_COMPILER_LOADED AND CMAKE_C_COMPILER_ID STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG ON)
set(CMAKE_COMPILER_IS_GNUCC OFF)
endif()
if(CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXx_COMPILER_ID STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG ON)
set(CMAKE_COMPILER_IS_GNUCXX OFF)
endif()
# Hard coding the compiler version is ugly from cmake POV, but
# at least gives user a friendly error message. The most critical
# demand for C++ compiler is support of C++11 lambdas, added
# only in version 4.5 https://gcc.gnu.org/projects/cxx0x.html
if(CMAKE_COMPILER_IS_GNUCC)
if(CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5)
message(FATAL_ERROR "
Your GCC version is ${CMAKE_C_COMPILER_VERSION}, please update")
endif()
endif()
if(CMAKE_COMPILER_IS_GNUCXX)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.5)
message(FATAL_ERROR "
Your G++ version is ${CMAKE_CXX_COMPILER_VERSION}, please update")
endif()
endif()
if(CMAKE_C_COMPILER_LOADED)
# Check for Elbrus lcc
execute_process(COMMAND ${CMAKE_C_COMPILER} --version
OUTPUT_VARIABLE tmp_lcc_probe_version
RESULT_VARIABLE tmp_lcc_probe_result ERROR_QUIET)
if(tmp_lcc_probe_result EQUAL 0)
string(FIND "${tmp_lcc_probe_version}" "lcc:" tmp_lcc_marker)
string(FIND "${tmp_lcc_probe_version}" ":e2k-" tmp_e2k_marker)
if(tmp_lcc_marker GREATER -1 AND tmp_e2k_marker GREATER tmp_lcc_marker)
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-version
OUTPUT_VARIABLE CMAKE_C_COMPILER_VERSION
RESULT_VARIABLE tmp_lcc_probe_result)
set(CMAKE_COMPILER_IS_ELBRUSC ON)
set(CMAKE_C_COMPILER_ID "Elbrus")
else()
set(CMAKE_COMPILER_IS_ELBRUSC OFF)
endif()
unset(tmp_lcc_marker)
unset(tmp_e2k_marker)
endif()
unset(tmp_lcc_probe_version)
unset(tmp_lcc_probe_result)
endif()
if(CMAKE_CXX_COMPILER_LOADED)
# Check for Elbrus l++
execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
OUTPUT_VARIABLE tmp_lxx_probe_version
RESULT_VARIABLE tmp_lxx_probe_result ERROR_QUIET)
if(tmp_lxx_probe_result EQUAL 0)
string(FIND "${tmp_lxx_probe_version}" "lcc:" tmp_lcc_marker)
string(FIND "${tmp_lxx_probe_version}" ":e2k-" tmp_e2k_marker)
if(tmp_lcc_marker GREATER -1 AND tmp_e2k_marker GREATER tmp_lcc_marker)
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -print-version
OUTPUT_VARIABLE CMAKE_CXX_COMPILER_VERSION
RESULT_VARIABLE tmp_lxx_probe_result)
set(CMAKE_COMPILER_IS_ELBRUSCXX ON)
set(CMAKE_CXX_COMPILER_ID "Elbrus")
else()
set(CMAKE_COMPILER_IS_ELBRUSCXX OFF)
endif()
unset(tmp_lcc_marker)
unset(tmp_e2k_marker)
endif()
unset(tmp_lxx_probe_version)
unset(tmp_lxx_probe_result)
endif()
if(CMAKE_CL_64)
set(MSVC64 1)
endif()
if(WIN32 AND CMAKE_COMPILER_IS_GNU${CMAKE_PRIMARY_LANG})
execute_process(COMMAND ${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER} -dumpmachine
OUTPUT_VARIABLE __GCC_TARGET_MACHINE
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(__GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
set(MINGW64 1)
endif()
unset(__GCC_TARGET_MACHINE)
endif()
if(CMAKE_COMPILER_IS_ELBRUSC OR CMAKE_SYSTEM_PROCESSOR MATCHES "e2k.*|E2K.*|elbrus.*|ELBRUS.*")
set(E2K TRUE)
set(CMAKE_SYSTEM_ARCH "Elbrus")
elseif((MSVC64 OR MINGW64) AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set(X86_64 TRUE)
set(CMAKE_SYSTEM_ARCH "x86_64")
elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING))
set(X86_32 TRUE)
set(CMAKE_SYSTEM_ARCH "x86")
elseif(CMAKE_COMPILER_IS_ELBRUSC OR CMAKE_SYSTEM_PROCESSOR MATCHES "e2k.*|E2K.*|elbrus.*|ELBRUS.*")
set(E2K TRUE)
set(CMAKE_SYSTEM_ARCH "Elbrus")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set(X86_64 TRUE)
set(CMAKE_SYSTEM_ARCH "x86_64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*")
set(X86_32 TRUE)
set(CMAKE_SYSTEM_ARCH "x86")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|ARM64.*)" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set(AARCH64 TRUE)
set(CMAKE_SYSTEM_ARCH "ARM64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)")
set(ARM32 TRUE)
set(CMAKE_SYSTEM_ARCH "ARM")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PPC64LE TRUE)
set(CMAKE_SYSTEM_ARCH "PPC64LE")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PPC64 TRUE)
set(CMAKE_SYSTEM_ARCH "PPC64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc).*")
set(PPC32 TRUE)
set(CMAKE_SYSTEM_ARCH "PPC")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS)64.*" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set(MIPS64 TRUE)
set(CMAKE_SYSTEM_ARCH "MIPS64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS).*")
set(MIPS32 TRUE)
set(CMAKE_SYSTEM_ARCH "MIPS")
endif()
if(MSVC)
check_compiler_flag("/WX" CC_HAS_WERROR)
else()
#
# GCC started to warn for unused result starting from 4.2, and
# this is when it introduced -Wno-unused-result
# GCC can also be built on top of llvm runtime (on mac).
check_compiler_flag("-Wno-unknown-pragmas" CC_HAS_WNO_UNKNOWN_PRAGMAS)
check_compiler_flag("-Wextra" CC_HAS_WEXTRA)
check_compiler_flag("-Werror" CC_HAS_WERROR)
check_compiler_flag("-fexceptions" CC_HAS_FEXCEPTIONS)
check_cxx_compiler_flag("-fcxx-exceptions" CC_HAS_FCXX_EXCEPTIONS)
check_compiler_flag("-funwind-tables" CC_HAS_FUNWIND_TABLES)
check_compiler_flag("-fno-omit-frame-pointer" CC_HAS_FNO_OMIT_FRAME_POINTER)
check_compiler_flag("-fno-common" CC_HAS_FNO_COMMON)
check_compiler_flag("-ggdb" CC_HAS_GGDB)
check_compiler_flag("-fvisibility=hidden" CC_HAS_VISIBILITY)
check_compiler_flag("-march=native" CC_HAS_ARCH_NATIVE)
check_compiler_flag("-Og" CC_HAS_DEBUG_FRENDLY_OPTIMIZATION)
check_compiler_flag("-Wall" CC_HAS_WALL)
check_compiler_flag("-Ominimal" CC_HAS_OMINIMAL)
check_compiler_flag("-ffunction-sections -fdata-sections" CC_HAS_SECTIONS)
check_compiler_flag("-ffast-math" CC_HAS_FASTMATH)
# Check for an omp support
set(CMAKE_REQUIRED_FLAGS "-fopenmp -Werror")
check_cxx_source_compiles("int main(void) {
#pragma omp parallel
return 0;
}" HAVE_OPENMP)
set(CMAKE_REQUIRED_FLAGS "")
endif()
# Check for LTO support by GCC
if(CMAKE_COMPILER_IS_GNU${CMAKE_PRIMARY_LANG})
unset(gcc_collect)
unset(gcc_lto_wrapper)
if(NOT CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 4.7)
execute_process(COMMAND ${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER} -v
OUTPUT_VARIABLE gcc_info_v ERROR_VARIABLE gcc_info_v)
string(REGEX MATCH "^(.+\nCOLLECT_GCC=)([^ \n]+)(\n.+)$" gcc_collect_valid ${gcc_info_v})
if(gcc_collect_valid)
string(REGEX REPLACE "^(.+\nCOLLECT_GCC=)([^ \n]+)(\n.+)$" "\\2" gcc_collect ${gcc_info_v})
endif()
string(REGEX MATCH "^(.+\nCOLLECT_LTO_WRAPPER=)([^ \n]+/lto-wrapper)(\n.+)$" gcc_lto_wrapper_valid ${gcc_info_v})
if(gcc_lto_wrapper_valid)
string(REGEX REPLACE "^(.+\nCOLLECT_LTO_WRAPPER=)([^ \n]+/lto-wrapper)(\n.+)$" "\\2" gcc_lto_wrapper ${gcc_info_v})
endif()
set(gcc_suffix "")
if(gcc_collect_valid AND gcc_collect)
string(REGEX MATCH "^(.*cc)(-.+)$" gcc_suffix_valid ${gcc_collect})
if(gcc_suffix_valid)
string(REGEX MATCH "^(.*cc)(-.+)$" "\\2" gcc_suffix ${gcc_collect})
endif()
endif()
get_filename_component(gcc_dir ${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER} DIRECTORY)
if(NOT CMAKE_GCC_AR)
find_program(CMAKE_GCC_AR NAMES gcc${gcc_suffix}-ar gcc-ar${gcc_suffix} PATHS ${gcc_dir} NO_DEFAULT_PATH)
endif()
if(NOT CMAKE_GCC_NM)
find_program(CMAKE_GCC_NM NAMES gcc${gcc_suffix}-nm gcc-nm${gcc_suffix} PATHS ${gcc_dir} NO_DEFAULT_PATH)
endif()
if(NOT CMAKE_GCC_RANLIB)
find_program(CMAKE_GCC_RANLIB NAMES gcc${gcc_suffix}-ranlib gcc-ranlib${gcc_suffix} PATHS ${gcc_dir} NO_DEFAULT_PATH)
endif()
unset(gcc_dir)
unset(gcc_suffix_valid)
unset(gcc_suffix)
unset(gcc_lto_wrapper_valid)
unset(gcc_collect_valid)
unset(gcc_collect)
unset(gcc_info_v)
endif()
if(CMAKE_GCC_AR AND CMAKE_GCC_NM AND CMAKE_GCC_RANLIB AND gcc_lto_wrapper)
message(STATUS "Found GCC's LTO toolset: ${gcc_lto_wrapper}, ${CMAKE_GCC_AR}, ${CMAKE_GCC_RANLIB}")
set(GCC_LTO_CFLAGS "-flto -fno-fat-lto-objects -fuse-linker-plugin")
set(GCC_LTO_AVAILABLE TRUE)
message(STATUS "Link-Time Optimization by GCC is available")
else()
set(GCC_LTO_AVAILABLE FALSE)
message(STATUS "Link-Time Optimization by GCC is NOT available")
endif()
unset(gcc_lto_wrapper)
endif()
# check for LTO by MSVC
if(MSVC)
if(NOT MSVC_VERSION LESS 1600)
set(MSVC_LTO_AVAILABLE TRUE)
message(STATUS "Link-Time Optimization by MSVC is available")
else()
set(MSVC_LTO_AVAILABLE FALSE)
message(STATUS "Link-Time Optimization by MSVC is NOT available")
endif()
endif()
# Check for LTO support by CLANG
if(CMAKE_COMPILER_IS_CLANG)
if(NOT CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 3.5)
execute_process(COMMAND ${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER} -print-search-dirs
OUTPUT_VARIABLE clang_search_dirs)
unset(clang_bindir)
unset(clang_libdir)
string(REGEX MATCH "^(.*programs: =)([^:]*:)*([^:]+/llvm[-.0-9]+/bin[^:]*)(:[^:]*)*(\n.+)$" clang_bindir_valid ${clang_search_dirs})
if(clang_bindir_valid)
string(REGEX REPLACE "^(.*programs: =)([^:]*:)*([^:]+/llvm[-.0-9]+/bin[^:]*)(:[^:]*)*(\n.+)$" "\\3" clang_bindir ${clang_search_dirs})
get_filename_component(clang_libdir "${clang_bindir}/../lib" REALPATH)
if(clang_libdir)
message(STATUS "Found CLANG/LLVM directories: ${clang_bindir}, ${clang_libdir}")
endif()
endif()
if(NOT (clang_bindir AND clang_libdir))
message(STATUS "Could NOT find CLANG/LLVM directories (bin and/or lib).")
endif()
if(NOT CMAKE_CLANG_LD AND clang_bindir)
find_program(CMAKE_CLANG_LD NAMES llvm-link link llvm-ld ld PATHS ${clang_bindir} NO_DEFAULT_PATH)
endif()
if(NOT CMAKE_CLANG_AR AND clang_bindir)
find_program(CMAKE_CLANG_AR NAMES llvm-ar ar PATHS ${clang_bindir} NO_DEFAULT_PATH)
endif()
if(NOT CMAKE_CLANG_NM AND clang_bindir)
find_program(CMAKE_CLANG_NM NAMES llvm-nm nm PATHS ${clang_bindir} NO_DEFAULT_PATH)
endif()
if(NOT CMAKE_CLANG_RANLIB AND clang_bindir)
find_program(CMAKE_CLANG_RANLIB NAMES llvm-ranlib ranlib PATHS ${clang_bindir} NO_DEFAULT_PATH)
endif()
set(clang_lto_plugin_name "LLVMgold${CMAKE_SHARED_LIBRARY_SUFFIX}")
if(NOT CMAKE_LD_GOLD AND clang_bindir)
find_program(CMAKE_LD_GOLD NAMES ld.gold PATHS)
endif()
if(NOT CLANG_LTO_PLUGIN AND clang_libdir)
find_file(CLANG_LTO_PLUGIN ${clang_lto_plugin_name} PATH ${clang_libdir} NO_DEFAULT_PATH)
endif()
if(CLANG_LTO_PLUGIN)
message(STATUS "Found CLANG/LLVM's plugin for LTO: ${CLANG_LTO_PLUGIN}")
else()
message(STATUS "Could NOT find CLANG/LLVM's plugin (${clang_lto_plugin_name}) for LTO.")
endif()
if(CMAKE_CLANG_LD AND CMAKE_CLANG_AR AND CMAKE_CLANG_NM AND CMAKE_CLANG_RANLIB)
message(STATUS "Found CLANG/LLVM's binutils for LTO: ${CMAKE_CLANG_AR}, ${CMAKE_CLANG_RANLIB}")
else()
message(STATUS "Could NOT find CLANG/LLVM's binutils (ar, ranlib, nm) for LTO.")
endif()
unset(clang_lto_plugin_name)
unset(clang_libdir)
unset(clang_bindir_valid)
unset(clang_bindir)
unset(clang_search_dirs)
endif()
if((CLANG_LTO_PLUGIN AND CMAKE_LD_GOLD) AND
(CMAKE_CLANG_LD AND CMAKE_CLANG_AR AND CMAKE_CLANG_NM AND CMAKE_CLANG_RANLIB))
set(CLANG_LTO_AVAILABLE TRUE)
message(STATUS "Link-Time Optimization by CLANG/LLVM is available")
elseif(CMAKE_TOOLCHAIN_FILE AND NOT CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 7.0)
set(CLANG_LTO_AVAILABLE TRUE)
if (NOT CMAKE_CLANG_AR)
set(CMAKE_CLANG_AR ${CMAKE_AR})
endif()
if (NOT CMAKE_CLANG_NM)
set(CMAKE_CLANG_NM ${CMAKE_NM})
endif()
if (NOT CMAKE_CLANG_RANLIB)
set(CMAKE_CLANG_RANLIB ${CMAKE_RANLIB })
endif()
message(STATUS "Assume Link-Time Optimization by CLANG/LLVM is available via ${CMAKE_TOOLCHAIN_FILE}")
else()
set(CLANG_LTO_AVAILABLE FALSE)
message(STATUS "Link-Time Optimization by CLANG/LLVM is NOT available")
endif()
endif()
# Perform build type specific configuration.
option(ENABLE_BACKTRACE "Enable output of fiber backtrace information in 'show
fiber' administrative command. Only works on x86 architectures, if compiled
with gcc. If GNU binutils and binutils-dev libraries are installed, backtrace
is output with resolved function (symbol) names. Otherwise only frame
addresses are printed." OFF)
set(HAVE_BFD False)
if(ENABLE_BACKTRACE)
if(NOT (X86_32 OR X86_64) OR NOT CMAKE_COMPILER_IS_GNU${CMAKE_PRIMARY_LANG})
# We only know this option to work with gcc
message(FATAL_ERROR "ENABLE_BACKTRACE option is set but the system
is not x86 based (${CMAKE_SYSTEM_PROCESSOR}) or the compiler
is not GNU GCC (${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER}).")
endif()
# Use GNU bfd if present.
find_library(BFD_LIBRARY NAMES libbfd.a)
if(BFD_LIBRARY)
check_library_exists(${BFD_LIBRARY} bfd_init "" HAVE_BFD_LIB)
endif()
find_library(IBERTY_LIBRARY NAMES libiberty.a)
if(IBERTY_LIBRARY)
check_library_exists(${IBERTY_LIBRARY} cplus_demangle "" HAVE_IBERTY_LIB)
endif()
set(CMAKE_REQUIRED_DEFINITIONS -DPACKAGE=${PACKAGE} -DPACKAGE_VERSION=${PACKAGE_VERSION})
check_include_files(bfd.h HAVE_BFD_H)
set(CMAKE_REQUIRED_DEFINITIONS)
find_package(ZLIB)
if(HAVE_BFD_LIB AND HAVE_BFD_H AND HAVE_IBERTY_LIB AND ZLIB_FOUND)
set(HAVE_BFD ON)
set(BFD_LIBRARIES ${BFD_LIBRARY} ${IBERTY_LIBRARY} ${ZLIB_LIBRARIES})
find_package_message(BFD_LIBRARIES "Found libbfd and dependencies"
${BFD_LIBRARIES})
if(TARGET_OS_FREEBSD AND NOT TARGET_OS_DEBIAN_FREEBSD)
set(BFD_LIBRARIES ${BFD_LIBRARIES} iconv)
endif()
endif()
endif()
macro(setup_compile_flags)
# LY: save initial C/CXX flags
if(NOT INITIAL_CMAKE_FLAGS_SAVED)
if(MSVC)
string(REGEX REPLACE "^(.*)(/EHsc)( *)(.*)$" "\\1/EHs\\3\\4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endif()
set(INITIAL_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "Initial CMake's flags" FORCE)
set(INITIAL_CMAKE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "Initial CMake's flags" FORCE)
set(INITIAL_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} CACHE STRING "Initial CMake's flags" FORCE)
set(INITIAL_CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} CACHE STRING "Initial CMake's flags" FORCE)
set(INITIAL_CMAKE_STATIC_LINKER_FLAGS ${CMAKE_STATIC_LINKER_FLAGS} CACHE STRING "Initial CMake's flags" FORCE)
set(INITIAL_CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS} CACHE STRING "Initial CMake's flags" FORCE)
set(INITIAL_CMAKE_FLAGS_SAVED TRUE CACHE INTERNAL "State of initial CMake's flags" FORCE)
endif()
# LY: reset C/CXX flags
set(CXX_FLAGS ${INITIAL_CMAKE_CXX_FLAGS})
set(C_FLAGS ${INITIAL_CMAKE_C_FLAGS})
set(EXE_LINKER_FLAGS ${INITIAL_CMAKE_EXE_LINKER_FLAGS})
set(SHARED_LINKER_FLAGS ${INITIAL_CMAKE_SHARED_LINKER_FLAGS})
set(STATIC_LINKER_FLAGS ${INITIAL_CMAKE_STATIC_LINKER_FLAGS})
set(MODULE_LINKER_FLAGS ${INITIAL_CMAKE_MODULE_LINKER_FLAGS})
if(CC_HAS_FEXCEPTIONS)
add_compile_flags("C;CXX" "-fexceptions")
endif()
if(CC_HAS_FCXX_EXCEPTIONS)
add_compile_flags("CXX" "-fcxx-exceptions -frtti")
endif()
# In C a global variable without a storage specifier (static/extern) and
# without an initialiser is called a tentative definition. The
# language permits multiple tentative definitions in the single
# translation unit; i.e. int foo; int foo; is perfectly ok. GNU
# toolchain goes even further, allowing multiple tentative definitions
# in *different* translation units. Internally, variables introduced via
# tentative definitions are implemented as common symbols. Linker
# permits multiple definitions if they are common symbols, and it picks
# one arbitrarily for inclusion in the binary being linked.
#
# -fno-common forces GNU toolchain to behave in a more
# standard-conformant way in respect to tentative definitions and it
# prevents common symbols generation. Since we are a cross-platform
# project it really makes sense. There are toolchains that dont
# implement GNU style handling of the tentative definitions and there
# are platforms lacking proper support for common symbols (osx).
if(CC_HAS_FNO_COMMON)
add_compile_flags("C;CXX" "-fno-common")
endif()
if(CC_HAS_GGDB)
add_compile_flags("C;CXX" "-ggdb")
endif()
if(CC_HAS_WNO_UNKNOWN_PRAGMAS AND NOT HAVE_OPENMP)
add_compile_flags("C;CXX" -Wno-unknown-pragmas)
endif()
if(CC_HAS_SECTIONS)
add_compile_flags("C;CXX" -ffunction-sections -fdata-sections)
elseif(MSVC)
add_compile_flags("C;CXX" /Gy)
endif()
# We must set -fno-omit-frame-pointer here, since we rely
# on frame pointer when getting a backtrace, and it must
# be used consistently across all object files.
# The same reasoning applies to -fno-stack-protector switch.
if(ENABLE_BACKTRACE)
if(CC_HAS_FNO_OMIT_FRAME_POINTER)
add_compile_flags("C;CXX" "-fno-omit-frame-pointer")
endif()
endif()
if(MSVC)
if (MSVC_VERSION LESS 1900)
message(FATAL_ERROR "At least \"Microsoft C/C++ Compiler\" version 19.0.24234.1 (Visual Studio 2015 Update 3) is required.")
endif()
add_compile_flags("CXX" "/Zc:__cplusplus")
add_compile_flags("C;CXX" "/W4")
add_compile_flags("C;CXX" "/utf-8")
else()
if(CC_HAS_WALL)
add_compile_flags("C;CXX" "-Wall")
endif()
if(CC_HAS_WEXTRA)
add_compile_flags("C;CXX" "-Wextra")
endif()
endif()
if(CMAKE_COMPILER_IS_GNU${CMAKE_PRIMARY_LANG}
AND CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 5)
# G++ bug. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31488
add_compile_flags("CXX" "-Wno-invalid-offsetof")
endif()
add_definitions("-D__STDC_FORMAT_MACROS=1")
add_definitions("-D__STDC_LIMIT_MACROS=1")
add_definitions("-D__STDC_CONSTANT_MACROS=1")
add_definitions("-D_HAS_EXCEPTIONS=1")
# Only add -Werror if it's a debug build, done by developers.
# Release builds should not cause extra trouble.
if(CC_HAS_WERROR AND (CI OR CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE STREQUAL "Debug"))
if(MSVC)
add_compile_flags("C;CXX" "/WX")
elseif(CMAKE_COMPILER_IS_CLANG)
if (NOT CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 6)
add_compile_flags("C;CXX" "-Werror")
endif()
elseif(CMAKE_COMPILER_IS_GNUCC)
if (NOT CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 6)
add_compile_flags("C;CXX" "-Werror")
endif()
else()
add_compile_flags("C;CXX" "-Werror")
endif()
endif()
if(HAVE_OPENMP)
add_compile_flags("C;CXX" "-fopenmp")
endif()
if (ENABLE_ASAN)
add_compile_flags("C;CXX" -fsanitize=address)
endif()
if(ENABLE_GCOV)
if(NOT HAVE_GCOV)
message(FATAL_ERROR
"ENABLE_GCOV option requested but gcov library is not found")
endif()
add_compile_flags("C;CXX" "-fprofile-arcs" "-ftest-coverage")
set(EXE_LINKER_FLAGS "${EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
set(SHARED_LINKER_FLAGS "${SHARED_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
set(MODULE_LINKER_FLAGS "${MODULE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
# add_library(gcov SHARED IMPORTED)
endif()
if(ENABLE_GPROF)
add_compile_flags("C;CXX" "-pg")
endif()
if(CMAKE_COMPILER_IS_GNUCC AND LTO_ENABLED)
add_compile_flags("C;CXX" ${GCC_LTO_CFLAGS})
set(EXE_LINKER_FLAGS "${EXE_LINKER_FLAGS} ${GCC_LTO_CFLAGS} -fverbose-asm -fwhole-program")
set(SHARED_LINKER_FLAGS "${SHARED_LINKER_FLAGS} ${GCC_LTO_CFLAGS} -fverbose-asm")
set(MODULE_LINKER_FLAGS "${MODULE_LINKER_FLAGS} ${GCC_LTO_CFLAGS} -fverbose-asm")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5)
# Pass the same optimization flags to the linker
set(compile_flags "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
set(EXE_LINKER_FLAGS "${EXE_LINKER_FLAGS} ${compile_flags}")
set(SHARED_LINKER_FLAGS "${SHARED_LINKER_FLAGS} ${compile_flags}")
set(MODULE_LINKER_FLAGS "${MODULE_LINKER_FLAGS} ${compile_flags}")
unset(compile_flags)
else()
add_compile_flags("CXX" "-flto-odr-type-merging")
endif()
endif()
if(MSVC AND LTO_ENABLED)
add_compile_flags("C;CXX" "/GL")
foreach(linkmode IN ITEMS EXE SHARED STATIC MODULE)
set(${linkmode}_LINKER_FLAGS "${${linkmode}_LINKER_FLAGS} /LTCG")
string(REGEX REPLACE "^(.*)(/INCREMENTAL:NO *)(.*)$" "\\1\\3" ${linkmode}_LINKER_FLAGS "${${linkmode}_LINKER_FLAGS}")
string(REGEX REPLACE "^(.*)(/INCREMENTAL:YES *)(.*)$" "\\1\\3" ${linkmode}_LINKER_FLAGS "${${linkmode}_LINKER_FLAGS}")
string(REGEX REPLACE "^(.*)(/INCREMENTAL *)(.*)$" "\\1\\3" ${linkmode}_LINKER_FLAGS "${${linkmode}_LINKER_FLAGS}")
string(STRIP "${${linkmode}_LINKER_FLAGS}" ${linkmode}_LINKER_FLAGS)
foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES ITEMS Release MinSizeRel RelWithDebInfo Debug)
string(TOUPPER "${config}" config_uppercase)
if(DEFINED "CMAKE_${linkmode}_LINKER_FLAGS_${config_uppercase}")
string(REGEX REPLACE "^(.*)(/INCREMENTAL:NO *)(.*)$" "\\1\\3" altered_flags "${CMAKE_${linkmode}_LINKER_FLAGS_${config_uppercase}}")
string(REGEX REPLACE "^(.*)(/INCREMENTAL:YES *)(.*)$" "\\1\\3" altered_flags "${altered_flags}")
string(REGEX REPLACE "^(.*)(/INCREMENTAL *)(.*)$" "\\1\\3" altered_flags "${altered_flags}")
string(STRIP "${altered_flags}" altered_flags)
if(NOT "${altered_flags}" STREQUAL "${CMAKE_${linkmode}_LINKER_FLAGS_${config_uppercase}}")
set(CMAKE_${linkmode}_LINKER_FLAGS_${config_uppercase} "${altered_flags}" CACHE STRING "Altered: '/INCREMENTAL' removed for LTO" FORCE)
endif()
endif()
endforeach(config)
endforeach(linkmode)
unset(linkmode)
foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES ITEMS Release MinSizeRel RelWithDebInfo)
foreach(lang IN ITEMS C CXX)
string(TOUPPER "${config}" config_uppercase)
if(DEFINED "CMAKE_${lang}_FLAGS_${config_uppercase}")
string(REPLACE "/O2" "/Ox" altered_flags "${CMAKE_${lang}_FLAGS_${config_uppercase}}")
if(NOT "${altered_flags}" STREQUAL "${CMAKE_${lang}_FLAGS_${config_uppercase}}")
set(CMAKE_${lang}_FLAGS_${config_uppercase} "${altered_flags}" CACHE STRING "Altered: '/O2' replaced by '/Ox' for LTO" FORCE)
endif()
endif()
unset(config_uppercase)
endforeach(lang)
endforeach(config)
unset(altered_flags)
unset(lang)
unset(config)
endif()
if(CMAKE_COMPILER_IS_CLANG AND OSX_ARCHITECTURES)
set(EXE_LINKER_FLAGS "${EXE_LINKER_FLAGS} -Wl,-keep_dwarf_unwind")
set(SHARED_LINKER_FLAGS "${SHARED_LINKER_FLAGS} -Wl,-keep_dwarf_unwind")
set(MODULE_LINKER_FLAGS "${MODULE_LINKER_FLAGS} -Wl,-keep_dwarf_unwind")
endif()
if(CMAKE_COMPILER_IS_CLANG AND LTO_ENABLED)
if(CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 3.9)
set(CLANG_LTO_FLAG "-flto")
else()
set(CLANG_LTO_FLAG "-flto=thin")
endif()
add_compile_flags("C;CXX" ${CLANG_LTO_FLAG})
set(EXE_LINKER_FLAGS "${EXE_LINKER_FLAGS} ${CLANG_LTO_FLAG} -fverbose-asm -fwhole-program")
set(SHARED_LINKER_FLAGS "${SHARED_LINKER_FLAGS} ${CLANG_LTO_FLAG} -fverbose-asm")
set(MODULE_LINKER_FLAGS "${MODULE_LINKER_FLAGS} ${CLANG_LTO_FLAG} -fverbose-asm")
endif()
# LY: push C/CXX flags into the cache
set(CMAKE_CXX_FLAGS ${CXX_FLAGS} CACHE STRING "Flags used by the C++ compiler during all build types" FORCE)
set(CMAKE_C_FLAGS ${C_FLAGS} CACHE STRING "Flags used by the C compiler during all build types" FORCE)
set(CMAKE_EXE_LINKER_FLAGS ${EXE_LINKER_FLAGS} CACHE STRING "Flags used by the linker" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS ${SHARED_LINKER_FLAGS} CACHE STRING "Flags used by the linker during the creation of dll's" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS ${STATIC_LINKER_FLAGS} CACHE STRING "Flags used by the linker during the creation of static libraries" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS ${MODULE_LINKER_FLAGS} CACHE STRING "Flags used by the linker during the creation of modules" FORCE)
unset(CXX_FLAGS)
unset(C_FLAGS)
unset(EXE_LINKER_FLAGS)
unset(SHARED_LINKER_FLAGS)
unset(STATIC_LINKER_FLAGS)
unset(MODULE_LINKER_FLAGS)
endmacro(setup_compile_flags)
# determine library for for std::filesystem
set(LIBCXX_FILESYSTEM "")
if(CMAKE_COMPILER_IS_GNUCXX)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
set(LIBCXX_FILESYSTEM "stdc++fs")
endif()
elseif (CMAKE_COMPILER_IS_CLANG)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
set(LIBCXX_FILESYSTEM "c++experimental")
else()
set(LIBCXX_FILESYSTEM "stdc++fs")
endif()
endif()
cmake_policy(POP)

View file

@ -0,0 +1,45 @@
## Copyright (c) 2012-2019 Leonid Yuriev <leo@yuriev.ru>.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
cmake_minimum_required(VERSION 3.8.2)
cmake_policy(PUSH)
cmake_policy(VERSION 3.8.2)
include(CheckLibraryExists)
check_library_exists(gcov __gcov_flush "" HAVE_GCOV)
option(ENABLE_GCOV
"Enable integration with gcov, a code coverage program" OFF)
option(ENABLE_GPROF
"Enable integration with gprof, a performance analyzing tool" OFF)
if(CMAKE_CXX_COMPILER_LOADED)
include(CheckIncludeFileCXX)
check_include_file_cxx(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
else()
include(CheckIncludeFile)
check_include_file(valgrind/memcheck.h HAVE_VALGRIND_MEMCHECK_H)
endif()
option(MDBX_USE_VALGRIND "Enable integration with valgrind, a memory analyzing tool" OFF)
if(MDBX_USE_VALGRIND AND NOT HAVE_VALGRIND_MEMCHECK_H)
message(FATAL_ERROR "MDBX_USE_VALGRIND option is set but valgrind/memcheck.h is not found")
endif()
option(ENABLE_ASAN
"Enable AddressSanitizer, a fast memory error detector based on compiler instrumentation" OFF)
cmake_policy(POP)

View file

@ -0,0 +1,183 @@
## Copyright (c) 2012-2019 Leonid Yuriev <leo@yuriev.ru>.
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
cmake_minimum_required(VERSION 3.8.2)
cmake_policy(PUSH)
cmake_policy(VERSION 3.8.2)
macro(add_compile_flags langs)
foreach(_lang ${langs})
string(REPLACE ";" " " _flags "${ARGN}")
if(CMAKE_CXX_COMPILER_LOADED AND _lang STREQUAL "CXX")
set("${_lang}_FLAGS" "${${_lang}_FLAGS} ${_flags}")
endif()
if(CMAKE_C_COMPILER_LOADED AND _lang STREQUAL "C")
set("${_lang}_FLAGS" "${${_lang}_FLAGS} ${_flags}")
endif()
endforeach()
unset(_lang)
unset(_flags)
endmacro(add_compile_flags)
macro(set_source_files_compile_flags)
foreach(file ${ARGN})
get_filename_component(_file_ext ${file} EXT)
set(_lang "")
if("${_file_ext}" STREQUAL ".m")
set(_lang OBJC)
# CMake believes that Objective C is a flavor of C++, not C,
# and uses g++ compiler for .m files.
# LANGUAGE property forces CMake to use CC for ${file}
set_source_files_properties(${file} PROPERTIES LANGUAGE C)
elseif("${_file_ext}" STREQUAL ".mm")
set(_lang OBJCXX)
endif()
if(_lang)
get_source_file_property(_flags ${file} COMPILE_FLAGS)
if("${_flags}" STREQUAL "NOTFOUND")
set(_flags "${CMAKE_${_lang}_FLAGS}")
else()
set(_flags "${_flags} ${CMAKE_${_lang}_FLAGS}")
endif()
# message(STATUS "Set (${file} ${_flags}")
set_source_files_properties(${file} PROPERTIES COMPILE_FLAGS
"${_flags}")
endif()
endforeach()
unset(_file_ext)
unset(_lang)
endmacro(set_source_files_compile_flags)
macro(fetch_version name version_file)
set(${name}_VERSION "")
set(${name}_GIT_DESCRIBE "")
set(${name}_GIT_TIMESTAMP "")
set(${name}_GIT_TREE "")
set(${name}_GIT_COMMIT "")
set(${name}_GIT_REVISION 0)
set(${name}_GIT_VERSION "")
if(GIT)
execute_process(COMMAND ${GIT} describe --tags --long --dirty=-dirty
OUTPUT_VARIABLE ${name}_GIT_DESCRIBE
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE rc)
if(rc OR "${name}_GIT_DESCRIBE" STREQUAL "")
message(FATAL_ERROR "Please fetch tags and/or install latest version of git ('describe --tags --long --dirty' failed)")
endif()
execute_process(COMMAND ${GIT} show --no-patch --format=%cI HEAD
OUTPUT_VARIABLE ${name}_GIT_TIMESTAMP
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE rc)
if(rc OR "${name}_GIT_TIMESTAMP" STREQUAL "%cI")
execute_process(COMMAND ${GIT} show --no-patch --format=%ci HEAD
OUTPUT_VARIABLE ${name}_GIT_TIMESTAMP
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE rc)
if(rc OR "${name}_GIT_TIMESTAMP" STREQUAL "%ci")
message(FATAL_ERROR "Please install latest version of git ('show --no-patch --format=%cI HEAD' failed)")
endif()
endif()
execute_process(COMMAND ${GIT} show --no-patch --format=%T HEAD
OUTPUT_VARIABLE ${name}_GIT_TREE
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE rc)
if(rc OR "${name}_GIT_TREE" STREQUAL "")
message(FATAL_ERROR "Please install latest version of git ('show --no-patch --format=%T HEAD' failed)")
endif()
execute_process(COMMAND ${GIT} show --no-patch --format=%H HEAD
OUTPUT_VARIABLE ${name}_GIT_COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE rc)
if(rc OR "${name}_GIT_COMMIT" STREQUAL "")
message(FATAL_ERROR "Please install latest version of git ('show --no-patch --format=%H HEAD' failed)")
endif()
execute_process(COMMAND ${GIT} rev-list --count --no-merges HEAD
OUTPUT_VARIABLE ${name}_GIT_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE rc)
if(rc OR "${name}_GIT_REVISION" STREQUAL "")
message(FATAL_ERROR "Please install latest version of git ('rev-list --count --no-merges HEAD' failed)")
endif()
string(REGEX MATCH "^(v)?([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" git_version_valid "${${name}_GIT_DESCRIBE}")
if(git_version_valid)
string(REGEX REPLACE "^(v)?([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" "\\2;\\3;\\4" ${name}_GIT_VERSION ${${name}_GIT_DESCRIBE})
else()
string(REGEX MATCH "^(v)?([0-9]+)\\.([0-9]+)(.*)?" git_version_valid "${${name}_GIT_DESCRIBE}")
if(git_version_valid)
string(REGEX REPLACE "^(v)?([0-9]+)\\.([0-9]+)(.*)?" "\\2;\\3;0" ${name}_GIT_VERSION ${${name}_GIT_DESCRIBE})
else()
message(AUTHOR_WARNING "Bad ${name} version \"${${name}_GIT_DESCRIBE}\"; falling back to 0.0.0 (have you made an initial release?)")
set(${name}_GIT_VERSION "0;0;0")
endif()
endif()
endif()
if(NOT ${name}_GIT_VERSION OR NOT ${name}_GIT_TIMESTAMP OR NOT ${name}_GIT_REVISION)
message(WARNING "Unable to retrive ${name} version from git.")
set(${name}_GIT_VERSION "0;0;0;0")
set(${name}_GIT_TIMESTAMP "")
set(${name}_GIT_REVISION 0)
# Try to get version from VERSION file
if(EXISTS "${version_file}")
file(STRINGS "${version_file}" ${name}_VERSION)
endif()
if(NOT ${name}_VERSION)
message(WARNING "Unable to retrive ${name} version from \"${version_file}\" file.")
set(${name}_VERSION_LIST ${${name}_GIT_VERSION})
string(REPLACE ";" "." ${name}_VERSION "${${name}_GIT_VERSION}")
else()
string(REPLACE "." ";" ${name}_VERSION_LIST ${${name}_VERSION})
endif()
else()
list(APPEND ${name}_GIT_VERSION ${${name}_GIT_REVISION})
set(${name}_VERSION_LIST ${${name}_GIT_VERSION})
string(REPLACE ";" "." ${name}_VERSION "${${name}_GIT_VERSION}")
endif()
list(GET ${name}_VERSION_LIST 0 "${name}_VERSION_MAJOR")
list(GET ${name}_VERSION_LIST 1 "${name}_VERSION_MINOR")
list(GET ${name}_VERSION_LIST 2 "${name}_VERSION_RELEASE")
list(GET ${name}_VERSION_LIST 3 "${name}_VERSION_REVISION")
set(${name}_VERSION_MAJOR ${${name}_VERSION_MAJOR} PARENT_SCOPE)
set(${name}_VERSION_MINOR ${${name}_VERSION_MINOR} PARENT_SCOPE)
set(${name}_VERSION_RELEASE ${${name}_VERSION_RELEASE} PARENT_SCOPE)
set(${name}_VERSION_REVISION ${${name}_VERSION_REVISION} PARENT_SCOPE)
set(${name}_VERSION ${${name}_VERSION} PARENT_SCOPE)
set(${name}_GIT_DESCRIBE ${${name}_GIT_DESCRIBE} PARENT_SCOPE)
set(${name}_GIT_TIMESTAMP ${${name}_GIT_TIMESTAMP} PARENT_SCOPE)
set(${name}_GIT_TREE ${${name}_GIT_TREE} PARENT_SCOPE)
set(${name}_GIT_COMMIT ${${name}_GIT_COMMIT} PARENT_SCOPE)
set(${name}_GIT_REVISION ${${name}_GIT_REVISION} PARENT_SCOPE)
set(${name}_GIT_VERSION ${${name}_GIT_VERSION} PARENT_SCOPE)
endmacro(fetch_version)
cmake_policy(POP)

View file

@ -0,0 +1,6 @@
set(TARGET mdbx_example)
project(${TARGET})
add_executable(${TARGET} example-mdbx.c)
target_link_libraries(${TARGET} mdbx)

View file

@ -0,0 +1 @@
See [example-mdbx.c](example-mdbx.c) as an example of using _libmdbx_, and do a line-by-line comparison of it with the [sample-bdb.txt](sample-bdb.txt) file.

View file

@ -0,0 +1,112 @@
/* MDBX usage examle
*
* Do a line-by-line comparison of this and sample-bdb.txt
*/
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
* Copyright 2017 Ilya Shipitsin <chipitsine@gmail.com>.
* Copyright 2012-2015 Howard Chu, Symas Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#include "mdbx.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
(void)argc;
(void)argv;
int rc;
MDBX_env *env = NULL;
MDBX_dbi dbi = 0;
MDBX_val key, data;
MDBX_txn *txn = NULL;
MDBX_cursor *cursor = NULL;
char sval[32];
rc = mdbx_env_create(&env);
if (rc != MDBX_SUCCESS) {
fprintf(stderr, "mdbx_env_create: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
rc = mdbx_env_open(env, "./example-db",
MDBX_NOSUBDIR | MDBX_COALESCE | MDBX_LIFORECLAIM, 0664);
if (rc != MDBX_SUCCESS) {
fprintf(stderr, "mdbx_env_open: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
rc = mdbx_txn_begin(env, NULL, 0, &txn);
if (rc != MDBX_SUCCESS) {
fprintf(stderr, "mdbx_txn_begin: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
rc = mdbx_dbi_open(txn, NULL, 0, &dbi);
if (rc != MDBX_SUCCESS) {
fprintf(stderr, "mdbx_dbi_open: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
key.iov_len = sizeof(int);
key.iov_base = sval;
data.iov_len = sizeof(sval);
data.iov_base = sval;
sprintf(sval, "%03x %d foo bar", 32, 3141592);
rc = mdbx_put(txn, dbi, &key, &data, 0);
if (rc != MDBX_SUCCESS) {
fprintf(stderr, "mdbx_put: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
rc = mdbx_txn_commit(txn);
if (rc) {
fprintf(stderr, "mdbx_txn_commit: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
txn = NULL;
rc = mdbx_txn_begin(env, NULL, MDBX_RDONLY, &txn);
if (rc != MDBX_SUCCESS) {
fprintf(stderr, "mdbx_txn_begin: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
rc = mdbx_cursor_open(txn, dbi, &cursor);
if (rc != MDBX_SUCCESS) {
fprintf(stderr, "mdbx_cursor_open: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
}
int found = 0;
while ((rc = mdbx_cursor_get(cursor, &key, &data, MDBX_NEXT)) == 0) {
printf("key: %p %.*s, data: %p %.*s\n", key.iov_base, (int)key.iov_len,
(char *)key.iov_base, data.iov_base, (int)data.iov_len,
(char *)data.iov_base);
found += 1;
}
if (rc != MDBX_NOTFOUND || found == 0) {
fprintf(stderr, "mdbx_cursor_get: (%d) %s\n", rc, mdbx_strerror(rc));
goto bailout;
} else {
rc = MDBX_SUCCESS;
}
bailout:
if (cursor)
mdbx_cursor_close(cursor);
if (txn)
mdbx_txn_abort(txn);
if (dbi)
mdbx_dbi_close(env, dbi);
if (env)
mdbx_env_close(env);
return (rc != MDBX_SUCCESS) ? EXIT_FAILURE : EXIT_SUCCESS;
}

View file

@ -0,0 +1,77 @@
/* BerkeleyDB toy/sample
*
* Do a line-by-line comparison of this and example-mdbx.c
*/
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
* Copyright 2012-2015 Howard Chu, Symas Corp.
* Copyright 2015,2016 Peter-Service R&D LLC.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#include <stdio.h>
#include <string.h>
#include <db.h>
int main(int argc,char * argv[])
{
int rc;
DB_ENV *env;
DB *dbi;
DBT key, data;
DB_TXN *txn;
DBC *cursor;
char sval[32], kval[32];
/* Note: Most error checking omitted for simplicity */
#define FLAGS (DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_INIT_MPOOL|DB_CREATE|DB_THREAD)
rc = db_env_create(&env, 0);
rc = env->open(env, "./testdb", FLAGS, 0664);
rc = db_create(&dbi, env, 0);
rc = env->txn_begin(env, NULL, &txn, 0);
rc = dbi->open(dbi, txn, "test.bdb", NULL, DB_BTREE, DB_CREATE, 0664);
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
key.size = sizeof(int);
key.data = sval;
data.size = sizeof(sval);
data.data = sval;
sprintf(sval, "%03x %d foo bar", 32, 3141592);
rc = dbi->put(dbi, txn, &key, &data, 0);
rc = txn->commit(txn, 0);
if (rc) {
fprintf(stderr, "txn->commit: (%d) %s\n", rc, db_strerror(rc));
goto leave;
}
rc = env->txn_begin(env, NULL, &txn, 0);
rc = dbi->cursor(dbi, txn, &cursor, 0);
key.flags = DB_DBT_USERMEM;
key.data = kval;
key.ulen = sizeof(kval);
data.flags = DB_DBT_USERMEM;
data.data = sval;
data.ulen = sizeof(sval);
while ((rc = cursor->c_get(cursor, &key, &data, DB_NEXT)) == 0) {
printf("key: %p %.*s, data: %p %.*s\n",
key.data, (int) key.size, (char *) key.data,
data.data, (int) data.size, (char *) data.data);
}
rc = cursor->c_close(cursor);
rc = txn->abort(txn);
leave:
rc = dbi->close(dbi, 0);
rc = env->close(env, 0);
return rc;
}

3497
contrib/db/libmdbx/mdbx.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,184 @@
cmake_minimum_required(VERSION 2.8.7)
set(TARGET mdbx)
project(${TARGET})
set(MDBX_VERSION_MAJOR 0)
set(MDBX_VERSION_MINOR 3)
set(MDBX_VERSION_RELEASE 1)
set(MDBX_VERSION_REVISION 0)
set(MDBX_VERSION_STRING ${MDBX_VERSION_MAJOR}.${MDBX_VERSION_MINOR}.${MDBX_VERSION_RELEASE})
enable_language(C)
enable_language(CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED on)
add_definitions(-DNDEBUG=1 -DMDBX_DEBUG=0 -DLIBMDBX_EXPORTS=1 -D_GNU_SOURCE=1)
find_package(Threads REQUIRED)
get_directory_property(hasParent PARENT_DIRECTORY)
if(hasParent)
set(STANDALONE_BUILD 0)
else()
set(STANDALONE_BUILD 1)
enable_testing()
if (CMAKE_C_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpointer-arith")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-compare")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-security")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wwrite-strings")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmax-errors=20")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wunused-function -Wunused-variable -Wunused-value -Wmissing-declarations")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-field-initializers")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-strict-aliasing")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-functions-called-once")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-packed-bitfield-compat")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g3")
endif()
if (COVERAGE)
if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
message(FATAL_ERROR "Coverage requires -DCMAKE_BUILD_TYPE=Debug Current value=${CMAKE_BUILD_TYPE}")
endif()
message(STATUS "Setting coverage compiler flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb3 -O0 --coverage -fprofile-arcs -ftest-coverage")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -ggdb3 -O0 --coverage -fprofile-arcs -ftest-coverage")
add_definitions(-DCOVERAGE_TEST)
endif()
if (NOT TRAVIS)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address -fsanitize=leak -fstack-protector-strong -static-libasan")
endif()
endif()
set(${TARGET}_SRC
mdbx.h
src/bits.h
src/defs.h
src/lck-linux.c
src/mdbx.c
src/osal.c
src/osal.h
src/version.c
)
add_library(${TARGET}_STATIC STATIC
${${TARGET}_SRC}
)
add_library(${TARGET} ALIAS ${TARGET}_STATIC)
add_library(${TARGET}_SHARED SHARED
${${TARGET}_SRC}
)
set_target_properties(${TARGET}_SHARED PROPERTIES
VERSION ${MDBX_VERSION_STRING}
SOVERSION ${MDBX_VERSION_MAJOR}.${MDBX_VERSION_MINOR}
OUTPUT_NAME ${TARGET}
CLEAN_DIRECT_OUTPUT 1
)
set_target_properties(${TARGET}_STATIC PROPERTIES
VERSION ${MDBX_VERSION_STRING}
SOVERSION ${MDBX_VERSION_MAJOR}.${MDBX_VERSION_MINOR}
OUTPUT_NAME ${TARGET}
CLEAN_DIRECT_OUTPUT 1
)
target_include_directories(${TARGET}_STATIC PUBLIC
${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(${TARGET}_SHARED PUBLIC
${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(${TARGET}_STATIC ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(${TARGET}_SHARED ${CMAKE_THREAD_LIBS_INIT})
if(UNIX AND NOT APPLE)
target_link_libraries(${TARGET}_STATIC rt)
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)
add_subdirectory(src/tools)
add_subdirectory(test)
add_subdirectory(test/pcrf)
add_subdirectory(tutorial)
##############################################################################
set(CPACK_GENERATOR "RPM")
set(CPACK_RPM_COMPONENT_INSTALL ON)
# Version
if (NOT "$ENV{BUILD_NUMBER}" STREQUAL "")
set(CPACK_PACKAGE_RELEASE $ENV{BUILD_NUMBER})
else()
if (NOT "$ENV{CI_PIPELINE_ID}" STREQUAL "")
set(CPACK_PACKAGE_RELEASE $ENV{CI_PIPELINE_ID})
else()
set(CPACK_PACKAGE_RELEASE 1)
endif()
endif()
set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE})
set(CPACK_PACKAGE_VERSION ${MDBX_VERSION_STRING})
set(CPACK_PACKAGE_VERSION_FULL ${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE})
set(CPACK_RPM_mdbx-devel_PACKAGE_REQUIRES "mdbx = ${CPACK_PACKAGE_VERSION}")
set(CPACK_RPM_SPEC_INSTALL_POST "/bin/true")
set(CPACK_RPM_mdbx_PACKAGE_NAME mdbx)
set(CPACK_RPM_mdbx-devel_PACKAGE_NAME mdbx-devel)
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The revised and extended descendant of Symas LMDB")
set(CPACK_PACKAGE_VENDOR "???")
set(CPACK_PACKAGE_CONTACT "Vladimir Romanov")
set(CPACK_PACKAGE_RELOCATABLE false)
set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
set(CPACK_RPM_PACKAGE_REQUIRES "")
set(CPACK_RPM_PACKAGE_GROUP "Applications/Database")
set(CPACK_RPM_mdbx_FILE_NAME "${CPACK_RPM_mdbx_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_FULL}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
set(CPACK_RPM_mdbx-devel_FILE_NAME "${CPACK_RPM_mdbx-devel_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_FULL}.${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
/usr/local
/usr/local/bin
/usr/local/lib64
/usr/local/include
/usr/local/man
/usr/local/man/man1
)
include(CPack)

View file

@ -0,0 +1,18 @@
#!/bin/bash
set -e
CONFIG=$1
if [[ -z "${CONFIG}" ]]; then
CONFIG=Debug
fi
if [[ -r /opt/rh/devtoolset-6/enable ]]; then
source /opt/rh/devtoolset-6/enable
fi
#rm -f -r build || true
mkdir -p cmake-build-${CONFIG}
pushd cmake-build-${CONFIG} &> /dev/null
if [[ ! -r Makefile ]]; then
cmake .. -DCMAKE_BUILD_TYPE=${CONFIG}
fi
make -j8 || exit 1
popd &> /dev/null

View file

@ -0,0 +1,25 @@
#!/bin/bash
set -e
CONFIG=$1
if [[ -z "${CONFIG}" ]]; then
CONFIG=Debug
fi
DIRNAME=`dirname ${BASH_SOURCE[0]}`
DIRNAME=`readlink --canonicalize ${DIRNAME}`
if [[ -r /opt/rh/devtoolset-6/enable ]]; then
source /opt/rh/devtoolset-6/enable
fi
mkdir -p cmake-build-${CONFIG}
pushd cmake-build-${CONFIG} &> /dev/null
if [[ ! -r Makefile ]]; then
cmake .. -DCMAKE_BUILD_TYPE=${CONFIG}
fi
rm -f *.rpm
make -j8 package || exit 1
rm -f *-Unspecified.rpm
popd &> /dev/null

View file

@ -0,0 +1,170 @@
##
## Copyright 2019 Leonid Yuriev <leo@yuriev.ru>
## and other libmdbx authors: please see AUTHORS file.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
##
# Get version
fetch_version(MDBX "${CMAKE_CURRENT_SOURCE_DIR}/../VERSION")
message(STATUS "libmdbx version is ${MDBX_VERSION}")
if(MDBX_ALLOY_MODE)
set(LIBMDBX_SOURCES alloy.c)
else()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(LIBMDBX_OSAL windows)
else()
set(LIBMDBX_OSAL posix)
endif()
set(LIBMDBX_SOURCES
elements/defs.h elements/internals.h elements/osal.h
elements/core.c elements/osal.c elements/lck-${LIBMDBX_OSAL}.c)
endif()
list(APPEND LIBMDBX_SOURCES ../mdbx.h
"${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c"
"${CMAKE_CURRENT_SOURCE_DIR}/elements/config.h")
if(MDBX_BUILD_SHARED_LIBRARY)
add_library(mdbx SHARED ${LIBMDBX_SOURCES})
target_compile_definitions(mdbx PRIVATE LIBMDBX_EXPORTS INTERFACE LIBMDBX_IMPORTS)
set(MDBX_LIBDEP_MODE PRIVATE)
else()
add_library(mdbx STATIC ${LIBMDBX_SOURCES})
set(MDBX_LIBDEP_MODE PUBLIC)
endif()
if(CC_HAS_VISIBILITY AND (LTO_ENABLED OR INTERPROCEDURAL_OPTIMIZATION))
set_target_properties(mdbx PROPERTIES LINK_FLAGS "-fvisibility=hidden")
endif()
set_target_properties(mdbx PROPERTIES
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>
C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON
PUBLIC_HEADER "../mdbx.h")
if(CC_HAS_FASTMATH)
target_compile_options(mdbx PRIVATE "-ffast-math")
endif()
if(BUILD_FOR_NATIVE_CPU AND CC_HAS_ARCH_NATIVE)
target_compile_options(mdbx PUBLIC "-march=native")
endif()
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)
################################################################################
#
# library build info (used in library version output)
#
set(MDBX_BUILD_FLAGS "")
# append cmake's build-type flags and defines
if(NOT CMAKE_CONFIGURATION_TYPES)
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_DEFINES_${CMAKE_BUILD_TYPE_UPPERCASE}})
endif()
# append linker dll's options
if(LIBMDBX_TYPE STREQUAL "SHARED")
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_SHARED_LINKER_FLAGS})
endif()
# get definitions
get_target_property(defs_list mdbx COMPILE_DEFINITIONS)
if(defs_list)
list(APPEND MDBX_BUILD_FLAGS ${defs_list})
endif()
# get target compile options
get_target_property(options_list mdbx COMPILE_OPTIONS)
if(options_list)
list(APPEND MDBX_BUILD_FLAGS ${options_list})
endif()
list(REMOVE_DUPLICATES MDBX_BUILD_FLAGS)
string(REPLACE ";" " " MDBX_BUILD_FLAGS "${MDBX_BUILD_FLAGS}")
if(CMAKE_CONFIGURATION_TYPES)
# add dynamic part via per-configuration define
message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS} <AND CONFIGURATION DEPENDENT>")
add_definitions(-DMDBX_BUILD_FLAGS_CONFIG="$<$<CONFIG:Debug>:${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_DEFINES_DEBUG}>$<$<CONFIG:Release>:${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_DEFINES_RELEASE}>$<$<CONFIG:RelWithDebInfo>:${CMAKE_C_FLAGS_RELWITHDEBINFO} ${CMAKE_C_DEFINES_RELWITHDEBINFO}>$<$<CONFIG:MinSizeRel>:${CMAKE_C_FLAGS_MINSIZEREL} ${CMAKE_C_DEFINES_MINSIZEREL}>")
else()
message(STATUS "MDBX Compile Flags: ${MDBX_BUILD_FLAGS}")
endif()
# get compiler info
execute_process(COMMAND sh -c "${CMAKE_C_COMPILER} --version | head -1"
OUTPUT_VARIABLE MDBX_BUILD_COMPILER
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
RESULT_VARIABLE rc)
if(rc OR NOT MDBX_BUILD_COMPILER)
string(STRIP "${CMAKE_C_COMPILER_ID}-${CMAKE_C_COMPILER_VERSION}" MDBX_BUILD_COMPILER)
endif()
# make a build-target triplet
if(CMAKE_C_COMPILER_TARGET)
set(MDBX_BUILD_TARGET "${CMAKE_C_COMPILER_TARGET}")
elseif(CMAKE_C_PLATFORM_ID AND NOT CMAKE_C_PLATFORM_ID STREQUAL CMAKE_SYSTEM_NAME)
string(STRIP "${CMAKE_C_PLATFORM_ID}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
elseif(CMAKE_LIBRARY_ARCHITECTURE)
string(STRIP "${CMAKE_LIBRARY_ARCHITECTURE}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
elseif(CMAKE_GENERATOR_PLATFORM AND NOT CMAKE_C_PLATFORM_ID STREQUAL CMAKE_SYSTEM_NAME)
string(STRIP "${CMAKE_GENERATOR_PLATFORM}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
elseif(CMAKE_SYSTEM_ARCH)
string(STRIP "${CMAKE_SYSTEM_ARCH}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
else()
string(STRIP "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}" MDBX_BUILD_TARGET)
endif()
if(CMAKE_CONFIGURATION_TYPES)
add_definitions(-DMDBX_BUILD_CONFIG="$<CONFIG>")
else()
set(MDBX_BUILD_CONFIG ${CMAKE_BUILD_TYPE})
endif()
# options
string(TIMESTAMP MDBX_BUILD_TIMESTAMP UTC)
set(options VERSION C_COMPILER CXX_COMPILER)
foreach(item IN LISTS options)
if(DEFINED ${item})
set(value "${${item}}")
elseif(DEFINED MDBX_${item})
set(item MDBX_${item})
set(value "${${item}}")
elseif(DEFINED CMAKE_${item})
set(item CMAKE_${item})
set(value "${${item}}")
else()
set(value "undefined")
endif()
message(STATUS "${item}: ${value}")
endforeach(item)
# generate version and config files
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c.in"
"${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c" ESCAPE_QUOTES)
file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/elements/version.c" MDBX_SOURCERY_DIGEST)
string(MAKE_C_IDENTIFIER "${MDBX_GIT_DESCRIBE}" MDBX_SOURCERY_SUFFIX)
set(MDBX_BUILD_SOURCERY "${MDBX_SOURCERY_DIGEST}_${MDBX_SOURCERY_SUFFIX}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/elements/config.h.in"
"${CMAKE_CURRENT_SOURCE_DIR}/elements/config.h" ESCAPE_QUOTES)
add_definitions(-DMDBX_CONFIG_H="config.h")
add_subdirectory(tools)

View file

@ -0,0 +1,26 @@
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>. */
/* Amalgamated build */
#define MDBX_ALLOY 1
#include "elements/internals.h" /* must be included fisrt */
#include "elements/core.c"
#include "elements/osal.c"
#include "elements/version.c"
#if defined(_WIN32) || defined(_WIN64)
#include "elements/lck-windows.c"
#else
#include "elements/lck-posix.c"
#endif

View file

@ -0,0 +1,56 @@
/* This is CMake-template for libmdbx's config.h
******************************************************************************/
/* *INDENT-OFF* */
/* clang-format off */
#cmakedefine HAVE_VALGRIND_MEMCHECK_H
#cmakedefine HAS_RELAXED_CONSTEXPR
#cmakedefine LTO_ENABLED
#cmakedefine MDBX_USE_VALGRIND
#cmakedefine ENABLE_GPROF
#cmakedefine ENABLE_GCOV
#cmakedefine ENABLE_ASAN
/* Common */
#cmakedefine01 MDBX_TXN_CHECKPID
#cmakedefine01 MDBX_TXN_CHECKOWNER
#cmakedefine01 MDBX_BUILD_SHARED_LIBRARY
/* Windows */
#cmakedefine01 MDBX_CONFIG_MANUAL_TLS_CALLBACK
#cmakedefine01 MDBX_AVOID_CRT
/* MacOS */
#cmakedefine01 MDBX_OSX_SPEED_INSTEADOF_DURABILITY
/* POSIX */
#cmakedefine01 MDBX_USE_ROBUST
#cmakedefine01 MDBX_USE_OFDLOCKS
#cmakedefine01 MDBX_DISABLE_GNU_SOURCE
/* Simulate "AUTO" values of tristate options */
#cmakedefine MDBX_TXN_CHECKPID_AUTO
#ifdef MDBX_TXN_CHECKPID_AUTO
#undef MDBX_TXN_CHECKPID
#endif
#cmakedefine MDBX_USE_ROBUST_AUTO
#ifdef MDBX_USE_ROBUST_AUTO
#undef MDBX_USE_ROBUST
#endif
#cmakedefine MDBX_USE_OFDLOCKS_AUTO
#ifdef MDBX_USE_OFDLOCKS_AUTO
#undef MDBX_USE_OFDLOCKS
#endif
/* Build Info */
#cmakedefine MDBX_BUILD_TIMESTAMP "@MDBX_BUILD_TIMESTAMP@"
#cmakedefine MDBX_BUILD_TARGET "@MDBX_BUILD_TARGET@"
#cmakedefine MDBX_BUILD_CONFIG "@MDBX_BUILD_CONFIG@"
#cmakedefine MDBX_BUILD_COMPILER "@MDBX_BUILD_COMPILER@"
#cmakedefine MDBX_BUILD_FLAGS "@MDBX_BUILD_FLAGS@"
#cmakedefine MDBX_BUILD_SOURCERY @MDBX_BUILD_SOURCERY@
/* *INDENT-ON* */
/* clang-format on */

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,450 @@
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#pragma once
/* *INDENT-OFF* */
/* clang-format off */
#ifndef __GNUC_PREREQ
# if defined(__GNUC__) && defined(__GNUC_MINOR__)
# define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
# else
# define __GNUC_PREREQ(maj, min) (0)
# endif
#endif /* __GNUC_PREREQ */
#ifndef __CLANG_PREREQ
# ifdef __clang__
# define __CLANG_PREREQ(maj,min) \
((__clang_major__ << 16) + __clang_minor__ >= ((maj) << 16) + (min))
# else
# define __CLANG_PREREQ(maj,min) (0)
# endif
#endif /* __CLANG_PREREQ */
#ifndef __GLIBC_PREREQ
# if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
# define __GLIBC_PREREQ(maj, min) \
((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
# else
# define __GLIBC_PREREQ(maj, min) (0)
# endif
#endif /* __GLIBC_PREREQ */
#ifndef __has_attribute
# define __has_attribute(x) (0)
#endif
#ifndef __has_feature
# define __has_feature(x) (0)
#endif
#ifndef __has_extension
# define __has_extension(x) (0)
#endif
#ifndef __has_builtin
# define __has_builtin(x) (0)
#endif
#ifndef __has_warning
# define __has_warning(x) (0)
#endif
#ifndef __has_include
# define __has_include(x) (0)
#endif
#if __has_feature(thread_sanitizer)
# define __SANITIZE_THREAD__ 1
#endif
#if __has_feature(address_sanitizer)
# define __SANITIZE_ADDRESS__ 1
#endif
/*----------------------------------------------------------------------------*/
#ifndef __extern_C
# ifdef __cplusplus
# define __extern_C extern "C"
# else
# define __extern_C
# endif
#endif /* __extern_C */
#ifndef __cplusplus
# ifndef bool
# define bool _Bool
# endif
# ifndef true
# define true (1)
# endif
# ifndef false
# define false (0)
# endif
#endif
#if !defined(nullptr) && !defined(__cplusplus) || (__cplusplus < 201103L && !defined(_MSC_VER))
# define nullptr NULL
#endif
/*----------------------------------------------------------------------------*/
#ifndef __always_inline
# if defined(__GNUC__) || __has_attribute(__always_inline__)
# define __always_inline __inline __attribute__((__always_inline__))
# elif defined(_MSC_VER)
# define __always_inline __forceinline
# else
# define __always_inline
# endif
#endif /* __always_inline */
#ifndef __noinline
# if defined(__GNUC__) || __has_attribute(__noinline__)
# define __noinline __attribute__((__noinline__))
# elif defined(_MSC_VER)
# define __noinline __declspec(noinline)
# elif defined(__SUNPRO_C) || defined(__sun) || defined(sun)
# define __noinline inline
# elif !defined(__INTEL_COMPILER)
# define __noinline /* FIXME ? */
# endif
#endif /* __noinline */
#ifndef __must_check_result
# if defined(__GNUC__) || __has_attribute(__warn_unused_result__)
# define __must_check_result __attribute__((__warn_unused_result__))
# else
# define __must_check_result
# endif
#endif /* __must_check_result */
#ifndef __maybe_unused
# if defined(__GNUC__) || __has_attribute(__unused__)
# define __maybe_unused __attribute__((__unused__))
# else
# define __maybe_unused
# endif
#endif /* __maybe_unused */
#ifndef __deprecated
# if defined(__GNUC__) || __has_attribute(__deprecated__)
# define __deprecated __attribute__((__deprecated__))
# elif defined(_MSC_VER)
# define __deprecated __declspec(deprecated)
# else
# define __deprecated
# endif
#endif /* __deprecated */
#if !defined(__noop) && !defined(_MSC_VER)
# define __noop(...) do {} while(0)
#endif /* __noop */
#ifndef __fallthrough
# if __GNUC_PREREQ(7, 0) || __has_attribute(__fallthrough__)
# define __fallthrough __attribute__((__fallthrough__))
# else
# define __fallthrough __noop()
# endif
#endif /* __fallthrough */
#ifndef __unreachable
# if __GNUC_PREREQ(4,5)
# define __unreachable() __builtin_unreachable()
# elif defined(_MSC_VER)
# define __unreachable() __assume(0)
# else
# define __unreachable() __noop()
# endif
#endif /* __unreachable */
#ifndef __prefetch
# if defined(__GNUC__) || defined(__clang__)
# define __prefetch(ptr) __builtin_prefetch(ptr)
# else
# define __prefetch(ptr) __noop(ptr)
# endif
#endif /* __prefetch */
#ifndef __noreturn
# if defined(__GNUC__) || __has_attribute(__noreturn__)
# define __noreturn __attribute__((__noreturn__))
# elif defined(_MSC_VER)
# define __noreturn __declspec(noreturn)
# else
# define __noreturn
# endif
#endif /* __noreturn */
#ifndef __nothrow
# if defined(__cplusplus)
# if __cplusplus < 201703L
# define __nothrow throw()
# else
# define __nothrow noexcept(true)
# endif /* __cplusplus */
# elif defined(__GNUC__) || __has_attribute(__nothrow__)
# define __nothrow __attribute__((__nothrow__))
# elif defined(_MSC_VER) && defined(__cplusplus)
# define __nothrow __declspec(nothrow)
# else
# define __nothrow
# endif
#endif /* __nothrow */
#ifndef __pure_function
/* Many functions have no effects except the return value and their
* return value depends only on the parameters and/or global variables.
* Such a function can be subject to common subexpression elimination
* and loop optimization just as an arithmetic operator would be.
* These functions should be declared with the attribute pure. */
# if defined(__GNUC__) || __has_attribute(__pure__)
# define __pure_function __attribute__((__pure__))
# else
# define __pure_function
# endif
#endif /* __pure_function */
#ifndef __const_function
/* Many functions do not examine any values except their arguments,
* and have no effects except the return value. Basically this is just
* slightly more strict class than the PURE attribute, since function
* is not allowed to read global memory.
*
* Note that a function that has pointer arguments and examines the
* data pointed to must not be declared const. Likewise, a function
* that calls a non-const function usually must not be const.
* It does not make sense for a const function to return void. */
# if defined(__GNUC__) || __has_attribute(__const__)
# define __const_function __attribute__((__const__))
# else
# define __const_function
# endif
#endif /* __const_function */
#ifndef __hidden
# if defined(__GNUC__) || __has_attribute(__visibility__)
# define __hidden __attribute__((__visibility__("hidden")))
# else
# define __hidden
# endif
#endif /* __hidden */
#ifndef __optimize
# if defined(__OPTIMIZE__)
# if defined(__clang__) && !__has_attribute(__optimize__)
# define __optimize(ops)
# elif defined(__GNUC__) || __has_attribute(__optimize__)
# define __optimize(ops) __attribute__((__optimize__(ops)))
# else
# define __optimize(ops)
# endif
# else
# define __optimize(ops)
# endif
#endif /* __optimize */
#ifndef __hot
# if defined(__OPTIMIZE__)
# if defined(__e2k__)
# define __hot __attribute__((__hot__)) __optimize(3)
# elif defined(__clang__) && !__has_attribute(__hot_) \
&& __has_attribute(__section__) && (defined(__linux__) || defined(__gnu_linux__))
/* just put frequently used functions in separate section */
# define __hot __attribute__((__section__("text.hot"))) __optimize("O3")
# elif defined(__GNUC__) || __has_attribute(__hot__)
# define __hot __attribute__((__hot__)) __optimize("O3")
# else
# define __hot __optimize("O3")
# endif
# else
# define __hot
# endif
#endif /* __hot */
#ifndef __cold
# if defined(__OPTIMIZE__)
# if defined(__e2k__)
# define __cold __attribute__((__cold__)) __optimize(1)
# elif defined(__clang__) && !__has_attribute(cold) \
&& __has_attribute(__section__) && (defined(__linux__) || defined(__gnu_linux__))
/* just put infrequently used functions in separate section */
# define __cold __attribute__((__section__("text.unlikely"))) __optimize("Os")
# elif defined(__GNUC__) || __has_attribute(cold)
# define __cold __attribute__((__cold__)) __optimize("Os")
# else
# define __cold __optimize("Os")
# endif
# else
# define __cold
# endif
#endif /* __cold */
#ifndef __flatten
# if defined(__OPTIMIZE__) && (defined(__GNUC__) || __has_attribute(__flatten__))
# define __flatten __attribute__((__flatten__))
# else
# define __flatten
# endif
#endif /* __flatten */
#ifndef likely
# if (defined(__GNUC__) || defined(__clang__)) && !defined(__COVERITY__)
# define likely(cond) __builtin_expect(!!(cond), 1)
# else
# define likely(x) (x)
# endif
#endif /* likely */
#ifndef unlikely
# if (defined(__GNUC__) || defined(__clang__)) && !defined(__COVERITY__)
# define unlikely(cond) __builtin_expect(!!(cond), 0)
# else
# define unlikely(x) (x)
# endif
#endif /* unlikely */
/* Workaround for Coverity Scan */
#if defined(__COVERITY__) && __GNUC_PREREQ(7, 0) && !defined(__cplusplus)
typedef float _Float32;
typedef double _Float32x;
typedef double _Float64;
typedef long double _Float64x;
typedef float _Float128 __attribute__((__mode__(__TF__)));
typedef __complex__ float __cfloat128 __attribute__ ((__mode__ (__TC__)));
typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
#endif /* Workaround for Coverity Scan */
#ifndef __printf_args
# if defined(__GNUC__) || __has_attribute(__format__)
# define __printf_args(format_index, first_arg) \
__attribute__((__format__(printf, format_index, first_arg)))
# else
# define __printf_args(format_index, first_arg)
# endif
#endif /* __printf_args */
#ifndef __anonymous_struct_extension__
# if defined(__GNUC__)
# define __anonymous_struct_extension__ __extension__
# else
# define __anonymous_struct_extension__
# endif
#endif /* __anonymous_struct_extension__ */
#ifndef __Wpedantic_format_voidptr
static __inline const void* __pure_function
__Wpedantic_format_voidptr(const void* ptr) {return ptr;}
# define __Wpedantic_format_voidptr(ARG) __Wpedantic_format_voidptr(ARG)
#endif /* __Wpedantic_format_voidptr */
/*----------------------------------------------------------------------------*/
#if defined(MDBX_USE_VALGRIND)
# include <valgrind/memcheck.h>
# ifndef VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE
/* LY: available since Valgrind 3.10 */
# define VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE(a,s)
# define VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE(a,s)
# endif
#elif !defined(RUNNING_ON_VALGRIND)
# define VALGRIND_CREATE_MEMPOOL(h,r,z)
# define VALGRIND_DESTROY_MEMPOOL(h)
# define VALGRIND_MEMPOOL_TRIM(h,a,s)
# define VALGRIND_MEMPOOL_ALLOC(h,a,s)
# define VALGRIND_MEMPOOL_FREE(h,a)
# define VALGRIND_MEMPOOL_CHANGE(h,a,b,s)
# define VALGRIND_MAKE_MEM_NOACCESS(a,s)
# define VALGRIND_MAKE_MEM_DEFINED(a,s)
# define VALGRIND_MAKE_MEM_UNDEFINED(a,s)
# define VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE(a,s)
# define VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE(a,s)
# define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,s) (0)
# define VALGRIND_CHECK_MEM_IS_DEFINED(a,s) (0)
# define RUNNING_ON_VALGRIND (0)
#endif /* MDBX_USE_VALGRIND */
#ifdef __SANITIZE_ADDRESS__
# include <sanitizer/asan_interface.h>
#elif !defined(ASAN_POISON_MEMORY_REGION)
# define ASAN_POISON_MEMORY_REGION(addr, size) \
((void)(addr), (void)(size))
# define ASAN_UNPOISON_MEMORY_REGION(addr, size) \
((void)(addr), (void)(size))
#endif /* __SANITIZE_ADDRESS__ */
/*----------------------------------------------------------------------------*/
#ifndef ARRAY_LENGTH
# ifdef __cplusplus
template <typename T, size_t N>
char (&__ArraySizeHelper(T (&array)[N]))[N];
# define ARRAY_LENGTH(array) (sizeof(::__ArraySizeHelper(array)))
# else
# define ARRAY_LENGTH(array) (sizeof(array) / sizeof(array[0]))
# endif
#endif /* ARRAY_LENGTH */
#ifndef ARRAY_END
# define ARRAY_END(array) (&array[ARRAY_LENGTH(array)])
#endif /* ARRAY_END */
#ifndef STRINGIFY
# define STRINGIFY_HELPER(x) #x
# define STRINGIFY(x) STRINGIFY_HELPER(x)
#endif /* STRINGIFY */
#define CONCAT(a,b) a##b
#define XCONCAT(a,b) CONCAT(a,b)
#ifndef offsetof
# define offsetof(type, member) __builtin_offsetof(type, member)
#endif /* offsetof */
#ifndef container_of
# define container_of(ptr, type, member) \
((type *)((char *)(ptr) - offsetof(type, member)))
#endif /* container_of */
#define MDBX_TETRAD(a, b, c, d) \
((uint32_t)(a) << 24 | (uint32_t)(b) << 16 | (uint32_t)(c) << 8 | (d))
#define MDBX_STRING_TETRAD(str) MDBX_TETRAD(str[0], str[1], str[2], str[3])
#define FIXME "FIXME: " __FILE__ ", " STRINGIFY(__LINE__)
#ifndef STATIC_ASSERT_MSG
# if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \
|| __has_feature(c_static_assert)
# define STATIC_ASSERT_MSG(expr, msg) _Static_assert(expr, msg)
# elif defined(static_assert)
# define STATIC_ASSERT_MSG(expr, msg) static_assert(expr, msg)
# elif defined(_MSC_VER)
# include <crtdbg.h>
# define STATIC_ASSERT_MSG(expr, msg) _STATIC_ASSERT(expr)
# else
# define STATIC_ASSERT_MSG(expr, msg) switch (0) {case 0:case (expr):;}
# endif
#endif /* STATIC_ASSERT */
#ifndef STATIC_ASSERT
# define STATIC_ASSERT(expr) STATIC_ASSERT_MSG(expr, #expr)
#endif
/* *INDENT-ON* */
/* clang-format on */

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,551 @@
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#include "internals.h"
/*----------------------------------------------------------------------------*/
/* global constructor/destructor */
#if defined(__linux__) || defined(__gnu_linux__)
#include <sys/utsname.h>
#ifndef MDBX_ALLOY
uint32_t mdbx_linux_kernel_version;
#endif /* MDBX_ALLOY */
#endif /* Linux */
static __cold __attribute__((__constructor__)) void
mdbx_global_constructor(void) {
#if defined(__linux__) || defined(__gnu_linux__)
struct utsname buffer;
if (uname(&buffer) == 0) {
int i = 0;
char *p = buffer.release;
while (*p && i < 4) {
if (*p >= '0' && *p <= '9') {
long number = strtol(p, &p, 10);
if (number > 0) {
if (number > 255)
number = 255;
mdbx_linux_kernel_version += number << (24 - i * 8);
}
++i;
} else {
++p;
}
}
}
#endif /* Linux */
mdbx_rthc_global_init();
}
static __cold __attribute__((__destructor__)) void
mdbx_global_destructor(void) {
mdbx_rthc_global_dtor();
}
/*----------------------------------------------------------------------------*/
/* lck */
/* Описание реализации блокировок для POSIX & Linux:
*
* lck-файл отображается в память, в нём организуется таблица читателей и
* размещаются совместно используемые posix-мьютексы (futex). Посредством
* этих мьютексов (см struct MDBX_lockinfo) реализуются:
* - Блокировка таблицы читателей для регистрации,
* т.е. функции mdbx_rdt_lock() и mdbx_rdt_unlock().
* - Блокировка БД для пишущих транзакций,
* т.е. функции mdbx_txn_lock() и mdbx_txn_unlock().
*
* Остальной функционал реализуется отдельно посредством файловых блокировок:
* - Первоначальный захват БД в режиме exclusive/shared и последующий перевод
* в операционный режим, функции mdbx_lck_seize() и mdbx_lck_downgrade().
* - Проверка присутствие процессов-читателей,
* т.е. функции mdbx_rpid_set(), mdbx_rpid_clear() и mdbx_rpid_check().
*
* Для блокировки файлов используется fcntl(F_SETLK), так как:
* - lockf() оперирует только эксклюзивной блокировкой и требует
* открытия файла в RW-режиме.
* - flock() не гарантирует атомарности при смене блокировок
* и оперирует только всем файлом целиком.
* - Для контроля процессов-читателей используются однобайтовые
* range-блокировки lck-файла посредством fcntl(F_SETLK). При этом
* в качестве позиции используется pid процесса-читателя.
* - Для первоначального захвата и shared/exclusive выполняется блокировка
* основного файла БД и при успехе lck-файла.
*
* ----------------------------------------------------------------------------
* УДЕРЖИВАЕМЫЕ БЛОКИРОВКИ В ЗАВИСИМОСТИ ОТ РЕЖИМА И СОСТОЯНИЯ
*
* Эксклюзивный режим без lck-файла:
* = заблокирован весь dxb-файл посредством F_RDLCK или F_WRLCK,
* в зависимости от MDBX_RDONLY.
*
* Не-операционный режим на время пере-инициализации и разрушении lck-файла:
* = F_WRLCK блокировка первого байта lck-файла, другие процессы ждут её
* снятия при получении F_RDLCK через F_SETLKW.
* - блокировки dxb-файла могут меняться до снятие эксклюзивной блокировки
* lck-файла:
* + для НЕ-эксклюзивного режима блокировка pid-байта в dxb-файле
* посредством F_RDLCK или F_WRLCK, в зависимости от MDBX_RDONLY.
* + для ЭКСКЛЮЗИВНОГО режима блокировка pid-байта всего dxb-файла
* посредством F_RDLCK или F_WRLCK, в зависимости от MDBX_RDONLY.
*
* ОПЕРАЦИОННЫЙ режим с lck-файлом:
* = F_RDLCK блокировка первого байта lck-файла, другие процессы не могут
* получить F_WRLCK и таким образом видят что БД используется.
* + F_WRLCK блокировка pid-байта в clk-файле после первой транзакции чтения.
* + для НЕ-эксклюзивного режима блокировка pid-байта в dxb-файле
* посредством F_RDLCK или F_WRLCK, в зависимости от MDBX_RDONLY.
* + для ЭКСКЛЮЗИВНОГО режима блокировка pid-байта всего dxb-файла
* посредством F_RDLCK или F_WRLCK, в зависимости от MDBX_RDONLY.
*/
#if MDBX_USE_OFDLOCKS
static int op_setlk, op_setlkw, op_getlk;
static void __cold choice_fcntl() {
assert(!op_setlk && !op_setlkw && !op_getlk);
if ((mdbx_runtime_flags & MDBX_DBG_LEGACY_MULTIOPEN) == 0
#if defined(__linux__) || defined(__gnu_linux__)
&& mdbx_linux_kernel_version >
0x030f0000 /* OFD locks are available since 3.15, but engages here
only for 3.16 and larer kernels (LTS) for reliability reasons */
#endif /* linux */
) {
op_setlk = F_OFD_SETLK;
op_setlkw = F_OFD_SETLKW;
op_getlk = F_OFD_GETLK;
return;
}
op_setlk = F_SETLK;
op_setlkw = F_SETLKW;
op_getlk = F_GETLK;
}
#else
#define op_setlk F_SETLK
#define op_setlkw F_SETLKW
#define op_getlk F_GETLK
#endif /* MDBX_USE_OFDLOCKS */
#ifndef OFF_T_MAX
#define OFF_T_MAX \
((sizeof(off_t) > 4 ? INT64_MAX : INT32_MAX) & ~(size_t)0xffff)
#endif
static int lck_op(mdbx_filehandle_t fd, int cmd, int lck, off_t offset,
off_t len) {
mdbx_jitter4testing(true);
for (;;) {
struct flock lock_op;
memset(&lock_op, 0, sizeof(lock_op));
lock_op.l_type = lck;
lock_op.l_whence = SEEK_SET;
lock_op.l_start = offset;
lock_op.l_len = len;
int rc = fcntl(fd, cmd, &lock_op);
mdbx_jitter4testing(true);
if (rc != -1) {
if (cmd == op_getlk) {
/* Checks reader by pid. Returns:
* MDBX_RESULT_TRUE - if pid is live (unable to acquire lock)
* MDBX_RESULT_FALSE - if pid is dead (lock acquired). */
return (lock_op.l_type == F_UNLCK) ? MDBX_RESULT_FALSE
: MDBX_RESULT_TRUE;
}
return MDBX_SUCCESS;
}
rc = errno;
if (rc != EINTR || cmd == op_setlkw) {
mdbx_assert(nullptr, MDBX_IS_ERROR(rc));
return rc;
}
}
}
MDBX_INTERNAL_FUNC int mdbx_rpid_set(MDBX_env *env) {
assert(env->me_lfd != INVALID_HANDLE_VALUE);
assert(env->me_pid > 0);
if (unlikely(mdbx_getpid() != env->me_pid))
return MDBX_PANIC;
return lck_op(env->me_lfd, op_setlk, F_WRLCK, env->me_pid, 1);
}
MDBX_INTERNAL_FUNC int mdbx_rpid_clear(MDBX_env *env) {
assert(env->me_lfd != INVALID_HANDLE_VALUE);
assert(env->me_pid > 0);
return lck_op(env->me_lfd, op_setlk, F_UNLCK, env->me_pid, 1);
}
MDBX_INTERNAL_FUNC int mdbx_rpid_check(MDBX_env *env, uint32_t pid) {
assert(env->me_lfd != INVALID_HANDLE_VALUE);
assert(pid > 0);
return lck_op(env->me_lfd, op_getlk, F_WRLCK, pid, 1);
}
/*---------------------------------------------------------------------------*/
MDBX_INTERNAL_FUNC int __cold mdbx_lck_seize(MDBX_env *env) {
assert(env->me_fd != INVALID_HANDLE_VALUE);
if (unlikely(mdbx_getpid() != env->me_pid))
return MDBX_PANIC;
#if MDBX_USE_OFDLOCKS
if (unlikely(op_setlk == 0))
choice_fcntl();
#endif /* MDBX_USE_OFDLOCKS */
int rc;
if (env->me_lfd == INVALID_HANDLE_VALUE) {
/* LY: without-lck mode (e.g. exclusive or on read-only filesystem) */
rc =
lck_op(env->me_fd, op_setlk,
(env->me_flags & MDBX_RDONLY) ? F_RDLCK : F_WRLCK, 0, OFF_T_MAX);
if (rc != MDBX_SUCCESS) {
mdbx_error("%s(%s) failed: errcode %u", __func__, "without-lck", rc);
mdbx_assert(env, MDBX_IS_ERROR(rc));
return rc;
}
return MDBX_RESULT_TRUE /* Done: return with exclusive locking. */;
}
/* Firstly try to get exclusive locking. */
rc = lck_op(env->me_lfd, op_setlk, F_WRLCK, 0, 1);
if (rc == MDBX_SUCCESS) {
continue_dxb_exclusive:
rc =
lck_op(env->me_fd, op_setlk,
(env->me_flags & MDBX_RDONLY) ? F_RDLCK : F_WRLCK, 0, OFF_T_MAX);
if (rc == MDBX_SUCCESS)
return MDBX_RESULT_TRUE /* Done: return with exclusive locking. */;
/* the cause may be a collision with POSIX's file-lock recovery. */
if (!(rc == EAGAIN || rc == EACCES || rc == EBUSY || rc == EWOULDBLOCK ||
rc == EDEADLK)) {
mdbx_error("%s(%s) failed: errcode %u", __func__, "dxb-exclusive", rc);
mdbx_assert(env, MDBX_IS_ERROR(rc));
return rc;
}
/* Fallback to lck-shared */
rc = lck_op(env->me_lfd, op_setlk, F_RDLCK, 0, 1);
if (rc != MDBX_SUCCESS) {
mdbx_error("%s(%s) failed: errcode %u", __func__, "fallback-shared", rc);
mdbx_assert(env, MDBX_IS_ERROR(rc));
return rc;
}
/* Done: return with shared locking. */
return MDBX_RESULT_FALSE;
}
/* Wait for lck-shared now. */
/* Here may be await during transient processes, for instance until another
* competing process doesn't call lck_downgrade(). */
rc = lck_op(env->me_lfd, op_setlkw, F_RDLCK, 0, 1);
if (rc != MDBX_SUCCESS) {
mdbx_error("%s(%s) failed: errcode %u", __func__, "try-shared", rc);
mdbx_assert(env, MDBX_IS_ERROR(rc));
return rc;
}
/* Lock against another process operating in without-lck or exclusive mode. */
rc =
lck_op(env->me_fd, op_setlk,
(env->me_flags & MDBX_RDONLY) ? F_RDLCK : F_WRLCK, env->me_pid, 1);
if (rc != MDBX_SUCCESS) {
mdbx_error("%s(%s) failed: errcode %u", __func__,
"lock-against-without-lck", rc);
mdbx_assert(env, MDBX_IS_ERROR(rc));
return rc;
}
/* got shared, retry exclusive */
rc = lck_op(env->me_lfd, op_setlk, F_WRLCK, 0, 1);
if (rc == MDBX_SUCCESS)
goto continue_dxb_exclusive;
if (rc == EAGAIN || rc == EACCES || rc == EBUSY || rc == EWOULDBLOCK ||
rc == EDEADLK)
return MDBX_RESULT_FALSE /* Done: exclusive is unavailable,
but shared locks are alive. */
;
mdbx_error("%s(%s) failed: errcode %u", __func__, "try-exclusive", rc);
mdbx_assert(env, MDBX_IS_ERROR(rc));
return rc;
}
MDBX_INTERNAL_FUNC int mdbx_lck_downgrade(MDBX_env *env) {
assert(env->me_lfd != INVALID_HANDLE_VALUE);
if (unlikely(mdbx_getpid() != env->me_pid))
return MDBX_PANIC;
int rc = MDBX_SUCCESS;
if ((env->me_flags & MDBX_EXCLUSIVE) == 0) {
rc = lck_op(env->me_fd, op_setlk, F_UNLCK, 0, env->me_pid);
if (rc == MDBX_SUCCESS)
rc = lck_op(env->me_fd, op_setlk, F_UNLCK, env->me_pid + 1,
OFF_T_MAX - env->me_pid - 1);
}
if (rc == MDBX_SUCCESS)
rc = lck_op(env->me_lfd, op_setlk, F_RDLCK, 0, 1);
if (unlikely(rc != 0)) {
mdbx_error("%s(%s) failed: errcode %u", __func__, "lck", rc);
assert(MDBX_IS_ERROR(rc));
}
return rc;
}
MDBX_INTERNAL_FUNC int __cold mdbx_lck_destroy(MDBX_env *env,
MDBX_env *inprocess_neighbor) {
if (unlikely(mdbx_getpid() != env->me_pid))
return MDBX_PANIC;
int rc = MDBX_SUCCESS;
if (env->me_lfd != INVALID_HANDLE_VALUE && !inprocess_neighbor &&
env->me_lck &&
/* try get exclusive access */
lck_op(env->me_lfd, op_setlk, F_WRLCK, 0, OFF_T_MAX) == 0 &&
lck_op(env->me_fd, op_setlk,
(env->me_flags & MDBX_RDONLY) ? F_RDLCK : F_WRLCK, 0, OFF_T_MAX)) {
mdbx_verbose("%s: got exclusive, drown mutexes", __func__);
rc = pthread_mutex_destroy(&env->me_lck->mti_rmutex);
if (rc == 0)
rc = pthread_mutex_destroy(&env->me_lck->mti_wmutex);
mdbx_assert(env, rc == 0);
if (rc == 0) {
memset(env->me_lck, 0x81, sizeof(MDBX_lockinfo));
msync(env->me_lck, env->me_os_psize, MS_ASYNC);
}
mdbx_jitter4testing(false);
}
/* 1) POSIX's fcntl() locks (i.e. when op_setlk == F_SETLK) should be restored
* after file was closed.
*
* 2) File locks would be released (by kernel) while the file-descriptors will
* be closed. But to avoid false-positive EACCESS and EDEADLK from the kernel,
* locks should be released here explicitly with properly order. */
/* close dxb and restore lock */
if (env->me_fd != INVALID_HANDLE_VALUE) {
if (unlikely(close(env->me_fd) != 0) && rc == MDBX_SUCCESS)
rc = errno;
env->me_fd = INVALID_HANDLE_VALUE;
if (op_setlk == F_SETLK && inprocess_neighbor && rc == MDBX_SUCCESS) {
/* restore file-lock */
rc = lck_op(
inprocess_neighbor->me_fd, F_SETLKW,
(inprocess_neighbor->me_flags & MDBX_RDONLY) ? F_RDLCK : F_WRLCK,
(inprocess_neighbor->me_flags & MDBX_EXCLUSIVE)
? 0
: inprocess_neighbor->me_pid,
(inprocess_neighbor->me_flags & MDBX_EXCLUSIVE) ? OFF_T_MAX : 1);
}
}
/* close clk and restore locks */
if (env->me_lfd != INVALID_HANDLE_VALUE) {
if (unlikely(close(env->me_lfd) != 0) && rc == MDBX_SUCCESS)
rc = errno;
env->me_lfd = INVALID_HANDLE_VALUE;
if (op_setlk == F_SETLK && inprocess_neighbor && rc == MDBX_SUCCESS) {
/* restore file-locks */
rc = lck_op(inprocess_neighbor->me_lfd, F_SETLKW, F_RDLCK, 0, 1);
if (rc == MDBX_SUCCESS && inprocess_neighbor->me_live_reader)
rc = mdbx_rpid_set(inprocess_neighbor);
}
}
if (inprocess_neighbor && rc != MDBX_SUCCESS)
inprocess_neighbor->me_flags |= MDBX_FATAL_ERROR;
return rc;
}
/*---------------------------------------------------------------------------*/
static int mdbx_mutex_failed(MDBX_env *env, pthread_mutex_t *mutex,
const int rc);
MDBX_INTERNAL_FUNC int __cold mdbx_lck_init(MDBX_env *env,
MDBX_env *inprocess_neighbor,
int global_uniqueness_flag) {
if (inprocess_neighbor)
return MDBX_SUCCESS /* currently don't need any initialization
if LCK already opened/used inside current process */
;
/* FIXME: Unfortunately, there is no other reliable way but to long testing
* on each platform. On the other hand, behavior like FreeBSD is incorrect
* and we can expect it to be rare. Moreover, even on FreeBSD without
* additional in-process initialization, the probability of an problem
* occurring is vanishingly small, and the symptom is a return of EINVAL
* while locking a mutex. In other words, in the worst case, the problem
* results in an EINVAL error at the start of the transaction, but NOT data
* loss, nor database corruption, nor other fatal troubles. Thus, the code
* below I am inclined to think the workaround for erroneous platforms (like
* FreeBSD), rather than a defect of libmdbx. */
#if defined(__FreeBSD__)
/* seems that shared mutexes on FreeBSD required in-process initialization */
(void)global_uniqueness_flag;
#else
/* shared mutexes on many other platforms (including Darwin and Linux's
* futexes) doesn't need any addition in-process initialization */
if (global_uniqueness_flag != MDBX_RESULT_TRUE)
return MDBX_SUCCESS;
#endif
pthread_mutexattr_t ma;
int rc = pthread_mutexattr_init(&ma);
if (rc)
return rc;
rc = pthread_mutexattr_setpshared(&ma, PTHREAD_PROCESS_SHARED);
if (rc)
goto bailout;
#if MDBX_USE_ROBUST
#if defined(__GLIBC__) && !__GLIBC_PREREQ(2, 12) && \
!defined(pthread_mutex_consistent) && _POSIX_C_SOURCE < 200809L
rc = pthread_mutexattr_setrobust_np(&ma, PTHREAD_MUTEX_ROBUST_NP);
#else
rc = pthread_mutexattr_setrobust(&ma, PTHREAD_MUTEX_ROBUST);
#endif
if (rc)
goto bailout;
#endif /* MDBX_USE_ROBUST */
#if _POSIX_C_SOURCE >= 199506L && !defined(MDBX_SAFE4QEMU)
rc = pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT);
if (rc == ENOTSUP)
rc = pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_NONE);
if (rc)
goto bailout;
#endif /* PTHREAD_PRIO_INHERIT */
rc = pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_ERRORCHECK);
if (rc)
goto bailout;
rc = pthread_mutex_init(&env->me_lck->mti_rmutex, &ma);
if (rc)
goto bailout;
rc = pthread_mutex_init(&env->me_lck->mti_wmutex, &ma);
bailout:
pthread_mutexattr_destroy(&ma);
return rc;
}
static int mdbx_robust_lock(MDBX_env *env, pthread_mutex_t *mutex) {
mdbx_jitter4testing(true);
int rc = pthread_mutex_lock(mutex);
if (unlikely(rc != 0))
rc = mdbx_mutex_failed(env, mutex, rc);
return rc;
}
static int mdbx_robust_trylock(MDBX_env *env, pthread_mutex_t *mutex) {
mdbx_jitter4testing(true);
int rc = pthread_mutex_trylock(mutex);
if (unlikely(rc != 0 && rc != EBUSY))
rc = mdbx_mutex_failed(env, mutex, rc);
return (rc != EBUSY) ? rc : MDBX_BUSY;
}
static int mdbx_robust_unlock(MDBX_env *env, pthread_mutex_t *mutex) {
int rc = pthread_mutex_unlock(mutex);
mdbx_jitter4testing(true);
if (unlikely(rc != 0))
env->me_flags |= MDBX_FATAL_ERROR;
return rc;
}
MDBX_INTERNAL_FUNC int mdbx_rdt_lock(MDBX_env *env) {
mdbx_trace("%s", ">>");
int rc = mdbx_robust_lock(env, &env->me_lck->mti_rmutex);
mdbx_trace("<< rc %d", rc);
return rc;
}
MDBX_INTERNAL_FUNC void mdbx_rdt_unlock(MDBX_env *env) {
mdbx_trace("%s", ">>");
int rc = mdbx_robust_unlock(env, &env->me_lck->mti_rmutex);
mdbx_trace("<< rc %d", rc);
if (unlikely(MDBX_IS_ERROR(rc)))
mdbx_panic("%s() failed: errcode %d\n", __func__, rc);
}
int mdbx_txn_lock(MDBX_env *env, bool dontwait) {
mdbx_trace("%s", ">>");
int rc = dontwait ? mdbx_robust_trylock(env, env->me_wmutex)
: mdbx_robust_lock(env, env->me_wmutex);
mdbx_trace("<< rc %d", rc);
return MDBX_IS_ERROR(rc) ? rc : MDBX_SUCCESS;
}
void mdbx_txn_unlock(MDBX_env *env) {
mdbx_trace("%s", ">>");
int rc = mdbx_robust_unlock(env, env->me_wmutex);
mdbx_trace("<< rc %d", rc);
if (unlikely(MDBX_IS_ERROR(rc)))
mdbx_panic("%s() failed: errcode %d\n", __func__, rc);
}
static int __cold mdbx_mutex_failed(MDBX_env *env, pthread_mutex_t *mutex,
const int err) {
int rc = err;
#if MDBX_USE_ROBUST
if (err == EOWNERDEAD) {
/* We own the mutex. Clean up after dead previous owner. */
int rlocked = (env->me_lck && mutex == &env->me_lck->mti_rmutex);
rc = MDBX_SUCCESS;
if (!rlocked) {
if (unlikely(env->me_txn)) {
/* env is hosed if the dead thread was ours */
env->me_flags |= MDBX_FATAL_ERROR;
env->me_txn = NULL;
rc = MDBX_PANIC;
}
}
mdbx_notice("%cmutex owner died, %s", (rlocked ? 'r' : 'w'),
(rc ? "this process' env is hosed" : "recovering"));
int check_rc = mdbx_reader_check0(env, rlocked, NULL);
check_rc = (check_rc == MDBX_SUCCESS) ? MDBX_RESULT_TRUE : check_rc;
#if defined(__GLIBC__) && !__GLIBC_PREREQ(2, 12) && \
!defined(pthread_mutex_consistent) && _POSIX_C_SOURCE < 200809L
int mreco_rc = pthread_mutex_consistent_np(mutex);
#else
int mreco_rc = pthread_mutex_consistent(mutex);
#endif
check_rc = (mreco_rc == 0) ? check_rc : mreco_rc;
if (unlikely(mreco_rc))
mdbx_error("mutex recovery failed, %s", mdbx_strerror(mreco_rc));
rc = (rc == MDBX_SUCCESS) ? check_rc : rc;
if (MDBX_IS_ERROR(rc))
pthread_mutex_unlock(mutex);
return rc;
}
#else
(void)mutex;
#endif /* MDBX_USE_ROBUST */
mdbx_error("mutex (un)lock failed, %s", mdbx_strerror(err));
if (rc != EDEADLK)
env->me_flags |= MDBX_FATAL_ERROR;
return rc;
}

View file

@ -0,0 +1,777 @@
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#include "internals.h"
/* PREAMBLE FOR WINDOWS:
*
* We are not concerned for performance here.
* If you are running Windows a performance could NOT be the goal.
* Otherwise please use Linux.
*
* Regards,
* LY
*/
static void mdbx_winnt_import(void);
#if MDBX_BUILD_SHARED_LIBRARY
#if MDBX_AVOID_CRT && defined(NDEBUG)
/* DEBUG/CHECKED builds still require MSVC's CRT for runtime checks.
*
* Define dll's entry point only for Release build when NDEBUG is defined and
* MDBX_AVOID_CRT=ON. if the entry point isn't defined then MSVC's will
* automatically use DllMainCRTStartup() from CRT library, which also
* automatically call DllMain() from our mdbx.dll */
#pragma comment(linker, "/ENTRY:DllMain")
#endif /* MDBX_AVOID_CRT */
BOOL APIENTRY DllMain(HANDLE module, DWORD reason, LPVOID reserved)
#else
#if !MDBX_CONFIG_MANUAL_TLS_CALLBACK
static
#endif /* !MDBX_CONFIG_MANUAL_TLS_CALLBACK */
void NTAPI
mdbx_dll_handler(PVOID module, DWORD reason, PVOID reserved)
#endif /* MDBX_BUILD_SHARED_LIBRARY */
{
(void)reserved;
switch (reason) {
case DLL_PROCESS_ATTACH:
mdbx_winnt_import();
mdbx_rthc_global_init();
break;
case DLL_PROCESS_DETACH:
mdbx_rthc_global_dtor();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
mdbx_rthc_thread_dtor(module);
break;
}
#if MDBX_BUILD_SHARED_LIBRARY
return TRUE;
#endif
}
#if !MDBX_BUILD_SHARED_LIBRARY && !MDBX_CONFIG_MANUAL_TLS_CALLBACK
/* *INDENT-OFF* */
/* clang-format off */
#if defined(_MSC_VER)
# pragma const_seg(push)
# pragma data_seg(push)
# ifdef _WIN64
/* kick a linker to create the TLS directory if not already done */
# pragma comment(linker, "/INCLUDE:_tls_used")
/* Force some symbol references. */
# pragma comment(linker, "/INCLUDE:mdbx_tls_anchor")
/* specific const-segment for WIN64 */
# pragma const_seg(".CRT$XLB")
const
# else
/* kick a linker to create the TLS directory if not already done */
# pragma comment(linker, "/INCLUDE:__tls_used")
/* Force some symbol references. */
# pragma comment(linker, "/INCLUDE:_mdbx_tls_anchor")
/* specific data-segment for WIN32 */
# pragma data_seg(".CRT$XLB")
# endif
__declspec(allocate(".CRT$XLB")) PIMAGE_TLS_CALLBACK mdbx_tls_anchor = mdbx_dll_handler;
# pragma data_seg(pop)
# pragma const_seg(pop)
#elif defined(__GNUC__)
# ifdef _WIN64
const
# endif
PIMAGE_TLS_CALLBACK mdbx_tls_anchor __attribute__((__section__(".CRT$XLB"), used)) = mdbx_dll_handler;
#else
# error FIXME
#endif
/* *INDENT-ON* */
/* clang-format on */
#endif /* !MDBX_BUILD_SHARED_LIBRARY && !MDBX_CONFIG_MANUAL_TLS_CALLBACK */
/*----------------------------------------------------------------------------*/
#define LCK_SHARED 0
#define LCK_EXCLUSIVE LOCKFILE_EXCLUSIVE_LOCK
#define LCK_WAITFOR 0
#define LCK_DONTWAIT LOCKFILE_FAIL_IMMEDIATELY
static __inline BOOL flock(mdbx_filehandle_t fd, DWORD flags, uint64_t offset,
size_t bytes) {
OVERLAPPED ov;
ov.hEvent = 0;
ov.Offset = (DWORD)offset;
ov.OffsetHigh = HIGH_DWORD(offset);
return LockFileEx(fd, flags, 0, (DWORD)bytes, HIGH_DWORD(bytes), &ov);
}
static __inline BOOL funlock(mdbx_filehandle_t fd, uint64_t offset,
size_t bytes) {
return UnlockFile(fd, (DWORD)offset, HIGH_DWORD(offset), (DWORD)bytes,
HIGH_DWORD(bytes));
}
/*----------------------------------------------------------------------------*/
/* global `write` lock for write-txt processing,
* exclusive locking both meta-pages) */
#define LCK_MAXLEN (1u + (size_t)(MAXSSIZE_T))
#define LCK_META_OFFSET 0
#define LCK_META_LEN 0x10000u
#define LCK_BODY_OFFSET LCK_META_LEN
#define LCK_BODY_LEN (LCK_MAXLEN - LCK_BODY_OFFSET)
#define LCK_META LCK_META_OFFSET, LCK_META_LEN
#define LCK_BODY LCK_BODY_OFFSET, LCK_BODY_LEN
#define LCK_WHOLE 0, LCK_MAXLEN
int mdbx_txn_lock(MDBX_env *env, bool dontwait) {
if (dontwait) {
if (!TryEnterCriticalSection(&env->me_windowsbug_lock))
return MDBX_BUSY;
} else {
EnterCriticalSection(&env->me_windowsbug_lock);
}
if ((env->me_flags & MDBX_EXCLUSIVE) ||
flock(env->me_fd,
dontwait ? (LCK_EXCLUSIVE | LCK_DONTWAIT)
: (LCK_EXCLUSIVE | LCK_WAITFOR),
LCK_BODY))
return MDBX_SUCCESS;
int rc = GetLastError();
LeaveCriticalSection(&env->me_windowsbug_lock);
return (!dontwait || rc != ERROR_LOCK_VIOLATION) ? rc : MDBX_BUSY;
}
void mdbx_txn_unlock(MDBX_env *env) {
int rc =
(env->me_flags & MDBX_EXCLUSIVE) ? TRUE : funlock(env->me_fd, LCK_BODY);
LeaveCriticalSection(&env->me_windowsbug_lock);
if (!rc)
mdbx_panic("%s failed: errcode %u", __func__, GetLastError());
}
/*----------------------------------------------------------------------------*/
/* global `read` lock for readers registration,
* exclusive locking `mti_numreaders` (second) cacheline */
#define LCK_LO_OFFSET 0
#define LCK_LO_LEN offsetof(MDBX_lockinfo, mti_numreaders)
#define LCK_UP_OFFSET LCK_LO_LEN
#define LCK_UP_LEN (sizeof(MDBX_lockinfo) - LCK_UP_OFFSET)
#define LCK_LOWER LCK_LO_OFFSET, LCK_LO_LEN
#define LCK_UPPER LCK_UP_OFFSET, LCK_UP_LEN
MDBX_INTERNAL_FUNC int mdbx_rdt_lock(MDBX_env *env) {
mdbx_srwlock_AcquireShared(&env->me_remap_guard);
if (env->me_lfd == INVALID_HANDLE_VALUE)
return MDBX_SUCCESS; /* readonly database in readonly filesystem */
/* transite from S-? (used) to S-E (locked), e.g. exclusive lock upper-part */
if ((env->me_flags & MDBX_EXCLUSIVE) ||
flock(env->me_lfd, LCK_EXCLUSIVE | LCK_WAITFOR, LCK_UPPER))
return MDBX_SUCCESS;
int rc = GetLastError();
mdbx_srwlock_ReleaseShared(&env->me_remap_guard);
return rc;
}
MDBX_INTERNAL_FUNC void mdbx_rdt_unlock(MDBX_env *env) {
if (env->me_lfd != INVALID_HANDLE_VALUE) {
/* transite from S-E (locked) to S-? (used), e.g. unlock upper-part */
if ((env->me_flags & MDBX_EXCLUSIVE) == 0 &&
!funlock(env->me_lfd, LCK_UPPER))
mdbx_panic("%s failed: errcode %u", __func__, GetLastError());
}
mdbx_srwlock_ReleaseShared(&env->me_remap_guard);
}
static int suspend_and_append(mdbx_handle_array_t **array,
const DWORD ThreadId) {
const unsigned limit = (*array)->limit;
if ((*array)->count == limit) {
void *ptr = mdbx_realloc(
(limit > ARRAY_LENGTH((*array)->handles))
? *array
: /* don't free initial array on the stack */ NULL,
sizeof(mdbx_handle_array_t) +
sizeof(HANDLE) * (limit * 2 - ARRAY_LENGTH((*array)->handles)));
if (!ptr)
return MDBX_ENOMEM;
if (limit == ARRAY_LENGTH((*array)->handles))
memcpy(ptr, *array, sizeof(mdbx_handle_array_t));
*array = (mdbx_handle_array_t *)ptr;
(*array)->limit = limit * 2;
}
HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME | THREAD_QUERY_INFORMATION,
FALSE, ThreadId);
if (hThread == NULL)
return GetLastError();
if (SuspendThread(hThread) == -1) {
int err = GetLastError();
DWORD ExitCode;
if (err == /* workaround for Win10 UCRT bug */ ERROR_ACCESS_DENIED ||
!GetExitCodeThread(hThread, &ExitCode) || ExitCode != STILL_ACTIVE)
err = MDBX_SUCCESS;
CloseHandle(hThread);
return err;
}
(*array)->handles[(*array)->count++] = hThread;
return MDBX_SUCCESS;
}
MDBX_INTERNAL_FUNC int
mdbx_suspend_threads_before_remap(MDBX_env *env, mdbx_handle_array_t **array) {
const size_t CurrentTid = GetCurrentThreadId();
int rc;
if (env->me_lck) {
/* Scan LCK for threads of the current process */
const MDBX_reader *const begin = env->me_lck->mti_readers;
const MDBX_reader *const end = begin + env->me_lck->mti_numreaders;
const size_t WriteTxnOwner = env->me_txn0 ? env->me_txn0->mt_owner : 0;
for (const MDBX_reader *reader = begin; reader < end; ++reader) {
if (reader->mr_pid != env->me_pid || !reader->mr_tid) {
skip_lck:
continue;
}
if (reader->mr_tid == CurrentTid || reader->mr_tid == WriteTxnOwner)
goto skip_lck;
if (env->me_flags & MDBX_NOTLS) {
/* Skip duplicates in no-tls mode */
for (const MDBX_reader *scan = reader; --scan >= begin;)
if (scan->mr_tid == reader->mr_tid)
goto skip_lck;
}
rc = suspend_and_append(array, (mdbx_tid_t)reader->mr_tid);
if (rc != MDBX_SUCCESS) {
bailout_lck:
(void)mdbx_resume_threads_after_remap(*array);
return rc;
}
}
if (WriteTxnOwner && WriteTxnOwner != CurrentTid) {
rc = suspend_and_append(array, (mdbx_tid_t)WriteTxnOwner);
if (rc != MDBX_SUCCESS)
goto bailout_lck;
}
} else {
/* Without LCK (i.e. read-only mode).
* Walk thougth a snapshot of all running threads */
mdbx_assert(env,
env->me_txn0 == NULL || (env->me_flags & MDBX_EXCLUSIVE) != 0);
const HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
return GetLastError();
THREADENTRY32 entry;
entry.dwSize = sizeof(THREADENTRY32);
if (!Thread32First(hSnapshot, &entry)) {
rc = GetLastError();
bailout_toolhelp:
CloseHandle(hSnapshot);
(void)mdbx_resume_threads_after_remap(*array);
return rc;
}
do {
if (entry.th32OwnerProcessID != env->me_pid ||
entry.th32ThreadID == CurrentTid)
continue;
rc = suspend_and_append(array, entry.th32ThreadID);
if (rc != MDBX_SUCCESS)
goto bailout_toolhelp;
} while (Thread32Next(hSnapshot, &entry));
rc = GetLastError();
if (rc != ERROR_NO_MORE_FILES)
goto bailout_toolhelp;
CloseHandle(hSnapshot);
}
return MDBX_SUCCESS;
}
MDBX_INTERNAL_FUNC int
mdbx_resume_threads_after_remap(mdbx_handle_array_t *array) {
int rc = MDBX_SUCCESS;
for (unsigned i = 0; i < array->count; ++i) {
const HANDLE hThread = array->handles[i];
if (ResumeThread(hThread) == -1) {
const int err = GetLastError();
DWORD ExitCode;
if (err != /* workaround for Win10 UCRT bug */ ERROR_ACCESS_DENIED &&
GetExitCodeThread(hThread, &ExitCode) && ExitCode == STILL_ACTIVE)
rc = err;
}
CloseHandle(hThread);
}
return rc;
}
/*----------------------------------------------------------------------------*/
/* global `initial` lock for lockfile initialization,
* exclusive/shared locking first cacheline */
/* Briefly descritpion of locking schema/algorithm:
* - Windows does not support upgrading or downgrading for file locking.
* - Therefore upgrading/downgrading is emulated by shared and exclusive
* locking of upper and lower halves.
* - In other words, we have FSM with possible 9 states,
* i.e. free/shared/exclusive x free/shared/exclusive == 9.
* Only 6 states of FSM are used, which 2 of ones are transitive.
*
* The mdbx_lck_seize() moves the locking-FSM from the initial free/unlocked
* state to the "exclusive write" (and returns MDBX_RESULT_TRUE) if possible,
* or to the "used" (and returns MDBX_RESULT_FALSE).
*
* The mdbx_lck_downgrade() moves the locking-FSM from "exclusive write"
* state to the "used" (i.e. shared) state.
*
* States:
* ?-? = free, i.e. unlocked
* S-? = used, i.e. shared lock
* E-? = exclusive-read, i.e. operational exclusive
* ?-S
* ?-E = middle (transitive state)
* S-S
* S-E = locked (transitive state)
* E-S
* E-E = exclusive-write, i.e. exclusive due (re)initialization
*/
static void lck_unlock(MDBX_env *env) {
int rc;
if (env->me_lfd != INVALID_HANDLE_VALUE) {
/* double `unlock` for robustly remove overlapped shared/exclusive locks */
while (funlock(env->me_lfd, LCK_LOWER))
;
rc = GetLastError();
assert(rc == ERROR_NOT_LOCKED);
(void)rc;
SetLastError(ERROR_SUCCESS);
while (funlock(env->me_lfd, LCK_UPPER))
;
rc = GetLastError();
assert(rc == ERROR_NOT_LOCKED);
(void)rc;
SetLastError(ERROR_SUCCESS);
}
if (env->me_fd != INVALID_HANDLE_VALUE) {
/* explicitly unlock to avoid latency for other processes (windows kernel
* releases such locks via deferred queues) */
while (funlock(env->me_fd, LCK_BODY))
;
rc = GetLastError();
assert(rc == ERROR_NOT_LOCKED);
(void)rc;
SetLastError(ERROR_SUCCESS);
while (funlock(env->me_fd, LCK_META))
;
rc = GetLastError();
assert(rc == ERROR_NOT_LOCKED);
(void)rc;
SetLastError(ERROR_SUCCESS);
while (funlock(env->me_fd, LCK_WHOLE))
;
rc = GetLastError();
assert(rc == ERROR_NOT_LOCKED);
(void)rc;
SetLastError(ERROR_SUCCESS);
}
}
MDBX_INTERNAL_FUNC int mdbx_lck_init(MDBX_env *env,
MDBX_env *inprocess_neighbor,
int global_uniqueness_flag) {
(void)env;
(void)inprocess_neighbor;
(void)global_uniqueness_flag;
return MDBX_SUCCESS;
}
MDBX_INTERNAL_FUNC int mdbx_lck_destroy(MDBX_env *env,
MDBX_env *inprocess_neighbor) {
(void)inprocess_neighbor;
/* LY: should unmap before releasing the locks to avoid race condition and
* STATUS_USER_MAPPED_FILE/ERROR_USER_MAPPED_FILE */
if (env->me_map)
mdbx_munmap(&env->me_dxb_mmap);
if (env->me_lck)
mdbx_munmap(&env->me_lck_mmap);
lck_unlock(env);
return MDBX_SUCCESS;
}
/* Seize state as 'exclusive-write' (E-E and returns MDBX_RESULT_TRUE)
* or as 'used' (S-? and returns MDBX_RESULT_FALSE).
* Oherwise returns an error. */
static int internal_seize_lck(HANDLE lfd) {
int rc;
assert(lfd != INVALID_HANDLE_VALUE);
/* 1) now on ?-? (free), get ?-E (middle) */
mdbx_jitter4testing(false);
if (!flock(lfd, LCK_EXCLUSIVE | LCK_WAITFOR, LCK_UPPER)) {
rc = GetLastError() /* 2) something went wrong, give up */;
mdbx_error("%s(%s) failed: errcode %u", __func__,
"?-?(free) >> ?-E(middle)", rc);
return rc;
}
/* 3) now on ?-E (middle), try E-E (exclusive-write) */
mdbx_jitter4testing(false);
if (flock(lfd, LCK_EXCLUSIVE | LCK_DONTWAIT, LCK_LOWER))
return MDBX_RESULT_TRUE /* 4) got E-E (exclusive-write), done */;
/* 5) still on ?-E (middle) */
rc = GetLastError();
mdbx_jitter4testing(false);
if (rc != ERROR_SHARING_VIOLATION && rc != ERROR_LOCK_VIOLATION) {
/* 6) something went wrong, give up */
if (!funlock(lfd, LCK_UPPER))
mdbx_panic("%s(%s) failed: errcode %u", __func__,
"?-E(middle) >> ?-?(free)", GetLastError());
return rc;
}
/* 7) still on ?-E (middle), try S-E (locked) */
mdbx_jitter4testing(false);
rc = flock(lfd, LCK_SHARED | LCK_DONTWAIT, LCK_LOWER) ? MDBX_RESULT_FALSE
: GetLastError();
mdbx_jitter4testing(false);
if (rc != MDBX_RESULT_FALSE)
mdbx_error("%s(%s) failed: errcode %u", __func__,
"?-E(middle) >> S-E(locked)", rc);
/* 8) now on S-E (locked) or still on ?-E (middle),
* transite to S-? (used) or ?-? (free) */
if (!funlock(lfd, LCK_UPPER))
mdbx_panic("%s(%s) failed: errcode %u", __func__,
"X-E(locked/middle) >> X-?(used/free)", GetLastError());
/* 9) now on S-? (used, DONE) or ?-? (free, FAILURE) */
return rc;
}
MDBX_INTERNAL_FUNC int mdbx_lck_seize(MDBX_env *env) {
int rc;
assert(env->me_fd != INVALID_HANDLE_VALUE);
if (env->me_flags & MDBX_EXCLUSIVE)
return MDBX_RESULT_TRUE /* nope since files were must be opened
non-shareable */
;
if (env->me_lfd == INVALID_HANDLE_VALUE) {
/* LY: without-lck mode (e.g. on read-only filesystem) */
mdbx_jitter4testing(false);
if (!flock(env->me_fd, LCK_SHARED | LCK_DONTWAIT, LCK_WHOLE)) {
rc = GetLastError();
mdbx_error("%s(%s) failed: errcode %u", __func__, "without-lck", rc);
return rc;
}
return MDBX_RESULT_FALSE;
}
rc = internal_seize_lck(env->me_lfd);
mdbx_jitter4testing(false);
if (rc == MDBX_RESULT_TRUE && (env->me_flags & MDBX_RDONLY) == 0) {
/* Check that another process don't operates in without-lck mode.
* Doing such check by exclusive locking the body-part of db. Should be
* noted:
* - we need an exclusive lock for do so;
* - we can't lock meta-pages, otherwise other process could get an error
* while opening db in valid (non-conflict) mode. */
if (!flock(env->me_fd, LCK_EXCLUSIVE | LCK_DONTWAIT, LCK_BODY)) {
rc = GetLastError();
mdbx_error("%s(%s) failed: errcode %u", __func__,
"lock-against-without-lck", rc);
mdbx_jitter4testing(false);
lck_unlock(env);
} else {
mdbx_jitter4testing(false);
if (!funlock(env->me_fd, LCK_BODY))
mdbx_panic("%s(%s) failed: errcode %u", __func__,
"unlock-against-without-lck", GetLastError());
}
}
return rc;
}
MDBX_INTERNAL_FUNC int mdbx_lck_downgrade(MDBX_env *env) {
/* Transite from exclusive state (E-?) to used (S-?) */
assert(env->me_fd != INVALID_HANDLE_VALUE);
assert(env->me_lfd != INVALID_HANDLE_VALUE);
#if 1
if (env->me_flags & MDBX_EXCLUSIVE)
return MDBX_SUCCESS /* nope since files were must be opened non-shareable */
;
#else
/* 1) must be at E-E (exclusive-write) */
if (env->me_flags & MDBX_EXCLUSIVE) {
/* transite from E-E to E_? (exclusive-read) */
if (!funlock(env->me_lfd, LCK_UPPER))
mdbx_panic("%s(%s) failed: errcode %u", __func__,
"E-E(exclusive-write) >> E-?(exclusive-read)", GetLastError());
return MDBX_SUCCESS /* 2) now at E-? (exclusive-read), done */;
}
#endif
/* 3) now at E-E (exclusive-write), transite to ?_E (middle) */
if (!funlock(env->me_lfd, LCK_LOWER))
mdbx_panic("%s(%s) failed: errcode %u", __func__,
"E-E(exclusive-write) >> ?-E(middle)", GetLastError());
/* 4) now at ?-E (middle), transite to S-E (locked) */
if (!flock(env->me_lfd, LCK_SHARED | LCK_DONTWAIT, LCK_LOWER)) {
int rc = GetLastError() /* 5) something went wrong, give up */;
mdbx_error("%s(%s) failed: errcode %u", __func__,
"?-E(middle) >> S-E(locked)", rc);
return rc;
}
/* 6) got S-E (locked), continue transition to S-? (used) */
if (!funlock(env->me_lfd, LCK_UPPER))
mdbx_panic("%s(%s) failed: errcode %u", __func__,
"S-E(locked) >> S-?(used)", GetLastError());
return MDBX_SUCCESS /* 7) now at S-? (used), done */;
}
/*----------------------------------------------------------------------------*/
/* reader checking (by pid) */
MDBX_INTERNAL_FUNC int mdbx_rpid_set(MDBX_env *env) {
(void)env;
return MDBX_SUCCESS;
}
MDBX_INTERNAL_FUNC int mdbx_rpid_clear(MDBX_env *env) {
(void)env;
return MDBX_SUCCESS;
}
/* Checks reader by pid.
*
* Returns:
* MDBX_RESULT_TRUE, if pid is live (unable to acquire lock)
* MDBX_RESULT_FALSE, if pid is dead (lock acquired)
* or otherwise the errcode. */
MDBX_INTERNAL_FUNC int mdbx_rpid_check(MDBX_env *env, uint32_t pid) {
(void)env;
HANDLE hProcess = OpenProcess(SYNCHRONIZE, FALSE, pid);
int rc;
if (likely(hProcess)) {
rc = WaitForSingleObject(hProcess, 0);
if (unlikely(rc == WAIT_FAILED))
rc = GetLastError();
CloseHandle(hProcess);
} else {
rc = GetLastError();
}
switch (rc) {
case ERROR_INVALID_PARAMETER:
/* pid seems invalid */
return MDBX_RESULT_FALSE;
case WAIT_OBJECT_0:
/* process just exited */
return MDBX_RESULT_FALSE;
case WAIT_TIMEOUT:
/* pid running */
return MDBX_RESULT_TRUE;
default:
/* failure */
return rc;
}
}
//----------------------------------------------------------------------------
// Stub for slim read-write lock
// Copyright (C) 1995-2002 Brad Wilson
static void WINAPI stub_srwlock_Init(MDBX_srwlock *srwl) {
srwl->readerCount = srwl->writerCount = 0;
}
static void WINAPI stub_srwlock_AcquireShared(MDBX_srwlock *srwl) {
while (true) {
assert(srwl->writerCount >= 0 && srwl->readerCount >= 0);
// If there's a writer already, spin without unnecessarily
// interlocking the CPUs
if (srwl->writerCount != 0) {
YieldProcessor();
continue;
}
// Add to the readers list
_InterlockedIncrement(&srwl->readerCount);
// Check for writers again (we may have been pre-empted). If
// there are no writers writing or waiting, then we're done.
if (srwl->writerCount == 0)
break;
// Remove from the readers list, spin, try again
_InterlockedDecrement(&srwl->readerCount);
YieldProcessor();
}
}
static void WINAPI stub_srwlock_ReleaseShared(MDBX_srwlock *srwl) {
assert(srwl->readerCount > 0);
_InterlockedDecrement(&srwl->readerCount);
}
static void WINAPI stub_srwlock_AcquireExclusive(MDBX_srwlock *srwl) {
while (true) {
assert(srwl->writerCount >= 0 && srwl->readerCount >= 0);
// If there's a writer already, spin without unnecessarily
// interlocking the CPUs
if (srwl->writerCount != 0) {
YieldProcessor();
continue;
}
// See if we can become the writer (expensive, because it inter-
// locks the CPUs, so writing should be an infrequent process)
if (_InterlockedExchange(&srwl->writerCount, 1) == 0)
break;
}
// Now we're the writer, but there may be outstanding readers.
// Spin until there aren't any more; new readers will wait now
// that we're the writer.
while (srwl->readerCount != 0) {
assert(srwl->writerCount >= 0 && srwl->readerCount >= 0);
YieldProcessor();
}
}
static void WINAPI stub_srwlock_ReleaseExclusive(MDBX_srwlock *srwl) {
assert(srwl->writerCount == 1 && srwl->readerCount >= 0);
srwl->writerCount = 0;
}
MDBX_srwlock_function mdbx_srwlock_Init, mdbx_srwlock_AcquireShared,
mdbx_srwlock_ReleaseShared, mdbx_srwlock_AcquireExclusive,
mdbx_srwlock_ReleaseExclusive;
/*----------------------------------------------------------------------------*/
#if 0 /* LY: unused for now */
static DWORD WINAPI stub_DiscardVirtualMemory(PVOID VirtualAddress,
SIZE_T Size) {
return VirtualAlloc(VirtualAddress, Size, MEM_RESET, PAGE_NOACCESS)
? ERROR_SUCCESS
: GetLastError();
}
#endif /* unused for now */
static uint64_t WINAPI stub_GetTickCount64(void) {
LARGE_INTEGER Counter, Frequency;
return (QueryPerformanceFrequency(&Frequency) &&
QueryPerformanceCounter(&Counter))
? Counter.QuadPart * 1000ul / Frequency.QuadPart
: 0;
}
/*----------------------------------------------------------------------------*/
#ifndef MDBX_ALLOY
MDBX_GetFileInformationByHandleEx mdbx_GetFileInformationByHandleEx;
MDBX_GetVolumeInformationByHandleW mdbx_GetVolumeInformationByHandleW;
MDBX_GetFinalPathNameByHandleW mdbx_GetFinalPathNameByHandleW;
MDBX_SetFileInformationByHandle mdbx_SetFileInformationByHandle;
MDBX_NtFsControlFile mdbx_NtFsControlFile;
MDBX_PrefetchVirtualMemory mdbx_PrefetchVirtualMemory;
MDBX_GetTickCount64 mdbx_GetTickCount64;
#if 0 /* LY: unused for now */
MDBX_DiscardVirtualMemory mdbx_DiscardVirtualMemory;
MDBX_OfferVirtualMemory mdbx_OfferVirtualMemory;
MDBX_ReclaimVirtualMemory mdbx_ReclaimVirtualMemory;
#endif /* unused for now */
#endif /* MDBX_ALLOY */
static void mdbx_winnt_import(void) {
const HINSTANCE hKernel32dll = GetModuleHandleA("kernel32.dll");
const MDBX_srwlock_function init =
(MDBX_srwlock_function)GetProcAddress(hKernel32dll, "InitializeSRWLock");
if (init != NULL) {
mdbx_srwlock_Init = init;
mdbx_srwlock_AcquireShared = (MDBX_srwlock_function)GetProcAddress(
hKernel32dll, "AcquireSRWLockShared");
mdbx_srwlock_ReleaseShared = (MDBX_srwlock_function)GetProcAddress(
hKernel32dll, "ReleaseSRWLockShared");
mdbx_srwlock_AcquireExclusive = (MDBX_srwlock_function)GetProcAddress(
hKernel32dll, "AcquireSRWLockExclusive");
mdbx_srwlock_ReleaseExclusive = (MDBX_srwlock_function)GetProcAddress(
hKernel32dll, "ReleaseSRWLockExclusive");
} else {
mdbx_srwlock_Init = stub_srwlock_Init;
mdbx_srwlock_AcquireShared = stub_srwlock_AcquireShared;
mdbx_srwlock_ReleaseShared = stub_srwlock_ReleaseShared;
mdbx_srwlock_AcquireExclusive = stub_srwlock_AcquireExclusive;
mdbx_srwlock_ReleaseExclusive = stub_srwlock_ReleaseExclusive;
}
#define GET_KERNEL32_PROC(ENTRY) \
mdbx_##ENTRY = (MDBX_##ENTRY)GetProcAddress(hKernel32dll, #ENTRY)
GET_KERNEL32_PROC(GetFileInformationByHandleEx);
GET_KERNEL32_PROC(GetVolumeInformationByHandleW);
GET_KERNEL32_PROC(GetFinalPathNameByHandleW);
GET_KERNEL32_PROC(SetFileInformationByHandle);
GET_KERNEL32_PROC(PrefetchVirtualMemory);
GET_KERNEL32_PROC(GetTickCount64);
if (!mdbx_GetTickCount64)
mdbx_GetTickCount64 = stub_GetTickCount64;
#if 0 /* LY: unused for now */
GET_KERNEL32_PROC(DiscardVirtualMemory);
if (!mdbx_DiscardVirtualMemory)
mdbx_DiscardVirtualMemory = stub_DiscardVirtualMemory;
GET_KERNEL32_PROC(OfferVirtualMemory);
GET_KERNEL32_PROC(ReclaimVirtualMemory);
#endif /* unused for now */
#undef GET_KERNEL32_PROC
const HINSTANCE hNtdll = GetModuleHandleA("ntdll.dll");
mdbx_NtFsControlFile =
(MDBX_NtFsControlFile)GetProcAddress(hNtdll, "NtFsControlFile");
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,959 @@
/* https://en.wikipedia.org/wiki/Operating_system_abstraction_layer */
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#pragma once
/*----------------------------------------------------------------------------*/
/* Microsoft compiler generates a lot of warning for self includes... */
#ifdef _MSC_VER
#pragma warning(push, 1)
#pragma warning(disable : 4548) /* expression before comma has no effect; \
expected expression with side - effect */
#pragma warning(disable : 4530) /* C++ exception handler used, but unwind \
* semantics are not enabled. Specify /EHsc */
#pragma warning(disable : 4577) /* 'noexcept' used with no exception handling \
* mode specified; termination on exception is \
* not guaranteed. Specify /EHsc */
#endif /* _MSC_VER (warnings) */
#if defined(_WIN32) || defined(_WIN64)
#if !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS
#endif
#if !defined(_NO_CRT_STDIO_INLINE) && MDBX_BUILD_SHARED_LIBRARY && \
!defined(MDBX_TOOLS)
#define _NO_CRT_STDIO_INLINE
#endif
#endif /* Windows */
/*----------------------------------------------------------------------------*/
/* C99 includes */
#include <inttypes.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>
#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
/* C11 stdalign.h */
#if __has_include(<stdalign.h>)
#include <stdalign.h>
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define alignas(N) _Alignas(N)
#elif defined(_MSC_VER)
#define alignas(N) __declspec(align(N))
#elif __has_attribute(__aligned__) || defined(__GNUC__)
#define alignas(N) __attribute__((__aligned__(N)))
#else
#error "FIXME: Required _alignas() or equivalent."
#endif
/*----------------------------------------------------------------------------*/
/* Systems includes */
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
defined(__BSD__) || defined(__NETBSD__) || defined(__bsdi__) || \
defined(__DragonFly__) || defined(__APPLE__) || defined(__MACH__)
#include <sys/cdefs.h>
#include <sys/sysctl.h>
#include <sys/types.h>
#if defined(__FreeBSD__) || defined(__DragonFly__)
#include <vm/vm_param.h>
#elif defined(__OpenBSD__) || defined(__NetBSD__)
#include <uvm/uvm_param.h>
#else
#define SYSCTL_LEGACY_NONCONST_MIB
#endif
#include <sys/vmmeter.h>
#else
#include <malloc.h>
#ifndef _POSIX_C_SOURCE
#ifdef _POSIX_SOURCE
#define _POSIX_C_SOURCE 1
#else
#define _POSIX_C_SOURCE 0
#endif
#endif
#endif /* !xBSD */
#if defined(__FreeBSD__) || defined(__OpenBSD__) || __has_include(<malloc_np.h>)
#include <malloc_np.h>
#endif
#if defined(__APPLE__) || defined(__MACH__) || __has_include(<malloc/malloc.h>)
#include <malloc/malloc.h>
#endif /* MacOS */
#if defined(__MACH__)
#include <mach/host_info.h>
#include <mach/mach_host.h>
#include <mach/mach_port.h>
#include <uuid/uuid.h>
#undef P_DIRTY
#endif
#if defined(__linux__) || defined(__gnu_linux__)
#include <linux/sysctl.h>
#include <sys/sendfile.h>
#include <sys/statvfs.h>
#endif /* Linux */
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 0
#endif
#ifndef _XOPEN_SOURCE_EXTENDED
#define _XOPEN_SOURCE_EXTENDED 0
#else
#include <utmpx.h>
#endif /* _XOPEN_SOURCE_EXTENDED */
#if defined(__sun) || defined(__SVR4) || defined(__svr4__)
#include <kstat.h>
#endif /* SunOS/Solaris */
#if defined(_WIN32) || defined(_WIN64)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <tlhelp32.h>
#include <windows.h>
#include <winnt.h>
#include <winternl.h>
#define HAVE_SYS_STAT_H
#define HAVE_SYS_TYPES_H
typedef HANDLE mdbx_thread_t;
typedef unsigned mdbx_thread_key_t;
#define MDBX_OSAL_SECTION HANDLE
#define MAP_FAILED NULL
#define HIGH_DWORD(v) ((DWORD)((sizeof(v) > 4) ? ((uint64_t)(v) >> 32) : 0))
#define THREAD_CALL WINAPI
#define THREAD_RESULT DWORD
typedef struct {
HANDLE mutex;
HANDLE event;
} mdbx_condmutex_t;
typedef CRITICAL_SECTION mdbx_fastmutex_t;
#if MDBX_AVOID_CRT
#ifndef mdbx_malloc
static inline void *mdbx_malloc(size_t bytes) {
return LocalAlloc(LMEM_FIXED, bytes);
}
#endif /* mdbx_malloc */
#ifndef mdbx_calloc
static inline void *mdbx_calloc(size_t nelem, size_t size) {
return LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, nelem * size);
}
#endif /* mdbx_calloc */
#ifndef mdbx_realloc
static inline void *mdbx_realloc(void *ptr, size_t bytes) {
return LocalReAlloc(ptr, bytes, LMEM_MOVEABLE);
}
#endif /* mdbx_realloc */
#ifndef mdbx_free
#define mdbx_free LocalFree
#endif /* mdbx_free */
#else
#define mdbx_malloc malloc
#define mdbx_calloc calloc
#define mdbx_realloc realloc
#define mdbx_free free
#define mdbx_strdup _strdup
#endif /* MDBX_AVOID_CRT */
#ifndef snprintf
#define snprintf _snprintf /* ntdll */
#endif
#ifndef vsnprintf
#define vsnprintf _vsnprintf /* ntdll */
#endif
#else /*----------------------------------------------------------------------*/
#include <pthread.h>
#include <signal.h>
#include <sys/file.h>
#include <sys/mman.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include <unistd.h>
typedef pthread_t mdbx_thread_t;
typedef pthread_key_t mdbx_thread_key_t;
#define INVALID_HANDLE_VALUE (-1)
#define THREAD_CALL
#define THREAD_RESULT void *
typedef struct {
pthread_mutex_t mutex;
pthread_cond_t cond;
} mdbx_condmutex_t;
typedef pthread_mutex_t mdbx_fastmutex_t;
#define mdbx_malloc malloc
#define mdbx_calloc calloc
#define mdbx_realloc realloc
#define mdbx_free free
#define mdbx_strdup strdup
#endif /* Platform */
#if __GLIBC_PREREQ(2, 12) || defined(__FreeBSD__) || defined(malloc_usable_size)
/* malloc_usable_size() already provided */
#elif defined(__APPLE__)
#define malloc_usable_size(ptr) malloc_size(ptr)
#elif defined(_MSC_VER) && !MDBX_AVOID_CRT
#define malloc_usable_size(ptr) _msize(ptr)
#endif /* malloc_usable_size */
/* *INDENT-OFF* */
/* clang-format off */
#if defined(HAVE_SYS_STAT_H) || __has_include(<sys/stat.h>)
#include <sys/stat.h>
#endif
#if defined(HAVE_SYS_TYPES_H) || __has_include(<sys/types.h>)
#include <sys/types.h>
#endif
#if defined(HAVE_SYS_FILE_H) || __has_include(<sys/file.h>)
#include <sys/file.h>
#endif
/* *INDENT-ON* */
/* clang-format on */
#ifndef SSIZE_MAX
#define SSIZE_MAX INTPTR_MAX
#endif
#if !defined(MADV_DODUMP) && defined(MADV_CORE)
#define MADV_DODUMP MADV_CORE
#endif /* MADV_CORE -> MADV_DODUMP */
#if !defined(MADV_DONTDUMP) && defined(MADV_NOCORE)
#define MADV_DONTDUMP MADV_NOCORE
#endif /* MADV_NOCORE -> MADV_DONTDUMP */
#if defined(i386) || defined(__386) || defined(__i386) || defined(__i386__) || \
defined(i486) || defined(__i486) || defined(__i486__) || \
defined(i586) | defined(__i586) || defined(__i586__) || defined(i686) || \
defined(__i686) || defined(__i686__) || defined(_M_IX86) || \
defined(_X86_) || defined(__THW_INTEL__) || defined(__I86__) || \
defined(__INTEL__) || defined(__x86_64) || defined(__x86_64__) || \
defined(__amd64__) || defined(__amd64) || defined(_M_X64) || \
defined(_M_AMD64) || defined(__IA32__) || defined(__INTEL__)
#ifndef __ia32__
/* LY: define neutral __ia32__ for x86 and x86-64 archs */
#define __ia32__ 1
#endif /* __ia32__ */
#if !defined(__amd64__) && (defined(__x86_64) || defined(__x86_64__) || \
defined(__amd64) || defined(_M_X64))
/* LY: define trusty __amd64__ for all AMD64/x86-64 arch */
#define __amd64__ 1
#endif /* __amd64__ */
#endif /* all x86 */
#if !defined(MDBX_UNALIGNED_OK)
#if defined(_MSC_VER)
#define MDBX_UNALIGNED_OK 1 /* avoid MSVC misoptimization */
#elif __CLANG_PREREQ(5, 0) || __GNUC_PREREQ(5, 0)
#define MDBX_UNALIGNED_OK 0 /* expecting optimization is well done */
#elif (defined(__ia32__) || defined(__ARM_FEATURE_UNALIGNED)) && \
!defined(__ALIGNED__)
#define MDBX_UNALIGNED_OK 1
#else
#define MDBX_UNALIGNED_OK 0
#endif
#endif /* MDBX_UNALIGNED_OK */
#if (-6 & 5) || CHAR_BIT != 8 || UINT_MAX < 0xffffffff || ULONG_MAX % 0xFFFF
#error \
"Sanity checking failed: Two's complement, reasonably sized integer types"
#endif
/*----------------------------------------------------------------------------*/
/* Compiler's includes for builtins/intrinsics */
#if defined(_MSC_VER) || defined(__INTEL_COMPILER)
#include <intrin.h>
#elif __GNUC_PREREQ(4, 4) || defined(__clang__)
#if defined(__ia32__) || defined(__e2k__)
#include <x86intrin.h>
#endif /* __ia32__ */
#if defined(__ia32__)
#include <cpuid.h>
#endif /* __ia32__ */
#elif defined(__SUNPRO_C) || defined(__sun) || defined(sun)
#include <mbarrier.h>
#elif (defined(_HPUX_SOURCE) || defined(__hpux) || defined(__HP_aCC)) && \
(defined(HP_IA64) || defined(__ia64))
#include <machine/sys/inline.h>
#elif defined(__IBMC__) && defined(__powerpc)
#include <atomic.h>
#elif defined(_AIX)
#include <builtins.h>
#include <sys/atomic_op.h>
#elif (defined(__osf__) && defined(__DECC)) || defined(__alpha)
#include <c_asm.h>
#include <machine/builtins.h>
#elif defined(__MWERKS__)
/* CodeWarrior - troubles ? */
#pragma gcc_extensions
#elif defined(__SNC__)
/* Sony PS3 - troubles ? */
#elif defined(__hppa__) || defined(__hppa)
#include <machine/inline.h>
#else
#error Unsupported C compiler, please use GNU C 4.4 or newer
#endif /* Compiler */
/*----------------------------------------------------------------------------*/
/* Byteorder */
#if !defined(__BYTE_ORDER__) || !defined(__ORDER_LITTLE_ENDIAN__) || \
!defined(__ORDER_BIG_ENDIAN__)
/* *INDENT-OFF* */
/* clang-format off */
#if defined(__GLIBC__) || defined(__GNU_LIBRARY__) || defined(__ANDROID__) || \
defined(HAVE_ENDIAN_H) || __has_include(<endian.h>)
#include <endian.h>
#elif defined(__APPLE__) || defined(__MACH__) || defined(__OpenBSD__) || \
defined(HAVE_MACHINE_ENDIAN_H) || __has_include(<machine/endian.h>)
#include <machine/endian.h>
#elif defined(HAVE_SYS_ISA_DEFS_H) || __has_include(<sys/isa_defs.h>)
#include <sys/isa_defs.h>
#elif (defined(HAVE_SYS_TYPES_H) && defined(HAVE_SYS_ENDIAN_H)) || \
(__has_include(<sys/types.h>) && __has_include(<sys/endian.h>))
#include <sys/endian.h>
#include <sys/types.h>
#elif defined(__bsdi__) || defined(__DragonFly__) || defined(__FreeBSD__) || \
defined(__NETBSD__) || defined(__NetBSD__) || \
defined(HAVE_SYS_PARAM_H) || __has_include(<sys/param.h>)
#include <sys/param.h>
#endif /* OS */
/* *INDENT-ON* */
/* clang-format on */
#if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN)
#define __ORDER_LITTLE_ENDIAN__ __LITTLE_ENDIAN
#define __ORDER_BIG_ENDIAN__ __BIG_ENDIAN
#define __BYTE_ORDER__ __BYTE_ORDER
#elif defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
#define __ORDER_LITTLE_ENDIAN__ _LITTLE_ENDIAN
#define __ORDER_BIG_ENDIAN__ _BIG_ENDIAN
#define __BYTE_ORDER__ _BYTE_ORDER
#else
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __ORDER_BIG_ENDIAN__ 4321
#if defined(__LITTLE_ENDIAN__) || \
(defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \
defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \
defined(__MIPSEL__) || defined(_MIPSEL) || defined(__MIPSEL) || \
defined(_M_ARM) || defined(_M_ARM64) || defined(__e2k__) || \
defined(__elbrus_4c__) || defined(__elbrus_8c__) || defined(__bfin__) || \
defined(__BFIN__) || defined(__ia64__) || defined(_IA64) || \
defined(__IA64__) || defined(__ia64) || defined(_M_IA64) || \
defined(__itanium__) || defined(__ia32__) || defined(__CYGWIN__) || \
defined(_WIN64) || defined(_WIN32) || defined(__TOS_WIN__) || \
defined(__WINDOWS__)
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#elif defined(__BIG_ENDIAN__) || \
(defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \
defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \
defined(__MIPSEB__) || defined(_MIPSEB) || defined(__MIPSEB) || \
defined(__m68k__) || defined(M68000) || defined(__hppa__) || \
defined(__hppa) || defined(__HPPA__) || defined(__sparc__) || \
defined(__sparc) || defined(__370__) || defined(__THW_370__) || \
defined(__s390__) || defined(__s390x__) || defined(__SYSC_ZARCH__)
#define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__
#else
#error __BYTE_ORDER__ should be defined.
#endif /* Arch */
#endif
#endif /* __BYTE_ORDER__ || __ORDER_LITTLE_ENDIAN__ || __ORDER_BIG_ENDIAN__ */
/*----------------------------------------------------------------------------*/
/* Memory/Compiler barriers, cache coherence */
static __maybe_unused __inline void mdbx_compiler_barrier(void) {
#if defined(__clang__) || defined(__GNUC__)
__asm__ __volatile__("" ::: "memory");
#elif defined(_MSC_VER)
_ReadWriteBarrier();
#elif defined(__INTEL_COMPILER) /* LY: Intel Compiler may mimic GCC and MSC */
__memory_barrier();
if (type > MDBX_BARRIER_COMPILER)
#if defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
__mf();
#elif defined(__i386__) || defined(__x86_64__)
_mm_mfence();
#else
#error "Unknown target for Intel Compiler, please report to us."
#endif
#elif defined(__SUNPRO_C) || defined(__sun) || defined(sun)
__compiler_barrier();
#elif (defined(_HPUX_SOURCE) || defined(__hpux) || defined(__HP_aCC)) && \
(defined(HP_IA64) || defined(__ia64))
_Asm_sched_fence(/* LY: no-arg meaning 'all expect ALU', e.g. 0x3D3D */);
#elif defined(_AIX) || defined(__ppc__) || defined(__powerpc__) || \
defined(__ppc64__) || defined(__powerpc64__)
__fence();
#else
#error "Could not guess the kind of compiler, please report to us."
#endif
}
static __maybe_unused __inline void mdbx_memory_barrier(void) {
#if __has_extension(c_atomic) || __has_extension(cxx_atomic)
__c11_atomic_thread_fence(__ATOMIC_SEQ_CST);
#elif defined(__ATOMIC_SEQ_CST)
__atomic_thread_fence(__ATOMIC_SEQ_CST);
#elif defined(__clang__) || defined(__GNUC__)
__sync_synchronize();
#elif defined(_MSC_VER)
MemoryBarrier();
#elif defined(__INTEL_COMPILER) /* LY: Intel Compiler may mimic GCC and MSC */
#if defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
__mf();
#elif defined(__i386__) || defined(__x86_64__)
_mm_mfence();
#else
#error "Unknown target for Intel Compiler, please report to us."
#endif
#elif defined(__SUNPRO_C) || defined(__sun) || defined(sun)
__machine_rw_barrier();
#elif (defined(_HPUX_SOURCE) || defined(__hpux) || defined(__HP_aCC)) && \
(defined(HP_IA64) || defined(__ia64))
_Asm_mf();
#elif defined(_AIX) || defined(__ppc__) || defined(__powerpc__) || \
defined(__ppc64__) || defined(__powerpc64__)
__lwsync();
#else
#error "Could not guess the kind of compiler, please report to us."
#endif
}
/*----------------------------------------------------------------------------*/
/* Cache coherence and invalidation */
#ifndef MDBX_CPU_WRITEBACK_IS_COHERENT
#if defined(__ia32__) || defined(__e2k__) || defined(__hppa) || \
defined(__hppa__)
#define MDBX_CPU_WRITEBACK_IS_COHERENT 1
#else
#define MDBX_CPU_WRITEBACK_IS_COHERENT 0
#endif
#endif /* MDBX_CPU_WRITEBACK_IS_COHERENT */
#ifndef MDBX_CACHELINE_SIZE
#if defined(SYSTEM_CACHE_ALIGNMENT_SIZE)
#define MDBX_CACHELINE_SIZE SYSTEM_CACHE_ALIGNMENT_SIZE
#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
#define MDBX_CACHELINE_SIZE 128
#else
#define MDBX_CACHELINE_SIZE 64
#endif
#endif /* MDBX_CACHELINE_SIZE */
#if MDBX_CPU_WRITEBACK_IS_COHERENT
#define mdbx_flush_noncoherent_cpu_writeback() mdbx_compiler_barrier()
#else
#define mdbx_flush_noncoherent_cpu_writeback() mdbx_memory_barrier()
#endif
#if __has_include(<sys/cachectl.h>)
#include <sys/cachectl.h>
#elif defined(__mips) || defined(__mips__) || defined(__mips64) || \
defined(__mips64__) || defined(_M_MRX000) || defined(_MIPS_) || \
defined(__MWERKS__) || defined(__sgi)
/* MIPS should have explicit cache control */
#include <sys/cachectl.h>
#endif
#ifndef MDBX_CPU_CACHE_MMAP_NONCOHERENT
#if defined(__mips) || defined(__mips__) || defined(__mips64) || \
defined(__mips64__) || defined(_M_MRX000) || defined(_MIPS_) || \
defined(__MWERKS__) || defined(__sgi)
/* MIPS has cache coherency issues. */
#define MDBX_CPU_CACHE_MMAP_NONCOHERENT 1
#else
/* LY: assume no relevant mmap/dcache issues. */
#define MDBX_CPU_CACHE_MMAP_NONCOHERENT 0
#endif
#endif /* ndef MDBX_CPU_CACHE_MMAP_NONCOHERENT */
static __maybe_unused __inline void
mdbx_invalidate_mmap_noncoherent_cache(void *addr, size_t nbytes) {
#if MDBX_CPU_CACHE_MMAP_NONCOHERENT
#ifdef DCACHE
/* MIPS has cache coherency issues.
* Note: for any nbytes >= on-chip cache size, entire is flushed. */
cacheflush(addr, nbytes, DCACHE);
#else
#error "Oops, cacheflush() not available"
#endif /* DCACHE */
#else /* MDBX_CPU_CACHE_MMAP_NONCOHERENT */
(void)addr;
(void)nbytes;
#endif /* MDBX_CPU_CACHE_MMAP_NONCOHERENT */
}
/*----------------------------------------------------------------------------*/
/* libc compatibility stuff */
#if (!defined(__GLIBC__) && __GLIBC_PREREQ(2, 1)) && \
(defined(_GNU_SOURCE) || defined(_BSD_SOURCE))
#define mdbx_asprintf asprintf
#define mdbx_vasprintf vasprintf
#else
MDBX_INTERNAL_FUNC __printf_args(2, 3) int __maybe_unused
mdbx_asprintf(char **strp, const char *fmt, ...);
MDBX_INTERNAL_FUNC int mdbx_vasprintf(char **strp, const char *fmt, va_list ap);
#endif
/*----------------------------------------------------------------------------*/
/* OS abstraction layer stuff */
/* max bytes to write in one call */
#if defined(_WIN32) || defined(_WIN64)
#define MAX_WRITE UINT32_C(0x01000000)
#else
#define MAX_WRITE UINT32_C(0x3fff0000)
#endif
#if defined(__linux__) || defined(__gnu_linux__)
MDBX_INTERNAL_VAR uint32_t mdbx_linux_kernel_version;
#endif /* Linux */
/* Get the size of a memory page for the system.
* This is the basic size that the platform's memory manager uses, and is
* fundamental to the use of memory-mapped files. */
static __maybe_unused __inline size_t mdbx_syspagesize(void) {
#if defined(_WIN32) || defined(_WIN64)
SYSTEM_INFO si;
GetSystemInfo(&si);
return si.dwPageSize;
#else
return sysconf(_SC_PAGE_SIZE);
#endif
}
#ifndef mdbx_strdup
LIBMDBX_API char *mdbx_strdup(const char *str);
#endif
static __maybe_unused __inline int mdbx_get_errno(void) {
#if defined(_WIN32) || defined(_WIN64)
DWORD rc = GetLastError();
#else
int rc = errno;
#endif
return rc;
}
#ifndef mdbx_memalign_alloc
MDBX_INTERNAL_FUNC int mdbx_memalign_alloc(size_t alignment, size_t bytes,
void **result);
#endif
#ifndef mdbx_memalign_free
MDBX_INTERNAL_FUNC void mdbx_memalign_free(void *ptr);
#endif
MDBX_INTERNAL_FUNC int mdbx_condmutex_init(mdbx_condmutex_t *condmutex);
MDBX_INTERNAL_FUNC int mdbx_condmutex_lock(mdbx_condmutex_t *condmutex);
MDBX_INTERNAL_FUNC int mdbx_condmutex_unlock(mdbx_condmutex_t *condmutex);
MDBX_INTERNAL_FUNC int mdbx_condmutex_signal(mdbx_condmutex_t *condmutex);
MDBX_INTERNAL_FUNC int mdbx_condmutex_wait(mdbx_condmutex_t *condmutex);
MDBX_INTERNAL_FUNC int mdbx_condmutex_destroy(mdbx_condmutex_t *condmutex);
MDBX_INTERNAL_FUNC int mdbx_fastmutex_init(mdbx_fastmutex_t *fastmutex);
MDBX_INTERNAL_FUNC int mdbx_fastmutex_acquire(mdbx_fastmutex_t *fastmutex);
MDBX_INTERNAL_FUNC int mdbx_fastmutex_release(mdbx_fastmutex_t *fastmutex);
MDBX_INTERNAL_FUNC int mdbx_fastmutex_destroy(mdbx_fastmutex_t *fastmutex);
MDBX_INTERNAL_FUNC int mdbx_pwritev(mdbx_filehandle_t fd, struct iovec *iov,
int iovcnt, uint64_t offset,
size_t expected_written);
MDBX_INTERNAL_FUNC int mdbx_pread(mdbx_filehandle_t fd, void *buf, size_t count,
uint64_t offset);
MDBX_INTERNAL_FUNC int mdbx_pwrite(mdbx_filehandle_t fd, const void *buf,
size_t count, uint64_t offset);
MDBX_INTERNAL_FUNC int mdbx_write(mdbx_filehandle_t fd, const void *buf,
size_t count);
MDBX_INTERNAL_FUNC int
mdbx_thread_create(mdbx_thread_t *thread,
THREAD_RESULT(THREAD_CALL *start_routine)(void *),
void *arg);
MDBX_INTERNAL_FUNC int mdbx_thread_join(mdbx_thread_t thread);
enum mdbx_syncmode_bits {
MDBX_SYNC_DATA = 1,
MDBX_SYNC_SIZE = 2,
MDBX_SYNC_IODQ = 4
};
MDBX_INTERNAL_FUNC int mdbx_filesync(mdbx_filehandle_t fd,
enum mdbx_syncmode_bits mode_bits);
MDBX_INTERNAL_FUNC int mdbx_ftruncate(mdbx_filehandle_t fd, uint64_t length);
MDBX_INTERNAL_FUNC int mdbx_fseek(mdbx_filehandle_t fd, uint64_t pos);
MDBX_INTERNAL_FUNC int mdbx_filesize(mdbx_filehandle_t fd, uint64_t *length);
MDBX_INTERNAL_FUNC int mdbx_openfile(const char *pathname, int flags,
mode_t mode, mdbx_filehandle_t *fd,
bool exclusive);
MDBX_INTERNAL_FUNC int mdbx_closefile(mdbx_filehandle_t fd);
MDBX_INTERNAL_FUNC int mdbx_removefile(const char *pathname);
MDBX_INTERNAL_FUNC int mdbx_is_pipe(mdbx_filehandle_t fd);
typedef struct mdbx_mmap_param {
union {
void *address;
uint8_t *dxb;
struct MDBX_lockinfo *lck;
};
mdbx_filehandle_t fd;
size_t limit; /* mapping length, but NOT a size of file nor DB */
size_t current; /* mapped region size, i.e. the size of file and DB */
#if defined(_WIN32) || defined(_WIN64)
uint64_t filesize /* in-process cache of a file size. */;
#endif
#ifdef MDBX_OSAL_SECTION
MDBX_OSAL_SECTION section;
#endif
} mdbx_mmap_t;
MDBX_INTERNAL_FUNC int mdbx_mmap(const int flags, mdbx_mmap_t *map,
const size_t must, const size_t limit,
const bool truncate);
MDBX_INTERNAL_FUNC int mdbx_munmap(mdbx_mmap_t *map);
MDBX_INTERNAL_FUNC int mdbx_mresize(int flags, mdbx_mmap_t *map, size_t current,
size_t wanna);
#if defined(_WIN32) || defined(_WIN64)
typedef struct {
unsigned limit, count;
HANDLE handles[31];
} mdbx_handle_array_t;
MDBX_INTERNAL_FUNC int
mdbx_suspend_threads_before_remap(MDBX_env *env, mdbx_handle_array_t **array);
MDBX_INTERNAL_FUNC int
mdbx_resume_threads_after_remap(mdbx_handle_array_t *array);
#endif /* Windows */
MDBX_INTERNAL_FUNC int mdbx_msync(mdbx_mmap_t *map, size_t offset,
size_t length, int async);
MDBX_INTERNAL_FUNC int mdbx_check4nonlocal(mdbx_filehandle_t handle, int flags);
static __maybe_unused __inline uint32_t mdbx_getpid(void) {
STATIC_ASSERT(sizeof(mdbx_pid_t) <= sizeof(uint32_t));
#if defined(_WIN32) || defined(_WIN64)
return GetCurrentProcessId();
#else
return getpid();
#endif
}
static __maybe_unused __inline size_t mdbx_thread_self(void) {
STATIC_ASSERT(sizeof(mdbx_tid_t) <= sizeof(size_t));
#if defined(_WIN32) || defined(_WIN64)
return GetCurrentThreadId();
#else
return (size_t)pthread_self();
#endif
}
MDBX_INTERNAL_FUNC void __maybe_unused mdbx_osal_jitter(bool tiny);
MDBX_INTERNAL_FUNC uint64_t mdbx_osal_monotime(void);
MDBX_INTERNAL_FUNC uint64_t
mdbx_osal_16dot16_to_monotime(uint32_t seconds_16dot16);
MDBX_INTERNAL_FUNC uint32_t mdbx_osal_monotime_to_16dot16(uint64_t monotime);
typedef union bin128 {
__anonymous_struct_extension__ struct { uint64_t x, y; };
__anonymous_struct_extension__ struct { uint32_t a, b, c, d; };
} bin128_t;
MDBX_INTERNAL_FUNC bin128_t mdbx_osal_bootid(void);
/*----------------------------------------------------------------------------*/
/* lck stuff */
#if defined(_WIN32) || defined(_WIN64)
#undef MDBX_OSAL_LOCK
#define MDBX_OSAL_LOCK_SIGN UINT32_C(0xF10C)
#else
#define MDBX_OSAL_LOCK pthread_mutex_t
#define MDBX_OSAL_LOCK_SIGN UINT32_C(0x8017)
#endif /* MDBX_OSAL_LOCK */
/// \brief Initialization of synchronization primitives linked with MDBX_env
/// instance both in LCK-file and within the current process.
/// \param
/// global_uniqueness_flag = true - denotes that there are no other processes
/// working with DB and LCK-file. Thus the function MUST initialize
/// shared synchronization objects in memory-mapped LCK-file.
/// global_uniqueness_flag = false - denotes that at least one process is
/// already working with DB and LCK-file, including the case when DB
/// has already been opened in the current process. Thus the function
/// MUST NOT initialize shared synchronization objects in memory-mapped
/// LCK-file that are already in use.
/// \return Error code or zero on success.
MDBX_INTERNAL_FUNC int mdbx_lck_init(MDBX_env *env,
MDBX_env *inprocess_neighbor,
int global_uniqueness_flag);
/// \brief Disconnects from shared interprocess objects and destructs
/// synchronization objects linked with MDBX_env instance
/// within the current process.
/// \param
/// inprocess_neighbor = NULL - if the current process does not have other
/// instances of MDBX_env linked with the DB being closed.
/// Thus the function MUST check for other processes working with DB or
/// LCK-file, and keep or destroy shared synchronization objects in
/// memory-mapped LCK-file depending on the result.
/// inprocess_neighbor = not-NULL - pointer to another instance of MDBX_env
/// (anyone of there is several) working with DB or LCK-file within the
/// current process. Thus the function MUST NOT try to acquire exclusive
/// lock and/or try to destruct shared synchronization objects linked with
/// DB or LCK-file. Moreover, the implementation MUST ensure correct work
/// of other instances of MDBX_env within the current process, e.g.
/// restore POSIX-fcntl locks after the closing of file descriptors.
/// \return Error code (MDBX_PANIC) or zero on success.
MDBX_INTERNAL_FUNC int mdbx_lck_destroy(MDBX_env *env,
MDBX_env *inprocess_neighbor);
/// \brief Connects to shared interprocess locking objects and tries to acquire
/// the maximum lock level (shared if exclusive is not available)
/// Depending on implementation or/and platform (Windows) this function may
/// acquire the non-OS super-level lock (e.g. for shared synchronization
/// objects initialization), which will be downgraded to OS-exclusive or
/// shared via explicit calling of mdbx_lck_downgrade().
/// \return
/// MDBX_RESULT_TRUE (-1) - if an exclusive lock was acquired and thus
/// the current process is the first and only after the last use of DB.
/// MDBX_RESULT_FALSE (0) - if a shared lock was acquired and thus
/// DB has already been opened and now is used by other processes.
/// Otherwise (not 0 and not -1) - error code.
MDBX_INTERNAL_FUNC int mdbx_lck_seize(MDBX_env *env);
/// \brief Downgrades the level of initially acquired lock to
/// operational level specified by agrument. The reson for such downgrade:
/// - unblocking of other processes that are waiting for access, i.e.
/// if (env->me_flags & MDBX_EXCLUSIVE) != 0, then other processes
/// should be made aware that access is unavailable rather than
/// wait for it.
/// - freeing locks that interfere file operation (expecially for Windows)
/// (env->me_flags & MDBX_EXCLUSIVE) == 0 - downgrade to shared lock.
/// (env->me_flags & MDBX_EXCLUSIVE) != 0 - downgrade to exclusive
/// operational lock.
/// \return Error code or zero on success
MDBX_INTERNAL_FUNC int mdbx_lck_downgrade(MDBX_env *env);
/// \brief Locks LCK-file or/and table of readers for (de)registering.
/// \return Error code or zero on success
MDBX_INTERNAL_FUNC int mdbx_rdt_lock(MDBX_env *env);
/// \brief Unlocks LCK-file or/and table of readers after (de)registering.
MDBX_INTERNAL_FUNC void mdbx_rdt_unlock(MDBX_env *env);
/// \brief Acquires lock for DB change (on writing transaction start)
/// Reading transactions will not be blocked.
/// Declared as LIBMDBX_API because it is used in mdbx_chk.
/// \return Error code or zero on success
LIBMDBX_API int mdbx_txn_lock(MDBX_env *env, bool dontwait);
/// \brief Releases lock once DB changes is made (after writing transaction
/// has finished).
/// Declared as LIBMDBX_API because it is used in mdbx_chk.
LIBMDBX_API void mdbx_txn_unlock(MDBX_env *env);
/// \brief Sets alive-flag of reader presence (indicative lock) for PID of
/// the current process. The function does no more than needed for
/// the correct working of mdbx_rpid_check() in other processes.
/// \return Error code or zero on success
MDBX_INTERNAL_FUNC int mdbx_rpid_set(MDBX_env *env);
/// \brief Resets alive-flag of reader presence (indicative lock)
/// for PID of the current process. The function does no more than needed
/// for the correct working of mdbx_rpid_check() in other processes.
/// \return Error code or zero on success
MDBX_INTERNAL_FUNC int mdbx_rpid_clear(MDBX_env *env);
/// \brief Checks for reading process status with the given pid with help of
/// alive-flag of presence (indicative lock) or using another way.
/// \return
/// MDBX_RESULT_TRUE (-1) - if the reader process with the given PID is alive
/// and working with DB (indicative lock is present).
/// MDBX_RESULT_FALSE (0) - if the reader process with the given PID is absent
/// or not working with DB (indicative lock is not present).
/// Otherwise (not 0 and not -1) - error code.
MDBX_INTERNAL_FUNC int mdbx_rpid_check(MDBX_env *env, uint32_t pid);
#if defined(_WIN32) || defined(_WIN64)
typedef union MDBX_srwlock {
struct {
long volatile readerCount;
long volatile writerCount;
};
RTL_SRWLOCK native;
} MDBX_srwlock;
typedef void(WINAPI *MDBX_srwlock_function)(MDBX_srwlock *);
MDBX_INTERNAL_VAR MDBX_srwlock_function mdbx_srwlock_Init,
mdbx_srwlock_AcquireShared, mdbx_srwlock_ReleaseShared,
mdbx_srwlock_AcquireExclusive, mdbx_srwlock_ReleaseExclusive;
typedef BOOL(WINAPI *MDBX_GetFileInformationByHandleEx)(
_In_ HANDLE hFile, _In_ FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
_Out_ LPVOID lpFileInformation, _In_ DWORD dwBufferSize);
MDBX_INTERNAL_VAR MDBX_GetFileInformationByHandleEx
mdbx_GetFileInformationByHandleEx;
typedef BOOL(WINAPI *MDBX_GetVolumeInformationByHandleW)(
_In_ HANDLE hFile, _Out_opt_ LPWSTR lpVolumeNameBuffer,
_In_ DWORD nVolumeNameSize, _Out_opt_ LPDWORD lpVolumeSerialNumber,
_Out_opt_ LPDWORD lpMaximumComponentLength,
_Out_opt_ LPDWORD lpFileSystemFlags,
_Out_opt_ LPWSTR lpFileSystemNameBuffer, _In_ DWORD nFileSystemNameSize);
MDBX_INTERNAL_VAR MDBX_GetVolumeInformationByHandleW
mdbx_GetVolumeInformationByHandleW;
typedef DWORD(WINAPI *MDBX_GetFinalPathNameByHandleW)(_In_ HANDLE hFile,
_Out_ LPWSTR lpszFilePath,
_In_ DWORD cchFilePath,
_In_ DWORD dwFlags);
MDBX_INTERNAL_VAR MDBX_GetFinalPathNameByHandleW mdbx_GetFinalPathNameByHandleW;
typedef BOOL(WINAPI *MDBX_SetFileInformationByHandle)(
_In_ HANDLE hFile, _In_ FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
_Out_ LPVOID lpFileInformation, _In_ DWORD dwBufferSize);
MDBX_INTERNAL_VAR MDBX_SetFileInformationByHandle
mdbx_SetFileInformationByHandle;
typedef NTSTATUS(NTAPI *MDBX_NtFsControlFile)(
IN HANDLE FileHandle, IN OUT HANDLE Event,
IN OUT PVOID /* PIO_APC_ROUTINE */ ApcRoutine, IN OUT PVOID ApcContext,
OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG FsControlCode,
IN OUT PVOID InputBuffer, IN ULONG InputBufferLength,
OUT OPTIONAL PVOID OutputBuffer, IN ULONG OutputBufferLength);
MDBX_INTERNAL_VAR MDBX_NtFsControlFile mdbx_NtFsControlFile;
typedef uint64_t(WINAPI *MDBX_GetTickCount64)(void);
MDBX_INTERNAL_VAR MDBX_GetTickCount64 mdbx_GetTickCount64;
#if !defined(_WIN32_WINNT_WIN8) || _WIN32_WINNT < _WIN32_WINNT_WIN8
typedef struct _WIN32_MEMORY_RANGE_ENTRY {
PVOID VirtualAddress;
SIZE_T NumberOfBytes;
} WIN32_MEMORY_RANGE_ENTRY, *PWIN32_MEMORY_RANGE_ENTRY;
#endif /* Windows 8.x */
typedef BOOL(WINAPI *MDBX_PrefetchVirtualMemory)(
HANDLE hProcess, ULONG_PTR NumberOfEntries,
PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses, ULONG Flags);
MDBX_INTERNAL_VAR MDBX_PrefetchVirtualMemory mdbx_PrefetchVirtualMemory;
#if 0 /* LY: unused for now */
#if !defined(_WIN32_WINNT_WIN81) || _WIN32_WINNT < _WIN32_WINNT_WIN81
typedef enum OFFER_PRIORITY {
VmOfferPriorityVeryLow = 1,
VmOfferPriorityLow,
VmOfferPriorityBelowNormal,
VmOfferPriorityNormal
} OFFER_PRIORITY;
#endif /* Windows 8.1 */
typedef DWORD(WINAPI *MDBX_DiscardVirtualMemory)(PVOID VirtualAddress,
SIZE_T Size);
MDBX_INTERNAL_VAR MDBX_DiscardVirtualMemory mdbx_DiscardVirtualMemory;
typedef DWORD(WINAPI *MDBX_ReclaimVirtualMemory)(PVOID VirtualAddress,
SIZE_T Size);
MDBX_INTERNAL_VAR MDBX_ReclaimVirtualMemory mdbx_ReclaimVirtualMemory;
typedef DWORD(WINAPI *MDBX_OfferVirtualMemory(
PVOID VirtualAddress,
SIZE_T Size,
OFFER_PRIORITY Priority
);
MDBX_INTERNAL_VAR MDBX_OfferVirtualMemory mdbx_OfferVirtualMemory;
#endif /* unused for now */
#endif /* Windows */
/*----------------------------------------------------------------------------*/
/* Atomics */
#if !defined(__cplusplus) && (__STDC_VERSION__ >= 201112L) && \
!defined(__STDC_NO_ATOMICS__) && \
(__GNUC_PREREQ(4, 9) || __CLANG_PREREQ(3, 8) || \
!(defined(__GNUC__) || defined(__clang__)))
#include <stdatomic.h>
#elif defined(__GNUC__) || defined(__clang__)
/* LY: nothing required */
#elif defined(_MSC_VER)
#pragma warning(disable : 4163) /* 'xyz': not available as an intrinsic */
#pragma warning(disable : 4133) /* 'function': incompatible types - from \
'size_t' to 'LONGLONG' */
#pragma warning(disable : 4244) /* 'return': conversion from 'LONGLONG' to \
'std::size_t', possible loss of data */
#pragma warning(disable : 4267) /* 'function': conversion from 'size_t' to \
'long', possible loss of data */
#pragma intrinsic(_InterlockedExchangeAdd, _InterlockedCompareExchange)
#pragma intrinsic(_InterlockedExchangeAdd64, _InterlockedCompareExchange64)
#elif defined(__APPLE__)
#include <libkern/OSAtomic.h>
#else
#error FIXME atomic-ops
#endif
/*----------------------------------------------------------------------------*/
#if defined(_MSC_VER) && _MSC_VER >= 1900
/* LY: MSVC 2015/2017/2019 has buggy/inconsistent PRIuPTR/PRIxPTR macros
* for internal format-args checker. */
#undef PRIuPTR
#undef PRIiPTR
#undef PRIdPTR
#undef PRIxPTR
#define PRIuPTR "Iu"
#define PRIiPTR "Ii"
#define PRIdPTR "Id"
#define PRIxPTR "Ix"
#define PRIuSIZE "zu"
#define PRIiSIZE "zi"
#define PRIdSIZE "zd"
#define PRIxSIZE "zx"
#endif /* fix PRI*PTR for _MSC_VER */
#ifndef PRIuSIZE
#define PRIuSIZE PRIuPTR
#define PRIiSIZE PRIiPTR
#define PRIdSIZE PRIdPTR
#define PRIxSIZE PRIxPTR
#endif /* PRI*SIZE macros for MSVC */
#ifdef _MSC_VER
#pragma warning(pop)
#endif

View file

@ -0,0 +1,46 @@
/* This is CMake-template for libmdbx's version.c
******************************************************************************/
#include "internals.h"
//#if MDBX_VERSION_MAJOR != ${MDBX_VERSION_MAJOR} || \
// MDBX_VERSION_MINOR != ${MDBX_VERSION_MINOR}
//#error "API version mismatch! Had `git fetch --tags` done?"
//#endif
static const char sourcery[] = STRINGIFY(MDBX_BUILD_SOURCERY);
__dll_export
#ifdef __attribute_used__
__attribute_used__
#elif defined(__GNUC__) || __has_attribute(__used__)
__attribute__((__used__))
#endif
#ifdef __attribute_externally_visible__
__attribute_externally_visible__
#elif (defined(__GNUC__) && !defined(__clang__)) || \
__has_attribute(__externally_visible__)
__attribute__((__externally_visible__))
#endif
const mdbx_version_info mdbx_version = {
${MDBX_VERSION_MAJOR},
${MDBX_VERSION_MINOR},
${MDBX_VERSION_RELEASE},
${MDBX_VERSION_REVISION},
{"@MDBX_GIT_TIMESTAMP@", "@MDBX_GIT_TREE@", "@MDBX_GIT_COMMIT@",
"@MDBX_GIT_DESCRIBE@"},
sourcery};
__dll_export
#ifdef __attribute_used__
__attribute_used__
#elif defined(__GNUC__) || __has_attribute(__used__)
__attribute__((__used__))
#endif
#ifdef __attribute_externally_visible__
__attribute_externally_visible__
#elif (defined(__GNUC__) && !defined(__clang__)) || \
__has_attribute(__externally_visible__)
__attribute__((__externally_visible__))
#endif
const char *const mdbx_sourcery_anchor = sourcery;

View file

@ -0,0 +1,87 @@
.\" Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.TH MDBX_CHK 1 "2019-09-10" "MDBX 0.x"
.SH NAME
mdbx_chk \- MDBX checking tool
.SH SYNOPSIS
.B mdbx_chk
[\c
.BR \-V ]
[\c
.BR \-v [ v [ v ]]]
[\c
.BR \-n ]
[\c
.BR \-q ]
[\c
.BR \-w ]
[\c
.BR \-d ]
[\c
.BI \-s \ subdb\fR]
[\c
.BR \-c ]
[\c
.BR \-i ]
.BR \ envpath
.SH DESCRIPTION
The
.B mdbx_chk
utility intended to check an MDBX database file.
.SH OPTIONS
.TP
.BR \-V
Write the library version number to the standard output, and exit.
.TP
.BR \-v
Produce verbose output, including summarize space and page usage statistics.
If \fB\-vv\fP is given, be more verbose, show summarized B-tree info
and space allocation.
If \fB\-vvv\fP is given, be more verbose, include summarized statistics
of leaf B-tree pages.
If \fB\-vvvv\fP is given, be even more verbose, show info of each page
during B-tree traversal and basic info of each GC record.
If \fB\-vvvvv\fP is given, turn maximal verbosity, display the full list
of page IDs in the GC records and size of each key-value pair of database(s).
.TP
.BR \-n
Open MDBX environment(s) which do not use subdirectories.
.TP
.BR \-q
Be quiet; do not output anything even if an error was detected.
.TP
.BR \-w
Open environment in read-write mode and lock for writing while checking.
This could be impossible if environment already used by another process(s)
in an incompatible read-write mode. This allow rollback to last steady commit
(in case environment was not closed properly) and then check transaction IDs
of meta-pages. Otherwise, without \fB\-w\fP option environment will be
opened in read-only mode.
.TP
.BR \-d
Disable page-by-page traversal of B-tree. In this case, without B-tree
traversal, it is unable to check for lost-unused pages nor for double-used
pages.
.TP
.BR \-s \ subdb
Verify and show info only for a specific subdatabase.
.TP
.BR \-c
Force using cooperative mode while opening environment, i.e. don't try to open
in exclusive/monopolistic mode. Only exclusive/monopolistic mode allow complete
check, including full check of all meta-pages and actual size of database file.
.TP
.BR \-i
Ignore wrong order errors, which will likely false-positive if custom
comparator(s) was used.
.SH DIAGNOSTICS
Exit status is zero if no errors occur. Errors result in a non-zero exit status
and a diagnostic message being written to standard error
if no quiet mode was requested.
.SH "SEE ALSO"
.BR mdbx_stat (1),
.BR mdbx_copy (1),
.BR mdbx_dump (1),
.BR mdbx_load (1)
.SH AUTHOR
Leonid Yuriev <https://github.com/leo-yuriev>

View file

@ -0,0 +1,60 @@
.\" Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
.\" Copyright 2012-2015 Howard Chu, Symas Corp. All Rights Reserved.
.\" Copyright 2015,2016 Peter-Service R&D LLC <http://billing.ru/>.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.TH MDBX_COPY 1 "2019-09-10" "MDBX 0.x"
.SH NAME
mdbx_copy \- MDBX environment copy tool
.SH SYNOPSIS
.B mdbx_copy
[\c
.BR \-V ]
[\c
.BR \-c ]
[\c
.BR \-n ]
.B srcpath
[\c
.BR dstpath ]
.SH DESCRIPTION
The
.B mdbx_copy
utility copies an MDBX environment. The environment can
be copied regardless of whether it is currently in use.
No lockfile is created, since it gets recreated at need.
If
.I dstpath
is specified it must be the path of an empty directory
for storing the backup. Otherwise, the backup will be
written to stdout.
.SH OPTIONS
.TP
.BR \-V
Write the library version number to the standard output, and exit.
.TP
.BR \-c
Compact while copying. Only current data pages will be copied; freed
or unused pages will be omitted from the copy. This option will
slow down the backup process as it is more CPU-intensive.
Currently it fails if the environment has suffered a page leak.
.TP
.BR \-n
Open MDBX environment(s) which do not use subdirectories.
.SH DIAGNOSTICS
Exit status is zero if no errors occur.
Errors result in a non-zero exit status and
a diagnostic message being written to standard error.
.SH CAVEATS
This utility can trigger significant file size growth if run
in parallel with write transactions, because pages which they
free during copying cannot be reused until the copy is done.
.SH "SEE ALSO"
.BR mdbx_dump (1),
.BR mdbx_chk (1),
.BR mdbx_stat (1),
.BR mdbx_load (1)
.SH AUTHOR
Howard Chu of Symas Corporation <http://www.symas.com>

View file

@ -0,0 +1,80 @@
.\" Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
.\" Copyright 2014-2015 Howard Chu, Symas Corp. All Rights Reserved.
.\" Copyright 2015,2016 Peter-Service R&D LLC <http://billing.ru/>.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.TH MDBX_DUMP 1 "2019-09-10" "MDBX 0.x"
.SH NAME
mdbx_dump \- MDBX environment export tool
.SH SYNOPSIS
.B mdbx_dump
[\c
.BR \-V ]
[\c
.BI \-f \ file\fR]
[\c
.BR \-l ]
[\c
.BR \-n ]
[\c
.BR \-p ]
[\c
.BR \-a \ |
.BI \-s \ subdb\fR]
.BR \ envpath
.SH DESCRIPTION
The
.B mdbx_dump
utility reads a database and writes its contents to the
standard output using a portable flat-text format
understood by the
.BR mdbx_load (1)
utility.
.SH OPTIONS
.TP
.BR \-V
Write the library version number to the standard output, and exit.
.TP
.BR \-f \ file
Write to the specified file instead of to the standard output.
.TP
.BR \-l
List the databases stored in the environment. Just the
names will be listed, no data will be output.
.TP
.BR \-n
Dump an MDBX database which does not use subdirectories.
.TP
.BR \-p
If characters in either the key or data items are printing characters (as
defined by isprint(3)), output them directly. This option permits users to
use standard text editors and tools to modify the contents of databases.
Note: different systems may have different notions about what characters
are considered printing characters, and databases dumped in this manner may
be less portable to external systems.
.TP
.BR \-a
Dump all of the subdatabases in the environment.
.TP
.BR \-s \ subdb
Dump a specific subdatabase. If no database is specified, only the main database is dumped.
.SH DIAGNOSTICS
Exit status is zero if no errors occur.
Errors result in a non-zero exit status and
a diagnostic message being written to standard error.
Dumping and reloading databases that use user-defined comparison functions
will result in new databases that use the default comparison functions.
\fBIn this case it is quite likely that the reloaded database will be
damaged beyond repair permitting neither record storage nor retrieval.\fP
The only available workaround is to modify the source for the
.BR mdbx_load (1)
utility to load the database using the correct comparison functions.
.SH "SEE ALSO"
.BR mdbx_load (1),
.BR mdbx_copy (1),
.BR mdbx_chk (1),
.BR mdbx_stat (1)
.SH AUTHOR
Howard Chu of Symas Corporation <http://www.symas.com>

View file

@ -0,0 +1,89 @@
.\" Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
.\" Copyright 2014-2015 Howard Chu, Symas Corp. All Rights Reserved.
.\" Copyright 2015,2016 Peter-Service R&D LLC <http://billing.ru/>.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.TH MDBX_LOAD 1 "2019-09-10" "MDBX 0.x"
.SH NAME
mdbx_load \- MDBX environment import tool
.SH SYNOPSIS
.B mdbx_load
[\c
.BR \-V ]
[\c
.BI \-f \ file\fR]
[\c
.BR \-n ]
[\c
.BI \-s \ subdb\fR]
[\c
.BR \-N ]
[\c
.BR \-T ]
.BR \ envpath
.SH DESCRIPTION
The
.B mdbx_load
utility reads from the standard input and loads it into the
MDBX environment
.BR envpath .
The input to
.B mdbx_load
must be in the output format specified by the
.BR mdbx_dump (1)
utility or as specified by the
.B -T
option below.
.SH OPTIONS
.TP
.BR \-V
Write the library version number to the standard output, and exit.
.TP
.BR \-a
Append all records in the order they appear in the input. The input is assumed to already be
in correctly sorted order and no sorting or checking for redundant values will be performed.
This option must be used to reload data that was produced by running
.B mdbx_dump
on a database that uses custom compare functions.
.TP
.BR \-f \ file
Read from the specified file instead of from the standard input.
.TP
.BR \-n
Load an MDBX database which does not use subdirectories.
.TP
.BR \-s \ subdb
Load a specific subdatabase. If no database is specified, data is loaded into the main database.
.TP
.BR \-N
Don't overwrite existing records when loading into an already existing database; just skip them.
.TP
.BR \-T
Load data from simple text files. The input must be paired lines of text, where the first
line of the pair is the key item, and the second line of the pair is its corresponding
data item.
A simple escape mechanism, where newline and backslash (\\) characters are special, is
applied to the text input. Newline characters are interpreted as record separators.
Backslash characters in the text will be interpreted in one of two ways: If the backslash
character precedes another backslash character, the pair will be interpreted as a literal
backslash. If the backslash character precedes any other character, the two characters
following the backslash will be interpreted as a hexadecimal specification of a single
character; for example, \\0a is a newline character in the ASCII character set.
For this reason, any backslash or newline characters that naturally occur in the text
input must be escaped to avoid misinterpretation by
.BR mdbx_load .
.SH DIAGNOSTICS
Exit status is zero if no errors occur.
Errors result in a non-zero exit status and
a diagnostic message being written to standard error.
.SH "SEE ALSO"
.BR mdbx_dump (1),
.BR mdbx_chk (1),
.BR mdbx_stat (1),
.BR mdbx_copy (1)
.SH AUTHOR
Howard Chu of Symas Corporation <http://www.symas.com>

View file

@ -0,0 +1,69 @@
.\" Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>.
.\" Copyright 2012-2015 Howard Chu, Symas Corp. All Rights Reserved.
.\" Copyright 2015,2016 Peter-Service R&D LLC <http://billing.ru/>.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.TH MDBX_STAT 1 "2019-09-10" "MDBX 0.x"
.SH NAME
mdbx_stat \- MDBX environment status tool
.SH SYNOPSIS
.B mdbx_stat
[\c
.BR \-V ]
[\c
.BR \-e ]
[\c
.BR \-f [ f [ f ]]]
[\c
.BR \-n ]
[\c
.BR \-r [ r ]]
[\c
.BR \-a \ |
.BI \-s \ subdb\fR]
.BR \ envpath
.SH DESCRIPTION
The
.B mdbx_stat
utility displays the status of an MDBX environment.
.SH OPTIONS
.TP
.BR \-V
Write the library version number to the standard output, and exit.
.TP
.BR \-e
Display information about the database environment.
.TP
.BR \-f
Display information about the environment freelist.
If \fB\-ff\fP is given, summarize each freelist entry.
If \fB\-fff\fP is given, display the full list of page IDs in the freelist.
.TP
.BR \-n
Display the status of an MDBX database which does not use subdirectories.
.TP
.BR \-r
Display information about the environment reader table.
Shows the process ID, thread ID, and transaction ID for each active
reader slot. The process ID and transaction ID are in decimal, the
thread ID is in hexadecimal. The transaction ID is displayed as "-"
if the reader does not currently have a read transaction open.
If \fB\-rr\fP is given, check for stale entries in the reader
table and clear them. The reader table will be printed again
after the check is performed.
.TP
.BR \-a
Display the status of all of the subdatabases in the environment.
.TP
.BR \-s \ subdb
Display the status of a specific subdatabase.
.SH DIAGNOSTICS
Exit status is zero if no errors occur.
Errors result in a non-zero exit status and
a diagnostic message being written to standard error.
.SH "SEE ALSO"
.BR mdbx_chk (1),
.BR mdbx_copy (1),
.BR mdbx_dump (1),
.BR mdbx_load (1)
.SH AUTHOR
Howard Chu of Symas Corporation <http://www.symas.com>

View file

@ -0,0 +1,42 @@
set(MDBX_TOOLS mdbx_chk mdbx_copy mdbx_dump mdbx_load mdbx_stat)
# use, i.e. don't skip the full RPATH for the build tree
set(CMAKE_SKIP_BUILD_RPATH FALSE)
# when building, don't use the install RPATH already (but later on when installing)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# the RPATH to be used when installing, but only if it's not a system directory
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
if(isSystemDir EQUAL -1)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
else()
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib")
endif()
endif()
foreach(TOOL ${MDBX_TOOLS})
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
add_executable(${TOOL} ${TOOL}.c wingetopt.c wingetopt.h)
else()
add_executable(${TOOL} ${TOOL}.c)
endif()
target_link_libraries(${TOOL} mdbx ${CMAKE_THREAD_LIBS_INIT})
set_target_properties(${TOOL} PROPERTIES
C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${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)
endforeach()
if(LIB_MATH)
target_link_libraries(mdbx_chk ${LIB_MATH})
target_link_libraries(mdbx_stat ${LIB_MATH})
endif()

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,130 @@
/* mdbx_copy.c - memory-mapped database backup tool */
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>. */
#ifdef _MSC_VER
#if _MSC_VER > 1800
#pragma warning(disable : 4464) /* relative include path contains '..' */
#endif
#pragma warning(disable : 4996) /* The POSIX name is deprecated... */
#endif /* _MSC_VER (warnings) */
#define MDBX_TOOLS /* Avoid using internal mdbx_assert() */
#include "../elements/internals.h"
#if defined(_WIN32) || defined(_WIN64)
#include "wingetopt.h"
static volatile BOOL user_break;
static BOOL WINAPI ConsoleBreakHandlerRoutine(DWORD dwCtrlType) {
(void)dwCtrlType;
user_break = true;
return true;
}
#else /* WINDOWS */
static volatile sig_atomic_t user_break;
static void signal_handler(int sig) {
(void)sig;
user_break = 1;
}
#endif /* !WINDOWS */
int main(int argc, char *argv[]) {
int rc;
MDBX_env *env = NULL;
const char *progname = argv[0], *act;
unsigned flags = MDBX_RDONLY;
unsigned cpflags = 0;
bool quiet = false;
for (; argc > 1 && argv[1][0] == '-'; argc--, argv++) {
if (argv[1][1] == 'n' && argv[1][2] == '\0')
flags |= MDBX_NOSUBDIR;
else if (argv[1][1] == 'c' && argv[1][2] == '\0')
cpflags |= MDBX_CP_COMPACT;
else if (argv[1][1] == 'q' && argv[1][2] == '\0')
quiet = true;
else if (argv[1][1] == 'V' && argv[1][2] == '\0') {
printf("mdbx_copy version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
} else
argc = 0;
}
if (argc < 2 || argc > 3) {
fprintf(stderr, "usage: %s [-V] [-q] [-c] [-n] srcpath [dstpath]\n",
progname);
exit(EXIT_FAILURE);
}
#if defined(_WIN32) || defined(_WIN64)
SetConsoleCtrlHandler(ConsoleBreakHandlerRoutine, true);
#else
#ifdef SIGPIPE
signal(SIGPIPE, signal_handler);
#endif
#ifdef SIGHUP
signal(SIGHUP, signal_handler);
#endif
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#endif /* !WINDOWS */
if (!quiet) {
fprintf((argc == 2) ? stderr : stdout,
"mdbx_copy %s (%s, T-%s)\nRunning for copy %s to %s...\n",
mdbx_version.git.describe, mdbx_version.git.datetime,
mdbx_version.git.tree, argv[1], (argc == 2) ? "stdout" : argv[2]);
fflush(NULL);
}
act = "opening environment";
rc = mdbx_env_create(&env);
if (rc == MDBX_SUCCESS) {
rc = mdbx_env_open(env, argv[1], flags, 0640);
}
if (rc == MDBX_SUCCESS) {
act = "copying";
if (argc == 2) {
mdbx_filehandle_t fd;
#if defined(_WIN32) || defined(_WIN64)
fd = GetStdHandle(STD_OUTPUT_HANDLE);
#else
fd = fileno(stdout);
#endif
rc = mdbx_env_copy2fd(env, fd, cpflags);
} else
rc = mdbx_env_copy(env, argv[2], cpflags);
}
if (rc)
fprintf(stderr, "%s: %s failed, error %d (%s)\n", progname, act, rc,
mdbx_strerror(rc));
mdbx_env_close(env);
return rc ? EXIT_FAILURE : EXIT_SUCCESS;
}

View file

@ -0,0 +1,352 @@
/* mdbx_dump.c - memory-mapped database dump tool */
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>. */
#ifdef _MSC_VER
#if _MSC_VER > 1800
#pragma warning(disable : 4464) /* relative include path contains '..' */
#endif
#pragma warning(disable : 4996) /* The POSIX name is deprecated... */
#endif /* _MSC_VER (warnings) */
#define MDBX_TOOLS /* Avoid using internal mdbx_assert() */
#include "../elements/internals.h"
#include <ctype.h>
#define PRINT 1
static int mode;
typedef struct flagbit {
int bit;
char *name;
} flagbit;
flagbit dbflags[] = {{MDBX_REVERSEKEY, "reversekey"},
{MDBX_DUPSORT, "dupsort"},
{MDBX_INTEGERKEY, "integerkey"},
{MDBX_DUPFIXED, "dupfixed"},
{MDBX_INTEGERDUP, "integerdup"},
{MDBX_REVERSEDUP, "reversedup"},
{0, NULL}};
#if defined(_WIN32) || defined(_WIN64)
#include "wingetopt.h"
static volatile BOOL user_break;
static BOOL WINAPI ConsoleBreakHandlerRoutine(DWORD dwCtrlType) {
(void)dwCtrlType;
user_break = true;
return true;
}
#else /* WINDOWS */
static volatile sig_atomic_t user_break;
static void signal_handler(int sig) {
(void)sig;
user_break = 1;
}
#endif /* !WINDOWS */
static const char hexc[] = "0123456789abcdef";
static void dumpbyte(unsigned char c) {
putchar(hexc[c >> 4]);
putchar(hexc[c & 0xf]);
}
static void text(MDBX_val *v) {
unsigned char *c, *end;
putchar(' ');
c = v->iov_base;
end = c + v->iov_len;
while (c < end) {
if (isprint(*c) && *c != '\\') {
putchar(*c);
} else {
putchar('\\');
dumpbyte(*c);
}
c++;
}
putchar('\n');
}
static void dumpval(MDBX_val *v) {
unsigned char *c, *end;
putchar(' ');
c = v->iov_base;
end = c + v->iov_len;
while (c < end) {
dumpbyte(*c++);
}
putchar('\n');
}
/* Dump in BDB-compatible format */
static int dumpit(MDBX_txn *txn, MDBX_dbi dbi, char *name) {
MDBX_cursor *mc;
MDBX_stat ms;
MDBX_val key, data;
MDBX_envinfo info;
unsigned int flags;
int rc, i;
rc = mdbx_dbi_flags(txn, dbi, &flags);
if (rc)
return rc;
rc = mdbx_dbi_stat(txn, dbi, &ms, sizeof(ms));
if (rc)
return rc;
rc = mdbx_env_info(mdbx_txn_env(txn), &info, sizeof(info));
if (rc)
return rc;
printf("VERSION=3\n");
printf("format=%s\n", mode & PRINT ? "print" : "bytevalue");
if (name)
printf("database=%s\n", name);
printf("type=btree\n");
printf("mapsize=%" PRIu64 "\n", info.mi_mapsize);
printf("maxreaders=%u\n", info.mi_maxreaders);
for (i = 0; dbflags[i].bit; i++)
if (flags & dbflags[i].bit)
printf("%s=1\n", dbflags[i].name);
printf("db_pagesize=%d\n", ms.ms_psize);
printf("HEADER=END\n");
rc = mdbx_cursor_open(txn, dbi, &mc);
if (rc)
return rc;
while ((rc = mdbx_cursor_get(mc, &key, &data, MDBX_NEXT)) == MDBX_SUCCESS) {
if (user_break) {
rc = MDBX_EINTR;
break;
}
if (mode & PRINT) {
text(&key);
text(&data);
} else {
dumpval(&key);
dumpval(&data);
}
}
printf("DATA=END\n");
if (rc == MDBX_NOTFOUND)
rc = MDBX_SUCCESS;
return rc;
}
static void usage(char *prog) {
fprintf(stderr,
"usage: %s [-V] [-f output] [-l] [-n] [-p] [-a|-s subdb] dbpath\n",
prog);
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[]) {
int i, rc;
MDBX_env *env;
MDBX_txn *txn;
MDBX_dbi dbi;
char *prog = argv[0];
char *envname;
char *subname = NULL;
int alldbs = 0, envflags = 0, list = 0;
if (argc < 2)
usage(prog);
/* -a: dump main DB and all subDBs
* -s: dump only the named subDB
* -n: use NOSUBDIR flag on env_open
* -p: use printable characters
* -f: write to file instead of stdout
* -V: print version and exit
* (default) dump only the main DB
*/
while ((i = getopt(argc, argv, "af:lnps:V")) != EOF) {
switch (i) {
case 'V':
printf("mdbx_dump version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
case 'l':
list = 1;
/*FALLTHROUGH*/;
__fallthrough;
case 'a':
if (subname)
usage(prog);
alldbs++;
break;
case 'f':
if (freopen(optarg, "w", stdout) == NULL) {
fprintf(stderr, "%s: %s: reopen: %s\n", prog, optarg,
mdbx_strerror(errno));
exit(EXIT_FAILURE);
}
break;
case 'n':
envflags |= MDBX_NOSUBDIR;
break;
case 'p':
mode |= PRINT;
break;
case 's':
if (alldbs)
usage(prog);
subname = optarg;
break;
default:
usage(prog);
}
}
if (optind != argc - 1)
usage(prog);
#if defined(_WIN32) || defined(_WIN64)
SetConsoleCtrlHandler(ConsoleBreakHandlerRoutine, true);
#else
#ifdef SIGPIPE
signal(SIGPIPE, signal_handler);
#endif
#ifdef SIGHUP
signal(SIGHUP, signal_handler);
#endif
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#endif /* !WINDOWS */
envname = argv[optind];
printf("mdbx_dump %s (%s, T-%s)\nRunning for %s...\n",
mdbx_version.git.describe, mdbx_version.git.datetime,
mdbx_version.git.tree, envname);
fflush(NULL);
rc = mdbx_env_create(&env);
if (rc) {
fprintf(stderr, "mdbx_env_create failed, error %d %s\n", rc,
mdbx_strerror(rc));
return EXIT_FAILURE;
}
if (alldbs || subname) {
mdbx_env_set_maxdbs(env, 2);
}
rc = mdbx_env_open(env, envname, envflags | MDBX_RDONLY, 0664);
if (rc) {
fprintf(stderr, "mdbx_env_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
rc = mdbx_txn_begin(env, NULL, MDBX_RDONLY, &txn);
if (rc) {
fprintf(stderr, "mdbx_txn_begin failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
rc = mdbx_dbi_open(txn, subname, 0, &dbi);
if (rc) {
fprintf(stderr, "mdbx_open failed, error %d %s\n", rc, mdbx_strerror(rc));
goto txn_abort;
}
if (alldbs) {
MDBX_cursor *cursor;
MDBX_val key;
int count = 0;
rc = mdbx_cursor_open(txn, dbi, &cursor);
if (rc) {
fprintf(stderr, "mdbx_cursor_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
while ((rc = mdbx_cursor_get(cursor, &key, NULL, MDBX_NEXT_NODUP)) == 0) {
if (user_break) {
rc = MDBX_EINTR;
break;
}
char *str;
MDBX_dbi db2;
if (memchr(key.iov_base, '\0', key.iov_len))
continue;
count++;
str = mdbx_malloc(key.iov_len + 1);
memcpy(str, key.iov_base, key.iov_len);
str[key.iov_len] = '\0';
rc = mdbx_dbi_open(txn, str, 0, &db2);
if (rc == MDBX_SUCCESS) {
if (list) {
printf("%s\n", str);
list++;
} else {
rc = dumpit(txn, db2, str);
if (rc)
break;
}
mdbx_dbi_close(env, db2);
}
mdbx_free(str);
if (rc)
continue;
}
mdbx_cursor_close(cursor);
if (!count) {
fprintf(stderr, "%s: %s does not contain multiple databases\n", prog,
envname);
rc = MDBX_NOTFOUND;
} else if (rc == MDBX_INCOMPATIBLE) {
/* LY: the record it not a named sub-db. */
rc = MDBX_SUCCESS;
}
} else {
rc = dumpit(txn, dbi, subname);
}
if (rc && rc != MDBX_NOTFOUND)
fprintf(stderr, "%s: %s: %s\n", prog, envname, mdbx_strerror(rc));
mdbx_dbi_close(env, dbi);
txn_abort:
mdbx_txn_abort(txn);
env_close:
mdbx_env_close(env);
return rc ? EXIT_FAILURE : EXIT_SUCCESS;
}

View file

@ -0,0 +1,567 @@
/* mdbx_load.c - memory-mapped database load tool */
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>. */
#ifdef _MSC_VER
#if _MSC_VER > 1800
#pragma warning(disable : 4464) /* relative include path contains '..' */
#endif
#pragma warning(disable : 4996) /* The POSIX name is deprecated... */
#endif /* _MSC_VER (warnings) */
#define MDBX_TOOLS /* Avoid using internal mdbx_assert() */
#include "../elements/internals.h"
#include <ctype.h>
#if defined(_WIN32) || defined(_WIN64)
#include "wingetopt.h"
static volatile BOOL user_break;
static BOOL WINAPI ConsoleBreakHandlerRoutine(DWORD dwCtrlType) {
(void)dwCtrlType;
user_break = true;
return true;
}
#else /* WINDOWS */
static volatile sig_atomic_t user_break;
static void signal_handler(int sig) {
(void)sig;
user_break = 1;
}
#endif /* !WINDOWS */
#define PRINT 1
#define NOHDR 2
static int mode;
static char *subname = NULL;
static size_t lineno;
static int version;
static int dbi_flags;
static char *prog;
static int Eof;
static MDBX_envinfo envinfo;
static MDBX_val kbuf, dbuf;
static MDBX_val k0buf;
#define STRLENOF(s) (sizeof(s) - 1)
typedef struct flagbit {
int bit;
char *name;
int len;
} flagbit;
#define S(s) s, STRLENOF(s)
flagbit dbflags[] = {{MDBX_REVERSEKEY, S("reversekey")},
{MDBX_DUPSORT, S("dupsort")},
{MDBX_INTEGERKEY, S("integerkey")},
{MDBX_DUPFIXED, S("dupfixed")},
{MDBX_INTEGERDUP, S("integerdup")},
{MDBX_REVERSEDUP, S("reversedup")},
{0, NULL, 0}};
static void readhdr(void) {
char *ptr;
dbi_flags = 0;
while (fgets(dbuf.iov_base, (int)dbuf.iov_len, stdin) != NULL) {
lineno++;
if (!strncmp(dbuf.iov_base, "db_pagesize=", STRLENOF("db_pagesize=")) ||
!strncmp(dbuf.iov_base, "duplicates=", STRLENOF("duplicates="))) {
/* LY: silently ignore information fields. */
continue;
} else if (!strncmp(dbuf.iov_base, "VERSION=", STRLENOF("VERSION="))) {
version = atoi((char *)dbuf.iov_base + STRLENOF("VERSION="));
if (version > 3) {
fprintf(stderr, "%s: line %" PRIiSIZE ": unsupported VERSION %d\n",
prog, lineno, version);
exit(EXIT_FAILURE);
}
} else if (!strncmp(dbuf.iov_base, "HEADER=END", STRLENOF("HEADER=END"))) {
break;
} else if (!strncmp(dbuf.iov_base, "format=", STRLENOF("format="))) {
if (!strncmp((char *)dbuf.iov_base + STRLENOF("FORMAT="), "print",
STRLENOF("print")))
mode |= PRINT;
else if (strncmp((char *)dbuf.iov_base + STRLENOF("FORMAT="), "bytevalue",
STRLENOF("bytevalue"))) {
fprintf(stderr, "%s: line %" PRIiSIZE ": unsupported FORMAT %s\n", prog,
lineno, (char *)dbuf.iov_base + STRLENOF("FORMAT="));
exit(EXIT_FAILURE);
}
} else if (!strncmp(dbuf.iov_base, "database=", STRLENOF("database="))) {
ptr = memchr(dbuf.iov_base, '\n', dbuf.iov_len);
if (ptr)
*ptr = '\0';
if (subname)
mdbx_free(subname);
subname = mdbx_strdup((char *)dbuf.iov_base + STRLENOF("database="));
} else if (!strncmp(dbuf.iov_base, "type=", STRLENOF("type="))) {
if (strncmp((char *)dbuf.iov_base + STRLENOF("type="), "btree",
STRLENOF("btree"))) {
fprintf(stderr, "%s: line %" PRIiSIZE ": unsupported type %s\n", prog,
lineno, (char *)dbuf.iov_base + STRLENOF("type="));
exit(EXIT_FAILURE);
}
} else if (!strncmp(dbuf.iov_base, "mapaddr=", STRLENOF("mapaddr="))) {
int i;
ptr = memchr(dbuf.iov_base, '\n', dbuf.iov_len);
if (ptr)
*ptr = '\0';
void *unused;
i = sscanf((char *)dbuf.iov_base + STRLENOF("mapaddr="), "%p", &unused);
if (i != 1) {
fprintf(stderr, "%s: line %" PRIiSIZE ": invalid mapaddr %s\n", prog,
lineno, (char *)dbuf.iov_base + STRLENOF("mapaddr="));
exit(EXIT_FAILURE);
}
} else if (!strncmp(dbuf.iov_base, "mapsize=", STRLENOF("mapsize="))) {
int i;
ptr = memchr(dbuf.iov_base, '\n', dbuf.iov_len);
if (ptr)
*ptr = '\0';
i = sscanf((char *)dbuf.iov_base + STRLENOF("mapsize="), "%" PRIu64,
&envinfo.mi_mapsize);
if (i != 1) {
fprintf(stderr, "%s: line %" PRIiSIZE ": invalid mapsize %s\n", prog,
lineno, (char *)dbuf.iov_base + STRLENOF("mapsize="));
exit(EXIT_FAILURE);
}
} else if (!strncmp(dbuf.iov_base,
"maxreaders=", STRLENOF("maxreaders="))) {
int i;
ptr = memchr(dbuf.iov_base, '\n', dbuf.iov_len);
if (ptr)
*ptr = '\0';
i = sscanf((char *)dbuf.iov_base + STRLENOF("maxreaders="), "%u",
&envinfo.mi_maxreaders);
if (i != 1) {
fprintf(stderr, "%s: line %" PRIiSIZE ": invalid maxreaders %s\n", prog,
lineno, (char *)dbuf.iov_base + STRLENOF("maxreaders="));
exit(EXIT_FAILURE);
}
} else {
int i;
for (i = 0; dbflags[i].bit; i++) {
if (!strncmp(dbuf.iov_base, dbflags[i].name, dbflags[i].len) &&
((char *)dbuf.iov_base)[dbflags[i].len] == '=') {
if (((char *)dbuf.iov_base)[dbflags[i].len + 1] == '1')
dbi_flags |= dbflags[i].bit;
break;
}
}
if (!dbflags[i].bit) {
ptr = memchr(dbuf.iov_base, '=', dbuf.iov_len);
if (!ptr) {
fprintf(stderr, "%s: line %" PRIiSIZE ": unexpected format\n", prog,
lineno);
exit(EXIT_FAILURE);
} else {
*ptr = '\0';
fprintf(stderr,
"%s: line %" PRIiSIZE ": unrecognized keyword ignored: %s\n",
prog, lineno, (char *)dbuf.iov_base);
}
}
}
}
}
static void badend(void) {
fprintf(stderr, "%s: line %" PRIiSIZE ": unexpected end of input\n", prog,
lineno);
}
static int unhex(unsigned char *c2) {
int x, c;
x = *c2++ & 0x4f;
if (x & 0x40)
x -= 55;
c = x << 4;
x = *c2 & 0x4f;
if (x & 0x40)
x -= 55;
c |= x;
return c;
}
static int readline(MDBX_val *out, MDBX_val *buf) {
unsigned char *c1, *c2, *end;
size_t len, l2;
int c;
if (!(mode & NOHDR)) {
c = fgetc(stdin);
if (c == EOF) {
Eof = 1;
return EOF;
}
if (c != ' ') {
lineno++;
if (fgets(buf->iov_base, (int)buf->iov_len, stdin) == NULL) {
badend:
Eof = 1;
badend();
return EOF;
}
if (c == 'D' && !strncmp(buf->iov_base, "ATA=END", STRLENOF("ATA=END")))
return EOF;
goto badend;
}
}
if (fgets(buf->iov_base, (int)buf->iov_len, stdin) == NULL) {
Eof = 1;
return EOF;
}
lineno++;
c1 = buf->iov_base;
len = strlen((char *)c1);
l2 = len;
/* Is buffer too short? */
while (c1[len - 1] != '\n') {
buf->iov_base = mdbx_realloc(buf->iov_base, buf->iov_len * 2);
if (!buf->iov_base) {
Eof = 1;
fprintf(stderr, "%s: line %" PRIiSIZE ": out of memory, line too long\n",
prog, lineno);
return EOF;
}
c1 = buf->iov_base;
c1 += l2;
if (fgets((char *)c1, (int)buf->iov_len + 1, stdin) == NULL) {
Eof = 1;
badend();
return EOF;
}
buf->iov_len *= 2;
len = strlen((char *)c1);
l2 += len;
}
c1 = c2 = buf->iov_base;
len = l2;
c1[--len] = '\0';
end = c1 + len;
if (mode & PRINT) {
while (c2 < end) {
if (unlikely(*c2 == '\\')) {
if (c2[1] == '\\') {
*c1++ = '\\';
} else {
if (c2 + 3 > end || !isxdigit(c2[1]) || !isxdigit(c2[2])) {
Eof = 1;
badend();
return EOF;
}
*c1++ = (char)unhex(++c2);
}
c2 += 2;
} else {
/* copies are redundant when no escapes were used */
*c1++ = *c2++;
}
}
} else {
/* odd length not allowed */
if (len & 1) {
Eof = 1;
badend();
return EOF;
}
while (c2 < end) {
if (!isxdigit(*c2) || !isxdigit(c2[1])) {
Eof = 1;
badend();
return EOF;
}
*c1++ = (char)unhex(c2);
c2 += 2;
}
}
c2 = out->iov_base = buf->iov_base;
out->iov_len = c1 - c2;
return 0;
}
static void usage(void) {
fprintf(stderr,
"usage: %s [-V] [-a] [-f input] [-n] [-s name] [-N] [-T] dbpath\n",
prog);
exit(EXIT_FAILURE);
}
static int anyway_greater(const MDBX_val *a, const MDBX_val *b) {
(void)a;
(void)b;
return 1;
}
int main(int argc, char *argv[]) {
int i, rc;
MDBX_env *env = NULL;
MDBX_txn *txn = NULL;
MDBX_cursor *mc = NULL;
MDBX_dbi dbi;
char *envname = NULL;
int envflags = MDBX_UTTERLY_NOSYNC, putflags = 0;
int append = 0;
MDBX_val prevk;
prog = argv[0];
if (argc < 2)
usage();
/* -a: append records in input order
* -f: load file instead of stdin
* -n: use NOSUBDIR flag on env_open
* -s: load into named subDB
* -N: use NOOVERWRITE on puts
* -T: read plaintext
* -V: print version and exit
*/
while ((i = getopt(argc, argv, "af:ns:NTV")) != EOF) {
switch (i) {
case 'V':
printf("mdbx_load version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
case 'a':
append = 1;
break;
case 'f':
if (freopen(optarg, "r", stdin) == NULL) {
fprintf(stderr, "%s: %s: reopen: %s\n", prog, optarg,
mdbx_strerror(errno));
exit(EXIT_FAILURE);
}
break;
case 'n':
envflags |= MDBX_NOSUBDIR;
break;
case 's':
subname = mdbx_strdup(optarg);
break;
case 'N':
putflags = MDBX_NOOVERWRITE | MDBX_NODUPDATA;
break;
case 'T':
mode |= NOHDR | PRINT;
break;
default:
usage();
}
}
if (optind != argc - 1)
usage();
#if defined(_WIN32) || defined(_WIN64)
SetConsoleCtrlHandler(ConsoleBreakHandlerRoutine, true);
#else
#ifdef SIGPIPE
signal(SIGPIPE, signal_handler);
#endif
#ifdef SIGHUP
signal(SIGHUP, signal_handler);
#endif
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#endif /* !WINDOWS */
envname = argv[optind];
printf("mdbx_load %s (%s, T-%s)\nRunning for %s...\n",
mdbx_version.git.describe, mdbx_version.git.datetime,
mdbx_version.git.tree, envname);
fflush(NULL);
dbuf.iov_len = 4096;
dbuf.iov_base = mdbx_malloc(dbuf.iov_len);
/* read first header for mapsize= */
if (!(mode & NOHDR))
readhdr();
rc = mdbx_env_create(&env);
if (rc) {
fprintf(stderr, "mdbx_env_create failed, error %d %s\n", rc,
mdbx_strerror(rc));
return EXIT_FAILURE;
}
mdbx_env_set_maxdbs(env, 2);
if (envinfo.mi_maxreaders)
mdbx_env_set_maxreaders(env, envinfo.mi_maxreaders);
if (envinfo.mi_mapsize) {
if (envinfo.mi_mapsize > SIZE_MAX) {
fprintf(stderr, "mdbx_env_set_mapsize failed, error %d %s\n", rc,
mdbx_strerror(MDBX_TOO_LARGE));
return EXIT_FAILURE;
}
mdbx_env_set_mapsize(env, (size_t)envinfo.mi_mapsize);
}
#ifdef MDBX_FIXEDMAP
if (info.mi_mapaddr)
envflags |= MDBX_FIXEDMAP;
#endif
rc = mdbx_env_open(env, envname, envflags, 0664);
if (rc) {
fprintf(stderr, "mdbx_env_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
kbuf.iov_len = mdbx_env_get_maxkeysize(env);
if (kbuf.iov_len >= SIZE_MAX / 4) {
fprintf(stderr, "mdbx_env_get_maxkeysize failed, returns %zu\n",
kbuf.iov_len);
goto env_close;
}
kbuf.iov_len = (kbuf.iov_len + 1) * 2;
kbuf.iov_base = malloc(kbuf.iov_len * 2);
k0buf.iov_len = kbuf.iov_len;
k0buf.iov_base = (char *)kbuf.iov_base + kbuf.iov_len;
prevk.iov_base = k0buf.iov_base;
while (!Eof) {
if (user_break) {
rc = MDBX_EINTR;
break;
}
rc = mdbx_txn_begin(env, NULL, 0, &txn);
if (rc) {
fprintf(stderr, "mdbx_txn_begin failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
rc = mdbx_dbi_open_ex(txn, subname, dbi_flags | MDBX_CREATE, &dbi,
append ? anyway_greater : NULL,
append ? anyway_greater : NULL);
if (rc) {
fprintf(stderr, "mdbx_open failed, error %d %s\n", rc, mdbx_strerror(rc));
goto txn_abort;
}
rc = mdbx_cursor_open(txn, dbi, &mc);
if (rc) {
fprintf(stderr, "mdbx_cursor_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
int batch = 0;
prevk.iov_len = 0;
while (1) {
MDBX_val key;
rc = readline(&key, &kbuf);
if (rc) /* rc == EOF */
break;
MDBX_val data;
rc = readline(&data, &dbuf);
if (rc) {
fprintf(stderr, "%s: line %" PRIiSIZE ": failed to read key value\n",
prog, lineno);
goto txn_abort;
}
int appflag = 0;
if (append) {
appflag = MDBX_APPEND;
if (dbi_flags & MDBX_DUPSORT) {
if (prevk.iov_len == key.iov_len &&
memcmp(prevk.iov_base, key.iov_base, key.iov_len) == 0)
appflag = MDBX_APPEND | MDBX_APPENDDUP;
else
memcpy(prevk.iov_base, key.iov_base, prevk.iov_len = key.iov_len);
}
}
rc = mdbx_cursor_put(mc, &key, &data, putflags | appflag);
if (rc == MDBX_KEYEXIST && putflags)
continue;
if (rc) {
fprintf(stderr, "mdbx_cursor_put failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
batch++;
if (batch == 100) {
rc = mdbx_txn_commit(txn);
if (rc) {
fprintf(stderr, "%s: line %" PRIiSIZE ": txn_commit: %s\n", prog,
lineno, mdbx_strerror(rc));
goto env_close;
}
rc = mdbx_txn_begin(env, NULL, 0, &txn);
if (rc) {
fprintf(stderr, "mdbx_txn_begin failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
rc = mdbx_cursor_open(txn, dbi, &mc);
if (rc) {
fprintf(stderr, "mdbx_cursor_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
batch = 0;
}
}
rc = mdbx_txn_commit(txn);
txn = NULL;
if (rc) {
fprintf(stderr, "%s: line %" PRIiSIZE ": txn_commit: %s\n", prog, lineno,
mdbx_strerror(rc));
goto env_close;
}
mdbx_dbi_close(env, dbi);
/* try read next header */
if (!(mode & NOHDR))
readhdr();
}
txn_abort:
mdbx_txn_abort(txn);
env_close:
mdbx_env_close(env);
return rc ? EXIT_FAILURE : EXIT_SUCCESS;
}

View file

@ -0,0 +1,436 @@
/* mdbx_stat.c - memory-mapped database status tool */
/*
* Copyright 2015-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>. */
#ifdef _MSC_VER
#if _MSC_VER > 1800
#pragma warning(disable : 4464) /* relative include path contains '..' */
#endif
#pragma warning(disable : 4996) /* The POSIX name is deprecated... */
#endif /* _MSC_VER (warnings) */
#define MDBX_TOOLS /* Avoid using internal mdbx_assert() */
#include "../elements/internals.h"
#if defined(_WIN32) || defined(_WIN64)
#include "wingetopt.h"
static volatile BOOL user_break;
static BOOL WINAPI ConsoleBreakHandlerRoutine(DWORD dwCtrlType) {
(void)dwCtrlType;
user_break = true;
return true;
}
#else /* WINDOWS */
static volatile sig_atomic_t user_break;
static void signal_handler(int sig) {
(void)sig;
user_break = 1;
}
#endif /* !WINDOWS */
static void prstat(MDBX_stat *ms) {
printf(" Pagesize: %u\n", ms->ms_psize);
printf(" Tree depth: %u\n", ms->ms_depth);
printf(" Branch pages: %" PRIu64 "\n", ms->ms_branch_pages);
printf(" Leaf pages: %" PRIu64 "\n", ms->ms_leaf_pages);
printf(" Overflow pages: %" PRIu64 "\n", ms->ms_overflow_pages);
printf(" Entries: %" PRIu64 "\n", ms->ms_entries);
}
static void usage(char *prog) {
fprintf(stderr,
"usage: %s [-V] [-n] [-e] [-r[r]] [-f[f[f]]] [-a|-s subdb] dbpath\n",
prog);
exit(EXIT_FAILURE);
}
static int reader_list_func(void *ctx, int num, int slot, mdbx_pid_t pid,
mdbx_tid_t thread, uint64_t txnid, uint64_t lag,
size_t bytes_used, size_t bytes_retained) {
(void)ctx;
if (num == 1)
printf("Reader Table Status\n"
" #\tslot\t%6s %*s %20s %10s %13s %13s\n",
"pid", (int)sizeof(size_t) * 2, "thread", "txnid", "lag", "used",
"retained");
printf(" %3d)\t[%d]\t%6" PRIdSIZE " %*" PRIxSIZE, num, slot, (size_t)pid,
(int)sizeof(size_t) * 2, (size_t)thread);
if (txnid)
printf(" %20" PRIu64 " %10" PRIu64 " %12.1fM %12.1fM\n", txnid, lag,
bytes_used / 1048576.0, bytes_retained / 1048576.0);
else
printf(" %20s %10s %13s %13s\n", "-", "0", "0", "0");
return user_break ? MDBX_RESULT_TRUE : MDBX_RESULT_FALSE;
}
int main(int argc, char *argv[]) {
int o, rc;
MDBX_env *env;
MDBX_txn *txn;
MDBX_dbi dbi;
MDBX_stat mst;
MDBX_envinfo mei;
char *prog = argv[0];
char *envname;
char *subname = NULL;
int alldbs = 0, envinfo = 0, envflags = 0, freinfo = 0, rdrinfo = 0;
if (argc < 2)
usage(prog);
/* -a: print stat of main DB and all subDBs
* -s: print stat of only the named subDB
* -e: print env info
* -f: print freelist info
* -r: print reader info
* -n: use NOSUBDIR flag on env_open
* -V: print version and exit
* (default) print stat of only the main DB
*/
while ((o = getopt(argc, argv, "Vaefnrs:")) != EOF) {
switch (o) {
case 'V':
printf("mdbx_stat version %d.%d.%d.%d\n"
" - source: %s %s, commit %s, tree %s\n"
" - anchor: %s\n"
" - build: %s for %s by %s\n"
" - flags: %s\n"
" - options: %s\n",
mdbx_version.major, mdbx_version.minor, mdbx_version.release,
mdbx_version.revision, mdbx_version.git.describe,
mdbx_version.git.datetime, mdbx_version.git.commit,
mdbx_version.git.tree, mdbx_sourcery_anchor, mdbx_build.datetime,
mdbx_build.target, mdbx_build.compiler, mdbx_build.flags,
mdbx_build.options);
return EXIT_SUCCESS;
case 'a':
if (subname)
usage(prog);
alldbs++;
break;
case 'e':
envinfo++;
break;
case 'f':
freinfo++;
break;
case 'n':
envflags |= MDBX_NOSUBDIR;
break;
case 'r':
rdrinfo++;
break;
case 's':
if (alldbs)
usage(prog);
subname = optarg;
break;
default:
usage(prog);
}
}
if (optind != argc - 1)
usage(prog);
#if defined(_WIN32) || defined(_WIN64)
SetConsoleCtrlHandler(ConsoleBreakHandlerRoutine, true);
#else
#ifdef SIGPIPE
signal(SIGPIPE, signal_handler);
#endif
#ifdef SIGHUP
signal(SIGHUP, signal_handler);
#endif
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#endif /* !WINDOWS */
envname = argv[optind];
envname = argv[optind];
printf("mdbx_stat %s (%s, T-%s)\nRunning for %s...\n",
mdbx_version.git.describe, mdbx_version.git.datetime,
mdbx_version.git.tree, envname);
fflush(NULL);
rc = mdbx_env_create(&env);
if (rc) {
fprintf(stderr, "mdbx_env_create failed, error %d %s\n", rc,
mdbx_strerror(rc));
return EXIT_FAILURE;
}
if (alldbs || subname)
mdbx_env_set_maxdbs(env, 4);
rc = mdbx_env_open(env, envname, envflags | MDBX_RDONLY, 0664);
if (rc) {
fprintf(stderr, "mdbx_env_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
if (envinfo || freinfo) {
(void)mdbx_env_info(env, &mei, sizeof(mei));
} else {
/* LY: zap warnings from gcc */
memset(&mei, 0, sizeof(mei));
}
if (envinfo) {
(void)mdbx_env_stat(env, &mst, sizeof(mst));
printf("Environment Info\n");
printf(" Pagesize: %u\n", mst.ms_psize);
if (mei.mi_geo.lower != mei.mi_geo.upper) {
printf(" Dynamic datafile: %" PRIu64 "..%" PRIu64 " bytes (+%" PRIu64
"/-%" PRIu64 "), %" PRIu64 "..%" PRIu64 " pages (+%" PRIu64
"/-%" PRIu64 ")\n",
mei.mi_geo.lower, mei.mi_geo.upper, mei.mi_geo.grow,
mei.mi_geo.shrink, mei.mi_geo.lower / mst.ms_psize,
mei.mi_geo.upper / mst.ms_psize, mei.mi_geo.grow / mst.ms_psize,
mei.mi_geo.shrink / mst.ms_psize);
printf(" Current datafile: %" PRIu64 " bytes, %" PRIu64 " pages\n",
mei.mi_geo.current, mei.mi_geo.current / mst.ms_psize);
} else {
printf(" Fixed datafile: %" PRIu64 " bytes, %" PRIu64 " pages\n",
mei.mi_geo.current, mei.mi_geo.current / mst.ms_psize);
}
printf(" Current mapsize: %" PRIu64 " bytes, %" PRIu64 " pages \n",
mei.mi_mapsize, mei.mi_mapsize / mst.ms_psize);
printf(" Number of pages used: %" PRIu64 "\n", mei.mi_last_pgno + 1);
printf(" Last transaction ID: %" PRIu64 "\n", mei.mi_recent_txnid);
printf(" Tail transaction ID: %" PRIu64 " (%" PRIi64 ")\n",
mei.mi_latter_reader_txnid,
mei.mi_latter_reader_txnid - mei.mi_recent_txnid);
printf(" Max readers: %u\n", mei.mi_maxreaders);
printf(" Number of readers used: %u\n", mei.mi_numreaders);
} else {
/* LY: zap warnings from gcc */
memset(&mst, 0, sizeof(mst));
}
if (rdrinfo) {
rc = mdbx_reader_list(env, reader_list_func, nullptr);
if (rc == MDBX_RESULT_TRUE)
printf("Reader Table is empty\n");
else if (rc == MDBX_SUCCESS && rdrinfo > 1) {
int dead;
rc = mdbx_reader_check(env, &dead);
if (rc == MDBX_RESULT_TRUE) {
printf(" %d stale readers cleared.\n", dead);
rc = mdbx_reader_list(env, reader_list_func, nullptr);
if (rc == MDBX_RESULT_TRUE)
printf(" Now Reader Table is empty\n");
} else
printf(" No stale readers.\n");
}
if (MDBX_IS_ERROR(rc)) {
fprintf(stderr, "mdbx_txn_begin failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
if (!(subname || alldbs || freinfo))
goto env_close;
}
rc = mdbx_txn_begin(env, NULL, MDBX_RDONLY, &txn);
if (rc) {
fprintf(stderr, "mdbx_txn_begin failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto env_close;
}
if (freinfo) {
MDBX_cursor *cursor;
MDBX_val key, data;
pgno_t pages = 0, *iptr;
pgno_t reclaimable = 0;
printf("Freelist Status\n");
dbi = 0;
rc = mdbx_cursor_open(txn, dbi, &cursor);
if (rc) {
fprintf(stderr, "mdbx_cursor_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
rc = mdbx_dbi_stat(txn, dbi, &mst, sizeof(mst));
if (rc) {
fprintf(stderr, "mdbx_dbi_stat failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
prstat(&mst);
while ((rc = mdbx_cursor_get(cursor, &key, &data, MDBX_NEXT)) ==
MDBX_SUCCESS) {
if (user_break) {
rc = MDBX_EINTR;
break;
}
iptr = data.iov_base;
const pgno_t number = *iptr++;
pages += number;
if (envinfo && mei.mi_latter_reader_txnid > *(size_t *)key.iov_base)
reclaimable += number;
if (freinfo > 1) {
char *bad = "";
pgno_t prev =
MDBX_PNL_ASCENDING ? NUM_METAS - 1 : (pgno_t)mei.mi_last_pgno + 1;
pgno_t span = 1;
for (unsigned i = 0; i < number; ++i) {
pgno_t pg = iptr[i];
if (MDBX_PNL_DISORDERED(prev, pg))
bad = " [bad sequence]";
prev = pg;
while (i + span < number &&
iptr[i + span] == (MDBX_PNL_ASCENDING ? pgno_add(pg, span)
: pgno_sub(pg, span)))
++span;
}
printf(" Transaction %" PRIaTXN ", %" PRIaPGNO
" pages, maxspan %" PRIaPGNO "%s\n",
*(txnid_t *)key.iov_base, number, span, bad);
if (freinfo > 2) {
for (unsigned i = 0; i < number; i += span) {
const pgno_t pg = iptr[i];
for (span = 1;
i + span < number &&
iptr[i + span] == (MDBX_PNL_ASCENDING ? pgno_add(pg, span)
: pgno_sub(pg, span));
++span)
;
if (span > 1)
printf(" %9" PRIaPGNO "[%" PRIaPGNO "]\n", pg, span);
else
printf(" %9" PRIaPGNO "\n", pg);
}
}
}
}
mdbx_cursor_close(cursor);
switch (rc) {
case MDBX_SUCCESS:
case MDBX_NOTFOUND:
break;
case MDBX_EINTR:
fprintf(stderr, "Interrupted by signal/user\n");
goto txn_abort;
default:
fprintf(stderr, "mdbx_cursor_get failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
if (envinfo) {
uint64_t value = mei.mi_mapsize / mst.ms_psize;
double percent = value / 100.0;
printf("Page Allocation Info\n");
printf(" Max pages: %" PRIu64 " 100%%\n", value);
value = mei.mi_last_pgno + 1;
printf(" Pages used: %" PRIu64 " %.1f%%\n", value, value / percent);
value = mei.mi_mapsize / mst.ms_psize - (mei.mi_last_pgno + 1);
printf(" Remained: %" PRIu64 " %.1f%%\n", value, value / percent);
value = mei.mi_last_pgno + 1 - pages;
printf(" Used now: %" PRIu64 " %.1f%%\n", value, value / percent);
value = pages;
printf(" Unallocated: %" PRIu64 " %.1f%%\n", value, value / percent);
value = pages - reclaimable;
printf(" Detained: %" PRIu64 " %.1f%%\n", value, value / percent);
value = reclaimable;
printf(" Reclaimable: %" PRIu64 " %.1f%%\n", value, value / percent);
value =
mei.mi_mapsize / mst.ms_psize - (mei.mi_last_pgno + 1) + reclaimable;
printf(" Available: %" PRIu64 " %.1f%%\n", value, value / percent);
} else
printf(" Free pages: %" PRIaPGNO "\n", pages);
}
rc = mdbx_dbi_open(txn, subname, 0, &dbi);
if (rc) {
fprintf(stderr, "mdbx_open failed, error %d %s\n", rc, mdbx_strerror(rc));
goto txn_abort;
}
rc = mdbx_dbi_stat(txn, dbi, &mst, sizeof(mst));
if (rc) {
fprintf(stderr, "mdbx_dbi_stat failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
printf("Status of %s\n", subname ? subname : "Main DB");
prstat(&mst);
if (alldbs) {
MDBX_cursor *cursor;
MDBX_val key;
rc = mdbx_cursor_open(txn, dbi, &cursor);
if (rc) {
fprintf(stderr, "mdbx_cursor_open failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
while ((rc = mdbx_cursor_get(cursor, &key, NULL, MDBX_NEXT_NODUP)) == 0) {
char *str;
MDBX_dbi db2;
if (memchr(key.iov_base, '\0', key.iov_len))
continue;
str = mdbx_malloc(key.iov_len + 1);
memcpy(str, key.iov_base, key.iov_len);
str[key.iov_len] = '\0';
rc = mdbx_dbi_open(txn, str, 0, &db2);
if (rc == MDBX_SUCCESS)
printf("Status of %s\n", str);
mdbx_free(str);
if (rc)
continue;
rc = mdbx_dbi_stat(txn, db2, &mst, sizeof(mst));
if (rc) {
fprintf(stderr, "mdbx_dbi_stat failed, error %d %s\n", rc,
mdbx_strerror(rc));
goto txn_abort;
}
prstat(&mst);
mdbx_dbi_close(env, db2);
}
mdbx_cursor_close(cursor);
}
if (rc == MDBX_NOTFOUND)
rc = MDBX_SUCCESS;
mdbx_dbi_close(env, dbi);
txn_abort:
mdbx_txn_abort(txn);
env_close:
mdbx_env_close(env);
return rc ? EXIT_FAILURE : EXIT_SUCCESS;
}

View file

@ -0,0 +1,95 @@
/*
* POSIX getopt for Windows
*
* AT&T Public License
*
* Code given out at the 1985 UNIFORUM conference in Dallas.
*/
/*----------------------------------------------------------------------------*/
/* Microsoft compiler generates a lot of warning for self includes... */
#ifdef _MSC_VER
#pragma warning(push, 1)
#pragma warning(disable : 4548) /* expression before comma has no effect; \
expected expression with side - effect */
#pragma warning(disable : 4530) /* C++ exception handler used, but unwind \
* semantics are not enabled. Specify /EHsc */
#pragma warning(disable : 4577) /* 'noexcept' used with no exception handling \
* mode specified; termination on exception is \
* not guaranteed. Specify /EHsc */
#if !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS
#endif
#endif /* _MSC_VER (warnings) */
#include "wingetopt.h"
#include <stdio.h>
#include <string.h>
#ifdef _MSC_VER
#pragma warning(pop)
#endif
/*----------------------------------------------------------------------------*/
#ifndef NULL
#define NULL 0
#endif
#ifndef EOF
#define EOF (-1)
#endif
#define ERR(s, c) \
if (opterr) { \
fputs(argv[0], stderr); \
fputs(s, stderr); \
fputc(c, stderr); \
}
int opterr = 1;
int optind = 1;
int optopt;
char *optarg;
int getopt(int argc, char *const argv[], const char *opts) {
static int sp = 1;
int c;
const char *cp;
if (sp == 1) {
if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0')
return EOF;
else if (strcmp(argv[optind], "--") == 0) {
optind++;
return EOF;
}
}
optopt = c = argv[optind][sp];
if (c == ':' || (cp = strchr(opts, c)) == NULL) {
ERR(": illegal option -- ", c);
if (argv[optind][++sp] == '\0') {
optind++;
sp = 1;
}
return '?';
}
if (*++cp == ':') {
if (argv[optind][sp + 1] != '\0')
optarg = &argv[optind++][sp + 1];
else if (++optind >= argc) {
ERR(": option requires an argument -- ", c);
sp = 1;
return '?';
} else
optarg = argv[optind++];
sp = 1;
} else {
if (argv[optind][++sp] == '\0') {
sp = 1;
optind++;
}
optarg = NULL;
}
return c;
}

View file

@ -0,0 +1,30 @@
/*
* POSIX getopt for Windows
*
* AT&T Public License
*
* Code given out at the 1985 UNIFORUM conference in Dallas.
*/
#ifndef _WINGETOPT_H_
#define _WINGETOPT_H_
/* Bit of madness for Windows console */
#define mdbx_strerror mdbx_strerror_ANSI2OEM
#define mdbx_strerror_r mdbx_strerror_r_ANSI2OEM
#ifdef __cplusplus
extern "C" {
#endif
extern int opterr;
extern int optind;
extern int optopt;
extern char *optarg;
int getopt(int argc, char *const argv[], const char *optstring);
#ifdef __cplusplus
}
#endif
#endif /* _GETOPT_H_ */

View file

@ -0,0 +1,53 @@
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(TEST_OSAL windows)
else()
set(TEST_OSAL unix)
endif()
add_executable(mdbx_test
base.h
cases.cc
chrono.cc
chrono.h
config.cc
config.h
copy.cc
dead.cc
hill.cc
jitter.cc
keygen.cc
keygen.h
log.cc
log.h
main.cc
osal.h
osal-${TEST_OSAL}.cc
test.cc
test.h
try.cc
utils.cc
utils.h
append.cc
ttl.cc
nested.cc
)
set_target_properties(mdbx_test PROPERTIES
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>
CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON)
if(CC_HAS_FASTMATH)
target_compile_options(mdbx_test PRIVATE "-ffast-math")
endif()
if(CC_HAS_VISIBILITY AND (LTO_ENABLED OR INTERPROCEDURAL_OPTIMIZATION))
set_target_properties(mdbx_test PROPERTIES LINK_FLAGS "-fvisibility=hidden")
endif()
target_link_libraries(mdbx_test mdbx ${LIB_MATH} ${CMAKE_THREAD_LIBS_INIT})
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
target_link_libraries(mdbx_test winmm.lib)
endif()
if(UNIX AND NOT SUBPROJECT)
add_subdirectory(pcrf)
endif()

View file

@ -0,0 +1,164 @@
/*
* Copyright 2017-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#include "test.h"
bool testcase_append::run() {
int err = db_open__begin__table_create_open_clean(dbi);
if (unlikely(err != MDBX_SUCCESS)) {
log_notice("append: bailout-prepare due '%s'", mdbx_strerror(err));
return true;
}
keyvalue_maker.setup(config.params, config.actor_id, 0 /* thread_number */);
/* LY: тест наполнения таблиц в append-режиме,
* при котором записи добавляются строго в конец (в порядке сортировки) */
const unsigned flags = (config.params.table_flags & MDBX_DUPSORT)
? MDBX_APPEND | MDBX_APPENDDUP
: MDBX_APPEND;
keyvalue_maker.make_ordered();
key = keygen::alloc(config.params.keylen_max);
data = keygen::alloc(config.params.datalen_max);
keygen::buffer last_key = keygen::alloc(config.params.keylen_max);
keygen::buffer last_data = keygen::alloc(config.params.datalen_max);
last_key->value.iov_base = last_key->bytes;
last_key->value.iov_len = 0;
last_data->value.iov_base = last_data->bytes;
last_data->value.iov_len = 0;
simple_checksum inserted_checksum;
uint64_t inserted_number = 0;
uint64_t serial_count = 0;
unsigned txn_nops = 0;
uint64_t commited_inserted_number = inserted_number;
simple_checksum commited_inserted_checksum = inserted_checksum;
while (should_continue()) {
const keygen::serial_t serial = serial_count;
if (!keyvalue_maker.increment(serial_count, 1)) {
// дошли до границы пространства ключей
break;
}
log_trace("append: append-a %" PRIu64, serial);
generate_pair(serial, key, data);
int cmp = inserted_number ? mdbx_cmp(txn_guard.get(), dbi, &key->value,
&last_key->value)
: 1;
if (cmp == 0 && (config.params.table_flags & MDBX_DUPSORT))
cmp = mdbx_dcmp(txn_guard.get(), dbi, &data->value, &last_data->value);
err = mdbx_put(txn_guard.get(), dbi, &key->value, &data->value, flags);
if (err == MDBX_MAP_FULL && config.params.ignore_dbfull) {
log_notice("append: bailout-insert due '%s'", mdbx_strerror(err));
txn_end(true);
inserted_number = commited_inserted_number;
inserted_checksum = commited_inserted_checksum;
break;
}
if (cmp > 0) {
if (unlikely(err != MDBX_SUCCESS))
failure_perror("mdbx_put(appenda-a)", err);
memcpy(last_key->value.iov_base, key->value.iov_base,
last_key->value.iov_len = key->value.iov_len);
memcpy(last_data->value.iov_base, data->value.iov_base,
last_data->value.iov_len = data->value.iov_len);
++inserted_number;
inserted_checksum.push((uint32_t)inserted_number, key->value);
inserted_checksum.push(10639, data->value);
} else {
if (unlikely(err != MDBX_EKEYMISMATCH))
failure_perror("mdbx_put(appenda-a) != MDBX_EKEYMISMATCH", err);
}
if (++txn_nops >= config.params.batch_write) {
err = breakable_restart();
if (unlikely(err != MDBX_SUCCESS)) {
log_notice("append: bailout-commit due '%s'", mdbx_strerror(err));
inserted_number = commited_inserted_number;
inserted_checksum = commited_inserted_checksum;
break;
}
commited_inserted_number = inserted_number;
commited_inserted_checksum = inserted_checksum;
txn_nops = 0;
}
report(1);
}
if (txn_guard) {
err = breakable_commit();
if (unlikely(err != MDBX_SUCCESS)) {
log_notice("append: bailout-commit due '%s'", mdbx_strerror(err));
inserted_number = commited_inserted_number;
inserted_checksum = commited_inserted_checksum;
}
}
//----------------------------------------------------------------------------
txn_begin(true);
cursor_open(dbi);
MDBX_val check_key, check_data;
err =
mdbx_cursor_get(cursor_guard.get(), &check_key, &check_data, MDBX_FIRST);
if (likely(inserted_number)) {
if (unlikely(err != MDBX_SUCCESS))
failure_perror("mdbx_cursor_get(MDBX_FIRST)", err);
}
simple_checksum read_checksum;
uint64_t read_count = 0;
while (err == MDBX_SUCCESS) {
++read_count;
read_checksum.push((uint32_t)read_count, check_key);
read_checksum.push(10639, check_data);
err =
mdbx_cursor_get(cursor_guard.get(), &check_key, &check_data, MDBX_NEXT);
}
if (unlikely(err != MDBX_NOTFOUND))
failure_perror("mdbx_cursor_get(MDBX_NEXT) != EOF", err);
if (unlikely(read_count != inserted_number))
failure("read_count(%" PRIu64 ") != inserted_number(%" PRIu64 ")",
read_count, inserted_number);
if (unlikely(read_checksum.value != inserted_checksum.value))
failure("read_checksum(0x%016" PRIu64 ") "
"!= inserted_checksum(0x%016" PRIu64 ")",
read_checksum.value, inserted_checksum.value);
cursor_close();
txn_end(true);
//----------------------------------------------------------------------------
if (dbi) {
if (config.params.drop_table && !mode_readonly()) {
txn_begin(false);
db_table_drop(dbi);
err = breakable_commit();
if (unlikely(err != MDBX_SUCCESS)) {
log_notice("append: bailout-clean due '%s'", mdbx_strerror(err));
return true;
}
} else
db_table_close(dbi);
}
return true;
}

View file

@ -0,0 +1,116 @@
/*
* Copyright 2017-2019 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#pragma once
#ifndef NOMINMAX
#define NOMINMAX
#endif
#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS)
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(push, 1)
#pragma warning(disable : 4548) /* expression before comma has no effect; \
expected expression with side - effect */
#pragma warning(disable : 4530) /* C++ exception handler used, but unwind \
semantics are not enabled. Specify /EHsc */
#pragma warning(disable : 4577) /* 'noexcept' used with no exception handling \
mode specified; termination on exception \
is not guaranteed. Specify /EHsc */
#endif /* _MSC_VER (warnings) */
/* If you wish to build your application for a previous Windows platform,
* include WinSDKVer.h and set the _WIN32_WINNT macro to the platform you
* wish to support before including SDKDDKVer.h.
*
* TODO: #define _WIN32_WINNT WIN32_MUSTDIE */
#include <SDKDDKVer.h>
#endif /* WINDOWS */
#ifdef __APPLE__
#define _DARWIN_C_SOURCE
#endif
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS)
#include <io.h>
#else
#include <fcntl.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#endif
#ifdef _BSD_SOURCE
#include <endian.h>
#endif
#include <algorithm>
#include <cassert>
#include <cinttypes> // for PRId64, PRIu64
#include <cstdarg>
#include <cstddef>
#include <cstdint>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#define MDBX_INTERNAL_FUNC
#define MDBX_INTERNAL_VAR extern
#define MDBX_TOOLS /* Avoid using internal mdbx_assert() */
#include "../mdbx.h"
#include "../src/elements/defs.h"
#include "../src/elements/osal.h"
#if !defined(__thread) && (defined(_MSC_VER) || defined(__DMC__))
#define __thread __declspec(thread)
#endif /* __thread */
#ifdef _MSC_VER
#pragma warning(pop)
#pragma warning(disable : 4201) /* nonstandard extension used : \
nameless struct / union */
#pragma warning(disable : 4127) /* conditional expression is constant */
#if _MSC_VER < 1900
#pragma warning(disable : 4510) /* default constructor could \
not be generated */
#pragma warning(disable : 4512) /* assignment operator could \
not be generated */
#pragma warning(disable : 4610) /* user-defined constructor required */
#ifndef snprintf
#define snprintf(buffer, buffer_size, format, ...) \
_snprintf_s(buffer, buffer_size, _TRUNCATE, format, __VA_ARGS__)
#endif
#ifndef vsnprintf
#define vsnprintf(buffer, buffer_size, format, args) \
_vsnprintf_s(buffer, buffer_size, _TRUNCATE, format, args)
#endif
#pragma warning(disable : 4996) /* 'vsnprintf': This function or variable \
may be unsafe */
#endif
#endif /* _MSC_VER */

Some files were not shown because too many files have changed in this diff Show more