diff --git a/.gitignore b/.gitignore
index e97c609120476289487b69ea8f5b1a53eeaab3bc..3420055ff2b5d17db4c10b82f92d09f7b3533026 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 # Prerequisites
 build/*
+cmake-build-*/
 build_stretch/*
 test/build
 *.txt.user
@@ -67,4 +68,9 @@ Makefile
 cmake_install.cmake
 
 # Editor's temp files
-*~
\ No newline at end of file
+*~
+.idea/
+
+# OS files
+.DS_Store
+
diff --git a/3rdparty/cuttdb/CMakeLists.txt b/3rdparty/cuttdb/CMakeLists.txt
index 85118d55603a3f1ca1ff87cf1975ad36a793c625..8e6150bc018f9b5f2c3631962e3aceda1f256f9f 100755
--- a/3rdparty/cuttdb/CMakeLists.txt
+++ b/3rdparty/cuttdb/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1)
+cmake_minimum_required(VERSION 3.10)
 
 project(dap_cuttdb C)
 
diff --git a/3rdparty/json-c-darwin/CMakeLists.txt b/3rdparty/json-c-darwin/CMakeLists.txt
index 087c1f19bbd2e2854807660f25f0f5be4633145b..77d08b275354d37574e547554cfcfa31eab2b852 100644
--- a/3rdparty/json-c-darwin/CMakeLists.txt
+++ b/3rdparty/json-c-darwin/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (json-c)
   
 file(GLOB JSON_C_SRCS FILES *.c)
diff --git a/3rdparty/json-c/CMakeLists.txt b/3rdparty/json-c/CMakeLists.txt
index 087c1f19bbd2e2854807660f25f0f5be4633145b..77d08b275354d37574e547554cfcfa31eab2b852 100644
--- a/3rdparty/json-c/CMakeLists.txt
+++ b/3rdparty/json-c/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (json-c)
   
 file(GLOB JSON_C_SRCS FILES *.c)
diff --git a/3rdparty/libmagic-darwin/CMakeLists.txt b/3rdparty/libmagic-darwin/CMakeLists.txt
index 5c44277f082502ac2c2f08017884c4b71ea95e5a..c7356c623c0be98aeb1f2da5f820d238d1101852 100755
--- a/3rdparty/libmagic-darwin/CMakeLists.txt
+++ b/3rdparty/libmagic-darwin/CMakeLists.txt
@@ -3,7 +3,7 @@
 # value of 3.4.0 or lower.
 # by huzongyao
 
-cmake_minimum_required(VERSION 3.4.1)
+cmake_minimum_required(VERSION 3.10)
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -DHAVE_CONFIG_H -I/usr/lib/jvm/java-8-openjdk-amd64/include/ -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux/")
 
diff --git a/3rdparty/libmagic/CMakeLists.txt b/3rdparty/libmagic/CMakeLists.txt
index 33a21014bb650e31989703556be2df618bd20fd0..681005e1e0469216d454ce219db5ee09d101a4a8 100755
--- a/3rdparty/libmagic/CMakeLists.txt
+++ b/3rdparty/libmagic/CMakeLists.txt
@@ -3,7 +3,7 @@
 # value of 3.4.0 or lower.
 # by huzongyao
 
-cmake_minimum_required(VERSION 3.4.1)
+cmake_minimum_required(VERSION 3.10)
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -DHAVE_CONFIG_H -I/usr/lib/jvm/java-8-openjdk-amd64/include/ -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux/")
 
diff --git a/3rdparty/wolfssl/CMakeLists.txt b/3rdparty/wolfssl/CMakeLists.txt
index 171c8ef3fadf66c1b988be8af14d59b14f9767bb..c6a14fd2e6825b533b50e5e8fcd3cde8dbe7a058 100644
--- a/3rdparty/wolfssl/CMakeLists.txt
+++ b/3rdparty/wolfssl/CMakeLists.txt
@@ -19,7 +19,7 @@
 # Project
 ####################################################
 
-cmake_minimum_required(VERSION 3.2)
+cmake_minimum_required(VERSION 3.10)
 
 if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
     message(FATAL_ERROR "In-source builds are not allowed.\
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 44db715acaa5e4f61a96413b1789f18e5ce1a8f1..5d15399566b3ac4a6d31e9ab453f6b1439f7400a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,10 +1,44 @@
 project(cellframe-sdk C)
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 set(CMAKE_C_STANDARD 11)
 set(CELLFRAME_SDK_NATIVE_VERSION "3.0-10")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
+
+set(BUILD_CRYPTO_TESTS ON)
+
+if(NOT DEFINED ${CELLFRAME_MODULES})
+    include (cmake/OS_Detection.cmake)
+    if (WIN32)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(BSD)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(DARWIN)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(ANDROID)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(LINUX)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange modules-dynamic srv-vpn")
+    endif()
+endif()
+
 set(DAPSDK_MODULES "")
+
+if(NOT DEFINED ${CELLFRAME_MODULES})
+    include (cmake/OS_Detection.cmake)
+    if (WIN32)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(BSD)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(DARWIN)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(ANDROID)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange")
+    elseif(LINUX)
+        set(CELLFRAME_MODULES "core chains mining network srv cs-dag-poa cs-block-poa cs-dag-pos cs-block-pos cs-none srv-app srv-app-db srv-datum srv-stake srv-xchange modules-dynamic srv-vpn")
+    endif()
+endif()
+
 message("Cellframe modules: ${CELLFRAME_MODULES}")
 
 if (CELLFRAME_MODULES MATCHES "modules-dynamic")
diff --git a/cmake/OS_Detection.cmake b/cmake/OS_Detection.cmake
index a4d15a653c13b2ca287431446ce10a78a93c5679..8148074e3a757572b7abc583b6e128ead19cec98 100644
--- a/cmake/OS_Detection.cmake
+++ b/cmake/OS_Detection.cmake
@@ -1,3 +1,5 @@
+include_guard(GLOBAL)
+
 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
     set(OS_TYPE_DESKTOP ON)
     set(LINUX ON)
diff --git a/dap-sdk/core/CMakeLists.txt b/dap-sdk/core/CMakeLists.txt
index 60cb7dc92bb74181db1175cbff2a015ee55576f3..5956ea55318d1c3e02efe8d27c8ecb2d06c21a83 100755
--- a/dap-sdk/core/CMakeLists.txt
+++ b/dap-sdk/core/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_core)
 
 add_definitions("-D_GNU_SOURCE") 
diff --git a/dap-sdk/core/src/android/CMakeLists.txt b/dap-sdk/core/src/android/CMakeLists.txt
index 1e9d95846f79bcecbdddf4c3debbf0d572798269..70d059ded56ed6c6f41a6afb940363248a6f18b5 100755
--- a/dap-sdk/core/src/android/CMakeLists.txt
+++ b/dap-sdk/core/src/android/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project (dap_core_android C)
 
diff --git a/dap-sdk/core/src/darwin/CMakeLists.txt b/dap-sdk/core/src/darwin/CMakeLists.txt
index 8f981d542da3e9b9540f764c97ee0a8fda60f7c1..651375ede9a29b1854e2e08ce329399b4981e732 100755
--- a/dap-sdk/core/src/darwin/CMakeLists.txt
+++ b/dap-sdk/core/src/darwin/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project (dap_core_darwin)
 
diff --git a/dap-sdk/core/src/unix/CMakeLists.txt b/dap-sdk/core/src/unix/CMakeLists.txt
index 828fdfb757ca7c653c734c5caeb69b2621b1adfb..1e7ae9443e95046b8352320edbe9bb50ebd3a6c6 100755
--- a/dap-sdk/core/src/unix/CMakeLists.txt
+++ b/dap-sdk/core/src/unix/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project (dap_core_unix)
 
diff --git a/dap-sdk/core/src/win32/CMakeLists.txt b/dap-sdk/core/src/win32/CMakeLists.txt
index f3d0c43a6662887771ccebe815b8f8102824b6e1..6f84da809b91ab4cc25fffd5a5dd135f41907414 100644
--- a/dap-sdk/core/src/win32/CMakeLists.txt
+++ b/dap-sdk/core/src/win32/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project (dap_core_win32 C)
 
diff --git a/dap-sdk/core/test/CMakeLists.txt b/dap-sdk/core/test/CMakeLists.txt
index c9ef63ebb3d691543f98993ee2483497de6301c9..47f257f342a8b098a8552a7e6f2e0ee71aeecc40 100755
--- a/dap-sdk/core/test/CMakeLists.txt
+++ b/dap-sdk/core/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project(core_test)
 
diff --git a/dap-sdk/crypto/CMakeLists.txt b/dap-sdk/crypto/CMakeLists.txt
index 3badd0046895a28ec855633f5e2ba59e44263a7f..91dd01a80a3599e41c81b28cd1c5e35f500d0e70 100755
--- a/dap-sdk/crypto/CMakeLists.txt
+++ b/dap-sdk/crypto/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_crypto)
 
 # fix implicit declaration warnings
diff --git a/dap-sdk/crypto/test/CMakeLists.txt b/dap-sdk/crypto/test/CMakeLists.txt
index fe129624464d805d51780fd653889e6425e914f9..725414756091afb244a9dbd1388c033f7a485628 100755
--- a/dap-sdk/crypto/test/CMakeLists.txt
+++ b/dap-sdk/crypto/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project(test)
 
 set(CMAKE_C_STANDARD 11)
diff --git a/dap-sdk/crypto/test/crypto/CMakeLists.txt b/dap-sdk/crypto/test/crypto/CMakeLists.txt
index cc132aa8dd3e4a68b24946930966c1bd3aa5de94..ef6afe9d0c1c79ae3e28bd09486a1975e0631996 100755
--- a/dap-sdk/crypto/test/crypto/CMakeLists.txt
+++ b/dap-sdk/crypto/test/crypto/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project(crypto-test)
 # init CellFrame SDK
@@ -7,20 +7,22 @@ set(SUBMODULES_NO_BUILD ON)
 include (cellframe-sdk/cmake/OS_Detection.cmake)
 set(DAPSDK_MODULES "core crypto network-core network-client network-server")
 
-if( DARWIN)
-    add_subdirectory(cellframe-sdk/3rdparty/json-c-darwin)
-    add_subdirectory(cellframe-sdk/3rdparty/libmagic-darwin)
-    include_directories(cellframe-sdk/3rdparty/json-c-darwin)
-endif()
-if (ANDROID)
-    add_subdirectory(cellframe-sdk/3rdparty/libmagic)
-    add_subdirectory(cellframe-sdk/3rdparty/json-c)
-    include_directories(cellframe-sdk/cellframe-sdk/3rdparty/)
-endif()
+# There is no need, as it was added in cellframe-sdk/CMakeLists.txt
+
+#if( DARWIN)
+#    add_subdirectory(cellframe-sdk/3rdparty/json-c-darwin)
+#    add_subdirectory(cellframe-sdk/3rdparty/libmagic-darwin)
+#    include_directories(cellframe-sdk/3rdparty/json-c-darwin)
+#endif()
+#if (ANDROID)
+#    add_subdirectory(cellframe-sdk/3rdparty/libmagic)
+#    add_subdirectory(cellframe-sdk/3rdparty/json-c)
+#    include_directories(cellframe-sdk/cellframe-sdk/3rdparty/)
+#endif()
 
 #add_subdirectory(cellframe-sdk/dap-sdk)
 #enable_testing()
-add_subdirectory(test)
+#add_subdirectory(test)
 
 
 if ( NOT ( TARGET dap_core ) )
diff --git a/dap-sdk/crypto/test/crypto/dap_enc_ringct20_test.c b/dap-sdk/crypto/test/crypto/dap_enc_ringct20_test.c
index 6ee4936839b488158c4c1e35ea686fb8aab516cb..baa0e819b69b5b7ac34dab2c11ba9349e8210be7 100644
--- a/dap-sdk/crypto/test/crypto/dap_enc_ringct20_test.c
+++ b/dap-sdk/crypto/test/crypto/dap_enc_ringct20_test.c
@@ -3,6 +3,404 @@
 #include "ringct20/ringct20_params.h"
 #include "rand/dap_rand.h"
 
+#define MSIZE 2
+#define WSIZE 3
+#define NSIZE 3
+
+// From original implementation https://github.com/chainchip/Lattice-RingCT-v2.0/blob/master/Ring2.0/ring_test.c
+
+void LRCT_Byte_Test()
+{
+    poly_ringct20 a, ra;
+    uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 };
+    unsigned char bCof[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
+    randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
+    poly_uniform_ringct20(&a, seed);
+//    printf("begin:\n");
+//    poly_print(&a);
+//    printf("serial:\n");
+    poly_serial(&a);
+//    poly_print(&a);
+    poly_tobytes(bCof, &a);
+//    printf("ra:\n");
+    poly_frombytes(&ra, bCof);
+//    poly_print(&ra);
+
+
+}
+
+void LRCT_Setup_Test()
+{
+    poly_ringct20 A[2], H[2];
+    poly_ringct20 S[2];
+    poly_ringct20 L[2];
+    poly_ringct20 h;
+    poly_ringct20 u[3];
+    poly_ringct20 c1;
+    poly_ringct20* t[2];
+    unsigned char msg[2] = { 0x01, 0x02 };
+    unsigned char msg2[2] = { 0x02, 0x03 };
+    int msgLen = 2;
+    unsigned char bt[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
+    size_t mLen = 2;
+    size_t i = 0;
+    size_t k = 0;
+    int result = 0;
+    int w = 2;
+    int pai = 1;
+
+    t[0] = (poly_ringct20 *)malloc((3) * sizeof(poly_ringct20));
+    t[1] = (poly_ringct20 *)malloc((3) * sizeof(poly_ringct20));
+
+    for (i = 0; i < 2; i++)
+    {
+        for (k = 0; k < 3; k++)
+        {
+            poly_init(t[i] + k);
+        }
+
+    }
+    LRCT_Setup(A, H, 2);
+    LRCT_SampleKey(S, 2);
+    LRCT_KeyGen(L, A, S, 2);
+    LRCT_SampleKey(S, 2);
+    LRCT_KeyGen(L+1, A, S, 2);
+
+    for (k = 0; k < 3; k++)
+    {
+        randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES);
+        poly_frombytes(u + k, bt);
+        poly_serial(u + k);
+        ///poly_print(u+k);
+    }
+//    printf("====================================\n");
+    LRCT_SigGen(&c1, t, &h, A, H,S, u, mLen, L, w,pai, msg, msgLen);
+//    printf("c1\n");
+//    poly_print(&c1);
+//    printf("=================\n");
+    result = LRCT_SigVer(&c1, t, A, H, mLen, &h, L,w, msg, msgLen);
+    dap_assert_PIF(result == 1, "Sign Verify");
+    result = LRCT_SigVer(&c1, t, A, H, mLen, &h, L, w, msg2, msgLen);
+    dap_assert_PIF(result != 1, "Sign Verify");
+    free(t[0]);
+    free(t[1]);
+
+}
+
+void MIMO_LRCT_Setup_Test()
+{
+    poly_ringct20 A[MSIZE], H[MSIZE];
+    poly_ringct20 SList[MSIZE*NSIZE];
+    poly_ringct20 S[MSIZE];
+    poly_ringct20 LList[NSIZE*WSIZE];
+    poly_ringct20 hList[NSIZE];
+    poly_ringct20 c1;
+    poly_ringct20 tList[NSIZE*WSIZE*(MSIZE+1)];
+    int i, j, k;
+    int pai = 2;
+    unsigned char msg[2] = { 0x01, 0x02 };
+    unsigned char msg2[2] = { 0x01, 0x03 };
+    int msgLen = 2;
+    int result = 0;
+    MIMO_LRCT_Setup(A, H, MSIZE);
+    for ( i = 0; i < NSIZE; i++)
+    {
+        LRCT_SampleKey(SList + i*MSIZE, MSIZE);
+        MIMO_LRCT_KeyGen(LList + i*WSIZE + (pai-1) , A, SList + i * MSIZE, MSIZE);
+    }
+    for ( i = 0; i < WSIZE; i++)
+    {
+        if (i != pai-1)
+        {
+            for (j = 0; j < NSIZE; j++)
+            {
+                LRCT_SampleKey(S, MSIZE);
+                MIMO_LRCT_KeyGen(LList + j* WSIZE + i, A, S, MSIZE);
+            }
+        }
+
+    }
+    MIMO_LRCT_SigGen(&c1, tList, hList, SList, NSIZE, A, H, MSIZE, LList, WSIZE, pai, msg, msgLen);
+    result = MIMO_LRCT_SigVer(&c1, tList, hList, NSIZE, A, /*H,*/ MSIZE, LList, WSIZE, msg, msgLen);
+    dap_assert_PIF(result == 1, "Sign verify");
+    result = MIMO_LRCT_SigVer(&c1, tList, hList, NSIZE, A, /*H,*/ MSIZE, LList, WSIZE, msg2, msgLen);
+    dap_assert_PIF(result != 1, "Sign verify");
+}
+
+void LRCT_Spent_Test()
+{
+    poly_ringct20 A[MSIZE], H[MSIZE];
+    poly_ringct20 skPai[MSIZE], pkPai;
+    poly_ringct20 ckPai[MSIZE];
+    poly_ringct20* t[WSIZE];
+    unsigned char bMessage[4] = { 0x01, 0x02, 0x03, 0x4 };
+    size_t msglen = 4;
+    IW iw;
+    //////////////////
+    poly_ringct20 skOA[MSIZE];
+    poly_ringct20 pkOA;
+    IW iwOA;
+    poly_ringct20 ckOA[MSIZE];
+    ////////////////////
+    IW iwList[WSIZE];
+    poly_ringct20 skTmp[MSIZE];
+    poly_ringct20 pkList[WSIZE];
+    poly_ringct20 ckList[WSIZE][MSIZE];
+    unsigned char bListMessage[2] = { 0x01, 0x02};
+    size_t msgListlen = 2;
+    int i = 0;
+    ///////////////////
+    poly_ringct20 L[WSIZE];
+    int paiIndex = 1;
+    poly_ringct20 c1, h;
+    unsigned char bSignMessage[3] = { 0x01, 0x02, 0x03 };
+    size_t msgSignlen = 3;
+    int result =0;
+    size_t k = 0;
+    /////////////////
+    for ( i = 0; i < WSIZE; i++)
+    {
+        t[i] = (poly_ringct20 *)malloc((MSIZE+1) * sizeof(poly_ringct20));
+        for (k = 0; k < MSIZE+1; k++)
+        {
+            poly_init(t[i] + k);
+        }
+    }
+    ///////////////////
+    LRCT_Setup(A, H, MSIZE);
+    LRCT_SampleKey(skPai, MSIZE);
+    LRCT_KeyGen(&pkPai, A, skPai, MSIZE);//A*S+0
+    LRCT_Mint(&iw, ckPai, &pkPai, A, MSIZE, bMessage, msglen);//A*ck + $
+    ///
+    LRCT_SampleKey(skOA, MSIZE);
+    LRCT_KeyGen(&pkOA, A, skOA, MSIZE);//
+    //LRCT_Mint(&iwOA, ckOA, &pkOA, A, MSIZE, bMessage, msglen);
+    //////
+    for( i = 0; i < WSIZE; i++)
+    {
+        if (i == paiIndex)
+        {
+            poly_cofcopy(&iwList[i].a, &iw.a);
+            poly_cofcopy(&iwList[i].cn, &iw.cn);
+        }
+        else
+        {
+            LRCT_SampleKey(skTmp, MSIZE);
+            LRCT_KeyGen(pkList + i, A, skTmp, MSIZE);//A*S+0
+            LRCT_Mint(iwList + i, ckList[i], pkList + i, A, MSIZE, bListMessage, msgListlen);
+        }
+
+    }
+    LRCT_Spend(&iwOA, ckOA, &c1, t, &h, L, bSignMessage, msgSignlen, iwList, WSIZE, paiIndex, skPai, ckPai, bMessage, msglen, &pkOA, A, H, MSIZE);
+    result = LRCT_Verify(&c1, t, &h, A, H, MSIZE, bSignMessage, msgSignlen, L, WSIZE);
+    dap_assert_PIF(result == 1, "Sign Verify");
+    for (i = 0; i < WSIZE; i++)
+    {
+        free(t[i]);
+    }
+}
+
+
+void LRCT_Mul_Test()
+{
+    poly_ringct20 A[2], H[2], H2[2];
+    poly_ringct20 h,h1,r;
+    poly_ringct20 S[2];
+    LRCT_Setup(A, H, 2);
+    LRCT_SampleKey(S, 2);
+
+    LRCT_MatrixMulPoly(&h, H, S, 2);
+
+
+    for (size_t i = 0; i < NEWHOPE_RINGCT20_N; i++)
+    {
+        h.coeffs[i] = coeff_freeze2Q(NEWHOPE_RINGCT20_2Q + NEWHOPE_RINGCT20_Q - h.coeffs[i] * 2);
+    }
+    LRCT_ConstMulMatrix(H2, H, 2, 2);
+    LRCT_MatrixMulPoly(&h1, H2, S, 2);
+    poly_add_ringct20(&r, &h1, &h);
+//    poly_print(&r);
+
+
+}
+void LRCT_MatrixMulVect_Test()
+{
+    poly_ringct20 A[2], H[2];
+    LRCT_Setup(A, H, 2);
+    uint8_t bt[2] = { 0 };
+    bt[0] = 1;
+    bt[1] = 2;
+
+
+}
+void LRCT_Lift_Test()
+{
+    poly_ringct20 A[2], H[2], LA[3], H2[3];
+    poly_ringct20 h;
+    poly_ringct20 S[2];
+    LRCT_SampleKey(S, 2);
+    LRCT_Setup(A, H, 2);
+    LRCT_MatrixMulPoly(&h, H, S, 2);
+    LRCT_Lift(LA, H, &h, 2);
+    ////////////////////////////////////
+    LRCT_ConstMulMatrix(H2, H, 2, 2);
+    for (size_t i = 0; i < NEWHOPE_RINGCT20_N; i++)
+    {
+        H2[2].coeffs[i] = coeff_freeze2Q(NEWHOPE_RINGCT20_2Q + NEWHOPE_RINGCT20_Q - h.coeffs[i] * 2);
+    }
+    for (size_t i = 0; i < 3; i++)
+    {
+        dap_assert_PIF(poly_equal(LA + i, H2 + i) == 1, "Poly equality");
+    }
+}
+void LRCT_KDF_Test()
+{
+
+}
+
+void LRCT_Com_Test()
+{
+    IW iw;
+    poly_ringct20 ck[2];
+    size_t mLen = 2;
+    poly_ringct20  A[2], H[2], sk[2];
+    unsigned char bMessage[4] = { 0x01, 0x02, 0x03, 0x4 };
+    size_t msglen = 4;
+    poly_ringct20 a;
+    LRCT_Setup(A, H, mLen);
+    LRCT_SampleKey(sk, mLen);
+    LRCT_KeyGen(&a, A, sk, mLen);
+//    printf("public key:");
+//    poly_print(&a);
+    LRCT_Mint(&iw, ck, &a, A, mLen, bMessage, msglen);
+//    printf("a:\n");
+//    poly_print(&(iw.a));
+//    printf("cn:\n");
+//    poly_print(&(iw.cn));
+}
+//ntt 变换测试
+void LRCT_Fun_Test()
+{
+    uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 };
+    poly_ringct20 a;
+    randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
+    poly_uniform_ringct20(&a, seed);
+    poly_serial(&a);
+    ////////////
+//    printf("begin:\n");
+//    poly_print(&a);
+    //////
+    poly_ntt_ringct20(&a);
+//    printf("after:\n");
+//    poly_print(&a);
+    ////
+    poly_invntt(&a);
+//    printf("recover:\n");
+//    poly_print(&a);
+
+}
+//移位测试
+void LRCT_Shift_Test()
+{
+    poly_ringct20 r, a;
+    poly_init(&r);
+    poly_init(&a);
+    r.coeffs[NEWHOPE_RINGCT20_N - 1] = 1;
+    r.coeffs[0] = 1;
+
+    poly_ntt_ringct20(&r);
+    poly_shift(&a, &r, 1);
+    poly_invntt(&a);
+
+    poly_serial(&a);
+//    poly_print(&a);
+}
+void LRCT_ComHom_Test()
+{
+    unsigned char message[2] = { 0xF0, 0x0F };
+    int messLen = 2;
+    int messBitLen = messLen*8;
+    int i = 0;
+    unsigned char bitTmp = 0;
+    poly_ringct20 *CKi = (poly_ringct20 *)malloc((MSIZE*(messBitLen)) * sizeof(poly_ringct20));
+    poly_ringct20 *comList = (poly_ringct20 *)malloc(((messBitLen)) * sizeof(poly_ringct20));
+    poly_ringct20  A[MSIZE], H[MSIZE], sk[MSIZE], ck0[MSIZE], tmpM[MSIZE];
+    poly_ringct20 a, r, tmp;
+
+    poly_init(&a);
+    poly_init(&tmp);
+    poly_init(&r);
+    for ( i = 0; i < MSIZE; i++)
+    {
+        poly_init(ck0 + i);
+    }
+    LRCT_Setup(A, H, MSIZE);
+    LRCT_SampleKey(sk, MSIZE);
+    //left
+    LRCT_nttCom(&r, A, sk, MSIZE, message, messLen);
+    //right
+    for (i = 1; i < messBitLen; i++)
+    {
+        LRCT_SampleKey(CKi + i*MSIZE, MSIZE);
+    }
+
+    LRCT_GetCK0(CKi, sk, MSIZE, CKi+MSIZE, messBitLen-1);
+
+    for ( i = 0; i < messBitLen; i++)
+    {
+        LRCT_MatrixShift(tmpM, CKi+i*MSIZE, MSIZE, i);
+        LRCT_MatrixAddMatrix(ck0, ck0, tmpM, MSIZE);
+    }
+    for ( i = 0; i < MSIZE; i++)
+    {
+        dap_assert_PIF(poly_equal(ck0 + i, sk + i) == 1, "poly equality")
+    }
+
+    for ( i = 0; i < messLen; i++)
+    {
+        bitTmp = (message[i] & 0x01);
+        LRCT_nttCom(comList + i * 8, A, CKi + (i * 8) * MSIZE, MSIZE, &bitTmp, 1);
+        //////////////////////////////
+        bitTmp = (message[i] & 0x02)>>1;
+        LRCT_nttCom(comList + i * 8 + 1, A, CKi + (i * 8 + 1) * MSIZE, MSIZE, &bitTmp, 1);
+        ////////////
+        bitTmp = (message[i] & 0x04)>>2;
+        LRCT_nttCom(comList + i * 8 + 2, A, CKi + (i * 8 + 2) * MSIZE, MSIZE, &bitTmp, 1);
+        ////////////
+        bitTmp = (message[i] & 0x08)>>3;
+        LRCT_nttCom(comList + i * 8 + 3, A, CKi + (i * 8 + 3) * MSIZE, MSIZE, &bitTmp, 1);
+
+        ////////////
+        bitTmp = (message[i] & 0x10)>>4;
+        LRCT_nttCom(comList + i * 8 + 4, A, CKi + (i * 8 + 4) * MSIZE, MSIZE, &bitTmp, 1);
+
+        ////////////
+        bitTmp = (message[i] & 0x20)>>5;
+        LRCT_nttCom(comList + i * 8 + 5, A, CKi + (i * 8 + 5) * MSIZE, MSIZE, &bitTmp, 1);
+
+        ////////////
+        bitTmp = (message[i] & 0x40)>>6;
+        LRCT_nttCom(comList + i * 8 + 6, A, CKi + (i * 8 + 6) * MSIZE, MSIZE, &bitTmp, 1);
+
+        ////////////
+        bitTmp = (message[i] & 0x80)>>7;
+        LRCT_nttCom(comList + i * 8 + 7, A, CKi + (i * 8 + 7) * MSIZE, MSIZE, &bitTmp, 1);
+    }
+    //poly_cofcopy(&a, comList);
+    for ( i = 0; i < messBitLen; i++)
+    {
+        poly_shift(&tmp, comList + i, i);
+        poly_add_ringct20(&a, &a, &tmp);
+    }
+//    printf("a:\n");
+//    poly_print(&a);
+//    printf("r:\n");
+//    poly_print(&r);
+    dap_assert_PIF(poly_equal(&a, &r) == 1, "poly equality");
+    free(CKi);
+    free(comList);
+}
+
 
 static void test_signing_verifying2(void)
 {
@@ -14,6 +412,7 @@ static void test_signing_verifying2(void)
 
     randombytes(seed, seed_size);
 
+    // one keypair
     dap_enc_key_t* key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_SIG_RINGCT20, NULL, 0, seed, seed_size, 0);
 
     const int allpbknum = 100;
