diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml
index 53e63e03..ba7ac4bf 100644
--- a/.github/workflows/build-docker.yml
+++ b/.github/workflows/build-docker.yml
@@ -43,7 +43,7 @@ jobs:
DOCKER_BUILD_SUMMARY: false
DOCKER_BUILD_RECORD_UPLOAD: false
with:
- file: utils/docker/images/lthn-chain/Dockerfile
+ file: utils/docker/lthn-chain/Dockerfile
context: ${{ github.workspace }}
push: true
build-args: |
diff --git a/.github/workflows/build-linux-arm64.yml b/.github/workflows/build-linux-arm64.yml
index 9a64e529..42e44d10 100644
--- a/.github/workflows/build-linux-arm64.yml
+++ b/.github/workflows/build-linux-arm64.yml
@@ -79,7 +79,7 @@ jobs:
- 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 release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }}
+ run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
diff --git a/.github/workflows/build-linux-intel.yml b/.github/workflows/build-linux-intel.yml
index edfc56bc..a86b9720 100644
--- a/.github/workflows/build-linux-intel.yml
+++ b/.github/workflows/build-linux-intel.yml
@@ -79,7 +79,7 @@ jobs:
- 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 release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }}
+ run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
diff --git a/.github/workflows/build-macos-arm64.yml b/.github/workflows/build-macos-arm64.yml
index 140a9f74..9cfc8251 100644
--- a/.github/workflows/build-macos-arm64.yml
+++ b/.github/workflows/build-macos-arm64.yml
@@ -74,7 +74,7 @@ jobs:
- 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 release CPU_CORES=3 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }}
+ run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
diff --git a/.github/workflows/build-macos-intel.yml b/.github/workflows/build-macos-intel.yml
index 93dbe618..bc2a6a11 100644
--- a/.github/workflows/build-macos-intel.yml
+++ b/.github/workflows/build-macos-intel.yml
@@ -70,7 +70,7 @@ jobs:
- 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 release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }}
+ run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
diff --git a/.github/workflows/build-windows-intel.yml b/.github/workflows/build-windows-intel.yml
index 5038bc65..75644ecb 100644
--- a/.github/workflows/build-windows-intel.yml
+++ b/.github/workflows/build-windows-intel.yml
@@ -70,7 +70,7 @@ jobs:
- 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 release CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }}
+ run: make ${{ inputs.chain-network }}
- name: CLI Artifacts
uses: ./.github/actions/upload-artifacts
diff --git a/.gitignore b/.gitignore
index bf1e94c9..5b3ea01c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ Thumbs.db
.idea/*.iml
.vs/*
CMakeUserPresets.json
+ConanPresets.json
diff --git a/.idea/cmake.xml b/.idea/cmake.xml
new file mode 100644
index 00000000..2c46369e
--- /dev/null
+++ b/.idea/cmake.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a2268001..08ec3bdc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -140,7 +140,7 @@ if(MSVC)
endforeach()
endif()
include_directories(SYSTEM src/platform/msc)
- configure_file(utils/Directory.Build.props.in ${CMAKE_BINARY_DIR}/Directory.Build.props)
+
else()
set(ARCH default CACHE STRING "CPU to build for: -march value or default")
if("${ARCH}" STREQUAL "default")
@@ -182,7 +182,7 @@ else()
endif()
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=c++14")
+ 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()
diff --git a/CMakePresets.json b/CMakePresets.json
index 07cb3684..80247a7d 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -18,7 +18,7 @@
"cacheVariables": {
"TESTNET": "ON",
"CMAKE_BUILD_TYPE": "Release",
- "CMAKE_PROJECT_TOP_LEVEL_INCLUDES":"cmake/conan_provider.cmake"
+ "CMAKE_PROJECT_TOP_LEVEL_INCLUDES":"cmake/ConanProvider.cmake"
}
},
{
@@ -30,7 +30,7 @@
"cacheVariables": {
"TESTNET": "OFF",
"CMAKE_BUILD_TYPE": "Release",
- "CMAKE_PROJECT_TOP_LEVEL_INCLUDES":"cmake/conan_provider.cmake"
+ "CMAKE_PROJECT_TOP_LEVEL_INCLUDES":"cmake/ConanProvider.cmake"
}
}
],
diff --git a/Makefile b/Makefile
index 60068533..5e48c267 100644
--- a/Makefile
+++ b/Makefile
@@ -72,10 +72,12 @@ CC_DOCKER_FILE?=utils/docker/images/lthn-chain/Dockerfile
all: help
testnet:
- cmake --workflow testnet
+ $(MAKE) configure TESTNET=1
+ CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) build .
mainnet:
- cmake --workflow mainnet
+ $(MAKE) configure TESTNET=0
+ CONAN_HOME=$(CONAN_CACHE) $(CONAN_EXECUTABLE) build .
release: docs build
(cd $(BUILD_FOLDER) && cpack)
@@ -140,7 +142,7 @@ test-debug:
# allowing this target to error quietly saves cross brwoser file detection
conan-get:
- cmake -P cmake/GetConan.cmake
+ cmake -P cmake/ConanGet.cmake
(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
@@ -157,7 +159,7 @@ docs-dev: configure
clean:
@cmake -P cmake/CleanBuild.cmake
-clean-build:
+clean-build: clean
rm -rf build
tags:
diff --git a/README.md b/README.md
index dcee9f03..270e856d 100644
--- a/README.md
+++ b/README.md
@@ -1,196 +1,120 @@
-[](https://scan.coverity.com/projects/zanoproject)
-[](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.
+
+
+
+[](https://discord.gg/pfgT2Kz)
+
+Web2 Website: https://lt.hn/
+
+Web3 Network Gateway [HNS](https://handshake.org): [https://lthn](https://www.namebase.io/domains/lthn)
+
_(our chain aliases will come with a working Web2(`*.lt.hn`)+Web3(`*.lthn`) domain name)_
### Dependencies
-| component / version | minimum
(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 |
-| [Boost](https://www.boost.org/users/download/) | 1.75 | 1.84 | 1.84 |
-| [OpenSSL](https://www.openssl.org/source/) [(win)](https://slproweb.com/products/Win32OpenSSL.html) | 1.1.1n | 1.1.1w | 3.4 |
-| [Qt](https://download.qt.io/archive/qt/) (*only for GUI*) | 6.8.3 | 6.8.3 | 6.8.3 |
+| component / version | minimum
(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
-
+Be sure to clone the repository properly, with `--recursive` flag, or you'll get angry:
+`git clone --recursive https://github.com/letheanVPN/blockchain.git`
-### Linux
+# Building
-Recommended OS versions: Ubuntu 20.04, 22.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++ curl autotools-dev libicu-dev libbz2-dev cmake git screen checkinstall zlib1g-dev libssl-dev bzip2
-
- [*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 checkinstall zlib1g-dev libssl-dev bzip2 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.
- Make sure you have correct versions installed (see 'Dependencies' section above):
+To skip the packing step, use `make build` as defined in the section below for Advanced Build Customization
- cmake --version && gcc --version
-
+## Simple Workflow Builds (Recommended)
-3. Clone Zano into a local folder\
- (If for some reason you need to use alternative Zano branch, change 'master' to the required branch name.)
-
- git clone --recursive https://github.com/hyle-team/zano.git -b master
+For most use cases, these two commands are all you need. They handle the entire build process from start to finish.
- In the following steps we assume that you cloned Zano into '~/zano' folder in your home directory.
+* **Build for Mainnet:**
+ ```shell
+ make mainnet
+ ```
- 4. Download and build Boost\
- (Assuming you have cloned Zano into the 'zano' folder. If you used a different location for Zano, **edit line 4** accordingly.)
+* **Build for Testnet:**
+ ```shell
+ make testnet
+ ```
- curl -OL https://archives.boost.io/release/1.84.0/source/boost_1_84_0.tar.bz2
- echo "cc4b893acf645c9d4b698e9a0f08ca8846aa5d6c68275c14c3e7949c24109454 boost_1_84_0.tar.bz2" | shasum -c && tar -xjf boost_1_84_0.tar.bz2
- rm boost_1_84_0.tar.bz2 && cd boost_1_84_0
- ./bootstrap.sh --with-libraries=system,filesystem,thread,date_time,chrono,regex,serialization,atomic,program_options,locale,timer,log
- ./b2 && cd ..
- Make sure that you see "The Boost C++ Libraries were successfully built!" message at the end.
+## Creating Release Packages
- 5. Install Qt\
- (*GUI version only, skip this step if you're building 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.
- [*GUI version*]
+ ```shell
+ make release TESTNET=1
+ ```
+The final packages will be located in the `build/packages/` directory
- curl -L -O https://download.qt.io/official_releases/online_installers/qt-online-installer-linux-x64-online.run &&
- chmod u+x qt-online-installer-linux-x64-online.run
- ./qt-online-installer-linux-x64-online.run \
- --accept-licenses \
- --default-answer \
- --confirm-command install \
- qt.qt6.683.linux_gcc_64 \
- qt.qt6.683.addons.qt5compat.linux_gcc_64 \
- qt.qt6.683.addons.qtpositioning.linux_gcc_64 \
- qt.qt6.683.addons.qtwebchannel.linux_gcc_64 \
- qt.qt6.683.addons.qtwebsockets.linux_gcc_64 \
- qt.qt6.683.addons.qtwebengine.linux_gcc_64 \
- qt.qt6.683.addons.qtwebview.linux_gcc_64
- This will download the online installer and perform an unattended installation with the Chromium-based WebEngine
+## Advanced Build Customization (Makefile Variables)
+For advanced use cases, you can override variables in the `Makefile` to customize the build process.
-6. Install OpenSSL
+* **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
+ ```
- We recommend installing OpenSSL v1.1.1w locally unless you would like to use the same version system-wide.\
- (Assuming that `$HOME` environment variable is set to your home directory. Otherwise, edit line 4 accordingly.)
+| 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. | |
- curl -OL https://www.openssl.org/source/openssl-1.1.1w.tar.gz
- echo "cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8 openssl-1.1.1w.tar.gz" | shasum -c && tar xaf openssl-1.1.1w.tar.gz
- cd openssl-1.1.1w/
- ./config --prefix=$HOME/openssl --openssldir=$HOME/openssl shared zlib
- make && make test && make install && cd ..
+## Cleaning the Build Directory
+ALWAYS USE `make clean` to clean the build directory, manually deleting the `build/release`, `build/SOME_FOLDER` will cause you issues.
-7. [*OPTIONAL*] Set global environment variables for convenient use\
-For instance, by adding the following lines to `~/.bashrc`
+Our `make clean` triggers a cmake script that completely resets the build directory & 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`
- [*server version*]
+You can NUKE the build directory with `make clean-build` which is `rm -rf build`.
- export BOOST_ROOT=/home/user/boost_1_84_0
- export OPENSSL_ROOT_DIR=/home/user/openssl
+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.
-
- [*GUI version*]
-
- export BOOST_ROOT=/home/user/boost_1_84_0
- export OPENSSL_ROOT_DIR=/home/user/openssl
- export QT_PREFIX_PATH=/home/user/Qt5.11.2/5.11.2/gcc_64
-
- **NOTICE: Please edit the lines above according to your actual paths.**
-
- **NOTICE 2:** Make sure you've restarted your terminal session (by reopening the terminal window or reconnecting the server) to apply these changes.
-
-8. Build the binaries
- 1. If you skipped step 6 and did not set the environment variables:
-
- cd zano && mkdir build && cd build
- BOOST_ROOT=$HOME/boost_1_84_0 OPENSSL_ROOT_DIR=$HOME/openssl cmake ..
- make -j1 daemon simplewallet
-
- 2. If you set the variables in step 6:
-
- cd zano && mkdir build && cd build
- cmake ..
- make -j1 daemon simplewallet
-
- or simply:
-
- cd zano && make -j1
-
- **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. Build GUI:
-
- cd zano
- utils/build_script_linux.sh
-
- Look for the binaries in `build` folder
-
-
-
-### Windows
-Recommended OS version: Windows 7 x64, Windows 11 x64.
-1. Install required prerequisites (Boost, Qt, CMake, OpenSSL).
-2. Edit paths in `utils/configure_local_paths.cmd`.
-3. Run one of `utils/configure_win64_msvsNNNN_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. Run `PATH_TO_QT\bin\windeployqt.exe PATH_TO_PROJECT_ROOT\build\src\Debug\Zano.exe` (choose the Debug or Release folder depending on the configuration you built).
-7. You can now run the application using one of the following options:
- * Start the program from Visual Studio
- * Run `Zano.exe --html-path=PATH_TO_HTML`, where PATH_TO_HTML is by default located at PATH_TO_PROJECT_ROOT\src\gui\qt-daemon\layout\html
- * Copy the contents of PATH_TO_PROJECT_ROOT\src\gui\qt-daemon\layout\html to a folder named "html" located in the same directory as the Zano.exe binary.
-
-
-### macOS
-Recommended OS version: macOS Big Sur 11.4 x64.
-1. Install required prerequisites.
-2. Set environment variables as stated in `utils/macosx_build_config.command`.
-3. `mkdir build`
`cd build`
`cmake ..`
`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`
-
-
-
-
-## Supporting project/donations
-
-ZANO @dev
-BTC bc1qpa8w8eaehlplfepmnzpd7v9j046899nktxnkxp
-BCH qqgq078vww5exd9kt3frx6krdyznmp80hcygzlgqzd
-ETH 0x206c52b78141498e74FF074301ea90888C40c178
-XMR 45gp9WTobeB5Km3kLQgVmPJkvm9rSmg4gdyHheXqXijXYMjUY48kLgL7QEz5Ar8z9vQioQ68WYDKsQsjAEonSeFX4UeLSiX
+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.
diff --git a/cmake/GetConan.cmake b/cmake/ConanGet.cmake
similarity index 99%
rename from cmake/GetConan.cmake
rename to cmake/ConanGet.cmake
index 9b7437ee..6110328e 100644
--- a/cmake/GetConan.cmake
+++ b/cmake/ConanGet.cmake
@@ -1,4 +1,4 @@
-# cmake/GetConan.cmake
+# cmake/ConanGet.cmake
# This module downloads and installs Conan if it's not found.
diff --git a/cmake/conan_provider.cmake b/cmake/ConanProvider.cmake
similarity index 99%
rename from cmake/conan_provider.cmake
rename to cmake/ConanProvider.cmake
index c524fb7f..036ede6e 100644
--- a/cmake/conan_provider.cmake
+++ b/cmake/ConanProvider.cmake
@@ -572,7 +572,7 @@ macro(conan_provide_dependency method package_name)
endif ()
if(NOT EXISTS ${CONAN_COMMAND})
message(STATUS "CMake-Conan: Local conan not found, attempting to download it.")
- execute_process(COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/GetConan.cmake"
+ execute_process(COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/ConanGet.cmake"
RESULT_VARIABLE result
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
if(NOT result EQUAL 0)
diff --git a/utils/test-static-assert.c b/cmake/test-static-assert.c
similarity index 100%
rename from utils/test-static-assert.c
rename to cmake/test-static-assert.c
diff --git a/conanfile.py b/conanfile.py
index ab1a89cb..40e10f35 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -21,12 +21,18 @@ class BlockchainConan(ConanFile):
"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"
+ "jwt-cpp/0.7.1",
+ "oatpp/1.3.0.latest",
+ "oatpp-swagger/1.3.0.latest"
]
def generate(self):
diff --git a/docker-compose.yml b/docker-compose.yml
index 0653393a..a55c13e9 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,7 +5,7 @@ services:
build:
tags:
- lthn/chain:testnet
- dockerfile: utils/docker/images/lthn-chain/Dockerfile
+ dockerfile: utils/docker/lthn-chain/Dockerfile
context: .
target: chain-service
args:
diff --git a/docs b/docs
index 12e20efc..e40a78d5 160000
--- a/docs
+++ b/docs
@@ -1 +1 @@
-Subproject commit 12e20efce7eaf51e38d8953c318633b1c5189256
+Subproject commit e40a78d5020661f05d9bae64f2edd4519d9d98b3
diff --git a/resources/Zano WP.pdf b/resources/Zano WP.pdf
deleted file mode 100644
index b62e0164..00000000
Binary files a/resources/Zano WP.pdf and /dev/null differ
diff --git a/resources/app_icon.svg b/resources/app_icon.svg
deleted file mode 100644
index d5ca861a..00000000
--- a/resources/app_icon.svg
+++ /dev/null
@@ -1,42 +0,0 @@
-
diff --git a/resources/app_icon_256.png b/resources/app_icon_256.png
deleted file mode 100644
index c2cb1525..00000000
Binary files a/resources/app_icon_256.png and /dev/null differ
diff --git a/resources/dmg_installer_bg.png b/resources/dmg_installer_bg.png
deleted file mode 100644
index ee45f1e0..00000000
Binary files a/resources/dmg_installer_bg.png and /dev/null differ
diff --git a/resources/installer_bg_164x313.bmp b/resources/installer_bg_164x313.bmp
deleted file mode 100644
index 80599afe..00000000
Binary files a/resources/installer_bg_164x313.bmp and /dev/null differ
diff --git a/resources/installer_bg_191x385.bmp b/resources/installer_bg_191x385.bmp
deleted file mode 100644
index b7b74bfe..00000000
Binary files a/resources/installer_bg_191x385.bmp and /dev/null differ
diff --git a/resources/installer_bg_246x457.bmp b/resources/installer_bg_246x457.bmp
deleted file mode 100644
index 3e20a2e9..00000000
Binary files a/resources/installer_bg_246x457.bmp and /dev/null differ
diff --git a/resources/installer_bg_328x628.bmp b/resources/installer_bg_328x628.bmp
deleted file mode 100644
index 5d7613d8..00000000
Binary files a/resources/installer_bg_328x628.bmp and /dev/null differ
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
deleted file mode 100644
index f27305af..00000000
--- a/snap/snapcraft.yaml
+++ /dev/null
@@ -1,75 +0,0 @@
-name: zano
-base: core18
-adopt-info: zano
-summary: "Zano coin: official wallet. Secure. Scalable. Easy to Use."
-description: |
- Zano is a scalable and secure coin, designed for use in e-commerce.
- The technology behind our blockchain provides reliability, security,
- and flexibility a perfect option for P2P transactions.
- More info: http://zano.org
-grade: stable
-confinement: strict
-
-architectures:
- - build-on: amd64
- - build-on: i386
-
-parts:
- zano:
- source: https://github.com/hyle-team/zano.git
- plugin: cmake
- override-pull: |
- snapcraftctl pull
- snapcraftctl set-version "$(git describe)"
- configflags:
- - -DBUILD_GUI=TRUE
- override-build: |
- snapcraftctl build
- mkdir -p $SNAPCRAFT_PART_INSTALL/opt/Zano
- cp $SNAPCRAFT_PART_BUILD/src/Zano $SNAPCRAFT_PART_INSTALL/opt/Zano/
- cp $SNAPCRAFT_PART_BUILD/src/simplewallet $SNAPCRAFT_PART_INSTALL/opt/Zano/
- cp $SNAPCRAFT_PART_BUILD/src/zanod $SNAPCRAFT_PART_INSTALL/opt/Zano/
- rsync -a $SNAPCRAFT_PART_SRC/src/gui/qt-daemon/html $SNAPCRAFT_PART_INSTALL/opt/Zano --exclude less --exclude package.json --exclude gulpfile.js
- build-packages:
- - make
- - g++
- - libboost-all-dev
- - qtwebengine5-dev
- - rsync
- build-attributes: [keep-execstack]
- stage-packages:
- - libboost-system1.65.1
- - libboost-filesystem1.65.1
- - libboost-thread1.65.1
- - libboost-date-time1.65.1
- - libboost-chrono1.65.1
- - libboost-regex1.65.1
- - libboost-serialization1.65.1
- - libboost-program-options1.65.1
- - libboost-locale1.65.1
-
-apps:
- zano:
- command: opt/Zano/Zano --data-dir $SNAP_USER_COMMON
- extensions:
- - kde-neon
- plugs:
- - network
- - home
- - desktop
- - opengl #for QML support
- - browser-support #for Qt WebEngine support
- - audio-playback
- - unity7 #for tray icon support
- simplewallet:
- command: opt/Zano/simplewallet
- plugs:
- - network
- - home
- zanod:
- command: opt/Zano/zanod --data-dir $SNAP_USER_COMMON
- environment:
- LC_ALL: C
- plugs:
- - network
- - network-bind
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 541dc852..2132a36a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -85,6 +85,7 @@ INIT_SHARED_PCH()
add_subdirectory(config)
add_subdirectory(genesis)
+add_subdirectory(api)
add_library(common ${COMMON})
add_dependencies(common version config ${PCH_LIB_NAME})
diff --git a/src/api/ApiServer.cpp b/src/api/ApiServer.cpp
new file mode 100644
index 00000000..09aadf50
--- /dev/null
+++ b/src/api/ApiServer.cpp
@@ -0,0 +1,66 @@
+#include "ApiServer.hpp"
+#include "controller/InfoController.hpp"
+#include "controller/BlockController.hpp"
+
+#include "oatpp/network/Server.hpp"
+#include "oatpp-swagger/Controller.hpp"
+
+#include
+#include "version.h"
+
+void ApiServer::run() {
+
+ /* Register Components in scope of run() method */
+ Components components;
+
+ /* Get router component */
+ OATPP_COMPONENT(std::shared_ptr, router);
+
+ auto docEndpoints = std::make_shared();
+
+ auto infoController = std::make_shared();
+ docEndpoints->append(infoController->getEndpoints());
+
+ auto blockController = std::make_shared();
+ docEndpoints->append(blockController->getEndpoints());
+
+ router->addController(infoController);
+ router->addController(blockController);
+
+ OATPP_CREATE_COMPONENT(std::shared_ptr, swaggerDocumentInfo)
+ ([]
+ {
+ oatpp::swagger::DocumentInfo::Builder builder;
+
+ builder
+ .setTitle("Lethean Blockchain API")
+ .setDescription("New API layer for Lethean")
+ .setVersion(PROJECT_VERSION)
+ .setContactName("Lethean")
+ .setContactUrl("https://lt.hn/")
+ .setLicenseName("EUPL-1.2")
+ .setLicenseUrl("https://joinup.ec.europa.eu/software/page/eupl/licence-eupl")
+ .addServer("http://localhost:8000", "server on localhost");
+
+ return builder.build(); }());
+
+ /* Create a Swagger-UI controller and add its endpoints to the router */
+ auto swaggerController = oatpp::swagger::Controller::createShared(*docEndpoints);
+ router->addController(swaggerController);
+
+ /* Get a connection handler component */
+ OATPP_COMPONENT(std::shared_ptr, connectionHandler);
+
+ /* Get a connection provider component */
+ OATPP_COMPONENT(std::shared_ptr, connectionProvider);
+
+ /* Create a server which takes provided TCP connections and passes them to the HTTP connection handler */
+ oatpp::network::Server server(connectionProvider, connectionHandler);
+
+ /* Print server port */
+ OATPP_LOGI("lethean-api", "Server running, API Docs: http://127.0.0.1:%s/swagger/ui", static_cast(connectionProvider->getProperty("port").getData()));
+
+ /* Run server */
+ server.run();
+
+}
diff --git a/src/api/ApiServer.hpp b/src/api/ApiServer.hpp
new file mode 100644
index 00000000..582561c1
--- /dev/null
+++ b/src/api/ApiServer.hpp
@@ -0,0 +1,51 @@
+#ifndef ApiServer_hpp
+#define ApiServer_hpp
+
+#include "currency_core/blockchain_storage.h"
+
+#include "currency_core/currency_core.h"
+#include "oatpp/web/server/HttpConnectionHandler.hpp"
+#include "oatpp/network/tcp/server/ConnectionProvider.hpp"
+#include "oatpp/parser/json/mapping/ObjectMapper.hpp"
+#include "oatpp/core/macro/component.hpp"
+#include "oatpp-swagger/Resources.hpp"
+
+class ApiServer {
+
+public:
+
+ ApiServer() = default;
+
+ class Components {
+ public:
+
+ OATPP_CREATE_COMPONENT(std::shared_ptr, serverConnectionProvider)([] {
+ return oatpp::network::tcp::server::ConnectionProvider::createShared({"0.0.0.0", 8000, oatpp::network::Address::IP_4});
+ }());
+
+ OATPP_CREATE_COMPONENT(std::shared_ptr, httpRouter)([] {
+ return oatpp::web::server::HttpRouter::createShared();
+ }());
+
+ OATPP_CREATE_COMPONENT(std::shared_ptr, serverConnectionHandler)([] {
+ OATPP_COMPONENT(std::shared_ptr, router);
+ return oatpp::web::server::HttpConnectionHandler::createShared(router);
+ }());
+
+ OATPP_CREATE_COMPONENT(std::shared_ptr, apiObjectMapper)([] {
+ auto jsonMapper = oatpp::parser::json::mapping::ObjectMapper::createShared();
+ jsonMapper->getSerializer()->getConfig()->useBeautifier = true;
+ return jsonMapper;
+ }());
+
+ OATPP_CREATE_COMPONENT(std::shared_ptr, swaggerResources)([] {
+ return oatpp::swagger::Resources::loadResources(OATPP_SWAGGER_RES_PATH);
+ }());
+
+ };
+
+ void run();
+
+};
+
+#endif /* ApiServer_hpp */
diff --git a/src/api/CMakeLists.txt b/src/api/CMakeLists.txt
new file mode 100644
index 00000000..ad66ec60
--- /dev/null
+++ b/src/api/CMakeLists.txt
@@ -0,0 +1,35 @@
+if(NOT PROJECT_NAME)
+ project(lethean-api)
+endif()
+
+find_package(oatpp 1.3.0 REQUIRED)
+if(oatpp_FOUND)
+ message(STATUS "Found oatpp version: ${oatpp_VERSION_STRING}")
+else()
+ message(FATAL_ERROR "Could not find oatpp")
+endif()
+
+find_package(oatpp-swagger 1.3.0 REQUIRED)
+if(oatpp-swagger_FOUND)
+ message(STATUS "Found oatpp-swagger version: ${oatpp-swagger_VERSION_STRING}")
+else()
+ message(FATAL_ERROR "Could not find oatpp-swagger")
+endif()
+
+add_library(lthn_api INTERFACE)
+add_library(lthn::api ALIAS lthn_api)
+
+# Add the current directory for API headers and the main src directory for core headers
+target_include_directories(lthn_api INTERFACE
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/src
+)
+
+include_directories(${oatpp_INCLUDE_DIRS})
+include_directories(${oatpp-swagger_INCLUDE_DIRS})
+add_executable(lethean-api main.cpp ApiServer.cpp)
+
+target_link_libraries(lethean-api PRIVATE lthn::api PUBLIC common config oatpp::oatpp oatpp::oatpp-swagger)
+
+add_definitions(-DOATPP_SWAGGER_RES_PATH="${oatpp-swagger_INCLUDE_DIRS}/../bin/oatpp-swagger/res")
+#add_subdirectory(tests)
diff --git a/src/api/controller/BlockController.hpp b/src/api/controller/BlockController.hpp
new file mode 100644
index 00000000..8a364097
--- /dev/null
+++ b/src/api/controller/BlockController.hpp
@@ -0,0 +1,70 @@
+#ifndef BlockController_hpp
+#define BlockController_hpp
+
+#include "../dto/BlockDetailsDto.hpp"
+
+#include "oatpp/web/server/api/ApiController.hpp"
+#include "oatpp/core/macro/codegen.hpp"
+#include "oatpp/parser/json/mapping/ObjectMapper.hpp"
+
+#include OATPP_CODEGEN_BEGIN(ApiController)
+
+/**
+ * Block Controller
+ */
+class BlockController : public oatpp::web::server::api::ApiController {
+public:
+ BlockController(OATPP_COMPONENT(std::shared_ptr, objectMapper))
+ : oatpp::web::server::api::ApiController(objectMapper)
+ {}
+public:
+
+ ENDPOINT_INFO(getBlockByHash) {
+ info->summary = "Get a block by its hash";
+ info->addTag("Block");
+ info->pathParams["hash"].description = "The hash of the block to retrieve";
+ info->addResponse