From ce1d3200d81a44cb33c49e50c79540a9444841f3 Mon Sep 17 00:00:00 2001
From: kamilsa <kamilsa16@gmail.com>
Date: Wed, 26 Feb 2025 14:07:53 +0300
Subject: [PATCH 1/5] Initial example

---
 CMakeLists.txt                                |  2 +
 example/00-vcpkg-install/CMakeLists.txt       | 13 +++
 example/00-vcpkg-install/main.cpp             | 12 +++
 .../00-vcpkg-install/vcpkg-configuration.json | 10 +++
 .../vcpkg-overlay/boost-di/portfile.cmake     | 14 ++++
 .../vcpkg-overlay/boost-di/vcpkg.json         |  8 ++
 .../vcpkg-overlay/fmt/portfile.cmake          | 20 +++++
 .../vcpkg-overlay/fmt/vcpkg.json              |  8 ++
 .../liblsquic/disable-asan.patch              | 23 ++++++
 .../liblsquic/fix-found-boringssl.patch       | 53 ++++++++++++
 .../liblsquic/lsquic_conn_ssl.patch           | 80 +++++++++++++++++++
 .../vcpkg-overlay/liblsquic/portfile.cmake    | 78 ++++++++++++++++++
 .../vcpkg-overlay/liblsquic/vcpkg.json        | 25 ++++++
 .../vcpkg-overlay/libp2p/portfile.cmake       | 18 +++++
 .../vcpkg-overlay/libp2p/vcpkg.json           | 34 ++++++++
 .../vcpkg-overlay/libsecp256k1/portfile.cmake | 11 +++
 .../vcpkg-overlay/libsecp256k1/vcpkg.json     |  8 ++
 .../vcpkg-overlay/qtils/portfile.cmake        | 11 +++
 .../vcpkg-overlay/qtils/vcpkg.json            | 19 +++++
 .../vcpkg-overlay/soralog/portfile.cmake      | 11 +++
 .../vcpkg-overlay/soralog/vcpkg.json          | 18 +++++
 .../vcpkg-overlay/tsl-hat-trie/portfile.cmake | 11 +++
 .../vcpkg-overlay/tsl-hat-trie/vcpkg.json     |  8 ++
 example/00-vcpkg-install/vcpkg.json           |  7 ++
 24 files changed, 502 insertions(+)
 create mode 100644 example/00-vcpkg-install/CMakeLists.txt
 create mode 100644 example/00-vcpkg-install/main.cpp
 create mode 100644 example/00-vcpkg-install/vcpkg-configuration.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/boost-di/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/boost-di/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/fmt/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/fmt/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/liblsquic/disable-asan.patch
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/liblsquic/fix-found-boringssl.patch
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/liblsquic/lsquic_conn_ssl.patch
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/liblsquic/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/liblsquic/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/libp2p/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/libp2p/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/qtils/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/qtils/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/soralog/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/soralog/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/portfile.cmake
 create mode 100644 example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/vcpkg.json
 create mode 100644 example/00-vcpkg-install/vcpkg.json

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2d732bd5..84887783 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,8 @@ endif ()
 project(libp2p VERSION 0.1.17 LANGUAGES C CXX)
 
 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 option(TESTING "Build tests" ON)
 option(EXAMPLES "Build examples" ON)