@@ -37,7 +436,8 @@ static void test_signing_verifying2(void)
     dap_assert_PIF(siglen > 0, "Signing message");
 
 //Extract aList//CRUTCH
-    uint8_t *sigdata = (uint8_t*)*(int*)(sig + 4);
+//    uint8_t *sigdata = (uint8_t*)*(int*)(sig + 4);
+    uint8_t *sigdata = (uint8_t*) ((ringct20_signature_t*) sig)->sig_data;
 //    for(int i = 0; i < 16; ++i)
 //        printf("%.2x ", sigdata[i]);
 //    printf(" = sig_extract\n"); fflush(stdout);
@@ -155,8 +555,44 @@ void dap_enc_ringct20_tests_run(const int times)
     dap_print_module_name("dap_enc_ringct20");
     init_test_case();
     char print_buf[512];
-    snprintf(print_buf, sizeof(print_buf), "Signing and verifying message %d time", times);
 
+    snprintf(print_buf, sizeof(print_buf), "Byte test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Byte_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Signing and verifying message SISO mode %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Setup_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Signing and verifying message MIMO mode %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(MIMO_LRCT_Setup_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Spent test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Spent_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Mul test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Mul_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "MatrixMulVect test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_MatrixMulVect_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Lift test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Lift_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "KDF test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_KDF_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Com test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Com_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Fun test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Fun_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Shift test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_Shift_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "ComHom test %d time", times);
+    benchmark_mgs_time(print_buf, benchmark_test_time(LRCT_ComHom_Test, times));
+
+    snprintf(print_buf, sizeof(print_buf), "Signing and verifying message %d time", times);
     benchmark_mgs_time(print_buf, benchmark_test_time(test_signing_verifying2, times));
 
     cleanup_test_case();
diff --git a/dap-sdk/crypto/test/crypto/dap_enc_test.c b/dap-sdk/crypto/test/crypto/dap_enc_test.c
index 12e46f001591dbd6f92ece43288f513c7cc38da8..16ad86be882190c2a2391d626b9b3445321e9060 100755
--- a/dap-sdk/crypto/test/crypto/dap_enc_test.c
+++ b/dap-sdk/crypto/test/crypto/dap_enc_test.c
@@ -468,7 +468,7 @@ void dap_enc_tests_run() {
     dap_print_module_name("dap_enc_sig serealize->deserealize BLISS");
     test_serealize_deserealize_pub_priv(DAP_ENC_KEY_TYPE_SIG_BLISS);
     dap_print_module_name("dap_enc_sig serealize->deserealize PICNIC");
-    test_serealize_deserealize_pub_priv(DAP_ENC_KEY_TYPE_SIG_PICNIC);
+    test_serealize_deserealize_pub_priv(DAP_ENC_KEY_TYPE_SIG_PICNIC); //sometimes fail
     dap_print_module_name("dap_enc_sig serealize->deserealize TESLA");
     test_serealize_deserealize_pub_priv(DAP_ENC_KEY_TYPE_SIG_TESLA);
     dap_print_module_name("dap_enc_sig serealize->deserealize DILITHIUM");
diff --git a/dap-sdk/crypto/test/crypto/main.c b/dap-sdk/crypto/test/crypto/main.c
index 98e8b69284a10e1bcc93b18e3435c523675be70c..3a81ee1b6e77f95758ba1f22eaaa8c065373dc0e 100755
--- a/dap-sdk/crypto/test/crypto/main.c
+++ b/dap-sdk/crypto/test/crypto/main.c
@@ -39,17 +39,22 @@ int main(void)
     test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_OAES,      32);
     test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_OAES,      32);
    // return 0;
-    dap_enc_tests_run();
+//    dap_enc_tests_run();
 
 
-    dap_enc_picnic_tests_run();
-    dap_enc_sig_bliss_tests_run();
-    dap_enc_dilithium_tests_run();
-    dap_enc_msrln_tests_run();
+//    dap_enc_picnic_tests_run();
+//    dap_enc_sig_bliss_tests_run();
+//    dap_enc_dilithium_tests_run();
+//    dap_enc_msrln_tests_run();
+//
+//    dap_enc_base64_tests_run();
+//    dap_enc_base58_tests_run();
+//    dap_enc_defeo_tests_run();
+//    dap_enc_tesla_tests_run();
+//
+//    dap_enc_multi_sign_tests_run();
+
+    dap_enc_ringct20_tests_run(100);
+
 
-    dap_enc_base64_tests_run();
-    dap_enc_base58_tests_run();
-    dap_enc_defeo_tests_run();
-    dap_enc_tesla_tests_run();
-    dap_enc_multi_sign_tests_run();
 }
diff --git a/dap-sdk/net/client/CMakeLists.txt b/dap-sdk/net/client/CMakeLists.txt
index 39185cc300f9dfda0ef43ae046d0adc278dbd018..4c1645ab84c8b52b1adb456dca7bc21175fba756 100644
--- a/dap-sdk/net/client/CMakeLists.txt
+++ b/dap-sdk/net/client/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project(dap_client)
 add_definitions ("-D_GNU_SOURCE")
 