diff --git a/example/00-vcpkg-install/CMakeLists.txt b/example/00-vcpkg-install/CMakeLists.txt
new file mode 100644
index 00000000..326e059e
--- /dev/null
+++ b/example/00-vcpkg-install/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.15)
+project(libp2p-example CXX)
+
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(libsecp256k1 CONFIG REQUIRED)
+find_package(ZLIB REQUIRED)
+
+find_package(libp2p CONFIG REQUIRED)
+
+add_executable(example main.cpp)
+target_link_libraries(example PRIVATE p2p::p2p)
\ No newline at end of file
diff --git a/example/00-vcpkg-install/main.cpp b/example/00-vcpkg-install/main.cpp
new file mode 100644
index 00000000..1180388d
--- /dev/null
+++ b/example/00-vcpkg-install/main.cpp
@@ -0,0 +1,12 @@
+#include <iostream>
+#include <libp2p/multi/multiaddress.hpp>
+#include <libp2p/peer/peer_id.hpp>
+
+int main() {
+  auto ma_res = libp2p::multi::Multiaddress::create("/ip4/127.0.0.1/tcp/8080");
+  if (ma_res.has_value()) {
+    std::cout << "Created multiaddress: "
+              << ma_res.value().getStringAddress() << std::endl;
+  }
+  return 0;
+}
\ No newline at end of file
diff --git a/example/00-vcpkg-install/vcpkg-configuration.json b/example/00-vcpkg-install/vcpkg-configuration.json
new file mode 100644
index 00000000..0d5930c1
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-configuration.json
@@ -0,0 +1,10 @@
+{
+  "default-registry": {
+    "kind": "git",
+    "baseline": "fe1cde61e971d53c9687cf9a46308f8f55da19fa",
+    "repository": "https://github.com/microsoft/vcpkg"
+  },
+  "overlay-ports": [
+    "vcpkg-overlay"
+  ]
+}
\ No newline at end of file
diff --git a/example/00-vcpkg-install/vcpkg-overlay/boost-di/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/boost-di/portfile.cmake
new file mode 100644
index 00000000..1b725444
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/boost-di/portfile.cmake
@@ -0,0 +1,14 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+vcpkg_from_github(
+  OUT_SOURCE_PATH SOURCE_PATH
+  REPO qdrvm/boost-di
+  REF d5de6c9840c7fc2e44bf37134b4a14b88151ecc4
+  SHA512 98e924d02bde23940ab59330730de6d4198d1e98cbb303ef713e3ee06f88e90707a952e6aa9a0372213b46d6c9d3478e86ed5cd64d74899861984e786e21c319
+)
+vcpkg_cmake_configure(
+  SOURCE_PATH "${SOURCE_PATH}"
+  OPTIONS
+    -DBOOST_DI_OPT_BUILD_TESTS=OFF
+    -DBOOST_DI_OPT_BUILD_EXAMPLES=OFF
+)
+vcpkg_cmake_install()
diff --git a/example/00-vcpkg-install/vcpkg-overlay/boost-di/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/boost-di/vcpkg.json
new file mode 100644
index 00000000..8090168d
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/boost-di/vcpkg.json
@@ -0,0 +1,8 @@
+{
+  "name": "boost-di",
+  "version": "1.1.0.1",
+  "dependencies": [
+    { "name": "vcpkg-cmake", "host": true },
+    { "name": "vcpkg-cmake-config", "host": true }
+  ]
+}
diff --git a/example/00-vcpkg-install/vcpkg-overlay/fmt/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/fmt/portfile.cmake
new file mode 100644
index 00000000..7842871f
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/fmt/portfile.cmake
@@ -0,0 +1,20 @@
+vcpkg_from_github(
+        OUT_SOURCE_PATH SOURCE_PATH
+        REPO fmtlib/fmt
+        REF 10.1.1
+        SHA512 288c349baac5f96f527d5b1bed0fa5f031aa509b4526560c684281388e91909a280c3262a2474d963b5d1bf7064b1c9930c6677fe54a0d8f86982d063296a54c
+)
+
+vcpkg_cmake_configure(
+        SOURCE_PATH "${SOURCE_PATH}"
+        OPTIONS
+        -DFMT_DOC=OFF
+        -DFMT_TEST=OFF
+        -DFMT_INSTALL=ON
+        -DCMAKE_CXX_STANDARD=20
+)
+
+vcpkg_cmake_install()
+vcpkg_copy_pdbs()
+vcpkg_cmake_config_fixup(PACKAGE_NAME fmt CONFIG_PATH lib/cmake/fmt)
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
\ No newline at end of file
diff --git a/example/00-vcpkg-install/vcpkg-overlay/fmt/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/fmt/vcpkg.json
new file mode 100644
index 00000000..bb7945e1
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/fmt/vcpkg.json
@@ -0,0 +1,8 @@
+{
+  "name": "fmt",
+  "version": "10.1.1",
+  "dependencies": [
+    { "name": "vcpkg-cmake", "host": true },
+    { "name": "vcpkg-cmake-config", "host": true }
+  ]
+}
\ No newline at end of file
diff --git a/example/00-vcpkg-install/vcpkg-overlay/liblsquic/disable-asan.patch b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/disable-asan.patch
new file mode 100644
index 00000000..2b05d0ee
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/disable-asan.patch
@@ -0,0 +1,23 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 65c4776..5d4086a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -60,12 +60,12 @@ ENDIF()
+ 
+ IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
+     SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -O0 -g3")
+-    IF(CMAKE_C_COMPILER MATCHES "clang" AND
+-                        NOT "$ENV{TRAVIS}" MATCHES "^true$" AND
+-                        NOT "$ENV{EXTRA_CFLAGS}" MATCHES "-fsanitize")
+-        SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -fsanitize=address")
+-        SET(LIBS ${LIBS} -fsanitize=address)
+-    ENDIF()
++    # IF(CMAKE_C_COMPILER MATCHES "clang" AND
++    #                     NOT "$ENV{TRAVIS}" MATCHES "^true$" AND
++    #                     NOT "$ENV{EXTRA_CFLAGS}" MATCHES "-fsanitize")
++    #     SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -fsanitize=address")
++    #     SET(LIBS ${LIBS} -fsanitize=address)
++    # ENDIF()
+     # Uncomment to enable cleartext protocol mode (no crypto):
+     #SET (MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DLSQUIC_ENABLE_HANDSHAKE_DISABLE=1")
+ ELSE()
diff --git a/example/00-vcpkg-install/vcpkg-overlay/liblsquic/fix-found-boringssl.patch b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/fix-found-boringssl.patch
new file mode 100644
index 00000000..a3a632c5
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/fix-found-boringssl.patch
@@ -0,0 +1,53 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5d4086a..e085a83 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -120,10 +120,12 @@ IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
+     SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -Od")
+     #SET (MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DFIU_ENABLE=1")
+     #SET(LIBS ${LIBS} fiu)
++    SET(LIB_NAME ssld cryptod)
+ ELSE()
+     SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -Ox")
+     # Comment out the following line to compile out debug messages:
+     #SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DLSQUIC_LOWEST_LOG_LEVEL=LSQ_LOG_INFO")
++    SET(LIB_NAME ssl crypto)
+ ENDIF()
+ 
+ ENDIF() #MSVC
+@@ -191,7 +193,7 @@ IF (NOT DEFINED BORINGSSL_LIB AND DEFINED BORINGSSL_DIR)
+ ELSE()
+ 
+ 
+-    FOREACH(LIB_NAME ssl crypto)
++    FOREACH(LIB ${LIB_NAME})
+         # If BORINGSSL_LIB is defined, try find each lib. Otherwise, user should define BORINGSSL_LIB_ssl,
+         # BORINGSSL_LIB_crypto and so on explicitly. For example, including boringssl and lsquic both via
+         # add_subdirectory:
+@@ -201,20 +203,20 @@ ELSE()
+         #   add_subdirectory(third_party/lsquic)
+         IF (DEFINED BORINGSSL_LIB)
+             IF (CMAKE_SYSTEM_NAME STREQUAL Windows)
+-                FIND_LIBRARY(BORINGSSL_LIB_${LIB_NAME}
+-                    NAMES ${LIB_NAME}
++                FIND_LIBRARY(BORINGSSL_LIB_${LIB}
++                    NAMES ${LIB}
+                     PATHS ${BORINGSSL_LIB}
+                     PATH_SUFFIXES Debug Release MinSizeRel RelWithDebInfo
+                     NO_DEFAULT_PATH)
+             ELSE()
+-                FIND_LIBRARY(BORINGSSL_LIB_${LIB_NAME}
+-                    NAMES lib${LIB_NAME}${LIB_SUFFIX}
++                FIND_LIBRARY(BORINGSSL_LIB_${LIB}
++                    NAMES lib${LI}${LIB_SUFFIX}
+                     PATHS ${BORINGSSL_LIB}
+-                    PATH_SUFFIXES ${LIB_NAME}
++                    PATH_SUFFIXES ${LIB}
+                     NO_DEFAULT_PATH)
+             ENDIF()
+         ENDIF()
+-        IF(BORINGSSL_LIB_${LIB_NAME})
++        IF(BORINGSSL_LIB_${LIB})
+             MESSAGE(STATUS "Found ${LIB_NAME} library: ${BORINGSSL_LIB_${LIB_NAME}}")
+         ELSE()
+             MESSAGE(FATAL_ERROR "BORINGSSL_LIB_${LIB_NAME} library not found")
diff --git a/example/00-vcpkg-install/vcpkg-overlay/liblsquic/lsquic_conn_ssl.patch b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/lsquic_conn_ssl.patch
new file mode 100644
index 00000000..ae7be541
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/lsquic_conn_ssl.patch
@@ -0,0 +1,80 @@
+diff --git a/include/lsquic.h b/include/lsquic.h
+index 389fbcc..c38d027 100644
+--- a/include/lsquic.h
++++ b/include/lsquic.h
+@@ -1671,6 +1671,10 @@ int lsquic_stream_close(lsquic_stream_t *s);
+ int
+ lsquic_stream_has_unacked_data (lsquic_stream_t *s);
+ 
++/* Return SSL object associated with this connection */
++struct ssl_st *
++lsquic_conn_ssl(struct lsquic_conn *conn);
++
+ /**
+  * Get certificate chain returned by the server.  This can be used for
+  * server certificate verification.
+diff --git a/src/liblsquic/lsquic_conn.c b/src/liblsquic/lsquic_conn.c
+index f76550d..31e5285 100644
+--- a/src/liblsquic/lsquic_conn.c
++++ b/src/liblsquic/lsquic_conn.c
+@@ -128,6 +128,12 @@ lsquic_conn_crypto_alg_keysize (const lsquic_conn_t *lconn)
+ }
+ 
+ 
++struct ssl_st *
++lsquic_conn_ssl(struct lsquic_conn *lconn) {
++    return lconn->cn_esf_c->esf_get_ssl(lconn->cn_enc_session);
++}
++
++
+ struct stack_st_X509 *
+ lsquic_conn_get_server_cert_chain (struct lsquic_conn *lconn)
+ {
+diff --git a/src/liblsquic/lsquic_enc_sess.h b/src/liblsquic/lsquic_enc_sess.h
+index f45c15f..3505fbd 100644
+--- a/src/liblsquic/lsquic_enc_sess.h
++++ b/src/liblsquic/lsquic_enc_sess.h
+@@ -115,6 +115,9 @@ struct enc_session_funcs_common
+     (*esf_decrypt_packet)(enc_session_t *, struct lsquic_engine_public *,
+         const struct lsquic_conn *, struct lsquic_packet_in *);
+ 
++    struct ssl_st *
++    (*esf_get_ssl)(enc_session_t *);
++
+     struct stack_st_X509 *
+     (*esf_get_server_cert_chain) (enc_session_t *);
+ 
+diff --git a/src/liblsquic/lsquic_enc_sess_ietf.c b/src/liblsquic/lsquic_enc_sess_ietf.c
+index 66329c1..076c4c5 100644
+--- a/src/liblsquic/lsquic_enc_sess_ietf.c
++++ b/src/liblsquic/lsquic_enc_sess_ietf.c
+@@ -2519,6 +2519,13 @@ iquic_esf_global_cleanup (void)
+ }
+ 
+ 
++static struct ssl_st *
++iquic_esf_get_ssl(enc_session_t *enc_session_p) {
++    struct enc_sess_iquic *const enc_sess = enc_session_p;
++    return enc_sess->esi_ssl;
++}
++
++
+ static struct stack_st_X509 *
+ iquic_esf_get_server_cert_chain (enc_session_t *enc_session_p)
+ {
+@@ -2744,6 +2751,7 @@ const struct enc_session_funcs_common lsquic_enc_session_common_ietf_v1 =
+     .esf_global_cleanup  = iquic_esf_global_cleanup,
+     .esf_global_init     = iquic_esf_global_init,
+     .esf_tag_len         = IQUIC_TAG_LEN,
++    .esf_get_ssl         = iquic_esf_get_ssl,
+     .esf_get_server_cert_chain
+                          = iquic_esf_get_server_cert_chain,
+     .esf_get_sni         = iquic_esf_get_sni,
+@@ -2763,6 +2771,7 @@ const struct enc_session_funcs_common lsquic_enc_session_common_ietf_v1_no_flush
+     .esf_global_cleanup  = iquic_esf_global_cleanup,
+     .esf_global_init     = iquic_esf_global_init,
+     .esf_tag_len         = IQUIC_TAG_LEN,
++    .esf_get_ssl         = iquic_esf_get_ssl,
+     .esf_get_server_cert_chain
+                          = iquic_esf_get_server_cert_chain,
+     .esf_get_sni         = iquic_esf_get_sni,
diff --git a/example/00-vcpkg-install/vcpkg-overlay/liblsquic/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/portfile.cmake
new file mode 100644
index 00000000..3602c595
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/portfile.cmake
@@ -0,0 +1,78 @@
+if(VCPKG_TARGET_IS_WINDOWS)
+  # The lib uses CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS, at least until
+  # https://github.com/litespeedtech/lsquic/pull/371 or similar is merged
+  vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+endif()
+
+vcpkg_from_github(OUT_SOURCE_PATH SOURCE_PATH
+    REPO litespeedtech/lsquic
+    REF v${VERSION}
+    SHA512 40d742779bfa2dc6fdaf0ee8e9349498d373dcffcc6dd27867c18d87309a288ea6811d693043b5d98364d816b818b49445214497475844201241193c0f37b349
+    HEAD_REF master
+    PATCHES 
+        disable-asan.patch
+        fix-found-boringssl.patch
+        lsquic_conn_ssl.patch
+)
+
+# Submodules
+vcpkg_from_github(OUT_SOURCE_PATH LSQPACK_SOURCE_PATH
+    REPO litespeedtech/ls-qpack
+    REF v2.5.3
+    HEAD_REF master
+    SHA512 f90502c763abc84532f33d1b8f952aea7869e4e0c5f6bd344532ddd51c4a180958de4086d88b9ec96673a059c806eec9e70007651d4d4e1a73395919dee47ce0
+)
+if(NOT EXISTS "${SOURCE_PATH}/src/ls-hpack/CMakeLists.txt")
+    file(REMOVE_RECURSE "${SOURCE_PATH}/src/liblsquic/ls-qpack")
+    file(RENAME "${LSQPACK_SOURCE_PATH}" "${SOURCE_PATH}/src/liblsquic/ls-qpack")
+endif()
+
+vcpkg_from_github(OUT_SOURCE_PATH LSHPACK_SOURCE_PATH
+    REPO litespeedtech/ls-hpack
+    REF v2.3.2
+    HEAD_REF master
+    SHA512 45d6c8296e8eee511e6a083f89460d5333fc9a49bc078dac55fdec6c46db199de9f150379f02e054571f954a5e3c79af3864dbc53dc57d10a8d2ed26a92d4278
+)
+if(NOT EXISTS "${SOURCE_PATH}/src/lshpack/CMakeLists.txt")
+    file(REMOVE_RECURSE "${SOURCE_PATH}/src/lshpack")
+    file(RENAME "${LSHPACK_SOURCE_PATH}" "${SOURCE_PATH}/src/lshpack")
+endif()
+
+# Configuration
+vcpkg_find_acquire_program(PERL)
+
+string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" LSQUIC_SHARED_LIB)
+
+vcpkg_cmake_configure(
+  SOURCE_PATH "${SOURCE_PATH}"
+  OPTIONS
+    "-DPERL=${PERL}"
+    "-DPERL_EXECUTABLE=${PERL}"
+    "-DLSQUIC_SHARED_LIB=${LSQUIC_SHARED_LIB}"
+    "-DBORINGSSL_INCLUDE=${CURRENT_INSTALLED_DIR}/include"
+    -DLSQUIC_BIN=OFF
+    -DLSQUIC_TESTS=OFF
+  OPTIONS_RELEASE
+    "-DBORINGSSL_LIB=${CURRENT_INSTALLED_DIR}/lib"
+  OPTIONS_DEBUG
+    "-DBORINGSSL_LIB=${CURRENT_INSTALLED_DIR}/debug/lib"
+    -DLSQUIC_DEVEL=ON
+)
+
+vcpkg_cmake_install()
+if(VCPKG_TARGET_IS_WINDOWS)
+  # Upstream removed installation of this header after merging changes
+  file(INSTALL "${SOURCE_PATH}/wincompat/vc_compat.h" DESTINATION "${CURRENT_INSTALLED_DIR}/include/lsquic")
+endif()
+
+vcpkg_cmake_config_fixup(PACKAGE_NAME lsquic)
+
+# Concatenate license files and install
+vcpkg_install_copyright(FILE_LIST 
+  "${SOURCE_PATH}/LICENSE" 
+  "${SOURCE_PATH}/LICENSE.chrome"
+)
+
+# Remove duplicated include directory
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
+
diff --git a/example/00-vcpkg-install/vcpkg-overlay/liblsquic/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/vcpkg.json
new file mode 100644
index 00000000..ec900322
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/liblsquic/vcpkg.json
@@ -0,0 +1,25 @@
+{
+  "name": "liblsquic",
+  "version": "3.3.2",
+  "port-version": 1,
+  "description": "An implementation of the QUIC and HTTP/3 protocols.",
+  "homepage": "https://github.com/litespeedtech/lsquic",
+  "license": "MIT AND BSD-3-Clause",
+  "supports": "!x86",
+  "dependencies": [
+    "boringssl",
+    {
+      "name": "getopt",
+      "platform": "windows"
+    },
+    {
+      "name": "vcpkg-cmake",
+      "host": true
+    },
+    {
+      "name": "vcpkg-cmake-config",
+      "host": true
+    },
+    "zlib"
+  ]
+}
diff --git a/example/00-vcpkg-install/vcpkg-overlay/libp2p/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/libp2p/portfile.cmake
new file mode 100644
index 00000000..375806c0
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/libp2p/portfile.cmake
@@ -0,0 +1,18 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+vcpkg_from_github(
+  OUT_SOURCE_PATH SOURCE_PATH
+  REPO libp2p/cpp-libp2p
+  REF 5d0013db9850a1c23dfe9ef6673077959b2d784f
+  SHA512 fdc97ef948edccf9f31c0b7807a813a79975c822e96c8dcb48f14a3827505422b47f1f693e62e0bfe56689079992ee548f5ca631bc84d6e4098eac220b5cf98d
+)
+vcpkg_cmake_configure(
+        SOURCE_PATH "${SOURCE_PATH}"
+        OPTIONS
+        -DCMAKE_CXX_STANDARD=20
+        -DCMAKE_CXX_STANDARD_REQUIRED=ON
+        -DTESTING=OFF
+        -DEXAMPLES=OFF
+)
+vcpkg_cmake_install()
+#vcpkg_cmake_config_fixup(PACKAGE_NAME "libsecp256k1")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
diff --git a/example/00-vcpkg-install/vcpkg-overlay/libp2p/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/libp2p/vcpkg.json
new file mode 100644
index 00000000..c5a66ae3
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/libp2p/vcpkg.json
@@ -0,0 +1,34 @@
+{
+  "name": "libp2p",
+  "version": "0.0.1",
+  "dependencies": [
+    { "name": "vcpkg-cmake", "host": true },
+    { "name": "vcpkg-cmake-config", "host": true },
+    "boost-filesystem",
+    "boost-random",
+    "boost-program-options",
+    "qtils",
+    "boringssl",
+    "boost-signals2",
+    "boost-asio",
+    "soralog",
+    "fmt",
+    "gtest",
+    "boost-beast",
+    "protobuf",
+    "liblsquic",
+    "zlib",
+    "boost-di",
+    "sqlite-modern-cpp",
+    "libsecp256k1",
+    "tsl-hat-trie",
+    "boost-multi-index",
+    "c-ares"
+  ],
+  "overrides": [
+    {
+      "name": "fmt",
+      "version": "10.1.1"
+    }
+  ]
+}
diff --git a/example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/portfile.cmake
new file mode 100644
index 00000000..bfbc93c0
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/portfile.cmake
@@ -0,0 +1,11 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+vcpkg_from_github(
+  OUT_SOURCE_PATH SOURCE_PATH
+  REPO qdrvm/libsecp256k1
+  REF 4370b9c336f86457c0b7bb97cd1ac6a281d951fa
+  SHA512 ed4660a66d8d74d5d5a27e54a247fe89d0fab4a5618ace27fe384690eebe296b89ababb7eb8a0184d64c339a27c7882306ecefb3fc8bf8c554ca3e244df627e5
+)
+vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}")
+vcpkg_cmake_install()
+#vcpkg_cmake_config_fixup(PACKAGE_NAME "libsecp256k1")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
diff --git a/example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/vcpkg.json
new file mode 100644
index 00000000..8143946f
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/libsecp256k1/vcpkg.json
@@ -0,0 +1,8 @@
+{
+  "name": "libsecp256k1",
+  "version": "0.5.1",
+  "dependencies": [
+    { "name": "vcpkg-cmake", "host": true },
+    { "name": "vcpkg-cmake-config", "host": true }
+  ]
+}
diff --git a/example/00-vcpkg-install/vcpkg-overlay/qtils/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/qtils/portfile.cmake
new file mode 100644
index 00000000..cc367ce3
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/qtils/portfile.cmake
@@ -0,0 +1,11 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+vcpkg_from_github(
+  OUT_SOURCE_PATH SOURCE_PATH
+  REPO qdrvm/qtils
+  REF 9a64dfd6ed0226dec29805aa89d4c713a6f81d9f
+  SHA512 bab32974f6926054ea11b0e6d8549d2b62e1def75cb4464ca47895bdd32d624ff6b9e25d10d7075581c4310c872b71560dfce76e92a60e83949b4af0276768ec
+)
+vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}")
+vcpkg_cmake_install()
+vcpkg_cmake_config_fixup(PACKAGE_NAME "qtils")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
diff --git a/example/00-vcpkg-install/vcpkg-overlay/qtils/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/qtils/vcpkg.json
new file mode 100644
index 00000000..a6f24b66
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/qtils/vcpkg.json
@@ -0,0 +1,19 @@
+{
+  "name": "qtils",
+  "version": "0.0.3",
+  "dependencies": [
+    { "name": "vcpkg-cmake", "host": true },
+    { "name": "vcpkg-cmake-config", "host": true },
+    "boost-algorithm",
+    "boost-outcome",
+    "fmt"
+  ],
+  "features": {
+    "qtils-tests": {
+      "description": "Test compilable of qtils",
+      "dependencies": [
+        "gtest"
+      ]
+    }
+  }
+}
diff --git a/example/00-vcpkg-install/vcpkg-overlay/soralog/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/soralog/portfile.cmake
new file mode 100644
index 00000000..53fd8938
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/soralog/portfile.cmake
@@ -0,0 +1,11 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+vcpkg_from_github(
+  OUT_SOURCE_PATH SOURCE_PATH
+  REPO xDimon/soralog
+  REF 4dfffd3d949b1c16a04db2e5756555a4031732f7
+  SHA512 4a8f6066433e6bde504454ea256915e8e6975c060eabdaebd031df409d348b8c22ccd716ec11c4466b0f4322b1f2524350dcc77c3615a8511cba9886f88e7260
+)
+vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}")
+vcpkg_cmake_install()
+#vcpkg_cmake_config_fixup(PACKAGE_NAME "soralog")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
diff --git a/example/00-vcpkg-install/vcpkg-overlay/soralog/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/soralog/vcpkg.json
new file mode 100644
index 00000000..f375fea9
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/soralog/vcpkg.json
@@ -0,0 +1,18 @@
+{
+  "name": "soralog",
+  "version": "0.2.5",
+  "dependencies": [
+    { "name": "vcpkg-cmake", "host": true },
+    { "name": "vcpkg-cmake-config", "host": true },
+    "fmt",
+    "yaml-cpp"
+  ],
+  "features": {
+    "soralog-tests": {
+      "description": "Test of soralog's mechanisms",
+      "dependencies": [
+        "gtest"
+      ]
+    }
+  }
+}
diff --git a/example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/portfile.cmake b/example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/portfile.cmake
new file mode 100644
index 00000000..597fada1
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/portfile.cmake
@@ -0,0 +1,11 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+vcpkg_from_github(
+  OUT_SOURCE_PATH SOURCE_PATH
+  REPO masterjedy/hat-trie
+  REF 4fdfc75e75276185eed4b748ea09671601101b8e
+  SHA512 1f8e216037d06909a80dc89550a667cb1a8c64270c91b0ea5585c98f318fdbfe863a9766c9fadfb3da581b248fcd6b6b13576a2f855c61b7587516c38947c457
+)
+vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}")
+vcpkg_cmake_install()
+#vcpkg_cmake_config_fixup(PACKAGE_NAME "tsl-hat-trie")
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
diff --git a/example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/vcpkg.json b/example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/vcpkg.json
new file mode 100644
index 00000000..0ad4d7be
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg-overlay/tsl-hat-trie/vcpkg.json
@@ -0,0 +1,8 @@
+{
+  "name": "tsl-hat-trie",
+  "version": "1.0.0",
+  "dependencies": [
+    { "name": "vcpkg-cmake", "host": true },
+    { "name": "vcpkg-cmake-config", "host": true }
+  ]
+}
diff --git a/example/00-vcpkg-install/vcpkg.json b/example/00-vcpkg-install/vcpkg.json
new file mode 100644
index 00000000..eda2d070
--- /dev/null
+++ b/example/00-vcpkg-install/vcpkg.json
@@ -0,0 +1,7 @@
+{
+  "name": "libp2p-example",
+  "version-string": "0.1.0",
+  "dependencies": [
+    "libp2p"
+  ]
+}
\ No newline at end of file

From c8b7b7860bb0da540108fd277a74be1a01fdf199 Mon Sep 17 00:00:00 2001
From: Dmitriy Khaustov aka xDimon <khaustov.dm@gmail.com>
Date: Sun, 2 Mar 2025 23:21:24 +0800
Subject: [PATCH 2/5] update: qtils & scale

Signed-off-by: Dmitriy Khaustov aka xDimon <khaustov.dm@gmail.com>
---
 cmake/Hunter/config.cmake | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/cmake/Hunter/config.cmake b/cmake/Hunter/config.cmake
index d8f5b2f5..276af818 100644
--- a/cmake/Hunter/config.cmake
+++ b/cmake/Hunter/config.cmake
@@ -17,9 +17,9 @@
 
 hunter_config(
     soralog
-    URL  https://github.com/xDimon/soralog/archive/4dfffd3d949b1c16a04db2e5756555a4031732f7.tar.gz
-    SHA1 60e3dcaab2d8e43f0ed4fd22087677663c618716
-    #    VERSION 0.2.4
+    VERSION 0.2.5
+    URL  https://github.com/qdrvm/soralog/archive/7a76c991e1a80a9b79297fb544ef3512ea8f5789.tar.gz
+    SHA1 4a6cf3810fe9ec59f58be961234c063637667fab
     KEEP_PACKAGE_SOURCES
 )
 
@@ -32,8 +32,9 @@ hunter_config(
 
 hunter_config(
     qtils
-    URL  https://github.com/qdrvm/qtils/archive/1e492cf09a3640570cae59a951502614320c0797.tar.gz
-    SHA1 033dd907e2566c95ce2ccf1fa6dd9766bc896894
+    VERSION 0.1.0
+    URL  https://github.com/qdrvm/qtils/archive/refs/tags/v0.1.0.tar.gz
+    SHA1 acc28902af7dc5d74ac33d486ad2261906716f5e
     CMAKE_ARGS
       FORMAT_ERROR_WITH_FULLTYPE=ON
     KEEP_PACKAGE_SOURCES

From 70a21ce10b5950d7c48fa2798ab573d904bad51d Mon Sep 17 00:00:00 2001
From: kamilsa <kamilsa16@gmail.com>
Date: Tue, 4 Mar 2025 14:18:44 +0300
Subject: [PATCH 3/5] Add README.md

---
 example/00-vcpkg-install/README.md | 46 ++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 example/00-vcpkg-install/README.md

diff --git a/example/00-vcpkg-install/README.md b/example/00-vcpkg-install/README.md
new file mode 100644
index 00000000..626110cc
--- /dev/null
+++ b/example/00-vcpkg-install/README.md
@@ -0,0 +1,46 @@
+# LibP2P Example with vcpkg
+
+This example demonstrates how to build and run a simple LibP2P application using vcpkg as the package manager.
+
+## Prerequisites
+
+- CMake 3.15 or higher
+- A C++20 compatible compiler
+- Git
+- vcpkg
+
+## Getting Started
+
+1. Clone vcpkg if you haven't already:
+
+```bash
+git clone https://github.com/microsoft/vcpkg.git
+
+./vcpkg/bootstrap-vcpkg.sh # For Linux/macOS
+.\vcpkg\bootstrap-vcpkg.bat # For Windows
+```
+
+2. Clone this repository:
+
+```bash
+git clone https://github.com/libp2p/libp2p.git
+cd libp2p/example/00-vcpkg-install
+```
+
+3. Install LibP2P dependencies using vcpkg:
+
+```bash
+cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
+cmake --build build
+```
+
+4. Run the example:
+
+```bash
+./build/example
+```
+
+## Notes
+
+- This example assumes you have a working vcpkg installation. If you encounter any issues, please refer to the [vcpkg documentation](https://vcpkg.io/en/getting-started.html) for troubleshooting.
+- The example demonstrates how to build and run a simple LibP2P application using vcpkg as the package manager.

From b0a40b6c8a85f5d4ddac5599275503b929b4e40f Mon Sep 17 00:00:00 2001
From: Dmitriy Khaustov aka xDimon <khaustov.dm@gmail.com>
Date: Wed, 5 Mar 2025 02:56:59 +0800
Subject: [PATCH 4/5] update: soralog

Signed-off-by: Dmitriy Khaustov aka xDimon <khaustov.dm@gmail.com>
---
 cmake/Hunter/config.cmake | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmake/Hunter/config.cmake b/cmake/Hunter/config.cmake
index 276af818..0a35fdb2 100644
--- a/cmake/Hunter/config.cmake
+++ b/cmake/Hunter/config.cmake
@@ -18,8 +18,8 @@
 hunter_config(
     soralog
     VERSION 0.2.5
-    URL  https://github.com/qdrvm/soralog/archive/7a76c991e1a80a9b79297fb544ef3512ea8f5789.tar.gz
-    SHA1 4a6cf3810fe9ec59f58be961234c063637667fab
+    URL  https://github.com/qdrvm/soralog/archive/refs/tags/v0.2.5.tar.gz
+    SHA1 67da2d17e93954c198b4419daa55911342c924a9
     KEEP_PACKAGE_SOURCES
 )
 

From ed3888a1ea8ccc9fda93572371bdbde81e0f98f3 Mon Sep 17 00:00:00 2001
From: Dmitriy Khaustov aka xDimon <khaustov.dm@gmail.com>
Date: Wed, 5 Mar 2025 03:03:29 +0800
Subject: [PATCH 5/5] update: bump version

Signed-off-by: Dmitriy Khaustov aka xDimon <khaustov.dm@gmail.com>
---
 CMakeLists.txt | 2 +-
 README.md      | 2 +-
 vcpkg.json     | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 84887783..3500ff4c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,7 +40,7 @@ if (PACKAGE_MANAGER STREQUAL "hunter")
   include("cmake/Hunter/init.cmake")
 endif ()
 
-project(libp2p VERSION 0.1.17 LANGUAGES C CXX)
+project(libp2p VERSION 0.1.32 LANGUAGES C CXX)
 
 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
 set(CMAKE_CXX_STANDARD 20)
diff --git a/README.md b/README.md
index 651fe793..77265d1a 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # CPP-Libp2p  
 
-> Fully compatible C++17 implementation of libp2p library
+> Fully compatible C++20 implementation of libp2p library
 
 Libp2p is a modular networking stack described in [spec](https://github.com/libp2p/specs)
 
diff --git a/vcpkg.json b/vcpkg.json
index 216339c9..2c7a36d2 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -1,6 +1,6 @@
 {
   "name": "libp2p",
-  "version": "0.1.17",
+  "version": "0.1.32",
   "dependencies": [
     "boost-filesystem",
     "boost-random",