diff --git a/dap-sdk/net/core/CMakeLists.txt b/dap-sdk/net/core/CMakeLists.txt
index 5ed51a7bfb0e11bfeeee142d2e78146cc2833d7a..ca3fe8666b0f24b9575ffa8e9454e9e720e8bcfd 100644
--- a/dap-sdk/net/core/CMakeLists.txt
+++ b/dap-sdk/net/core/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project (dap_server_core C)
 set(CMAKE_C_STANDARD 11)
diff --git a/dap-sdk/net/server/CMakeLists.txt b/dap-sdk/net/server/CMakeLists.txt
index d2023893c59c26ed300b4f149efd06f0974cd9a4..2ad3a1a3f50afb0ce56181094e0348a0aa290fef 100644
--- a/dap-sdk/net/server/CMakeLists.txt
+++ b/dap-sdk/net/server/CMakeLists.txt
@@ -1,5 +1,5 @@
 project(libdap-server C)
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 add_subdirectory(notify_server)
 add_subdirectory(http_server)
diff --git a/dap-sdk/net/server/enc_server/CMakeLists.txt b/dap-sdk/net/server/enc_server/CMakeLists.txt
index 3191a15d5e3f4cbdea8c2eaee44546fc416994ab..4f95407a85ec0b43c836ac9f5da15bb12ae3fe64 100644
--- a/dap-sdk/net/server/enc_server/CMakeLists.txt
+++ b/dap-sdk/net/server/enc_server/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project(dap_enc_server C)
   
 file(GLOB DAP_ENC_SERVER_SRCS FILES *.c)
diff --git a/dap-sdk/net/server/http_server/CMakeLists.txt b/dap-sdk/net/server/http_server/CMakeLists.txt
index 656f8e66cfd03d9b5b471a7847b230ee44bfb7e7..16daa91a058b15877759d622e6f370b07616d6d2 100644
--- a/dap-sdk/net/server/http_server/CMakeLists.txt
+++ b/dap-sdk/net/server/http_server/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_http_server C)
 
 include_directories(http_client/include)
diff --git a/dap-sdk/net/server/http_server/http_client/CMakeLists.txt b/dap-sdk/net/server/http_server/http_client/CMakeLists.txt
index b3633d72034eddd642958862c19b0c10d4bcd206..ed8a4b76399e4a95785c854234229703776398ee 100644
--- a/dap-sdk/net/server/http_server/http_client/CMakeLists.txt
+++ b/dap-sdk/net/server/http_server/http_client/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_http_client)
 
 set(HTTP_SRCS FILES *.c)
diff --git a/dap-sdk/net/server/json_rpc/CMakeLists.txt b/dap-sdk/net/server/json_rpc/CMakeLists.txt
index 08c7ec1ec22fc6f62854945635c00c2a74c9370f..30207dcaa5881382df12e9c164e4bea61e7d0771 100644
--- a/dap-sdk/net/server/json_rpc/CMakeLists.txt
+++ b/dap-sdk/net/server/json_rpc/CMakeLists.txt
@@ -1,5 +1,5 @@
 project(dap_json_rpc C)
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 add_definitions ("-D_GNU_SOURCE")
 add_definitions("-Dfpic")
diff --git a/dap-sdk/net/server/notify_server/CMakeLists.txt b/dap-sdk/net/server/notify_server/CMakeLists.txt
index c2e03f922786cfb86f5bde0721c090501ecd9e77..8390370099ff6c10b1d12bf7be69d16e16f23d3c 100644
--- a/dap-sdk/net/server/notify_server/CMakeLists.txt
+++ b/dap-sdk/net/server/notify_server/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project(dap_notify_srv C)
   
 file(GLOB DAP_NOTIFY_SRV_SRCS FILES src/*.c)
diff --git a/dap-sdk/net/server/test/CMakeLists.txt b/dap-sdk/net/server/test/CMakeLists.txt
index 54660c94ba0d8a450c5c9444a4242954736979bf..ac1dab4e7dd873bf8662f825bb29dda39022b7ed 100644
--- a/dap-sdk/net/server/test/CMakeLists.txt
+++ b/dap-sdk/net/server/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project(test)
 
 set(CMAKE_C_STANDARD 11)
diff --git a/dap-sdk/net/server/test/enc_server/CMakeLists.txt b/dap-sdk/net/server/test/enc_server/CMakeLists.txt
index 3fd0ab3c3e42ca9e767325b08b0b782648f20b46..2d4df9c5f8087be29cc5c877f22775ea2ac7b303 100644
--- a/dap-sdk/net/server/test/enc_server/CMakeLists.txt
+++ b/dap-sdk/net/server/test/enc_server/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project(enc_server_test)
 
diff --git a/dap-sdk/net/server/test/http_server/CMakeLists.txt b/dap-sdk/net/server/test/http_server/CMakeLists.txt
index 82d08553ab850ce038e95606af9a5d61d9bb7a85..df544336d79148e82a7d817eee4e34c256153022 100644
--- a/dap-sdk/net/server/test/http_server/CMakeLists.txt
+++ b/dap-sdk/net/server/test/http_server/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 project(http_server_test)
 
diff --git a/dap-sdk/net/stream/CMakeLists.txt b/dap-sdk/net/stream/CMakeLists.txt
index 87d7d736450b46cba9d91e5d5d05abb88cb4fdee..22df0e497b903e8e991ae897ca3cc48103d508e5 100644
--- a/dap-sdk/net/stream/CMakeLists.txt
+++ b/dap-sdk/net/stream/CMakeLists.txt
@@ -1,5 +1,5 @@
 project(libdap-stream C)
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 add_subdirectory(session)
 add_subdirectory(stream)
diff --git a/dap-sdk/net/stream/ch/CMakeLists.txt b/dap-sdk/net/stream/ch/CMakeLists.txt
index e3b535b8d1fbcabebff12e47f44e844e571afc5e..056a3cdd62dbda62f4748f41b493336157fd34f8 100644
--- a/dap-sdk/net/stream/ch/CMakeLists.txt
+++ b/dap-sdk/net/stream/ch/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_stream_ch)
   
 file(GLOB DAP_STREAM_CH_SRCS *.c)
diff --git a/dap-sdk/net/stream/session/CMakeLists.txt b/dap-sdk/net/stream/session/CMakeLists.txt
index 2e294300da2e7b203c1403803eef390997cef1e8..15dac099b8e1c26f913f984343757ec3f9143b86 100644
--- a/dap-sdk/net/stream/session/CMakeLists.txt
+++ b/dap-sdk/net/stream/session/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_session)
   
 file(GLOB SESSION_SRCS *.c)
diff --git a/dap-sdk/net/stream/stream/CMakeLists.txt b/dap-sdk/net/stream/stream/CMakeLists.txt
index 264d313f849dffb88781867be56710f669e8ba39..16fb98fc4e6b8f0e6e25053a63756b6cd19b418b 100755
--- a/dap-sdk/net/stream/stream/CMakeLists.txt
+++ b/dap-sdk/net/stream/stream/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_stream)
   
 file(GLOB STREAM_SRCS *.c)
diff --git a/modules/app-cli/CMakeLists.txt b/modules/app-cli/CMakeLists.txt
index 1e8f2c8be518be56301457cab24adfb726fea8e7..26a2deb1bd0440d63b7993d176f644a4d7478fe6 100644
--- a/modules/app-cli/CMakeLists.txt
+++ b/modules/app-cli/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_app_cli)
 
 file(GLOB DAP_APP_CLI_SRCS *.c)
diff --git a/modules/chain/CMakeLists.txt b/modules/chain/CMakeLists.txt
index 2c8a19c4eccc17aa4e1b6d4ec75d6af4ca321061..df55d14d8debebe22fe46281d2d8cd375eeb28b5 100644
--- a/modules/chain/CMakeLists.txt
+++ b/modules/chain/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain)
   
 file(GLOB DAP_CHAIN_SRCS *.c)
diff --git a/modules/chain/btc_rpc/CMakeLists.txt b/modules/chain/btc_rpc/CMakeLists.txt
index 9e9ded64a179d2bda42ee9430c581d9fc0fc3ce0..930181f7283cee04960465242c2c5448d8ee00b7 100644
--- a/modules/chain/btc_rpc/CMakeLists.txt
+++ b/modules/chain/btc_rpc/CMakeLists.txt
@@ -1,5 +1,5 @@
 project(dap_chain_btc_rpc C)
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 
 add_definitions ("-D_GNU_SOURCE")
 add_definitions("-Dfpic")
diff --git a/modules/channel/chain-net-srv/CMakeLists.txt b/modules/channel/chain-net-srv/CMakeLists.txt
index 5b511f0528c7cf6bc52c5139b7f2fe72464d2458..0bc63ac49acaf645087b7f3f50db9980bcb639c1 100644
--- a/modules/channel/chain-net-srv/CMakeLists.txt
+++ b/modules/channel/chain-net-srv/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_stream_ch_chain_net_srv)
 
 file(GLOB DAP_STREAM_CH_CHAIN_NET_SRV_SRCS *.c)
diff --git a/modules/channel/chain-net/CMakeLists.txt b/modules/channel/chain-net/CMakeLists.txt
index 90b038e903c5cc5eb25487fbe19ba0d5ba7c1861..0e5565caa1c465af27b6c006724e0b0ef1a46052 100644
--- a/modules/channel/chain-net/CMakeLists.txt
+++ b/modules/channel/chain-net/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_stream_ch_chain_net)
   
 file(GLOB DAP_STREAM_CH_CHAIN_NET_SRCS *.c)
diff --git a/modules/channel/chain/CMakeLists.txt b/modules/channel/chain/CMakeLists.txt
index 048805b30881b55e65ca563fe723cdeb1c492d6c..4151ab49c36a0c33d27873ec90f9196f34148e93 100644
--- a/modules/channel/chain/CMakeLists.txt
+++ b/modules/channel/chain/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_stream_ch_chain)
   
 file(GLOB DAP_STREAM_CH_CHAIN_SRCS *.c)
diff --git a/modules/common/CMakeLists.txt b/modules/common/CMakeLists.txt
index 1a4670336869329ba4f7dff0936354b4ad674119..e66631bd0e37e30dc8e0e360e7d3a6d685a8ef4e 100644
--- a/modules/common/CMakeLists.txt
+++ b/modules/common/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_common)
   
 file(GLOB DAP_CHAIN_COMMON_SRCS  *.c)
diff --git a/modules/consensus/block-poa/CMakeLists.txt b/modules/consensus/block-poa/CMakeLists.txt
index d54c77b2d6de9a7bded5e2f4413b1791d87fb394..648e61c2e9a908b128a6a2d34f3a9f7775796c35 100644
--- a/modules/consensus/block-poa/CMakeLists.txt
+++ b/modules/consensus/block-poa/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_block_poa)
 
 file(GLOB DAP_CHAIN_BLOCK_CS_POA_SRCS *.c)
diff --git a/modules/consensus/block-pos/CMakeLists.txt b/modules/consensus/block-pos/CMakeLists.txt
index 2417e6529e529168867e0f383b60606f07463e1a..91b9ac3737606d57f5b4fd09c1ec6c5cd6745d86 100644
--- a/modules/consensus/block-pos/CMakeLists.txt
+++ b/modules/consensus/block-pos/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_block_pos)
   
 file(GLOB DAP_CHAIN_CS_BLOCK_POS_SRCS *.c)
diff --git a/modules/consensus/block-pow/CMakeLists.txt b/modules/consensus/block-pow/CMakeLists.txt
index 334d6eb6a932e22561749a8c14863ac1f7ca81d2..5f371110b7686b92938b2b2dcb1b812e87af0751 100644
--- a/modules/consensus/block-pow/CMakeLists.txt
+++ b/modules/consensus/block-pow/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_block_pow)
   
 file(GLOB DAP_CHAIN_BLOCK_CS_POW_SRCS *.c)
diff --git a/modules/consensus/dag-poa/CMakeLists.txt b/modules/consensus/dag-poa/CMakeLists.txt
index 12a35ad6a4d8dbf26282473857fc694eb38d5ce6..df8fd6bcfe7c5c14cc5deb5a4f0bde499a7df465 100644
--- a/modules/consensus/dag-poa/CMakeLists.txt
+++ b/modules/consensus/dag-poa/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_dag_poa)
   
 file(GLOB DAP_CHAIN_DAG_CS_POA_SRCS *.c)
diff --git a/modules/consensus/dag-pos/CMakeLists.txt b/modules/consensus/dag-pos/CMakeLists.txt
index 8b8dff9976790e5c248009bed61dd6736fe6b216..7430d0e27811a6a6661c9938b3a0c5cbb64aa351 100644
--- a/modules/consensus/dag-pos/CMakeLists.txt
+++ b/modules/consensus/dag-pos/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_dag_pos)
   
 file(GLOB DAP_CHAIN_CS_DAG_POS_SRCS *.c)
diff --git a/modules/consensus/none/CMakeLists.txt b/modules/consensus/none/CMakeLists.txt
index 8072379783889069d785c766ac0b10d786fbe24c..ddf73b014ea1143a5a1c663582a517c424137c7c 100644
--- a/modules/consensus/none/CMakeLists.txt
+++ b/modules/consensus/none/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_none)
   
 file(GLOB DAP_CHAIN_CS_NO_CONSENSUS_SRC *.c)
diff --git a/modules/mempool/CMakeLists.txt b/modules/mempool/CMakeLists.txt
index f2d0ede23294b502d943b706cbcc2273f1242944..cc6c866e61c49177f64aa984ba97b27b6467ec61 100644
--- a/modules/mempool/CMakeLists.txt
+++ b/modules/mempool/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_mempool)
 
 file(GLOB DAP_CHAIN_MEMPOOL_SRC *.c)
diff --git a/modules/mining/CMakeLists.txt b/modules/mining/CMakeLists.txt
index 3e4e88edd39b4acd5e3154d799278b2d20b83112..39a38576132d9a48803d9e7a40aba7f9b3684807 100644
--- a/modules/mining/CMakeLists.txt
+++ b/modules/mining/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_crypto)
   
 file(GLOB DAP_CHAIN_CRYPTO_SRCS *.c)
diff --git a/modules/modules_dynamic/cdb/CMakeLists.txt b/modules/modules_dynamic/cdb/CMakeLists.txt
index 1d2ef0120fe05ab073c64c7229dd8e57c2c03aa0..7a387d86a55e76e2ffcf8b6915bcf81ba27a3c4b 100644
--- a/modules/modules_dynamic/cdb/CMakeLists.txt
+++ b/modules/modules_dynamic/cdb/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_modules_dynamic_cdb)
 
 file(GLOB DAP_MODULES_DYNAMIC_CDB_SRCS *.c)
diff --git a/modules/net/CMakeLists.txt b/modules/net/CMakeLists.txt
index 4c05cea61e5af5c5a8710ee0c20c5a9904af0c74..f4ccdaff3953e4c8bc9d6be53701ac60e6ac1b13 100644
--- a/modules/net/CMakeLists.txt
+++ b/modules/net/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net)
   
 
diff --git a/modules/net/srv/CMakeLists.txt b/modules/net/srv/CMakeLists.txt
index b6661c7f1b94abb872d0e6f63babbdaa7a086a32..6e4db3ae7f4ffdf426105978621e42384dda42d7 100644
--- a/modules/net/srv/CMakeLists.txt
+++ b/modules/net/srv/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv)
 
 file(GLOB DAP_CHAIN_NET_SRV_SRCS *.c libmaxminddb/*.c)
diff --git a/modules/service/app-db/CMakeLists.txt b/modules/service/app-db/CMakeLists.txt
index f6a7a7977d843e1bdf10796aa8c237534a916ec5..568cf7a2b2146c5b846051d05a830ff8ba25a7a5 100644
--- a/modules/service/app-db/CMakeLists.txt
+++ b/modules/service/app-db/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv_app_db)
   
 file(GLOB DAP_CHAIN_NET_SRV_APP_DB_SRCS *.c)
diff --git a/modules/service/app/CMakeLists.txt b/modules/service/app/CMakeLists.txt
index e69756a8d304d41eb5e220462288a86aead5c742..ede9f775fc31cc5bd1b4df75623a664e38bf8f40 100644
--- a/modules/service/app/CMakeLists.txt
+++ b/modules/service/app/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv_app)
   
 file(GLOB DAP_CHAIN_NET_SRV_APP_SRCS  *.c)
diff --git a/modules/service/datum/CMakeLists.txt b/modules/service/datum/CMakeLists.txt
index dc38274497865096fdd8e21bb576dc99cf373ef0..e953602dbbd6c42dbbd23eb120fcb2ac6afd96d2 100644
--- a/modules/service/datum/CMakeLists.txt
+++ b/modules/service/datum/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv_datum)
   
 file(GLOB DAP_CHAIN_NET_SRV_DATUM_SRCS *.c)
diff --git a/modules/service/mining-pool/CMakeLists.txt b/modules/service/mining-pool/CMakeLists.txt
index 6a66f485f3affa09480ab6930c8b3f153c44afd5..a2dd64da4c44b5c251e37620f10abf5286a566af 100644
--- a/modules/service/mining-pool/CMakeLists.txt
+++ b/modules/service/mining-pool/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv_datum_pool)
   
 file(GLOB DAP_CHAIN_NET_SRV_DATUM_POOL_SRCS *.c)
diff --git a/modules/service/stake/CMakeLists.txt b/modules/service/stake/CMakeLists.txt
index e6217cf00995e909380b99444018ef70a5235501..c4c5f452a18e2b2b724f282c7b0b47f24e4d97d0 100644
--- a/modules/service/stake/CMakeLists.txt
+++ b/modules/service/stake/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv_stake)
 
 file(GLOB DAP_SRV_STAKE_SRCS *.c)
diff --git a/modules/service/vpn/CMakeLists.txt b/modules/service/vpn/CMakeLists.txt
index 30e2258599f8a27aaac447963f2206034dbe6b67..973d4f0de12a4991ab6db17daf20989ce80582a5 100644
--- a/modules/service/vpn/CMakeLists.txt
+++ b/modules/service/vpn/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv_vpn)
   
 file(GLOB DAP_CHAIN_NET_SRV_VPN_SRCS *.c)
diff --git a/modules/service/xchange/CMakeLists.txt b/modules/service/xchange/CMakeLists.txt
index 82d036e96bc5d37317cd91cb7ad5d5df4bc53515..f49fe6685e97440152c354a54d9b50621ffaacd9 100644
--- a/modules/service/xchange/CMakeLists.txt
+++ b/modules/service/xchange/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_net_srv_xchange)
   
 file(GLOB DAP_SRV_XCHANGE_SRCS *.c)
diff --git a/modules/test/CMakeLists.txt b/modules/test/CMakeLists.txt
index 70e543e45b934bcc5d43a765db96d620a4af9280..e2174176bd4e2f44a3c87fc1a91771cb82324308 100644
--- a/modules/test/CMakeLists.txt
+++ b/modules/test/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 if(TARGET dap_test)
     return() # The project has already been built.
 endif()
diff --git a/modules/type/blocks/CMakeLists.txt b/modules/type/blocks/CMakeLists.txt
index 44f0787add4f670f935894cffad47fbe58c4a33b..015c96c1fdf9b7283dc6518070fbf3bf773b83cd 100644
--- a/modules/type/blocks/CMakeLists.txt
+++ b/modules/type/blocks/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_blocks)
   
 file(GLOB DAP_CHAIN_BLOCK_SRCS *.c)
diff --git a/modules/type/dag/CMakeLists.txt b/modules/type/dag/CMakeLists.txt
index 7ba78b85c68258118ad2b67a6b64c8ff1052c7be..45b720ff72332ed2712453e456368f695ba9fab7 100644
--- a/modules/type/dag/CMakeLists.txt
+++ b/modules/type/dag/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_cs_dag)
   
 file(GLOB DAP_CHAIN_DAG_SRCS *.c)
diff --git a/modules/wallet/CMakeLists.txt b/modules/wallet/CMakeLists.txt
index 65e9b46203484dadf47906ee5895639539a9d70f..1dccfa998ed23f4c50facdf7b58d9903b6677852 100644
--- a/modules/wallet/CMakeLists.txt
+++ b/modules/wallet/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.10)
 project (dap_chain_wallet)
   
 file(GLOB DAP_CHAIN_WALLET_SRCS *.c)